我使用glReadPixels在GLSurfaceView.Renderer的drawFrame方法中定期拍摄快照。我需要定期拍摄此快照,以根据我的应用程序要求保存数据。
然而,glReadPixels的性能确实很慢,而且表现出滞后。下面是我如何使用该方法:
gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);有没有使用glReadPixels的替代方案?如何在不导致延迟的情况下保存图像?
发布于 2011-11-22 14:16:06
我不知道这在android上是否可用,但也许PBO (Pixel buffer objects)会提升性能。请参阅此OpenGL.org thread。
然而,不要期待奇迹!使用1280*752 RGBA图像,每帧传输3.67MB的数据。我不知道Android的数据,但我敢打赌你正面临内存带宽或硬盘写入瓶颈。如果您减小了readPixel的大小并获得了更好的性能,那么您就知道这就是问题所在。
另外,你需要"A“组件吗?也许读回RGB会更快。试着用不同的格式回读。有些是方式比其他快,因为它们更好地映射到OpenGL内存表示。例如,BGRA可能比RGBA更快。当您请求的格式与OpenGL的格式不匹配时,必须在操作过程中转换每个像素。
https://stackoverflow.com/questions/8222548
复制相似问题