早期模板剔除而不是早期Z剔除

ctrmrzij  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(161)

我已经有了答案,但我需要确定。

我分两次渲染一个场景。在第一遍中,如果深度测试成功,我将模板位标记为1:

glEnable(GL_STENCIL_TEST);
glStencilMask(GL_TRUE);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glStencilFunc(GL_ALWAYS, 1, GL_TRUE);

第二遍仅在模板为1的地方写入:

glStencilFunc(GL_EQUAL, 1, GL_TRUE); // Pass test if stencil value is 1
glStencilMask(GL_FALSE); // Don't write anything to stencil buffer

事实上,这很正常,但我预计性能会有很大的提高。第二个过程中使用的着色器很特别:它使用discardgl_FragDepth影响。这使得早期淘汰变得不可能。幸运的是,我只对早期模板剔除感兴趣。

所以我的问题是:有没有办法利用早期的模板剔除而不是早期的z剔除

这个线程与这个one非常相关,但我真的需要在第二个着色器中使用discardgl_FragDepth影响…

z8dt9xmd

z8dt9xmd1#

没有早期模板测试这回事。或这方面的早期Z/深度测试。只有early fragment tests,恰好包括模板和深度测试,但也有其他操作。它们不能在早期零敲碎打地进行;这都是早的或晚的。

相关问题