我正在使用glReadPixel用于OpenGL窗口(宽度*高度)。 要应用我的算法,我必须读取深度缓冲区2次和颜色缓冲区(帧)一次。然而
glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);
使用速度太慢。 有没有办法加快速度?
答案 0 :(得分:4)
glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);
'i'和'j'是循环变量的典型名称。除了你提到1-2秒作为你的用例的可接受延迟这一事实,我将跳到一个结论,你在循环中一次读取一个像素。例如你正在调用glReadPixels 1280 * 720 = 921600次。如果这不正确,请道歉。
通常,glReadPixels被认为是缓慢的,因为CPU被迫停止,直到GPU完成渲染。在这种情况下,glReadPixels可能会停滞很多毫秒并严重影响实时帧速率,但我不会期望任何超过50-100ms的延迟(通常更少)。
在你的情况下,我认为它很慢,因为glReadPixels有很大的每次调用开销。如果你需要读取一大堆像素,那么分配一大块内存并使用width和height参数一次调用glReadPixels来读取它们。它会快几个数量级。