Share via


イミディエイト レンダリングおよびディファード レンダリング

Direct3D 11 では、イミディエイトおよびディファードの 2 種類のレンダリングをサポートしています。どちらも ID3D11DeviceContext インターフェイスによって実装されます。

  • イミディエイト レンダリング
  • ディファード レンダリング

イミディエイト レンダリング

イミディエイト レンダリングでは、レンダリング API またはコマンドをデバイスから呼び出し、デバイスでは GPU で実行するコマンドをバッファーに格納して待機状態にします。イミディエイト コンテキストを使用して、レンダリング、パイプライン ステートの設定、およびコマンド リストの再生を実行します。

イミディエイト コンテキストの作成には、D3D11CreateDevice または D3D11CreateDeviceAndSwapChain を使用します。

ディファード レンダリング

ディファード レンダリングでは、コマンド バッファーにグラフィック コマンドを記録して、後で再生できるようにします。ディファード コンテキストを使用して、コマンド (レンダリングおよびステート設定) をコマンド リストに記録します。ディファード レンダリングは Direct3D 11 の新しい概念です。これは、1 つのスレッドでレンダリングしているときに、レンダリングに使用するコマンドを別のスレッドで記録する処理をサポートすることを目的としています。この並列マルチスレッドの方針によって、複雑なシーンを複数の同時タスクに細分化できます。

ディファード コンテキストの作成には、ID3D11Device::CreateDeferredContext を使用します。

Direct3D では、コマンド バッファーでコマンドを待機状態にしているときにレンダリングのオーバーヘッドが発生します。それに比べ、コマンド リストによる再生ははるかに効率的です。コマンド リストを使用するには、ディファード コンテキストを使用してレンダリング コマンドを記録し、イミディエイト コンテキストを使用してコマンドを再生します。

デバイスのコンテキストがイミディエイトであるかディファードであるかを判別するには、ID3D11DeviceContext::GetType を呼び出します。

関連項目

マルチスレッド