テクニックの適用 (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 の呼び出しによってレンダリングが実行されます。