模板位通常用于优化,例如具有全屏光照只影响某些像素。

模板测试机制是否使用任何类型的任何加速结构(例如,将屏幕划分为更粗的网格) ?还是perf的好处仅来自进行预像素着色器测试,可以使着色器浪潮提前?

#1 楼

我没有确切的权威性答案,但我非常有信心答案是“是”。原因如下:
使用帧缓冲对象时,模板附件通常与深度附件结合在单个纹理(GL_DEPTH24_STENCIL8GL_DEPTH32F_STENCIL8)中。实际上,直到最近,结合使用深度和模板才是获得模板缓冲区的唯一方法。现在可以为FB​​O创建仅模板的附件。所需的深度格式。也可以使用模板附件,再次使用所需的模板格式,以及组合的深度/模板格式。但是,仅当两个附件都引用同一图像时,才需要实现同时支持深度和模板附件。
这意味着,如果您想要没有深度的模板,则可以使用所需的模板格式之一。如果需要没有模板的深度,则可以使用所需的深度格式之一。但是,如果要深度和模板,则必须使用深度/模板格式,并且该纹理中的同一图像必须同时附加到深度和模板附件中。

所有这些都强烈暗示着加速存储模板格式与深度缓冲区使用的格式类似。
此外,根据经验,多年来,如果模板缓冲区未使用某种形式的加速,则使用模板缓冲区的许多渲染算法(例如,模板阴影)将过慢
NV_packed_depth_stencil扩展(2001)规范还提供了有趣的见解:

许多OpenGL实现已选择将深度和模板缓冲区交织到一个缓冲区中,通常具有24位深度精度和8位模板数据。

和(强调我的)

深度/模板格式是否应支持其他标准类型,例如GL_FLOAT或GL_UNSIGNED_INT?
解决:不,此扩展程序旨在简化。支持更多类型几乎无济于事,因为新类型仅需要数据格式转换。我们的目标是匹配缓冲区的本机格式,而不是添加广泛的新功能类。


评论


$ \ begingroup $
还应该注意的是,尽管OpenGL仅要求支持组合的深度/模板,但从技术上讲,API仍允许它用于可以处理它的硬件。相比之下,Vulkan无法将它们分开。在Vulkan渲染通道中,渲染通道中仅存在一个深度/模板附件,并且该图像可以提供深度,模板或同时提供深度和模板。但是那里只允许一张图像。
$ \ endgroup $
–尼科尔·波拉斯(Nicol Bolas)
17年11月29日在3:34