C++ OpenGL 16位模具缓冲区?

C++ OpenGL 16位模具缓冲区?,c++,opengl,C++,Opengl,我正在尝试创建带有4个颜色附件的帧缓冲区,一个16位深度缓冲区和一个16位模具缓冲区。我需要16位用于模具缓冲区,因为我在其中存储对象ID用于对象拾取,并且我有超过255个对象。我创建两个渲染缓冲区: glBindRenderbuffer(GL_RENDERBUFFER, mID); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height); glBindRenderbuffer(GL_RENDERB

我正在尝试创建带有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位值吗?

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

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

另见:


因此,这意味着我仅限于压缩格式,如GL_DEPTH24_STENCIL8?@NicovanBentum似乎只有2种组合深度/模具格式受支持。请参阅:“[…]只有2种深度/模具格式,每种格式提供8个模具位:
GL_DEPTH24_模具8
GL_DEPTH32F_模具8
”“我需要16位用于模具缓冲区,因为我在其中存储对象ID用于对象拾取”为什么要使用模具缓冲区?您可以只使用16位、单通道、无符号整数图像格式。除非您正在执行实际的模具操作,否则不应该使用模具缓冲区。@NicolBolas您是对的,这是一个比我想象的简单得多的修复,谢谢!