片段着色器之前的深度testing

正因为如此 ,深度testing通常在片段着色器阶段之后执行。 这是为什么? 我认为一个片段是以其深度值发送给FS,然后深度testing发生 FS执行之前 ,所以如果像素被更近的一个覆盖,那么GPU可以避免执行一个备用FS。

为什么不是这样?

至于为什么深度dest会在片段着色器之前或之后发生,那么早期深度testing中的维基链接中有一个部分,以及关于它的整篇文章。

在片段着色器本身中执行深度testing时,可能会根据正在写入的样本的深度来testing片段的输出深度值。 这篇文章中有一行:

如果testing失败,则丢弃片段。 如果testing通过,则深度缓冲区将使用片段的输出深度进行更新,除非随后的每个样本操作阻止该深度缓冲区。

这个“per-sample”操作意味着可以指示片段着色器仅以像素为单位执行深度testing,因此您希望/需要片段着色器。