ハードウェアアクセラレーション

OpenGL ES 1.1 ハードウェアアクセラレーションを使用すると、一部のアプリケーションでグラフィックのパフォーマンスを向上させることができます。表示オブジェクトがアニメーション化される、ゲームなどのアプリケーションでは、ハードウェアアクセラレーションによって利点が得られます。ハードウェアアクセラレーションを使用するアプリケーションは、CPU から iPhone の GPU に一部のグラフィック処理の負荷を分散させることができ、これによりパフォーマンスが著しく向上します。

GPU を使用するアプリケーションをデザインする際は、コンテンツが効果的に GPU アクセラレーションの対象となるようにルールに従うことが重要です。

ハードウェアアクセラレーションを使用するには、Flash Professional CS5 の iPhone 設定ダイアログボックスにある「一般」タブで、「レンダリング」を「GPU」に設定します。アプリケーション記述ファイル内で、renderMode プロパティを gpu に設定することもできます。

<initialWindow> 
    <renderMode>gpu</renderMode> 
    ...

Flash Professional CS5 における iPhone アプリケーションプロパティの設定またはアプリケーション記述ファイルにおける iPhone アプリケーションプロパティの設定を参照してください。

コンテンツが頻繁に更新されない場合に、ハードウェアアクセラレーションによって迅速にレンダリングできる表示オブジェクトには次の 4 つのクラスがあります。

  • Bitmap オブジェクト

  • cacheAsBitmap プロパティが true に設定され、オプションとして cacheAsBitmapMatrix プロパティが設定されている 2D 表示オブジェクト(以降の説明を参照)

  • 3D 表示オブジェクト(つまり z プロパティが設定されたオブジェクト)

  • 単色の矩形で塗りつぶされ、エッジが画面上のピクセルに沿って並んでいる表示オブジェクト

ベクターベースのオブジェクトは、他のスプライトがオブジェクトの上または下でアニメーション化されるたびにレンダリングされます。したがって、アニメーションのバックドロップまたは前景の役割を果たすオブジェクトも、これらのいずれかのカテゴリに属する必要があります。

cacheAsBitmaptrue に設定されている表示オブジェクトの場合、cacheAsBitmapMatrix を設定すると、GPU はマトリックス変換結果のビットマップを使用することになります。GPU は、オブジェクトが回転または拡大 / 縮小されている場合でも、ビットマップ表現を使用します。GPU では、CPU がベクターレンダリングされたオブジェクトを再描画するよりもはるかに高速にこのビットマップを合成してアニメーション化できます。

cacheAsBitmaptrue に設定するのみの場合、表示オブジェクト(およびその子)がキャッシュされるようになります。このような表示オブジェクトは、新しい領域が表示されるとき、または結合されたグラフィック全体が平行移動されるときに再描画されません。

表示オブジェクトの cacheAsBitmapMatrix プロパティを設定すると、アプリケーションは、非表示の場合でも表示オブジェクトの表現を作成できます。アプリケーションは、次のフレームの開始時に表示オブジェクトのキャッシュを作成します。その後、表示オブジェクトがステージに追加されると、直ちにその表示オブジェクトをレンダリングします。オブジェクトの回転または拡大 / 縮小も迅速に行うことができます。回転または拡大 / 縮小するオブジェクトの場合、cacheAsBitmap プロパティを設定するときは必ず cacheAsBitmapMatrix プロパティも設定してください。

また、アプリケーションは、ビットマップとしてキャッシュされたオブジェクトのアルファ変換を高速で実行することもできます。ただし、ハードウェアアクセラレーションによるアルファ変換では、0 ~ 1.0 の alpha 値のみがサポートされます。これは、0 ~ 256 の colorTransform.alphaMultiplier 設定に相当します。

テキストフィールドなどの頻繁に更新されるオブジェクトに対しては、cacheAsBitmap プロパティを true に設定しないでください。

頻繁に変更されるグラフィカルコンテンツのある表示オブジェクトは、一般的に GPU レンダリングには向いていません。これは特に、GPU の性能が低い初期のデバイスで当てはまります。グラフィックを GPU にアップロードするオーバーヘッドを考慮すると、CPU レンダリングの方が適切である可能性があります。

