glReadPixels使用起来太慢了

时间:2011-11-22 05:49:04

标签: android opengl-es glsurfaceview glreadpixels

我正在glReadPixels使用drawFrame GLSurfaceView.Renderer方法定期拍摄快照。我需要定期拍摄此快照,以便按照我的应用要求保存我的数据。

然而,glReadPixels表现非常缓慢且显示滞后。以下是我使用该方法的方法:

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

是否可以使用glReadPixels?如何在不造成延迟的情况下保存图像?

1 个答案:

答案 0 :(得分:10)

我不知道这是否可以在Android上使用,但也许PBO(Pixel缓冲区对象)会提升性能。请参阅此OpenGL.org thread

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

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