【发布时间】:2022-12-16 15:28:20
【问题描述】:
我知道硬件可以运行早期片段测试(https://www.khronos.org/opengl/wiki/Early_Fragment_Test) 特别是对于深度测试,这意味着深度缓冲区可以在顶点着色器输出的插值期间更新,并且片段着色器只会为未通过深度测试的片段调用。
现在,在片段着色器中使用 discard 会禁用此优化。
我明白更新如果使用了discard,那么深度缓冲只能发生在片段着色器执行之后。
但是实际的早期深度拒绝(即,如果片段无法通过深度测试,甚至不执行片段着色器)仍然是可能的。
所以我对这种情况下当前硬件上发生的事情很感兴趣(特别是我对金鱼草/肾上腺素硬件感兴趣)
如果着色器包含 discard 关键字(但不更改 gl_Fragdepth),即使对于深度测试失败的片段,片段着色器是否也会被调用,或者它们是否仍会得到早期 z 拒绝处理?
【问题讨论】:
标签: opengl-es hardware fragment-shader depth-testing