c++ - OpenGL:仅获取模板缓冲区而不获取深度缓冲区?

标签 c++ opengl

我想获得一个模板缓冲区,但如果可能的话,我不想承受附加深度缓冲区的开销,因为我不会使用它。我发现的大多数资源都表明,虽然模板缓冲区是可选的(例如,为了获得更高的深度缓冲区精度而将其排除在外),但我还没有看到任何请求并成功仅获取 8 位模板缓冲区的代码。我见过的最常见的配置是 24 位深度缓冲区和 8 位模板缓冲区。

是否可以只请求带有颜色缓冲区的模板缓冲区?

如果可能,大多数 OpenGL 实现是否会批准该请求?

我使用的 OpenGL 版本是 2.0

编辑:

我用来调用 OpenGL 的 API 是 SFML,它通常不支持 FBO 包装器对象的模板分配,尽管它允许它用于显示表面的帧缓冲区。我自己编辑了功能,尽管那是我被卡住的地方。

glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT, width, height));

这一行决定了我假定的存储类型。但是,GL_DEPTH24_STENCIL8_EXT 是我发现的唯一指定模板缓冲区创建的定义。 (至少没有 GL_STENCIL8 或类似的东西)

最佳答案

研究评论中提到的 GL_STENCIL_INDEX8,我在官方 OpenGL wiki 中遇到了以下行,http://www.opengl.org/wiki/Framebuffer_Object_Examples#Stencil

NEVER EVER MAKE A STENCIL buffer. All GPUs and all drivers do not support an independent stencil buffer. If you need a stencil buffer, then you need to make a Depth=24, Stencil=8 buffer, also called D24S8.

压力测试两种不同的分配方案,GL_STENCIL_INDEX8_EXTGL_DEPTH24_STENCIL8_EXT,结果在内存使用和性能方面大致相等。我怀疑它无论如何都用 24 位填充了模板缓冲区。因此,为了便携性,将只使用深度和模板打包方案。

关于c++ - OpenGL:仅获取模板缓冲区而不获取深度缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21115663/

相关文章:

C++11 如何观察 atomic::store 和 atomic::load 中的内存顺序

OpenGL:基向量如何在内存中布局

c++ - 类型 cast char array[16] to int 128 bits

c++ - Visual Studio : C++ Project Include Paths sharing over Repository

c++ - 如何获取应用程序的所有鼠标事件?

opengl - 确定相邻像素的纹理位置

c++ - OpenGL 纹理渲染颠倒且模糊

c++ - GLSL - 对象在乘以矩阵时消失

c++ - 绕轴旋转相机?

c++ - C++ allocator::allocate 是否应该抛出?