我正在使用 glReadPixel 作为 OpenGL 窗口(宽度*高度)。 要应用我的算法,我必须读取深度缓冲区 2 次和颜色缓冲区(帧)一次。然而
glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);
使用起来太慢。 有什么办法可以加快速度吗?
最佳答案
glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);
“i”和“j”是循环变量的典型名称。除了您提到 1-2 秒是您的用例可接受的延迟这一事实之外,我还得出一个结论:您正在循环中一次读取多个像素。例如您正在调用 glReadPixels 1280*720=921600 次。如果这是不正确的,我们深表歉意。
通常,glReadPixels 被认为很慢,因为 CPU 被迫停止,直到 GPU 完成渲染。在这种情况下,glReadPixels 可能会停滞很多毫秒并严重影响实时帧速率,但我预计延迟最多不会超过 50-100 毫秒(通常要少得多)。
就您而言,我认为它很慢,因为 glReadPixels 的每次调用开销很大。如果您需要读取一大堆像素,请分配更大的内存块,并使用宽度和高度参数通过一次调用 glReadPixels 来读取它们。速度将会快几个数量级。
关于opengl - 除了使用 glReadPixels 之外,还有其他方法可以在 OpenGL 中读取像素值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41757142/