我需要从 OpenGL ES 2.0 的帧缓冲区中读取像素数据。我知道这可以通过 glReadPixels 轻松完成,但是从 iOS 5 开始,我们可以使用 TextureCached 对象来加快阅读速度。
我已经实现了 Brad Larson 提出的解决方案(我将永远感谢他,我认为他在社区分享这么多知识方面做得很好......)在 iPhone OpenGL ES 2.0 中替代 glReadPixels 的速度更快
一切似乎都正常,我得到了正确的数据,如果我将它与 glReadPixels 进行比较,数据是相同的。当我测量这两种可能解决方案的性能(检索数据时消耗的时间)时,我的问题就出现了。
这是我的结果:
(帧缓冲区和纹理大小320x480像素)
GPUImageProcessingDemo[1252:707] glReadPixels 2750 us
GPUImageProcessingDemo[1252:707] 纹理读取 1276 us
GPUImageProcessingDemo[1252:707] glReadPixels 2443 us
GPUImageProcessingDemo[1252:707] 纹理读取 1263 us
GPUImageProcessingDemo[1252:707] glReadPixels 2494 us
GPUImageProcessingDemo[1252:707] 纹理读取 1375 us
这似乎很有趣,因为它几乎是使用 glReadPixels 所需时间的一半。问题是当我将纹理大小更改为更大一点时,我会得到以下结果:
(帧缓冲区和纹理大小480x620像素)
GPUImageProcessingDemo[1077:707] glReadPixels 2407 us
GPUImageProcessingDemo[1077:707] 纹理读取 2842 us
GPUImageProcessingDemo[1077:707] glReadPixels 2392 us
GPUImageProcessingDemo[1077:707] 纹理读取 3040 us
GPUImageProcessingDemo[1077:707] glReadPixels 2224 us
这有意义吗?还是我应该期望总是得到更好的结果?