次の方法で共有


トリプル バッファリング

プライマリ サーフェスを保持できるバッファーの数を増やすと、表示のパフォーマンスが向上します。 反転可能な 3 つ以上のサーフェスを持つことが望まれます (一部のゲームでは 5 つ以上を使用)。 サーフェスが 2 つしか存在しない場合、ページ反転が発生すると、モニターの垂直方向の再トレースが完了するまで表示が遅れます。 遅延が必要な理由は、表示が完了する前にバック バッファーが書き込まれないようにするためです。 トリプル バッファリングでは、3 番目のサーフェスはバック バッファーであり、(次の図に示すように) すぐに描画できるため、常に書き込み可能です。 スプライト メモリを使用しないゲームでは、トリプル バッファリングを使用した 3D レンダリングは、ダブル バッファリングよりも 20~30% 高速です。

Diagram that shows the concept of triple buffering in display performance.

上の図の反転構造はティアリングの場合と同じですが、今だけ 3 つのバッファーが使用されています。 1 つのバッファーは (反転に関与しないので) ほとんど常に書き込み可能です。 ドライバーは、ディスプレイ スキャンが完了するのを待ってからバック バッファーを再度書き込む必要はありません。

次に、上の図のラベルを使用した、トリプル バッファリング システムでの反転と部分再描画 (blit) の簡単な説明を示します。 この例は、サーフェス画素メモリ 11 が表示されることから始まります。 これは、フロント バッファーが指す主なサーフェス (Windows ドライバー開発キット [DDK] に付属するサンプル コードの fpVidMem) です。 ある時点で、画素メモリ 22 でサーフェスを blt するのが望ましくなります。 fpVidMem は (22 ではなく) 11 から始まるサーフェスを指し、反転状態が false である (要求されたサーフェスで反転が発生していない) ため、blt を続行できます。 ドライバーはサーフェスをロックし、それに書き込んでからロックを解除します。 そのサーフェスを表示するには、反転が発生する必要があります。

DirectDraw フロント バッファー オブジェクトでは、fpVidMem (ディスプレイ メモリ ポインター) を変更して、22 のサーフェスをプライマリ サーフェスにできるようになりました。 反転が保留されていないため、表示ポインターが交換され (前の図の下半分を参照)、反転状態が TRUE に設定されます。 フロントバッファはサーフェス画素メモリ 22 を指し、バックバッファはサーフェス画素メモリ33を指し、3 番目のバッファ オブジェクトはサーフェス画素メモリ 11 (以前のプライマリ サーフェス) を指すようになりました。 二重バッファリングとは異なり、DirectDraw は現時点ではバック バッファーに自由に書き込みます。 つまり、DirectDraw は、反転が保留になっていないため、サーフェス画素メモリ 33 に書き込むことができます。 この循環反転プロセスは、DirectDraw を使用するアプリケーションにスムーズなアニメーションと高速なゲームプレイとビデオ再生を提供するために無限に続いています。