首页 > 解决方案 > OpenGL 16 位模板缓冲区?

问题描述

我正在尝试创建具有 4 个颜色附件、16 位深度缓冲区和 16 位模板缓冲区的帧缓冲区。我需要 16 位用于模板缓冲区,因为我将对象 ID 存储在其中以进行对象拾取,而且我有超过 255 个对象。我创建了两个渲染缓冲区:

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

但是当我将模板渲染缓冲区绑定到帧缓冲区时,我得到一个帧缓冲区不完整错误。我知道 wiki 声明规范不需要 GL_STENCIL_INDEX16。不能创建 16 个模板缓冲区吗?我可以将对象 ID 整数编码为 8 位值吗?

标签: c++opengl

解决方案


不需要支持单独的深度和模板缓冲附件。

请参阅OpenGL 4.6 API 核心配置文件规范 - 9.4.3 所需的帧缓冲区格式

[...] 但是,当深度和模板附件都存在时,只需要实现支持两个附件都引用同一图像的帧缓冲区对象。

也可以看看:

无法将单独的模板缓冲区附加到 FBO(打包深度+模板很好)

帧缓冲区对象 - 完整性规则


推荐阅读