テクニックの適用 (Direct3D 11)

定数、テクスチャー、およびシェーダー ステートが宣言および初期化されている場合、後はデバイスでエフェクト ステートを設定するだけです。

デバイスでのシェーダー以外のステートの設定

一部のパイプライン ステートは、エフェクトによって設定されません。たとえば、レンダー ターゲットのクリアでは、データのレンダー ターゲットが準備されます。デバイスでエフェクト ステートを設定する前に、出力バッファーのクリアの例を示します。

     // Clear the render target and depth stencil     float ClearColor[4] = { 0.0f, 0.25f, 0.25f, 0.55f };     ID3D11RenderTargetView* pRTV = DXUTGetD3D11RenderTargetView();     pD3DDevice->ClearRenderTargetView( pRTV, ClearColor );     ID3D11DepthStencilView* pDSV = DXUTGetD3D11DepthStencilView();     pD3DDevice->ClearDepthStencilView( pDSV, D3D11_CLEAR_DEPTH, 1.0, 0 ); 

デバイスでのエフェクト ステートの設定

エフェクト ステートの設定は、レンダリング ループ内にエフェクト ステートを適用することによって実行します。これは、外部から実行します。つまり、テクニックを選択してから、(必要な結果に応じて) パスごとにステートを設定します。

     D3D11_TECHNIQUE_DESC techDesc;     pRenderTechnique->GetDesc( &techDesc );     for( UINT p = 0; p < techDesc.Passes; ++p )     {         }             ....             pRenderTechnique->GetPassByIndex( p )->Apply(0);             pd3dDevice->DrawIndexed( (UINT)pSubset->IndexCount, 0,                    (UINT)pSubset->VertexStart );         }     } 

エフェクトによって何かがレンダリングされることはありません。エフェクトによってデバイスにエフェクト ステートが設定されるだけです。レンダリング コードは、エフェクト ステートによってデバイス ステートが更新された後に呼び出されます。この例では、DrawIndexed の呼び出しによってレンダリングが実行されます。

関連項目

エフェクトのレンダリング (Direct3D 11)