2016-11-23 43 views
2

我正在爲跨平臺程序編寫iOS後端,該程序的平臺無關引擎按照RGBA順序將其所有圖形寫入32位像素緩衝區。不使用字節字節。圖形總是不透明的,所以我不需要阿爾法混合。在沒有OpenGL的情況下在iOS上進行硬件加速縮放

在我的drawRect方法中,將這些像素緩衝區繪製到我的CGContextRef的最高效選項是什麼?像素緩衝區通常只有320x240像素,需要縮放以完全填充我的視圖的尺寸,例如非Retina iPad上的1024x768和Retina iPad上的2048x1536。這是一大堆工作,所以最好使用GPU來完成。但是,如何強制iOS使用GPU繪製和縮放而不使用OpenGL?

我試過使用CGContextDrawImage(),但這確實很慢,可能是因爲一切都是使用CPU完成的。

我也有看看CIImage的API,因爲這些顯然GPU優化,但問題是,CIImage對象是不可改變的,所以我不得不爲每一幀我需要提請不斷創造新的CIImage目的將可能會導致性能下降。

我當然可以使用OpenGL,但我想獲得一些關於是否有更簡單的解決方案來獲得我想要的東西的反饋。

感謝您的任何想法!

+0

我覺得下面的鏈接會告訴你一些提示。 http://stackoverflow.com/questions/6520320/images-vs-core-graphics和https://robots.thoughtbot.com/designing-for-ios-graphics-performance和https://lobste.rs/s/ ckm4uw/a_performance-minded_take_on_ios_design /評論/ itdkfh。 – beshio

回答

1

要回答我自己的問題,最簡單的方法是使用CGDataProviderCreateWithData()然後CGImageCreate()從像素緩衝區簡單創建CGImageRef。然後,該CGImageRef可以設置爲視圖的層,像這樣:

view.layer.contents = (id) myImage; 

的圖像將被自動地(與GPU加速)如果contentMode設置爲UIViewContentModeScaleToFill(這是縮放以適合UIView的幀默認)。

感謝Cocoa郵件列表中的David Duncan提出的解決方案!

相關問題