5

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

然而glReadPixels,性能真的很慢并且显示出滞后。这是我使用该方法的方式:

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

有替代使用glReadPixels吗?如何保存图像而不会造成延迟?

4

1 回答 1

10

我不知道这在 android 上是否可用,但也许 PBO(像素缓冲区对象)会提高性能。请参阅此OpenGL.org 线程

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

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

于 2011-11-22T06:16:06.133 回答