glReadPixels 读取像素太慢,无法使用。

5
我正在使用glReadPixelsGLSurfaceView.RendererdrawFrame方法中定期拍摄快照。我需要定期拍摄这个快照以根据我的应用程序要求继续保存我的数据。
然而,glReadPixels性能非常慢,会出现延迟。以下是我使用该方法的方式:
gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);

是否有使用glReadPixels的替代方法?我该如何保存图像而不会导致延迟?


3
嘿,陌生人,我想知道你是否设法解决了这个问题?我遇到了类似的glReadPixels瓶颈。我看到Bernie的答案被采纳了。是PBO有所帮助还是切换颜色格式有所帮助? - Andrey Chernih
1个回答

10

我不知道安卓上是否有这个功能,但也许使用像素缓冲对象(PBOs)可以提高性能。请参考OpenGL.org的这个帖子

然而,别期望奇迹!对于一个1280*752 RGBA图像,每帧需要传输3.67 MB的数据。我不知道安卓的具体数字,但我敢打赌你会面临内存带宽或硬盘写入瓶颈。如果你减小readPixel的尺寸并获得更好的性能,那么问题就找到了。

此外,你需要"A"分量吗?也许只读取RGB更快。尝试以不同的格式读取回来。有些格式比其他格式要快得多,因为它们更好地映射到OpenGL内存表示方式。例如,BGRA可能比RGBA更快。当你请求一个不匹配OpenGL已有格式的格式时,每个像素都必须在操作期间进行转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接