OPENGL ARB_occlusion_query遮挡剔除

|
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->渲染盒A 测试盒B->渲染盒B 测试盒C->渲染盒C 等等...
已邀请:
我不确定我是否理解正确,但这不是天真的实现的缺点之一,即首先渲染所有框(而不是写入深度缓冲区),然后使用查询结果检查每个对象吗?但是您建议立即使用单个框的查询结果是一种更为幼稚的方法,因为这会使管道停滞。如果您进一步阅读本章(假设您参考第29章),它们将提供一种简单的技术来克服两种幼稚方法的缺点(即,仅正常呈现所有内容并使用前一帧的查询结果)。
我认为(链接GPU宝石文章本来很好...),您对诸如此类扩展中所述的某种异步查询感到困惑: http://developer.download.nvidia.com/opengl/specs/GL_NV_conditional_render.txt 如果我没记错的话,还有其他扩展可以检查结果的可用性,而不会阻塞。 正如克里斯蒂安·劳(Christian Rau)指出的那样,仅执行“查询,等待结果,基于结果进行操作”可能会停顿,因此可能不会有任何收益,具体取决于“执行任务”中的工作量。实际上,进行查询,等待往返以保存一个绘图调用几乎完全没有帮助。

要回复问题请先登录注册