自定义帧缓冲区不能有单独的深度和模板缓冲区吗?OpenGL

vbopmzt1  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(161)

我想为一个新的帧缓冲对象创建一个深度和模板缓冲区。但是我得到了GL_FRAMEBUFFER_UNSUPPORTED错误。这是我创建缓冲区的方法:

GLuint depthBuffer;
    glGenRenderbuffers(1, &depthBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, SCR_WIDTH, SCR_HEIGHT);
    glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);

    GLuint stencilBuffer;
    glGenRenderbuffers(1, &stencilBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, stencilBuffer);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, SCR_WIDTH, SCR_HEIGHT);
    glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, stencilBuffer);

我无法让这个工作,所以我最终使用GL_DEPTH24_STENCIL8纹理格式代替深度和模板测试,如下所示:

GLuint depthStencil;
    glGenTextures(1, &depthStencil);
    glBindTexture(GL_TEXTURE_2D, depthStencil);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, SCR_WIDTH, SCR_HEIGHT, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, depthStencil, 0);

但是应该有一种方法来使用单独的深度和模板缓冲区,对吗?请告诉我如何做到这一点:)OpenGL Core 4. 6

ki1q1bka

ki1q1bka1#

API允许一个实现支持FBO中单独的深度和模板图像。这就是为什么你可以单独创建和附加这样的图像的原因。API不要求任何实现支持这一点。
当API给你GL_FRAMEBUFFER_UNSUPPORTED时,这意味着实现不支持你要求帧缓冲区做的事情。如果它不支持它,你就无法使它支持它。
OpenGL明确要求在FBO中支持组合的深度/模板图像。它不要求在FBO中支持单独的深度/模板图像。

相关问题