Partager via


Appliquer une technique (Direct3D 10)

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 d’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 de suppression 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 d’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 est effectuée 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é).

    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 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.

Rendu d’un effet (Direct3D 10)