我們的產品包含一種軟件圖像解碼器,它基本上可以生成需要快速複製屏幕(我們在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