OpenGL:如何获取仅模板缓冲区而不是深度缓冲区?

4
我希望获得一个模板缓冲区,但是如果可能的话不要带深度缓冲区的开销,因为我不会使用它。大多数资源都建议使用可选的模板缓冲区(例如放弃它以获得更多深度缓冲器精度),但我没有看到任何请求并成功获得仅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 的定义)


你应该能够做到。我知道你可以用FBO来完成它。 - Xonar
Xonar - 哦天啊,如果你费了那么大力气而我已经将API近乎无法识别地黑掉了,去掉了大多数与OpenGL状态搞来搞去的东西。现在它基本上就是原始的OpenGL了。 - Anne Quinn
1
您要查找的存储类型是GL_STENCIL_INDEX8。 - Xonar
Xonar - OH!哇,谢谢!虽然每像素40位感觉有些“不对劲”。我想知道它是否会导致任何对齐问题... - Anne Quinn
1
我似乎无法仅使用SFML的模板缓冲器使其工作(不使用OpenGL 2.0中未被保证的扩展),但如果您已经使其工作,则可以发布答案以关闭此问题。 - Xonar
显示剩余3条评论
1个回答

1

在评论中提到的GL_STENCIL_INDEX8进行研究时,我在官方OpenGL维基中找到了以下内容http://www.opengl.org/wiki/Framebuffer_Object_Examples#Stencil:

永远不要制作一个模板缓冲区。所有的GPU和驱动程序都不支持独立的模板缓冲区。如果你需要一个模板缓冲区,那么你需要制作一个深度=24、模板=8的缓冲区,也称为D24S8。

通过对比两种不同的分配方案GL_STENCIL_INDEX8_EXTGL_DEPTH24_STENCIL8_EXT的压力测试结果,无论是内存使用还是性能,结果都大致相等。我怀疑它会用24位填充模板缓冲区。因此,为了可移植性,只使用深度和模板打包方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接