【发布时间】:2014-01-13 18:12:30
【问题描述】:
我想渲染几个(可能数千个)场景,以便对所绘制的内容执行查询。我遇到的问题是对glGetQueryObjectiv() 的调用很昂贵,所以我想在等待查询结果可用时提前渲染几个场景。
我已经阅读了一些关于帧缓冲区对象和像素缓冲区对象的内容,但主要是在使用glReadPixels() 保存到文件的上下文中,并且我无法找到在异步中使用这些对象中的任何一个的示例查询。执行glGetQueryObjectiv() 的设置是否与this example 中的glReadPixels() 不同(例如,我应该使用FBO 还是PBO)?
注意: 这不适用于图形应用程序。我感兴趣的是 GL_SAMPLES_PASSED 查询的结果(即绘制了多少像素?)。
具体应用是在其他表面投射阴影时估计有多少阳光照射到一个表面上。有兴趣的可以阅读here。
【问题讨论】:
-
另外,请记住
GL_SAMPLES_PASSED不是per-se 绘制的像素数。它是通过深度测试的样本数量(如果样本未能通过模板/alpha 测试或被片段着色器丢弃,它不会打折)。此外,1 个样本!= 1 个片段。如果您启用了多重采样,则该数字可能与您使用单次采样的情况不同,具体取决于覆盖范围(尽管确切的行为实际上是由实现定义的)。
标签: c++ opengl asynchronous