遮挡查询中GL_SAMPLES_PASSED和GL_ANY_SAMPLES_PASSED之间的差异

时间:2013-09-05 08:08:25

标签: opengl

我知道查询对象是什么,但我不完全理解GL_SAMPLES_PASSED和GL_ANY_SAMPLES_PASSED之间的区别。参考页面说明了GL_ANY_SAMPLES_PASSED:如果“any”样本在GL_ANY_SAMPLES_PASSED的情况下通过了深度测试,则后续渲染会将标志设置为GL_TRUE。

这是否意味着,唯一的区别在于,使用GL_ANY_SAMPLES_PASSED的查询对象要快得多,因为它不必计算传递的样本数,它只返回true / false而不是count,这也很有帮助在条件渲染中(因为真假值)。

1 个答案:

答案 0 :(得分:2)

GL_ANY_SAMPLES_PASSED是否比GL_SAMPLES_PASSED更快是未知的。在渲染方面,这两种方式都不会更快,因为在整个测试完成通过管道渲染之前,您无法知道答案是什么。

conditional rendering scenarios甚至不是真的,因为它们都可以用于此。您可以使用GL_SAMPLES_PASSED条件渲染并获得相同的效果;它们使用相同的真/假条件(即:如果样本计数> 0),则认为条件为GL_SAMPLES_PASSED

不同之处在于,您可以获得比其他信息更多的信息。任何查询的计算效率都可能更高;也就是说,GL_SAMPLES_PASSED可能有一些GL_ANY_SAMPLES_PASSED没有的非平凡的栅格化开销。然后,它可能不会。它会因硬件而异。

使用符合您需求的任何一种。如果您需要样品计数,请索取一个。如果你需要知道的是它是否通过,那就使用它。