C
フレームバッファの要件
概要
Qt Quick Ultralite アプリケーションのグラフィカルなコンテンツは、1つまたは複数のフレームバッファに描画することでディスプレイ上に表示できます。これらのフレームバッファは、表示内容を更新する前にディスプレイコントローラによって読み込まれます。
各フレームバッファは、アプリケーションレイヤーを表すピクセルの矩形グリッドです。ほとんどのプラットフォームでは、単一のフルスクリーンアプリケーションレイヤーが使用されます。レイヤーをサポートするプラットフォームでは、アプリケーションはディスプレイのサイズよりも小さい複数のレイヤーを含む場合があります。
部分フレームバッファ戦略を使用することで、アプリケーションのメモリ要件を低減できます。詳細については、「部分フレームバッファ」を参照してください。
色深度プロパティ
レイヤーの幅や高さに加え、その色深度によってフレームバッファのメモリ要件が決まります。Qt Quick Ultralite Coreはいくつかの色深度フォーマットをサポートしていますが、ほとんどのリファレンスプラットフォームでは16 bpp(ビット/ピクセル)または32 bppの色深度が使用されています。 必要なDrawingEngine APIをすべて実装したカスタムプラットフォームポートにより、他の色深度のサポートを追加することも可能です。
色深度が高いほど画質は向上しますが、パフォーマンスのオーバーヘッドが生じ、必要なメモリ容量も増えます。
アルファビットを含むピクセルフォーマットは、複数のレイヤーを扱う場合に役立ちます。これらのレイヤーの中には、他のレイヤーの上に合成する必要がある半透明のコンテンツが含まれている場合があります。
以下の表に、標準的な色深度とそれに対応するピクセル形式を示します。
| 色深度 | ピクセル形式 | 色情報 |
|---|---|---|
| 32 bpp | ARGB32 | アルファ8ビット、赤8ビット、緑8ビット、青8ビット |
| RGB32 | パディング 8 ビット、赤 8 ビット、緑 8 ビット、青 8 ビット | |
| 24 bpp | RGB888 | 赤 8 ビット、緑 8 ビット、青 8 ビット |
| BGR888 | 青 8 ビット、緑 8 ビット、赤 8 ビット | |
| 16 bpp | ARGB4444 | アルファ4ビット、赤4ビット、緑4ビット、青4ビット |
| RGB565 | 赤 5 ビット、緑 6 ビット、青 5 ビット | |
| 8 bpp | 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以下の例は、解像度、色深度、およびフレームバッファリング戦略のいくつかの組み合わせにおけるメモリ使用量の要件を示しています:
| レイヤーの解像度(幅 × 高さ) | 色深度 | フレームバッファリング方式 | メモリ使用量 |
|---|---|---|---|
| 800×480 | 32 bpp | ダブルバッファリング | 3.07 MB |
| 800×480 | 32 bpp | シングルバッファリング | 1.54 MB |
| 800×480 | 16 bpp | ダブルバッファリング | 1.54 MB |
| 800×480 | 16 bpp | シングルバッファリング | 768 KB |
| 480x272 | 32 bpp | ダブルバッファリング | 1.04 MB |
| 480x272 | 32 bpp | シングルバッファリング | 522 KB |
| 480x272 | 16 bpp | ダブルバッファリング | 522 KB |
| 480×272 | 16 bpp | シングルバッファリング | 261 KB |
| 480x272 | 8 bpp | ダブルバッファリング | 261 KB |
| 480x272 | 8 bpp | シングルバッファリング | 131 KB |
| 320x240 | 16 bpp | シングルバッファリング | 150 KB |
| 320x48 (320x240/5)1 | 16 bpp | 部分バッファリング | 30 KB |
| 320x24 (320x240/10)1 | 16 bpp | 部分バッファリング | 15 KB |
注: 1部分フレームバッファの解像度は固定ではなく、単一の部分フレームバッファの最大ピクセル数を示しています。詳細については、「部分フレームバッファ」を参照してください。
メモリ領域
マイクロコントローラ・ユニットには、多くの場合、ビデオ RAM (VRAM)、内部 SRAM、外部 SDRAM など、個別の揮発性メモリ領域があります。 フレームバッファは、VRAM(利用可能な場合)または最速の揮発性メモリ領域(内部 SRAM)のいずれかに配置する必要があります。ただし、内部 SRAM は通常非常に容量が小さいため、外部 SDRAM を使用することも検討すべき選択肢の一つです。
重要な考慮事項
- リファレンスプラットフォームの適応版では、デフォルトでダブルバッファリングが使用されています。以下の変更を行うことで、これらのプラットフォームでシングルバッファリングを使用することが可能です:
- frameBufferingType() 関数を更新し、Qul::Platform::SingleBuffering を返すようにします。
- フレームバッファを静的または動的に割り当てるプラットフォームコードを修正し、レイヤーごとに1つのフレームバッファを割り当てるようにします。
- 2つのフレームバッファが利用可能であることを前提としているプラットフォームコードをすべて修正します。
- レイヤーをサポートしていないプラットフォームでは、異なる色深度や画面解像度への対応を追加します。
- 新しいメモリ要件に対応するように、フレームバッファの割り当てコードを変更してください。
- availableScreens() 関数から正しい画面解像度を返すようにします。
- beginFrame() 関数を更新し、正しい幅と高さを備えた `DrawingDevice ` インスタンスを返すようにしてください。
「リソースの管理」および「ハードウェアレイヤーを使用したパフォーマンスの向上」も参照してください 。
特定のQtライセンスの下で利用可能です。
詳細はこちら。