スワップ チェーンSwap chains

スワップ チェーンは、ユーザーにフレームを表示するために使用されるバッファーのコレクションです。A swap chain is a collection of buffers that are used for displaying frames to the user. アプリケーションが表示する新しいフレームを提供するたびに、スワップ チェーンの最初のバッファーが、表示されているバッファーの場所を取得します。Each time an application presents a new frame for display, the first buffer in the swap chain takes the place of the displayed buffer. このプロセスは、スワップまたはフリップと呼ばれます。This process is called swapping or flipping.

グラフィックス アダプターは、フロント バッファーと呼ばれる、モニター上に表示されるイメージを表すサーフェスへのポインターを保持します。A graphics adapter holds a pointer to a surface that represents the image being displayed on the monitor, called a front buffer. モニターが更新されると、グラフィック カードはフロント バッファーのコンテンツを表示先のモニターに送信します。As the monitor is refreshed, the graphics card sends the contents of the front buffer to the monitor to be displayed. ただし、リアルタイムのグラフィックをレンダリングする場合、"テアリング" の問題が発生します。However, this leads to a "tearing" problem when rendering real-time graphics. この問題の核心は、コンピューターの他のコンポーネントと比べてモニターのリフレッシュ レートが極めて遅いということです。The heart of the problem is that monitor refresh rates are very slow in comparison to the rest of the computer. 一般的なリフレッシュ レートは、60 Hz (秒当たり 60 回) から 100 Hz です。Common refresh rates range from 60 Hz (60 times per second) to 100 Hz.

モニターのリフレッシュの最中に、アプリケーションがフロント バッファーを更新すると、表示されるイメージは半分に分かれ、ディスプレイの上半分には以前のイメージが、下半分には新しいイメージが表示されます。If your application is updating the front buffer while the monitor is in the middle of a refresh, the image that is displayed will be cut in half with the upper half of the display containing the old image and the lower half containing the new image. この問題はテアリングと呼ばれます。This problem is referred to as tearing.

分裂の回避Avoiding tearing

Direct3D にはテアリングを回避するための方法が 2 種類実装されています。Direct3D implements two options to avoid tearing:

  • 垂直帰線 (垂直同期) 操作でモニターの更新のみを許可する方法。An option to only allow updates of the monitor on the vertical retrace (or vertical sync) operation. 通常、モニターは光ピンを水平に移動することでイメージをリフレッシュします。モニターの左上からジグザグに移動して、右下で終了します。A monitor typically refreshes its image by moving a light pin horizontally, zigzagging from the top left of the monitor and ending at the bottom right. 光ピンが一番下に到達すると、光ピンを左上に戻して、処理が再び開始されるように、光ピンを再補正します。When the light pin reaches the bottom, the monitor recalibrates the light pin by moving it back to the upper left so that the process can start again.

    この再補正は垂直同期と呼ばれます。垂直同期中は、モニターは何も描画しません。したがって、モニターが描画を再開するまで、フロント バッファーが更新されても更新は表示されません。This recalibration is called a vertical sync. During a vertical sync, the monitor is not drawing anything, so any update to the front buffer will not be seen until the monitor starts to draw again. 垂直同期は比較的処理に時間がかかりますが、待機中に複雑なシーンをレンダリングできるほどではありません。The vertical sync is relatively slow; however, not slow enough to render a complex scene while waiting. テアリングを回避しつつ、複雑なシーンをレンダリングするには、バック バッファーリングと呼ばれる処理が必要です。What is needed to avoid tearing and be able to render complex scenes is a process called back buffering.

  • バック バッファーリングと呼ばれる手法を使用する方法。An option to use a technique called back buffering. バック バッファーリングとは、バック バッファーと呼ばれるオフスクリーン サーフェスにシーンを描画する処理です。Back buffering is the process of drawing a scene to an off-screen surface, called a back buffer. フロント バッファー以外のサーフェスは、モニターに直接表示されることがないため、オフスクリーン サーフェスと呼ばれます。Any surface other than the front buffer is called an off-screen surface because it is never directly viewed by the monitor.

    バック バッファーを使用することで、アプリケーションはシステムがアイドル状態 (つまり、ウィンドウ メッセージが待機していない) にあるときに常にシーンをモニターのリフレッシュ レートを考慮することなく自由にレンダリングできます。By using a back buffer, an application has the freedom to render a scene whenever the system is idle (that is, no windows messages are waiting) without having to consider the monitor's refresh rate. バック バッファーリングでは、バック バッファーをフロント バッファーに移動する方法とタイミングが複雑になります。Back buffering brings in an additional complication of how and when to move the back buffer to the front buffer.

画面の回転Surface flipping

バック バッファーをフロント バッファーに移動する処理は、サーフェスの反転と呼ばれます。The process of moving the back buffer to the front buffer is called surface flipping. グラフィック カードでは、単純にサーフェスへのポインターを使用してフロント バッファーを表すため、ポインターを変更するだけでバック バッファーをフロント バッファーに設定できます。Because the graphics card simply uses a pointer to a surface to represent the front buffer, a simple pointer change is all that is needed to set the back buffer to the front buffer. アプリケーションが Direct3D にバック バッファーをフロント バッファーに表示するように要求すると、Direct3D は単純に 2 つのサーフェス ポインターを "反転" します。When an application asks Direct3D to present the back buffer to the front buffer, Direct3D simply "flips" the two surface pointers. これによって、バック バッファーは新しいフロント バッファーになり、古いフロント バッファーは新しいバック バッファーになります。The result is that the back buffer is now the new front buffer, and the old front buffer is the new back buffer.

サーフェス フリップはアプリケーションがバック バッファーを表示するように Direct3D デバイスに要求するたびに呼び出されます。ただし、垂直同期が発生するまで要求をキューに入れるように Direct3D を設定できます。A surface flip is invoked whenever an application asks the Direct3D device to present the back buffer; however, Direct3D can be set up to queue the requests until a vertical sync occurs. このオプションは、Direct3D デバイスの表示間隔と呼ばれます。This option is referred to as the Direct3D device's presentation interval. アプリケーションが Direct3D でサーフェスの反転を処理する方法を指定している方法によっては、新しいバック バッファーのデータは、再利用できないことがあります。The data in the new back buffer may not be reusable, depending on how an application specifies how Direct3D should handle surface flipping.

サーフェスの反転は、マルチメディア、アニメーション、ゲーム ソフトウェアでは重要です。これはパラパラ漫画を作成する方法と同じです。Surface flipping is key in multimedia, animation, and game software; it is equivalent to the way you can do animation with a pad of paper. 作成者は図を 1 ページずつ変えて行き、紙をすばやくめくると絵が動いているように見えます。On each page, the artist changes the figures slightly, so that when you flip rapidly between sheets, the drawing appears animated.

関連トピックRelated topics

デバイスDevices