我正在尝试创建具有 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);
Run Code Online (Sandbox Code Playgroud)
我要求 SDL 给我 16 位模板:
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 16);
Run Code Online (Sandbox Code Playgroud)
但是当我将模板渲染缓冲区绑定到帧缓冲区时,我收到帧缓冲区不完整错误。我知道 wiki 指出规范不需要 GL_STENCIL_INDEX16 。是否不可能创建 16 个模板缓冲区?我可以将对象 ID 整数编码为 8 位值吗?
不需要支持单独的深度和模板缓冲区附件。
请参阅OpenGL 4.6 API 核心配置规范 - 9.4.3 所需的帧缓冲区格式
[...]但是,当深度和模板附件都存在时,仅需要实现来支持两个附件引用同一图像的帧缓冲区对象。
也可以看看: