OpenGL:只获取模板缓冲区而没有深度缓冲区?

时间:2014-01-14 14:11:49

标签: c++ opengl

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

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

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

我使用的OpenGL版本是2.0

修改

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

永远不要制作STENCIL缓冲区。所有GPU和所有驱动程序都不支持独立的模板缓冲区。如果需要模板缓冲区,则需要设置Depth = 24,Stencil = 8缓冲区,也称为D24S8。

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