次の方法で共有


スワップ チェーンとは(Direct3D 9)

Graphics Adapter は、フロント バッファーと呼ばれる、モニター上に表示されるイメージを表すサーフェスへのポインターを保持します。モニターが更新されると、グラフィック カードはフロント バッファーのコンテンツを表示先のモニターに送信します。しかしながら、リアルタイムのグラフィックをレンダリングする場合には、これが問題となります。大きな問題は、コンピューターの他のパフォーマンスと比べてモニターのリフレッシュ レートが極めて遅いということです。一般的なリフレッシュレートは、60 Hz (秒当たり 60 回) から 100 Hz です。モニターのリフレッシュの最中に、アプリケーションがフロント バッファーを更新すると、古いイメージを含むディスプレイの上半分と、新しいイメージを含む下半分によって、表示されているイメージは途中で途切れてしまいます。この問題はテアリングと呼ばれます。

Direct3D にはこのテアリングを回避する 次の 2 つのオプションが実装されています。

  • 垂直帰線 (垂直同期) 処理でモニターの更新のみを許可するオプション。通常、モニターは光ピンを水平に移動することでそのイメージをリフレッシュし、モニターの左上からジグザグに移動して、右下で終了します。光ピンが一番下に到達すると、モニターは、処理が再び開始されるように光ピンを左上に移動して戻すことで光ピンを再計算します。この再計算は垂直同期と呼ばれます。垂直同期中には、モニターは何も描画しないため、モニターが描画を再開するまではフロント バッファーへの更新は表示されません。垂直同期は比較的遅いですが、待機中に複雑なシーンをレンダリングできるほど遅くはありません。テアリングを回避し、複雑なシーンをレンダリングできるために必要なこととは、バック バッファーリングと呼ばれる処理です。
  • バック バッファーリングと呼ばれるテクニックを使用するオプション。バック バッファーリングとは、バック バッファーと呼ばれるオフスクリーン サーフェスにシーンを描画する処理です。フロント バッファー以外のサーフェスは、モニターに直接表示されることがないため、オフスクリーン サーフェスと呼ばれます。バック バッファーを使用することで、アプリケーションはシステムがアイドル状態 (つまり、ウィンドウ メッセージが待機していない) にあるときに常にシーンをモニターのリフレッシュ レートを考慮することなく自由にレンダリングできます。バック バッファーリングでは、バック バッファーをフロント バッファーに移動する方法とタイミングが複雑になります。

バック バッファーをフロント バッファーに移動する処理は、サーフェスの反転と呼ばれます。グラフィック カードでは、単純にサーフェスへのポインターを使用してフロント バッファーを表すため、単純にポインターを変更するだけでバック バッファーはフロント バッファーに設定できます。アプリケーションが Direct3D にバック バッファーからフロント バッファーを表示するように要求すると、Direct3D は単純に 2 つのサーフェス ポインターを "反転" します。これによって、バック バッファーは新しいフロント バッファーになり、古いフロント バッファーは新しいバック バッファーになります。サーフェス フリップはアプリケーションがバック バッファーを表示するように Direct3D デバイスに要求するたびに呼び出されます。ただし、垂直同期が発生するまで要求をキューに入れるように Direct3D を設定できます。このオプションは、Direct3D デバイスの表示間隔と呼ばれます。アプリケーションが Direct3D でサーフェスの反転を処理する方法を指定している方法によっては、新しいバック バッファーのデータは、再利用できないことがあります。サーフェスの反転は、マルチメディア、アニメーション、ゲーム ソフトウェアでは重要です。これは紙でアニメーションを作成する方法に似ています。アーティストはページごとに図形を少しずつ変えていきます。これによって、紙を素早くめくると絵がアニメーションのように見えます。

関連項目

サーフェスの反転 (Direct3D 9)