このページでは

C

ハードウェアレイヤーを使用した性能向上

概要

Qt Quick Ultraliteは、デフォルトで、ディスプレイに表示されるすべてのピクセルに単一のハードウェアレイヤーを使用します。これは、ハードウェアアクセラレイヤーサポートを持つプラットフォームでは最適な解決策ではないかもしれません。そのようなプラットフォームでパフォーマンスを向上させるには、複数のレイヤーを使用し、最終画像を生成するためにハードウェアにそれらをブレンドさせることができます。

複数のレイヤーは、CPUまたはGPUメモリ内のフレームバッファにレンダリングされた動的なUIコンテンツを表現するために使用することも、変化しない静的な画像データを表現するために使用することもできます。ハードウェアレイヤー合成ユニットは、複数の独立したレイヤーからディスプレイに送られる最終画像を合成します。

ハードウェアレイヤーは、Qt Quick Ultraliteアプリケーションによって使用され、メモリフットプリントとCPUまたはGPUの使用率を削減したり、高価なレンダリング操作によるフレームスキップを防止したりすることができます。UIのあまり頻繁に変化しない部分を独立したレイヤーに保つことで、メインのアニメーションUIコンテンツをより迅速にレンダリングすることができます。

メモリフットプリントの削減

画面全体を覆う1つの背景画像で動的に更新されるUIを表示するために、2つのフルスクリーン・フレームバッファを使用する代わりに、画像レイヤーを使用することができます:

Screen {
    width: 800
    height: 480

    ImageLayer {
        anchors.fill: parent
        source: "background.png"
    }

    ItemLayer {
        anchors.fill: parent
        depth: ItemLayer.Bpp32Alpha

        // UI items here
    }
}

背景画像がフラッシュに存在する場合、追加のフレームバッファ・メモリは必要なく、CPUやGPUのメモリ使用量を減らすことができます。

複数のアイテムレイヤーを使用することで、ビット深度を下げたり、単一のアイテムレイヤーではなく、より小さなアイテムレイヤーを使用したりすることで、メモリ使用量を減らすこともできます。後者は、コンテンツのないUIに大きなギャップがある場合に使用されます。

レンダリング時間の短縮

透視変換やエフェクトが適用された画像など、レンダリングに時間がかかるグラフィックもあります。可能であれば、これらを別のアイテムレイヤーに配置し、ItemLayer::refreshInterval プロパティを2 に設定します。これにより、レイヤーのコンテンツは、2 フレームごとに再描画されるだけとなり、CPU と GPU の使用率が節約され、メインの UI がスムーズにアニメーションしないリスクが減ります。

Screen {
    width: 800
    height: 480

    ItemLayer {
        anchors.fill: parent

        // Main UI items here
    }

    ItemLayer {
        anchors.centerIn: parent
        width: 400
        height: 240

        refreshInterval: 2

        // Expensive to render graphics here
    }
}

スプライト・レイヤーの使用

ハードウェア・レイヤー・ユニットは通常、比較的少量のルート・レイヤー、たとえば 4 つか 5 つしかサポートしません。スプライト・ハードウェア・レイヤーがサポートされていれば、スプライト・レイヤーを複数の小さなアイテム・レイヤーやイメージ・レイヤーのコンテナとして使用できます。

ただし、スプライトレイヤーを使用するにはいくつかの制限があり、SpriteLayer のドキュメントに記載されています。また、すべてのサブレイヤーは同じ色の深さである必要があります。

こ の例は、 アプ リ ケーシ ョ ンの UI を複数の独立 し た レ イ ヤーで構成す る 方法を示 し ます。

背景レイヤー

背景レイヤーはImageLayer 、UIの下部に静的な不変コンテンツを含むことができます。

動的コンテンツ・レイヤー

動的コンテンツ・レイヤーは、ItemLayer 、UIの主なアニメーション部分を含み、フレームごとに変化します。これらの部分のみを1つのレイヤーに保持することで、アプリケーションの常時または頻繁にアニメーションする部分を再描画する際の描画コールのオーバーヘッドを減らすことができます。

静的コンテンツレイヤー

静的コンテンツレイヤーは、1つ以上のItemLayerImageLayer インスタンスで構成され、場合によっては1つ以上のSpriteLayer インスタンスの中にあります。

これらのレイヤーには、ほとんどの時間静的なUIの部分が含まれます。頻繁にアニメーションしないコンテンツもここに置くことができ、フレームごとに再描画する必要がないため、頻繁にアニメーションするコンテンツや常にアニメーションするコンテンツのパフォーマンスを下げることができます。ItemLayer::refreshInterval プロパティは 2 から 4 の間で設定でき、アニメーションが発生したときに、表示が更新されるたびに再描画されるのではなく、軽減されたレートで再描画されます。

最終的な合成結果

最終的な合成結果はこのように表示されます。

プラットフォーム別ガイド

Infineon TRAVEO T2Gボードについては、 Infineon TRAVEO T2GボードのレイヤーとVRAM最適化ガイドも参照してください。

フレームバッファの要件も参照してください


詳細はこちら。