3

私はちょうど約Hardware Accelerationを読んで見てthis video.ちょっと混乱しています。Androidのハードウェア層とハードウェアアクセラレータ

ハードウェアアクセラレーションは、描画操作がGPUによって実行され、デフォルトでAndroid 3.0以降で有効になっていることを意味します。 ハードウェアアクセラレーションが有効になっている場合、デフォルトでのViewのレイヤータイプはなぜですか?私はそれがLAYER_TYPE_HARDWAREであるべきだと思った。

ハードウェアレイヤーは、オフスクリーンバッファーにViewを保持して何かをしなければなりません。

したがって、定数View.LAYER_TYPE_NONE,View.LAYER_TYPE_HARDWARE、およびView.LAYER_TYPE_SOFTWAREは、ハードウェアアクセラレーションに関するものではありません。彼らはViewをオフスクリーンバッファに保持して、Viewの透明度と他のいくつかのプロパティが変わるたびに描画されるのを避けています。

答えて

2

View.LAYER_TYPE_HARDWAREは、ビューがハードウェアレイヤによってバックアップされることを意味します。テクスチャ、FBO ...これにより、ビューを再描画する必要なしに、カラーエフェクト、半透明、その他のGPUエフェクトを適用するのは簡単です。ビューにそのような効果があるときやアニメーション化される前に、ハードウェアレイヤーを有効にするとよいでしょう。ハードウェアレイヤーには多くのRAMが必要なので注意が必要です。ここ

ドキュメント:LAYER_TYPE_HARDWAREとそれからの引用:

ビューは、ハードウェア層を有していることを示します。ハードウェアレイヤは、ハードウェア固有のテクスチャ(一般にフレームバッファオブジェクトまたはOpenGLハードウェア上のFBO)によってサポートされ、ビューの階層に対してハードウェアアクセラレーションがオンになっている場合のみ、Androidのハードウェアレンダリングパイプラインを使用してビューをレンダリングします。ハードウェアアクセラレーションがオフになると、ハードウェアレイヤーはソフトウェアレイヤーと同じように動作します。

ハードウェアレイヤは、ビューとそのすべての子に特定のカラーフィルタおよび/またはブレンドモードおよび/または半透明を適用するのに便利です。

ハードウェアレイヤを使用して、複雑なビューツリーをテクスチャにキャッシュし、描画操作の複雑さを軽減することができます。たとえば、翻訳を使用して複雑なビューツリーをアニメートする場合、ハードウェアレイヤを使用してビューツリーを1回だけレンダリングすることができます。

ビューに回転変換を適用すると、ハードウェアレイヤーを使用してレンダリングの品質を向上させることもできます。また、3D変換をビューに適用するときに起こりうるクリッピングの問題を防ぐためにも使用できます。

EDIT:それはRAMを取らないように、あなたの質問に答えるためには、層は、デフォルトのNONEです。 HW加速描画とハードウェアレイヤは2つの異なるものです。 HW加速描画とは描画コマンド、 Canvasに描画するときは、CPUの代わりにGPUで行います。 HWレイヤーとは、描画結果をGPUのメモリに保存し、後で再び描画する代わりに結果(テクスチャなど)を後で表示できることを意味します。

EDIT 2:最初の編集は自分ですが、私は編集中にSOの外に署名されました:D

1

簡単な言葉では、それを取るように:ハードウェアアクセラレーションがAPIでデフォルトで利用できる機能です14+ただし、すべての2D描画操作ではサポートされていません。つまり、一部のカスタムビューではサポートされていない可能性がありますが、デフォルトで有効になっているため、カスタムビューレンダリングの問題が発生する可能性があります。問題の場合は、1つのリンク以下

チェック: http://postimg.org/image/6wzssbdbr/

種類を層に来て、Androidのすべてのバージョンでは、ビューは、いずれかのビューの描画キャッシュを使用することにより、オフスクリーンバッファにレンダリングする能力を持っていました、またはCanvas.saveLayer()を使用します。オフスクリーンバッファ、またはレイヤーにはいくつかの用途があります。複雑なビューをアニメートするときやコンポジションエフェクトを適用するときに、より良いパフォーマンスを得るためにそれらを使用できます。

LAYER_TYPE_NONE:ビューは正常にレンダリングされ、オフスクリーンバッファによってバッキングされません。これは、1から13までのすべてのAPIのデフォルトの動作です。

LAYER_TYPE_HARDWARE:アプリケーションがハードウェアアクセラレーションされている場合、ビューはハードウェアテクスチャにハードウェアでレンダリングされます。アプリケーションがハードウェアアクセラレーションされていない場合、このレイヤータイプはLAYER_TYPE_SOFTWAREと同じように動作します。これはすべてのAPI 14+のデフォルト動作です。

LAYER_TYPE_SOFTWARE:ビューはソフトウェアでビットマップにレンダリングされます。

任意のビューで必要な場合は、viewObject.setLayerType(View.LAYER_TYPE_SOFTWARE、null);を設定してビューを無効にできます。

希望です。

関連する問題