Opengl帧缓冲分离模板纹理

时间:2016-05-29 05:16:14

标签: c++ opengl

我找不到任何关于帧缓冲对象的单独模板纹理的文档。基本上这是我到目前为止:

glBindTexture(GL_TEXTURE_2D, this->mTextures[FRAMEBUFFER_STENCIL_TEXTURE]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8I, width, height, 0, GL_RED_INTEGER, GL_INT, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,  GL_TEXTURE_2D, this->mTextures[FRAMEBUFFER_STENCIL_TEXTURE],    0);

但是这会导致创建错误。我的格式错了还是别的什么?

1 个答案:

答案 0 :(得分:3)

是的,这些格式值对于模板纹理是错误的。您需要为 internalFormat 格式使用特定的模板枚举。对于8位模板纹理,调用应该如下所示:

glTexImage2D(GL_TEXTURE_2D, 0, GL_STENCIL_INDEX8,
             width, height, 0, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, 0);

正如评论中指出的那样,纯模板纹理仅适用于OpenGL 4.4及更高版本。

另一种方法是分配深度/模板纹理,而不是使用深度部分。但是,从深度/模板纹理的模板部分采样需要OpenGL 4.3或更高版本,因此只能通过一个次要版本减少版本要求。