1

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

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

4

1 回答 1

2

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

它甚至不是真正用于条件渲染场景,因为它们都可以用于此。您可以使用条件渲染GL_SAMPLES_PASSED并达到相同的效果;他们使用相同的真/假条件(即:GL_SAMPLES_PASSED如果样本计数> 0,则认为条件通过)。

不同之处在于,一个给你的信息比另一个多。any 查询的计算效率可能更高;也就是说,GL_SAMPLES_PASSED可能有一些不重要的光栅化开销GL_ANY_SAMPLES_PASSED。再说一次,它可能不会。它会因硬件而异。

使用满足您需求的任何一个。如果您需要样本计数,请索取一份。如果您只需要知道它是否通过,请使用它。

于 2013-09-05T08:52:21.280 回答