アプリは最大30フレームで動作するように設定しています。計測デバイスは初代iPadです。
結果は以下のようになりました。
計測条件 | フレーム数 |
---|---|
AIR 2.6 + CPUレンダリング + 非ビットマップ | 6 frame |
AIR 2.6 + CPUレンダリング + ビットマップ | 6 frame |
AIR 2.6 + GPUレンダリング + 非ビットマップ | 3 frame |
AIR 2.6 + GPUレンダリング + ビットマップ | 23 frame |
AIR 2.7 + CPUレンダリング + 非ビットマップ | 13 frame |
AIR 2.7 + CPUレンダリング + ビットマップ | 13 frame |
AIR 2.7 + GPUレンダリング + 非ビットマップ | 3 frame |
AIR 2.7 + GPUレンダリング + ビットマップ | 23 frame |
非ビットマップというのは、ネコなどのムービークリップをシェイプのまま使用しているという意味です。
ビットマップは全て実行時にビットマップにする方法をとっています。
ActionScript3で、以下のように記述しています。
displayobject.cacheAsBitmap = true; displayobject.cacheAsBitmapMatrix = new Matrix();
個人的にうっかりしていたのは、GPUレンダリングモード時でもAIR 2.7の描画速度最適化の恩恵が得られると思っていたのですが、計測結果が表すようにそうではありませんでした。
しっかり公式発表にもCPUレンダリングモード時と書いてありました。
計測結果を見ると、ビットマップ化してGPUでレンダリングするのが一番速いのがわかります。
このことだけをとってみれば、AIR 2.6とAIR 2.7の違いは無いようです。
さて、シェイプタイプのムービークリップをビットマップ化するタイミングですが、今回の実験のように実行時に行うと、レンダリングの結果がCPUモードとGPUモード時で結構変わってしまうことが分かりました。
CPUモードで実行時ビットマップレンダリング
GPUモードで実行時ビットマップレンダリング
ステージのレンダリングクオリティはどちらともデフォルトの設定のままなので、以下の設定と同等だと思われます。
stage.quality = StageQuality.MEDIUM;
この事を踏まえると、ビットマップ化は実行時にするのでは無く、パブリッシュ時に行ってしまう方が、映像のクオリティ的には良いと思われます。
0 件のコメント:
コメントを投稿