【问题标题】:Early-stencil culling without early-z culling没有 early-z 剔除的早期模板剔除
【发布时间】:2019-11-21 06:38:54
【问题描述】:

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

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

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

第二遍只写 stencil 为 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 做作。 这使得 early-z 剔除变得不可能。幸运的是,我只对早期模板剔除感兴趣。

所以我的问题是:有没有一种方法可以利用早期模板剔除无需早期 Z 剔除


这个线程和这个one很相关,但是我确实需要在第二个shader中使用discardgl_FragDepth做作...

【问题讨论】:

    标签: opengl stencil-buffer culling


    【解决方案1】:

    没有早期的模板测试这样的东西。或者早期的 Z/深度测试。只有early fragment tests,恰好包括模板和深度测试,还包括其他操作。它们不能在早期零散地进行;一切都早或晚了。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多