ハードウェアコンポジションの使用¶
ハードウェアコンポジションは、ディスプレイコントローラーのレイヤーを使用して複数のウィンドウを合成する高性能な方法を提供します。Kanzi アプリケーションが、オーバーレイを持つクラスターのように、互いに重ねられた複数のアプリケーションで構成されている場合は、複数のウィンドウを合成します。ハードウェアコンポジションを使用すると、これらのアプリケーションを個別に開発および実行することができます。
ハードウェアコンポジションは、テクスチャのように使用できるコンポジションターゲットを作成します。正しい結果を得るためには、ハードウェアコンポジションはプリマルチプライドアルファを使用する必要があります。アルファプリマルチプリケーション を参照してください。
Screen ノードの Screen Clear Color プロパティが設定されると、Kanzi は色の値を直接画面出力に書き込みます。これは、Screen Clear Color の RGB 値がアルファ値でプリマルチプライ処理されている必要があることを意味します。
ハードウェアコンポジションがプリマルチプライドアルファを使用しない場合、Kanzi が出力する RGBA 値を非プリマルチプライドアルファに変換する必要があります。RGBA 値を非プリマルチプライドアルファに変換するには、次の手順を実行します。
Kanzi を設定して、期待される出力をテクスチャに描画します。
そのテクスチャをスクリーンに描画し、Blend Mode プロパティを Opaque に設定し、RGB 値をアルファ値で割った RGBA 値を出力するフラグメントシェーダーを使用します。
例:
Library > Materials and Textures > Material Types で DefaultBlit マテリアルタイプを複製し、新しいマテリアルタイプとそのマテリアルタイプを使用するマテリアルの名前を変更します。
ヒント
プロジェクトに DefaultBlit マテリアルタイプが含まれていない場合、Library > Materials and Textures Alt を押しながら右クリック Material Types で、DefaultBlit を選択します。
Library > Materials and Textures > Material Types で新しいマテリアルタイプの Fragment Shader をダブルクリックして Shader Source Editor で開き、フラグメントシェーダーファイルの内容を次のように置き換えます。
uniform sampler2D ContentTexture; varying mediump vec2 vTexCoord; void main() { precision lowp float; vec4 color = texture2D(ContentTexture, vTexCoord); if(color.a > 0.0) { color.rgb /= color.a; } gl_FragColor = color; }
Library > Materials and Textures > Material Types で編集したフラグメントシェーダーのマテリアルタイプを選択し、Properties で Sync with Uniforms をクリックし、Delete Property Type ダイアログで Yes をクリックして、マテリアルタイプが使用しなくなったバインディングとプロパティタイプを削除します。
Library > Materials and Textures > Brushes で Material Brush を作成し、Properties で Material プロパティを、作成したマテリアルタイプを使用するマテリアルに設定します。
Material プロパティの隣の Properties で
をクリックして、Material Brush が使用するマテリアルに移動し、そのマテリアルの Blend Mode プロパティが Opaque に設定されていることを確認してください。
Node Tree で RootPage ノードを選択し、Properties で追加して設定します。
作成したマテリアルブラシに Composition Brush を設定します。
Force Composition を有効にする