将模板渲染缓冲区绑定到opengl中的帧缓冲区

时间:2012-06-18 14:27:23

标签: opengl framebuffer

有人成功完成了这项工作吗?似乎我在模板渲染缓冲区glCheckFramebufferStatus(...)中使用的索引格式返回GL_FRAMEBUFFER_UNSUPPORTED。 我已经成功地绑定了深度\颜色渲染缓冲区,但每当我尝试使用我的模板缓冲区做同样的事情时(我说)GL_FRAMEBUFFER_UNSUPPORTED

以下是我的代码片段:

// Create frame buffer
GLuint fb;
glGenFramebuffers(1, &fb);

// Create stencil render buffer (note that I create depth buffer the exact same way, and It works.
GLuint sb;
glGenRenderbuffers(1, &sb);
glBindRenderbuffer(GL_RENDERBUFFER, sb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, w, h);

// Attach color
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, cb, 0);

// Attach stencil buffer
glBindFramebuffer(GL_FRAMEBUFFER, fb);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rb);
// And here I get an GL_FRAMEBUFFER_UNSUPPORTED when doing glCheckFramebufferStatus()

任何想法?

注意:颜色附件是纹理而不是渲染缓冲区

2 个答案:

答案 0 :(得分:7)

切勿使用独立的模板缓冲液。如果您需要模板,请始终使用depth+stencil image format。请注意,模板索引格式不是required image formats

即使你没有在这里使用深度缓冲区,你仍然应该使用GL_DEPTH24_STENCIL8,你应该将其附加到GL_DEPTH_STENCIL_ATTACHMENT​

答案 1 :(得分:0)

您可以在最近的nvidia硬件/驱动程序上使用仅限模板

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, fboStencilTexture, 0);

仍然不支持单独的深度和模板