Appliquer une technique (Direct3D 10)
Avec les constantes, les textures et l’état du nuanceur déclarés et initialisés, la seule chose à faire est de définir l’état de l’effet dans l’appareil.
Définir un état de non-nuanceur dans l’appareil
Un état de pipeline n’est pas défini par un effet. Par exemple, la suppression d’une cible de rendu prépare la cible de rendu pour les données. Avant de définir l’état de l’effet dans l’appareil, voici un exemple d’effacement des tampons de sortie.
// 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 );
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. Cette opération s’effectue à partir de l’extérieur de. Autrement dit, sélectionnez une technique, puis définissez l’État pour chacune des passes (selon le résultat souhaité).
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 );
}
}
Un effet n’affiche rien, il définit simplement l’état de l’effet sur l’appareil. Le code de rendu est appelé après que l’état de l’effet a mis à jour l’état de l’appareil. Dans cet exemple, l’appel DrawIndexed effectue le rendu.