OpenGL 16位模板缓冲区?

3

我想创建一个带有4个颜色附件、16位深度缓冲区和16位模板缓冲区的帧缓冲。我需要使用16位模板缓冲区,因为我在其中存储了超过255个对象的对象ID以进行对象选取。我创建了两个渲染缓冲区:

glBindRenderbuffer(GL_RENDERBUFFER, mID);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);

glBindRenderbuffer(GL_RENDERBUFFER, mID2);
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX16, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);

我要求SDL给我提供16位的模板:

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 16);

但是当我将模板渲染缓冲绑定到帧缓冲时,会出现帧缓冲不完整的错误。我知道维基百科上说 GL_STENCIL_INDEX16 并不是规范所必需的。难道不能创建 16 个模板缓冲吗?我能将对象 ID 的整数编码转换为 8 位值吗?


3
“我需要16位模板缓冲区,因为我在其中存储对象ID以进行对象选择。” 但是为什么要使用模板缓冲区呢?您可以使用16位单通道无符号整数图像格式。除非您正在执行实际的模板操作,否则不应该使用模板缓冲区。 - Nicol Bolas
@NicolBolas 没错,那个修复比我想象的简单多了,谢谢! - Nico van Bentum
1个回答

5

那就意味着我只能使用像GL_DEPTH24_STENCIL8这样的压缩格式吗? - Nico van Bentum
3
似乎只有两种深度/模板格式被支持,分别为GL_DEPTH24_STENCIL8和GL_DEPTH32F_STENCIL8。您可以参考深度/模板格式的链接以获取更多信息。 - Rabbid76

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接