2016-11-23 15 views
2

プラットフォーム非依存のエンジンがすべてのグラフィックスをRGBAの順序で32ビットピクセルバッファに書き込むクロスプラットフォームプログラムのiOSバックエンドを作成しています。アルファバイトは使用されません。グラフィックスは常に不透明なので、アルファブレンディングは必要ありません。OpenGLを使用しないiOSでのハードウェアアクセラレーションによるスケーリング

これらのピクセルバッファーを私のdrawRectメソッド内のCGContextRefに描画して拡大縮小する最も効率的なオプションは何ですか?ピクセルバッファは通常320×240ピクセルしかないため、ビューのサイズを完全に満たすようにスケーリングする必要があります。非Retina iPadsでは1024x768、Retina iPadsでは2048x1536です。これは大変な作業ですので、GPUを使用するのが最善です。しかし、OpenGLを使用せずにGPUを使ってiOSに描画と拡大を強制するにはどうすればよいですか?

私はCGContextDrawImage()を使用しようとしましたが、これはおそらくすべてがCPUを使用して行われているため、これは実際には低速です。

これらは明らかにGPUに最適化されているので、私はまたCIImageのAPIを見て持っていたが、問題は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/comments/itdkfh。 – beshio

答えて

1

私自身の質問に答えるには、CGDataProviderCreateWithData()、次にCGImageCreate()を使用してピクセルバッファからCGImageRefを単に作成するのが最も簡単な方法です。このようなのでCGImageRef次いで、ビューの層として設定することができる。

view.layer.contents = (id) myImage; 

画像が自動的contentModeがある(UIViewContentModeScaleToFillに設定されている場合UIViewのフレームに合わせて(GPUアクセラレーションで)スケーリングされますデフォルト)。

この解決策を提案したCocoaメーリングリストのDavid Duncanに感謝します!

関連する問題