我想为一个新的帧缓冲对象创建一个深度和模板缓冲区。但是我得到了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
1条答案
按热度按时间ki1q1bka1#
API允许一个实现支持FBO中单独的深度和模板图像。这就是为什么你可以单独创建和附加这样的图像的原因。API不要求任何实现支持这一点。
当API给你
GL_FRAMEBUFFER_UNSUPPORTED
时,这意味着实现不支持你要求帧缓冲区做的事情。如果它不支持它,你就无法使它支持它。OpenGL明确要求在FBO中支持组合的深度/模板图像。它不要求在FBO中支持单独的深度/模板图像。