C
フレームバッファの要件
概要
Qt Quick Ultraliteアプリケーションのグラフィックコンテンツは、1つまたは複数のフレームバッファにコンテンツを描画することでディスプレイに表示できます。これらのフレームバッファは、表示されるコンテンツを更新する前にディスプレイコントローラによって読み取られます。
各フレームバッファは、アプリケーションレイヤーを表すピクセルの矩形グリッドです。ほとんどのプラットフォームでは、単一のフルスクリーンアプリケーションレイヤーが使用されます。レイヤーをサポートするプラットフォームでは、アプリケーションは、ディスプレイのサイズよりも小さい複数のレイヤーを含むことができます。
パーシャル・フレームバッファを使用することで、アプリケーションに必要なメモリを減らすことができます。詳しくは、Partial framebufferを参照してください。
色深度プロパティ
レイヤーの幅と高さとは別に、色の深さはフレームバッファのメモリ要件を決定します。Qt Quick Ultralite Coreはいくつかの色深度フォーマットをサポートしていますが、ほとんどのリファレンス・プラットフォームは16 bpp (bits per pixel)または32 bppの色深度を使用しています。他の色深度のサポートは、必要なすべてのDrawingEngine APIを実装したカスタムプラットフォームポートによって追加することもできます。
色深度が高いほど画質は向上しますが、その分パフォーマンスのオーバーヘッドが発生し、必要なメモリ容量も大きくなります。
アルファビットを含むピクセルフォーマットは、複数のレイヤーのコンテキストで有用です。これらのレイヤーの中には、他のレイヤーの上に合成しなければならない半透明のコンテンツが含まれている場合があります。
以下の表は、基準となる色深度と、それに対応するピクセルフォーマットの一覧です:
| 色深度 | ピクセル形式 | 色情報 |
|---|---|---|
| 32 bpp | ARGB32 | アルファ8ビット、赤8ビット、緑8ビット、青8ビット |
| RGB32 | パディング8ビット、赤8ビット、緑8ビット、青8ビット | |
| 24ビット | RGB888 | 赤8ビット、緑8ビット、青8ビット |
| BGR888 | 青8ビット、緑8ビット、赤8ビット | |
| 16 bpp | ARGB4444 | アルファ4ビット、赤4ビット、緑4ビット、青4ビット |
| RGB565 | 赤5ビット、緑6ビット、青5ビット | |
| 8ビット | RGB332 | 赤3ビット、緑3ビット、青2ビット |
フレームバッファリング戦略
Qt Quick Ultraliteはシングルとダブルのバッファリング戦略をサポートし、メモリ使用量よりも優れたパフォーマンスを選択できます。シングルバッファ戦略はより少ないメモリを使用しますが、パフォーマンスのオーバーヘッドを伴う場合があります。これらのフレームバッファリング戦略の可用性は、プラットフォームによって異なります。
ダブルバッファリングを使用する利点は、Qt Quick Ultralite が前のフレームをディスプレイコントローラで読み込んでいる間に次のフレームを準備できることです。これにより、レンダリングが次のディスプレイの更新に間に合うように完了し、一貫したフレームレートを提供します。さらに、独自のフレームバッファメモリを持たないディスプレイでも有用です。フレームバッファの読み込みと描画が同時に行われるとちらつきが発生し、ディスプレイ上に部分的にレンダリングされたコンテンツが表示されます。
ダブルバッファリングの欠点は、フレームバッファメモリが2倍必要になることです。
シングルバッファリングとダブルバッファリングの両方が部分更新をサポートし、Qt Quick Ultraliteは変更されたコンテンツのみを再描画します。ダブルバッファリングの場合、Qt Quick Ultralite は、現在のフレームと前のフレームの両方で、レイヤーの変更された領域を再描画します。
注: フレームバッファリング戦略を決定する前に、サポートされる機能の表を参照してください。
メモリ使用量
与えられたレイヤーのメモリ使用量は、以下の方法で計算できます:
Memory usage in bytes = width x height x bytes per pixel x number of buffers
以下の例は、解像度、色深度、フレームバッファリング戦略のいくつかの組み合わせに対するメモリ使用要件を示しています:
| レイヤーの解像度 (幅 x 高さ) | 色の深さ | フレームバッファリング戦略 | メモリ使用量 |
|---|---|---|---|
| 800x480 | 32 bpp | ダブルバッファリング | 3.07 MB |
| 800x480 | 32bpp | シングルバッファリング | 1.54 MB |
| 800x480 | 16bpp | ダブルバッファリング | 1.54 MB |
| 800x480 | 16bpp | シングルバッファリング | 768 KB |
| 480x272 | 32bpp | ダブルバッファリング | 1.04 MB |
| 480x272 | 32bpp | シングルバッファリング | 522 KB |
| 480x272 | 16bpp | ダブルバッファリング | 522 KB |
| 480x272 | 16bpp | シングルバッファリング | 261 KB |
| 480x272 | 8bpp | ダブルバッファリング | 261 KB |
| 480x272 | 8bpp | シングルバッファリング | 131 KB |
| 320x240 | 16bpp | シングルバッファリング | 150 KB |
| 320x48 (320x240/5)1 | 16bpp | 部分バッファリング | 30 KB |
| 320x24 (320x240/10)1 | 16bpp | 部分バッファリング | 15 KB |
注: 1部分フレームバッファの解像度は固定ではなく、1つの部分フレームバッファの最大ピクセル数を示す。詳細は部分フレームバッファを参照。
メモリ領域
マイクロコントローラユニットは、ビデオRAM(VRAM)、内蔵SRAM、外部SDRAMなど、個別の揮発性メモリ領域を持っていることがよくあります。フレームバッファは、VRAM(利用可能な場合)または最も高速な揮発性メモリ領域(Internal SRAM)のいずれかに配置する必要があります。しかし、内部 SRAM は通常非常に小さいため、外部 SDRAM を使用することも考慮すべき選択肢です。
重要な考慮事項
- リファレンス・プラットフォームでは、デフォルトでダブル・バッファリングを使用します。以下の変更により、これらのプラットフォームでシングル・バッファリングを使用することが可能です:
- Qul::Platform::SingleBuffering を返すようにframeBufferingType() 関数を更新する。
- フレームバッファを静的または動的に割り当てるプラットフォームコードを修正し、レイヤごとに単一のフレームバッファを割り当てるようにします。
- 2つのフレームバッファが利用可能であると仮定しているプラットフォーム・コードを修正する。
- レイヤーをサポートしていないプラットフォームで、異なる色深度や画面解像度のサポートを追加する。
- 新しいメモリ要件に適応するように、フレームバッファ割り当てコードを変更する。
- availableScreens() 関数から正しい画面解像度を返すように。
- beginFrame() 関数を更新し、正しい幅と高さのDrawingDevice インスタンスを返すようにしました。
リソースの管理とハードウェア・レイヤーを使用したパフォーマンスの向上も参照してください 。
特定の Qt ライセンスの下で利用可能です。
詳細をご覧ください。