我的应用程序依赖于从帧缓冲区中读取深度信息。我已经使用glReadPixels(0, 0,width,height,GL_DEPTH_COMPONENT,GL_FLOAT,&depth_data)实现了这一点。
但是,这种方法运行得非常慢,会使我的应用程序从平滑的30fps变成卡顿的3fps。如果我尝试读取其他维度或数据,则它的运行速度是可以接受的。
总体来说:
- 没有glReadPixels -> 30帧每秒 - glReadPixels(0, 0,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&depth_data)-> 20帧每秒,可以接受 - glReadPixels(0, 0,width,height,GL_RED,GL_FLOAT,&depth_data)-> 20帧每秒,可以接受 - glReadPixels(0, 0,width,height,GL_DEPTH_COMPONENT,GL_FLOAT,&depth_data)-> 3帧每秒,不可接受
为什么最后一个比其他调用慢得多?有没有办法解决这个问题?
width x height大约是100 x 1000,随着尺寸的增加,调用变得越来越慢。
我还尝试过使用像素缓冲对象,但对性能没有显著影响,只是将缓慢延迟到glMapBuffer()调用。
(我在MacBook Air nVidia 320m图形OS X 10.6上进行了测试,奇怪的是我的旧MacBook Intel GMA x3100读取深度缓冲区时能够达到约15fps。)
更新:将GLUT_MULTISAMPLE选项从glutInitDisplayMode选项中删除后,应用程序重新变得流畅,达到了20fps。我不知道该选项首先是做什么的,有人可以解释一下吗?
但是,这种方法运行得非常慢,会使我的应用程序从平滑的30fps变成卡顿的3fps。如果我尝试读取其他维度或数据,则它的运行速度是可以接受的。
总体来说:
- 没有glReadPixels -> 30帧每秒 - glReadPixels(0, 0,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&depth_data)-> 20帧每秒,可以接受 - glReadPixels(0, 0,width,height,GL_RED,GL_FLOAT,&depth_data)-> 20帧每秒,可以接受 - glReadPixels(0, 0,width,height,GL_DEPTH_COMPONENT,GL_FLOAT,&depth_data)-> 3帧每秒,不可接受
为什么最后一个比其他调用慢得多?有没有办法解决这个问题?
width x height大约是100 x 1000,随着尺寸的增加,调用变得越来越慢。
我还尝试过使用像素缓冲对象,但对性能没有显著影响,只是将缓慢延迟到glMapBuffer()调用。
(我在MacBook Air nVidia 320m图形OS X 10.6上进行了测试,奇怪的是我的旧MacBook Intel GMA x3100读取深度缓冲区时能够达到约15fps。)
更新:将GLUT_MULTISAMPLE选项从glutInitDisplayMode选项中删除后,应用程序重新变得流畅,达到了20fps。我不知道该选项首先是做什么的,有人可以解释一下吗?