Opengl 无早期z剔除的早期模板剔除

Opengl 无早期z剔除的早期模板剔除,opengl,stencil-buffer,culling,Opengl,Stencil Buffer,Culling,我已经知道答案了,但我需要确定 我用两遍渲染一个场景。 在第一个过程中,如果深度测试成功,我将模具位标记为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 te

我已经知道答案了,但我需要确定

我用两遍渲染一个场景。 在第一个过程中,如果深度测试成功,我将模具位标记为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
事实上,这工作正常,但我预计在性能方面会有巨大的提高。 第二个过程中使用的着色器是特殊的:它使用
discard
gl_FragDepth
矫揉造作。 这使得早期z剔除变得不可能。幸运的是,我只对早期模板剔除感兴趣

所以我的问题是:有没有一种方法可以利用早期模板剔除而不使用早期z剔除



此线程与此非常相关,但我确实需要在第二个着色器中使用
放弃
gl_FragDepth
矫揉造作…

没有早期模具测试这样的东西。或者早期的Z/深度测试。只有一些操作,包括模板和深度测试,还有其他操作。它们不能在零碎的早期进行;要么早要么晚