親との相対位置を維持して移動する子表示オブジェクトを含む表示オブジェクトを再構成してください。子表示オブジェクトが親の兄弟となるように変更してください。これによって、各オブジェクトが独自のビットマップ表現を持つようになります。また、各表示オブジェクトは、新しいグラフィックを GPU にアップロードする必要なしに、他のオブジェクトとの相対位置を維持して移動できるようになります。

cacheAsBitmap プロパティを、子表示オブジェクトがアニメーション化されない最大レベルで、true に設定します。つまり、可動パーツを含まない表示オブジェクトコンテナ用に設定します。子表示オブジェクトには設定しないでください。アニメーション化するその他の表示オブジェクトを含むスプライトには設定しません。

表示オブジェクトの z プロパティを設定すると、アプリケーションは常に、キャッシュされたビットマップ表現を使用します。また、表示オブジェクトの z プロパティが設定された後では、オブジェクトを回転または拡大 / 縮小する場合でも、キャッシュされたビットマップ表現を使用します。z プロパティが設定されている表示オブジェクトでは、cacheAsBitmapMatrix プロパティが使用されません。同じルールが、rotationXrotationYrotationZtransform.matrix3D プロパティなどの 3D 表示オブジェクトのプロパティを設定する際に適用されます。

ハードウェアアクセラレーションを使用するコンテンツを含む表示オブジェクトコンテナについては、scrollRect プロパティおよび mask プロパティを設定しないでください。これらのプロパティを設定すると、表示オブジェクトコンテナおよびその子オブジェクトのハードウェアアクセラレーションが無効になります。mask プロパティを設定する代わりに、マスクされている表示オブジェクトの上にマスク表示オブジェクトを重ね合わせてください。

ハードウェアアクセラレーションを利用できる表示オブジェクトのサイズには制限があります。古いデバイスでは、この制限は幅、高さともに 1024 ピクセル以下です。新しいデバイスでは、この制限は 2048 ピクセル以下です。GPU レンダリング診断ツールを使用して、デバイス上でのパフォーマンスをテストすることができます。

GPU はビットマップイメージを保存するために、iPhone RAM も使用します。少なくとも、ビットマップイメージに必要な容量と同じメモリ容量を使用します。

GPU は各ビットマップイメージの容量に対して 2 の累乗のメモリを割り当てます。例えば、GPU は 512 x 1024 や 8 x 32 のサイズのメモリを予約することができます。このため、9 x 15 ピクセルのイメージは、16 x 16 ピクセルのイメージに相当するメモリ容量を消費します。キャッシュされた表示オブジェクトでは、各辺で 2 の累乗に近い(ただし超過しない)サイズを使用するとよいでしょう。例えば、33 x 17 ピクセルの表示オブジェクトよりも、32 x 16 ピクセルの表示オブジェクトを使用する方が効率的です。

他のプラットフォーム(デスクトップなど)向けにサイズ設定されたアセットを縮小する目的で、サイズ変更された Stage を使用しないでください。代わりに、cacheAsBitmapMatrix プロパティを使用するか、アセットのサイズを変更してから iPhone にパブリッシュしてください。3D オブジェクトは表面イメージをキャッシュする際に cacheAsBitmapMatrix プロパティを無視します。このため、表示オブジェクトが 3D 表面にレンダリングされる場合は、サイズを変更してからパブリッシュする方が適切です。

ハードウェアアクセラレーションの利点と RAM の使用にはトレードオフがあります。メモリの空きがなくなると、iPhone OS は他の実行中のネイティブ iPhone アプリケーションにメモリを解放するよう通知します。これらのアプリケーションがこの通知を処理しメモリを解放するように動作するため、CPU サイクルにおいて自分のアプリケーションと競合する可能性があります。これにより、アプリケーションのパフォーマンスが一時的に低下する場合があります。古いデバイスでアプリケーションをテストするようにしてください。古いデバイスでは、実行中のプロセスが利用できるメモリの容量が大幅に少なくなります。

iPhone でアプリケーションをデバッグする際に、GPU レンダリング診断機能を有効にできます。この機能によって、アプリケーションによる GPU レンダリングの使用状況を確認できます。詳しくは、iPhone アプリケーションのデバッグの「GPU レンダリング診断を使用したデバッグ」を参照してください。

cacheAsBitmapMatrix プロパティの使用については、モバイル AIR アプリケーション固有の ActionScript API の「DisplayObject.cacheAsBitmapMatrix」を参照してください。