【问题标题】:Binding a stencil render buffer to a frame buffer in opengl将模板渲染缓冲区绑定到opengl中的帧缓冲区
【发布时间】:2012-06-18 14:27:22
【问题描述】:

有没有人成功地做到了这一点?似乎我在模板渲染缓冲区glCheckFramebufferStatus(...) 中使用的任何索引格式都会返回GL_FRAMEBUFFER_UNSUPPORTED。 我已经成功地绑定了一个深度\颜色渲染缓冲区,但是每当我尝试对我的模板缓冲区做同样的事情时,我都会得到(正如我所说)GL_FRAMEBUFFER_UNSUPPORTED

这是我的代码的 sn-ps:

// 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()

有什么想法吗?

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

【问题讨论】:

    标签: opengl framebuffer


    【解决方案1】:

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

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

    【讨论】:

    • +1 嗯,我想我试过了,但没有用,但是它可以在我家里的 ATI 卡上工作,如果我在工作时让它在我的 nvidia 上工作,我会给你答案绿色:)
    • @ViktorSehr:可能不是模板;你的纹理使用什么图像格式?
    • @Viktor,模板是否用作独立缓冲区? Nicol,如果我需要模板和颜色,我可以选择什么?
    • @elect:我的回答很清楚您使用的是什么:组合的深度/模板图像。您只需忽略它的深度部分。
    • @NicolBolas 我对此有一个问题:如果我指定深度渲染缓冲区和模板,那么我是否还应该将格式 GL_DEPTH24_STENCIL8 指定到深度缓冲区?还有 GL_DEPTH_STENCIL_ATTACHMENT?还是像往常一样使用 GL_DEPTH_ATTACHMENT 和 GL_DEPTH_COMPONENT24 创建深度缓冲区?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多