我的应用程序依赖于从帧缓冲区读取深度信息。我已经与glReadPixels(0,0,宽度,高度,GL_DEPTH_COMPONENT,GL_FLOAT,& depth_data)glReadPixels()读取速度缓慢GL_DEPTH_COMPONENT
实现这个然而这种不合理的运行速度慢,它从一个30fps的流畅的laggy 3FPS带来了我的申请。如果我尝试使用其他维度或数据进行回读,它将在可接受的级别上运行。
为了给出的概述:
- 否glReadPixels - 每秒
- glReadPixels> 30帧(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帧,不可接受
为什么最后一个比其他调用要慢?有什么方法可以补救吗?
宽x高大约是100 x 1000,随着增加尺寸,调用越来越慢。
我也试过使用像素缓冲区对象,但是这对性能没有明显影响,它只会延迟glMapBuffer()调用的缓慢。
(我已经在MacBook Air上的nVidia 320M独立OS X 10.6测试这一点,奇怪的是我的旧的MacBook英特尔GMA X3100拿到〜15 fps的阅读深度缓冲)。
UPDATE:离开GLUT_MULTISAMPLE出glutInitDisplayMode选项的差异使得应用程序再次回到了平滑的20fps。首先我不知道该选项的作用,任何人都可以解释一下吗?
我知道这是一个非答案但不使用glRead *或glGet *如果fps很重要!如果您只想要渲染目的的深度信息,那么最好编写一个自定义着色器,该着色器可以读取深度缓冲区。如果你真的需要这些深度信息来为你的应用/游戏逻辑,我强烈建议重新考虑整体方法。 – LumpN 2011-03-31 14:48:54