首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遮挡查询是否完全尊重模具测试?

遮挡查询是否完全尊重模具测试?
EN

Computer Graphics用户
提问于 2017-10-02 14:17:47
回答 1查看 251关注 0票数 6

在一个项目中,我希望选择使用屏幕对齐多边形的可视对象,以及“选择”对于该多边形的各种条件,我基本上是将多边形绘制到模板缓冲区中,然后使用模板测试和遮挡查询来测量对象和选择多边形在屏幕空间中的重叠程度。

这个效果很好。但是,想象一下,当我被这样的说法所绊倒时,我的惊讶之处是,根据OpenGL Wiki的遮挡查询实际上并不关心模具测试:

他们检测范围内的绘图命令是否通过深度测试,如果是的话,这些三角形中有多少样本通过了深度测试。请注意,样本计数和通过/失败仅基于深度测试。模板测试,或片段着色丢弃与查询无关,尽管它们在技术上是在片段着色之后发生的。

这显然与我的实际经验相矛盾,使我有点担心/困惑。我看了一下规范(最新的4.6内核和优秀的旧2.0,我们实际上是为了兼容性而在我们的项目中使用它),它还说遮挡查询包括通过深度测试的样本数量。然而,它并没有像wiki那样对模具测试做明确的陈述。由于深度测试在技术上是在模具测试之后进行的,我不完全确定这是否已经包括了模板测试,而且规范的措辞只是为了方便使用最后一阶段。

所以,我的问题是,遮挡查询是否尊重模具测试(或者其他任何早期的片段测试,我实际上是在使用剪刀测试和另一个无关算法中的遮挡查询)?我在这里看到了一些可能性:

  • 他们确实尊重所有的测试,规范中的措辞只是出于方便的原因而使用最后一次测试。这将意味着,如果碎片未能通过早期测试,甚至无法达到深度测试,从技术上讲,这将被视为失败。不过,我不确定规范的措辞是否太清楚,但也许我遗漏了一些东西,更熟悉规范分层的人可以更清楚地说明这一点。这也意味着上面的Wiki文章有点误导(或者我只是误解了它)。
  • 他们绝对不尊重模具测试,而只关心深度测试。这意味着没有通过模具测试的片段仍然需要进行深度测试。这也意味着,我在特定硬件(它是一个nVidia GeForce GTX1xxx)上所经历的显然是一个错误。
  • 或者,这可能根本不是API的一个明确的部分,它为解释留下了空间。不过,这可能相当奇怪,因为我认为这并不是一个很少使用的特性。

(在实践中,我肯定可以将我的算法重组为使用深度测试,但这是一个让我对理论含义和基础感到好奇的问题。)

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2017-10-02 15:34:51

与Wiki文章一样,规范已经在这一点上被澄清了也是如此。所以让我们解释一下。

规范中的新措辞是:

在深度测试之后,仍在处理的每个片段的样本传递计数将增加。

这是一个更好的措辞,因为它清楚地表明,事情的处理顺序是重要的。OpenGL 将深度测试定义为模具测试、剪刀测试等之后发生的深度测试。.因此,这一措辞清楚地表明,深度测试和它面前的一切都很重要。

所以它尊重模具测试。以及片段着色器discard,因为FS是在所有这些测试之前指定的。

除非你是强制这些测试发生在片段着色器之前。如果这样做,那么对FS中的片段进行discard将不会阻止阻塞查询对该片段进行计数。因此,如果实施早期测试,就会失去使用discard影响遮挡查询计数的权利。

票数 4
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/5672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档