手法の適用 (Direct3D 10)

定数、テクスチャ、シェーダーの状態を宣言して初期化すると、デバイスで効果の状態を設定するだけで済みます。

デバイスでシェーダー以外の状態を設定する

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

    // Clear the render target and depth stencil
    float ClearColor[4] = { 0.0f, 0.25f, 0.25f, 0.55f };
    ID3D10RenderTargetView* pRTV = DXUTGetD3D10RenderTargetView();
    pd3dDevice->ClearRenderTargetView( pRTV, ClearColor );
    ID3D10DepthStencilView* pDSV = DXUTGetD3D10DepthStencilView();
    pd3dDevice->ClearDepthStencilView( pDSV, D3D10_CLEAR_DEPTH, 1.0, 0 );

デバイスで効果の状態を設定する

効果の状態の設定は、レンダー ループ内で効果の状態を適用することによって行われます。 これは、 の外部から行われます。 つまり、手法を選択し、(目的の結果に応じて) 各パスの状態を設定します。

    D3D10_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 10)