我们的产品包含一种软件图像解码器,它基本上可以生成需要快速复制屏幕(我们在iOS上运行)的全帧像素数据。将RGB像素数据高效复制到iOS屏幕上
目前我们使用的是CGBitmapContextCreate,我们直接访问内存缓冲区,然后对每一帧调用CGBitmapContextCreateImage,然后将该位图绘制到屏幕上。这对于在iPad的视网膜显示器上进行全屏刷新的速度太慢了,但是对于非视网膜设备来说,这还是可以的。我们尝试了各种基于OpenGL ES的方法,包括使用glTexImage2D和glTexSubImage2D(本质上是渲染纹理),但CPU使用率仍然很高,我们无法获得超过30 FPS的在iPad 3上进行全屏刷新。问题在于,使用30 FPS时,仅将像素复制到屏幕上时,CPU使用率接近于100%,这意味着我们没有太多工作来处理我们自己的渲染。中央处理器。
我们愿意使用OpenGL或任何iOS API来提供最佳性能。像素数据格式化为每像素32位RGBA数据,但我们在这里有一些灵活性...
有什么建议吗?
您是否使用仪器来查看所有CPU的操作?我做了类似的事情,发现花了很多时间将RGBA转换为ARGB(并不是说这是你的问题,但如果你还没有做到这一点,它可能有助于看到一个配置文件) – nielsbot 2012-07-11 00:27:59
“到底画什么”屏幕“是什么意思?你是在绘制一个UIView的'-drawRect:'方法,还是将CGImage放在一个图层中,或者使用UIImageView?后两种方法应该明显更快 - 请参阅此[以前的答案](http://stackoverflow.com/questions/10410106/drawing-image-with-coregraphics-on-retina-ipad-is-slow/10424635#10424635 )。 – 2012-07-11 02:45:25
你的“glTexSubImage2D”方法是什么?我相信如果做得正确,这应该足够快。我如何理解你在做什么是你在CPU上处理原始像素数据并将这些数据推送到GPU并渲染它们。这是最大的约4kx4kx4B(64MB)的数据被推到一个完整的纹理(对于iPad3),似乎并不太多..无论如何,如果在任何情况下,这是什么原因导致fps的下降,我没有看到任何更好的方式,然后直接在像素的GPU上工作。 – 2012-07-11 08:30:30