OpenGL Stencil Buffer,它们的支持程度如何?

Posted

技术标签:

【中文标题】OpenGL Stencil Buffer,它们的支持程度如何?【英文标题】:OpenGL Stencil Buffer, how well supported are they? 【发布时间】:2014-01-12 09:54:22 【问题描述】:

现在 OpenGL 中的硬件对模板缓冲区的支持程度如何?

它的支持是否比着色器更好/更差?

如果硬件不支持,会用软件模拟吗?

不幸的是,我无法找到有关该主题的任何可靠数据...我想假设由于模板是一项古老的技术,因此它会得到无处不在的支持。然而,作为一项古老的技术,它很容易被新的 GPU 硬件淘汰,转而支持片段着色器。

在我的场景中,我将结合使用 8 位模板缓冲区和 24 位深度缓冲区,与 VBO 一起使用(如果这会影响任何东西)。如果我使用模板缓冲区,那些没有模板支持的人将无法玩我正在制作的游戏,因此担心。如果他们至少可以模拟软件中的模板效果,虽然它并不理想,但足以让我消除恐惧。

【问题讨论】:

IIRC 模板格式仍然存在于 4.4 中。你检查过规格吗? @Bartek - 我做到了,但很难从中了解支持在野外的样子。从我也读到的内容来看,一些 GPU 的部分实现很糟糕,如果他们这样做的话。 如果它在规范中,每个带有“支持 OpenGL”徽章的 GPU 都必然支持它。考虑到他们有多年的时间...... 【参考方案1】:

模板缓冲区仍在 OpenGL 4.4 规范中。它们在第 9.1 节中描述,模板测试在第 17.3.5 节中。

保证您有模板缓冲区。无论它们是在 GPU 上还是在软件中完成,都是一个实现细节。任何可以运行您所针对的 OpenGL 版本的机器都应该能够毫不费力地在 CPU 上处理模板测试。

【讨论】:

【参考方案2】:

OpenGL 中的硬件目前对模板缓冲区的支持程度如何?

自古以来,GPU 就普遍支持模板缓冲区。

它比着色器支持更好/更差吗?

“晚上比外面还冷吗?”是的,这个问题很有意义。模板缓冲区的用途与着色器完全不同。

如果硬件不支持,会用软件模拟吗?

是的,但不是以一种理想的方式:整个渲染管道将退回到纯软件渲染。模板测试是通过硬连线功能实现的,不能由仅实现模板测试而其余部分以不同方式实现的“插入式”软件模拟。那样根本行不通。

幸运的是,您在野外遇到的每个 GPU 都支持模板测试。因此,这无关紧要。

【讨论】:

以上是关于OpenGL Stencil Buffer,它们的支持程度如何?的主要内容,如果未能解决你的问题,请参考以下文章

WebGL中Stencil Buffer的运用以及ThreeJS的实现

glClear [ GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT 和 GL_STENCIL_BUFFER_BIT ]

OpenGLOpenGL中的Buffer的巧妙使用

some OpenGL constants

如何使用stencil buffer实现分层剪裁

OpenGL 混合功能