Frame Buffer Object (FBO) and Render & Depth Buffers Ratio

I have seen many examples on the Internet ( for example ) that do the following

  • Create and Link FBO
  • Create and link BUFFERS (texture, rendering, depth, stencil)
  • Then UnBind BUFFERS
  • To work with FBO-Bind FBO, do the work, then UnBind FBO
  • However, also Bind texture BUFFER for reading, writing, etc. with texture BUFFER
  • BUT NEVER NEVER SEE re-linking other BUFFERS (visualization, depth, stencil) Why?

An example of creating BUFFERS and bind / unbind (Below is the code, for example, only to show what I explained and works fine),

// create a framebuffer object, you need to delete them when program exits.
glGenFramebuffersEXT(1, &fboId);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);

// create color buffer object and attached to fbo
glGenRenderbuffersEXT(1, &rboId);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboId);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, TEXTURE_WIDTH, TEXTURE_HEIGHT);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); //UnBind

if(useDepthBuffer) {
  glGenRenderbuffersEXT(1, &rboIdDepth);
  glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboIdDepth);
  glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, TEXTURE_WIDTH, TEXTURE_HEIGHT);
  glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); //UnBind
}

glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, rboId);
if(useDepthBuffer)
  glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rboIdDepth);


// check FBO status
printFramebufferInfo();
bool status = checkFramebufferStatus();
if(!status)
  fboUsed = false;
.
//then,
.
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
// Do the work
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

1. (    /   FBO)?

2. ?

: attach- > - > UnBind

+3
2

, , , (GL_COLOR_ATTACHMENT...), FBO FBO , FBO, OpenGL, FBO , ( ) .

+8

,

  • BUFFERS

glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboIdDepth);

, unbind, - . - FBO. , . with, .

-, ,

glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
                             GL_COLOR_ATTACHMENT0_EXT, 
                             GL_RENDERBUFFER_EXT, 
                             rboId ); // rboID != 0

glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
                             GL_COLOR_ATTACHMENT0_EXT, 
                             GL_RENDERBUFFER_EXT, 
                             0 );
+3

All Articles