有没有其他方法可以在OpenGL中读取像素值而不是使用glReadPixels?

时间:2017-01-20 06:07:41

标签: opengl

我正在使用glReadPixel用于OpenGL窗口(宽度*高度)。 要应用我的算法,我必须读取深度缓冲区2次和颜色缓冲区(帧)一次。然而

glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);

使用速度太慢。 有没有办法加快速度?

1 个答案:

答案 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来读取它们。它会快几个数量级。