Appliquer une technique (Direct3D 11)

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 d’effet dans l’appareil.

Remarque

Cet article utilise des interfaces et des objets d’état Direct3D 11. Pour l’implémentation de Direct3D 10, consultez Appliquer une technique (Direct3D 10).

Définir l’état sans shader sur le périphérique

L’état du pipeline n’est pas défini par un effet. Par exemple, l’effacement d’une cible de rendu prépare la cible de rendu à recevoir des données. Avant de définir l’état d’effet dans l’appareil, voici un exemple de suppression 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 est effectuée en appliquant l’état d’effet dans la boucle de rendu. Cela se fait de l’extérieur vers l’intérieur. 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 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 du périphérique. Dans cet exemple, l’appel DrawIndexed effectue le rendu.

Rendu d’un effet (Direct3D 11)