方法:コマンド リストの記録
コマンド リストは、レンダリング コマンドを記録したリストです。コマンド リストは、レンダリング コマンドを記録しておき、それを後で再生するために使用します。コマンド リストは、レンダリング タスクを複数のスレッドに分割する場合に効果的です。
コマンド リストを記録するには
コマンド リストは、ディファード コンテキストから作成する必要があり、デバイス ステートとレンダリング アクションを収録します。特定のデバイスに対して、ID3D11Device::CreateDeferredContext を呼び出してディファード コンテキストを作成します。
HRESULT hr; ID3D11DeviceContext* pDeferredContext = NULL; hr = g_pd3dDevice->CreateDeferredContext(0, &pDeferredContext);
ディファード コンテキストを使用してレンダリングします。
float ClearColor[4] = { 0.0f, 0.125f, 0.3f, 1.0f }; pDeferredContext->ClearRenderTargetView( g_pRenderTargetView, ClearColor ); // Add additional rendering commands ...
このサンプルでは、レンダー ターゲットをクリアしていますが、別のレンダリング コマンドを追加することもできます。
ID3D11DeviceContext::FinishCommandList を呼び出し、初期化していない ID3D11CommandList インターフェイスにポインターを渡すことによって、コマンド リストを作成し、そこにコマンドを記録します。
ID3D11CommandList* pd3dCommandList = NULL; HRESULT hr; hr = pDeferredContext->FinishCommandList(FALSE, &pd3dCommandList);
メソッドが戻ると、すべてのレンダリング コマンドを収めたコマンド リストが作成され、インターフェイスがアプリケーションに返されます。
ブール パラメーターは、ディファード コンテキストでパイプライン ステートに対して実行する処理をランタイムに指示します。TRUE は、記録が完了したら、デバイス コンテキストのステートをコマンド リスト前の状態に戻すことを指定します。FALSE は、記録後にステートを変更しないことを指定します。つまり、デバイス コンテキストには、コマンド リストに保存されているステート変更が反映されます。
コマンド リストの再生例については、「方法:コマンド リストの再生」を参照してください。