我正在使用glReadPixelsdrawFrameGLSurfaceView.Renderer方法中定期拍摄快照。我需要定期拍摄此快照,以根据我的应用程序要求继续保存数据。

但是glReadPixels性能确实很慢,并且显示出滞后性。这是我使用方法的方式:

gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);

有使用glReadPixels的替代方法吗?如何保存图像而不会引起延迟?

最佳答案

我不知道这在Android上是否可用,但也许PBO(像素缓冲区对象)会提高性能。看到这个OpenGL.org thread

但是,不要指望奇迹!对于1280 * 752 RGBA图像,每帧传输3.67 MB的数据。我不知道Android的数字,但我敢打赌,您面临着内存带宽或硬盘写入瓶颈。如果您减小readPixel的大小并获得更好的性能,您就会知道这就是问题所在。

另外,您是否需要“A”组件?也许回读RGB更快。尝试以其他格式读回。有些的速度比快,因为它们可以更好地映射到OpenGL内存表示形式。例如,BGRA可能比RGBA更快。当您请求的格式与OpenGL不匹配时,在操作过程中必须转换每个像素。

关于android - glReadPixels使用太慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8222548/

10-12 04:09