[英]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);
但这会导致创建错误。 我的格式错了还是别的?
是的,这些格式值对于模板纹理是错误的。 您需要为internalFormat和format使用特定的模板枚举。 对于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.