我需要从OpenGL ES 2.0中的帧缓冲区读取像素数据。我知道可以使用glReadPixels轻松完成,但是从iOS 5开始,我们可以使用TextureCached对象来更快地阅读。
我已经实施了Brad Larson提出的解决方案(我将永远感谢他,我认为他在共享这么多知识的社区中做得很好......)Faster alternative to glReadPixels in iPhone OpenGL ES 2.0
一切似乎都有效,我得到了正确的数据,如果我将它与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
这有意义吗?或者我应该期望总能得到更好的结果?