Skip to content

Commit

Permalink
Draw buffers are per-FBO state so only set once
Browse files Browse the repository at this point in the history
  • Loading branch information
httpdigest committed May 23, 2015
1 parent b3cab3c commit b344ab8
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ private void renderDepthOnly() {
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glClear(GL_DEPTH_BUFFER_BIT);
glBindVertexArray(vaoScene);
glDrawArrays(GL_TRIANGLES, 0, 6 * 6 * boxes.length);
glDrawArrays(GL_TRIANGLES, 0, 6 * 6 * boxes.length / 2);
glBindVertexArray(0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glUseProgram(0);
Expand Down
15 changes: 4 additions & 11 deletions src/tests/org/lwjgl/demo/opengl/raytracing/HybridDemo.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,6 @@ public class HybridDemo {
private ByteBuffer matrixByteBuffer = BufferUtils.createByteBuffer(4 * 16);
private FloatBuffer matrixByteBufferFloatView = matrixByteBuffer.asFloatBuffer();

private ByteBuffer renderBuffers;

GLFWErrorCallback errCallback;
GLFWKeyCallback keyCallback;
GLFWFramebufferSizeCallback fbCallback;
Expand Down Expand Up @@ -253,13 +251,6 @@ public void invoke(long window, int button, int action, int mods) {
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

/*
* Our rasterizer wants to output color attchment 0 and 1.
*/
renderBuffers = BufferUtils.createByteBuffer(4 * 2);
renderBuffers.putInt(GL_COLOR_ATTACHMENT0).putInt(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();

/* Setup camera */
camera = new Camera();

Expand Down Expand Up @@ -320,6 +311,9 @@ private void createRasterFrameBufferObject() {
this.fbo = glGenFramebuffers();
this.depthBuffer = glGenRenderbuffers();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
IntBuffer renderBuffers = BufferUtils.createIntBuffer(2).put(GL_COLOR_ATTACHMENT0).put(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();
glDrawBuffers(renderBuffers);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, positionTexture, 0);
Expand Down Expand Up @@ -571,10 +565,9 @@ private void raster() {

/* Rasterize the boxes into the FBO */
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glDrawBuffers(2, renderBuffers);
glClear(GL_DEPTH_BUFFER_BIT);
glBindVertexArray(vaoScene);
glDrawArrays(GL_TRIANGLES, 0, 6 * 6 * boxes.length);
glDrawArrays(GL_TRIANGLES, 0, 6 * 6 * boxes.length / 2);
glBindVertexArray(0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glUseProgram(0);
Expand Down
15 changes: 4 additions & 11 deletions src/tests/org/lwjgl/demo/opengl/raytracing/HybridDemoSsbo.java
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,6 @@ public class HybridDemoSsbo {
private ByteBuffer matrixByteBuffer = BufferUtils.createByteBuffer(4 * 16);
private FloatBuffer matrixByteBufferFloatView = matrixByteBuffer.asFloatBuffer();

private ByteBuffer renderBuffers;

GLFWErrorCallback errCallback;
GLFWKeyCallback keyCallback;
GLFWFramebufferSizeCallback fbCallback;
Expand Down Expand Up @@ -248,13 +246,6 @@ public void invoke(long window, int button, int action, int mods) {
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

/*
* Our rasterizer wants to output color attchment 0 and 1.
*/
renderBuffers = BufferUtils.createByteBuffer(4 * 2);
renderBuffers.putInt(GL_COLOR_ATTACHMENT0).putInt(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();

/* Setup camera */
camera = new Camera();

Expand Down Expand Up @@ -342,6 +333,9 @@ private void createRasterFrameBufferObject() {
this.fbo = glGenFramebuffers();
this.depthBuffer = glGenRenderbuffers();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
IntBuffer renderBuffers = BufferUtils.createIntBuffer(2).put(GL_COLOR_ATTACHMENT0).put(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();
glDrawBuffers(renderBuffers);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, positionTexture, 0);
Expand Down Expand Up @@ -605,10 +599,9 @@ private void raster() {

/* Rasterize the boxes into the FBO */
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glDrawBuffers(2, renderBuffers);
glClear(GL_DEPTH_BUFFER_BIT);
glBindVertexArray(vaoScene);
glDrawArrays(GL_TRIANGLES, 0, 6 * 6 * boxes.length);
glDrawArrays(GL_TRIANGLES, 0, 6 * 6 * boxes.length / 2);
glBindVertexArray(0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glUseProgram(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,6 @@ public class HybridDemoSsboInstancing {
private ByteBuffer matrixByteBuffer = BufferUtils.createByteBuffer(4 * 16);
private FloatBuffer matrixByteBufferFloatView = matrixByteBuffer.asFloatBuffer();

private ByteBuffer renderBuffers;

GLFWErrorCallback errCallback;
GLFWKeyCallback keyCallback;
GLFWFramebufferSizeCallback fbCallback;
Expand Down Expand Up @@ -252,13 +250,6 @@ public void invoke(long window, int button, int action, int mods) {
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

/*
* Our rasterizer wants to output color attchment 0 and 1.
*/
renderBuffers = BufferUtils.createByteBuffer(4 * 2);
renderBuffers.putInt(GL_COLOR_ATTACHMENT0).putInt(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();

/* Setup camera */
camera = new Camera();

Expand Down Expand Up @@ -366,6 +357,9 @@ private void createRasterFrameBufferObject() {
this.fbo = glGenFramebuffers();
this.depthBuffer = glGenRenderbuffers();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
IntBuffer renderBuffers = BufferUtils.createIntBuffer(2).put(GL_COLOR_ATTACHMENT0).put(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();
glDrawBuffers(renderBuffers);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, positionTexture, 0);
Expand Down Expand Up @@ -630,7 +624,6 @@ private void raster() {

/* Rasterize the boxes into the FBO */
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glDrawBuffers(2, renderBuffers);
glClear(GL_DEPTH_BUFFER_BIT);
glBindVertexArray(vaoScene);
glDrawArraysInstanced(GL_TRIANGLES, 0, 6 * 6, boxes.length / 2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,6 @@ public class HybridDemoSsboInstancing45 {
private Vector3f cameraLookAt = new Vector3f(0.0f, 0.5f, 0.0f);
private Vector3f cameraUp = new Vector3f(0.0f, 1.0f, 0.0f);

private ByteBuffer renderBuffers;

GLFWErrorCallback errCallback;
GLFWKeyCallback keyCallback;
GLFWFramebufferSizeCallback fbCallback;
Expand Down Expand Up @@ -272,13 +270,6 @@ public void invoke(long window, int button, int action,
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

/*
* Our rasterizer wants to output color attchment 0 and 1.
*/
renderBuffers = BufferUtils.createByteBuffer(4 * 2);
renderBuffers.putInt(GL_COLOR_ATTACHMENT0).putInt(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();

/* Setup camera */
camera = new Camera();

Expand Down Expand Up @@ -386,6 +377,9 @@ private void createSceneVao() {
private void createRasterFrameBufferObject() {
this.fbo = glCreateFramebuffers();
this.depthBuffer = glCreateRenderbuffers();
IntBuffer renderBuffers = BufferUtils.createIntBuffer(2).put(GL_COLOR_ATTACHMENT0).put(GL_COLOR_ATTACHMENT1);
renderBuffers.flip();
glNamedFramebufferDrawBuffers(this.fbo, renderBuffers);
glNamedRenderbufferStorage(this.depthBuffer, GL_DEPTH_COMPONENT, width,
height);
glNamedFramebufferTexture(this.fbo, GL_COLOR_ATTACHMENT0,
Expand Down Expand Up @@ -648,7 +642,6 @@ private void raster() {
/* Rasterize the boxes into the FBO */
glBindBufferBase(GL_UNIFORM_BUFFER, rasterUboBinding, ubo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glDrawBuffers(2, renderBuffers);
glClear(GL_DEPTH_BUFFER_BIT);
glBindVertexArray(vaoScene);
glDrawArraysInstanced(GL_TRIANGLES, 0, 6 * 6, boxes.length / 2);
Expand Down

0 comments on commit b344ab8

Please sign in to comment.