for (int i = 0; i < Number_Of_queries; i++)
{
glBeginQueryARB(GL_SAMPLES_PASSED_ARB, queries[i]);
Box[i]
glEndQueryARB(GL_SAMPLES_PASSED_ARB);
}
我很好奇GPU GEMS 1中建议的用于遮挡剔除的方法,其中执行了一定数量的查询。使用所描述的方法,您无法相互测试各个盒子,所以您应该执行以下操作吗?
测试盒A - &gt;渲染方框A
测试盒B - &gt;渲染方框B
测试盒C - &gt;渲染方框C
依旧......
答案 0 :(得分:1)
我不确定我是否理解正确,但这不是首先渲染所有框(并且不写入深度缓冲区)然后使用查询结果检查每个对象的天真实现的缺点之一?但是你建议立即使用单个框的查询结果是一个更天真的方法,因为这会拖延管道。如果您进一步阅读本章(假设您参考第29章),它们提供了一种简单的技术来克服两种天真方法的缺点(即,只是正常渲染所有内容并使用前一帧的查询结果)。
答案 1 :(得分:0)
我认为(链接GPU宝石文章会很好......)你对某些异步查询感到困惑,如下所示:
http://developer.download.nvidia.com/opengl/specs/GL_NV_conditional_render.txt
如果我没记错的话还有其他扩展来检查结果的可用性而不会阻塞。
正如Christian Rau指出的那样只是查询,等待结果,根据结果做出事情&#34;可能因为这个原因而失速并且可能没有任何收获,这取决于做了多少工作&#34;做东西&#34;。事实上,进行查询,等待它往返只是为了保存一个绘制调用,这很可能根本没有帮助。