繁体   English   中英

Opengl framebuffer单独的模具纹理

[英]Opengl framebuffer separate stencil texture

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

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);

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

是的,这些格式值对于模板纹理是错误的。 您需要为internalFormatformat使用特定的模板枚举。 对于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或更高版本,因此只能通过一个次要版本减少版本要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM