我的应用程序依赖于从框架缓冲区读取深度信息。我已经用glReadPixels(0,0,宽度,高度,GL_DEPTH_COMPONENT,GL_FLOAT,&depth_data)实现了这一点。
然而,这运行不合理的慢,它带来了我的应用程序从一个平滑的30 3fps到一个滞后的3fps。如果我试图读取其他维度或数据,它运行在一个可接受的水平上。
概述:
( second
为什么最后一个电话要比其他电话慢呢?有什么办法补救吗?
宽度x高度约为100 x 1000,随着尺寸的增加,调用变得越来越慢。
我还尝试使用像素缓冲区对象,但这对性能没有显著影响,它只会将慢度延迟到glMapBuffer()调用。
(我在MacBook Air nVidia 320米图形操作系统X10.6上测试了这一点,奇怪的是,我的旧MacBook英特尔GMA x3100获得了15 fps的深度缓冲区。)
更新:将GLUT_MULTISAMPLE排除在glutInitDisplayMode选项之外,产生了天壤之别,再次使应用程序恢复到平稳的20 out。我一开始不知道该怎么做,有人能解释一下吗?
发布于 2011-03-31 13:27:23
如果您的主框架缓冲区是启用MSAA的(GLUT_MULTISAMPLE存在),那么将创建两个实际的帧缓冲区-一个带有MSAA,一个是常规的。
第一个是你需要填补的。它包含正面和背面颜色表面,加上深度和模板。第二个只能包含通过解析相应的MSAA表面而产生的颜色。
但是,当您试图使用glReadPixels读取深度时,驱动程序也不得不解析启用MSAA的深度面,这可能会导致您的减速。
发布于 2011-03-31 12:26:59
您为深度缓冲区选择的存储格式是什么?
如果不是GLfloat,那么您将要求GL转换深度缓冲区中的每个深度,以便在读取它时浮动。(你的第三颗子弹也是这样,和GL_RED一样。您的Color缓冲区是浮动缓冲区吗?)
发布于 2013-01-18 05:48:58
无论是GL_FLOAT还是GL_UNSIGNED_BYTE,glReadPixels仍然是非常慢的。如果您使用PBO来获取RGB值,它将非常快。当使用PBO处理RGB值时,CPU使用率为4%。但当处理深度值时,它将增加到50%。我试过GL_FLOAT,GL_UNSIGNED_BYTE,GL_UNSIGNED_INT,GL_UNSIGNED_INT_24_8。
https://stackoverflow.com/questions/5499729
复制相似问题