Appliquer une technique (Direct3D 11)
Une fois les constantes, les textures et l’état du nuanceur déclarés et initialisés, il ne reste plus qu’à définir l’état de l’effet dans l’appareil.
Définir l’état non-nuanceur dans l’appareil
Un état de pipeline n’est pas défini par un effet. Par exemple, l’effacement d’une cible de rendu prépare la cible de rendu pour les données. Avant de définir l’état d’effet dans l’appareil, voici un exemple d’effacement des mémoires tampons de sortie.
// 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 );
Définir l’état de l’effet dans l’appareil
La définition de l’état d’effet s’effectue en appliquant l’état d’effet dans la boucle de rendu. Cela se fait de l’extérieur dans. Autrement dit, sélectionnez une technique, puis définissez l’état de chacune des passes (en fonction du résultat souhaité).
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 );
}
}
Un effet ne rend rien, il définit simplement l’état de l’effet sur l’appareil. Le code de rendu est appelé après que l’état d’effet met à jour l’état de l’appareil. Dans cet exemple, l’appel DrawIndexed effectue le rendu.
Rubriques connexes