Compartilhar via


Aplicar uma técnica (Direct3D 10)

Com as constantes, texturas e o estado do sombreador declarados e inicializados, a única coisa a fazer é definir o estado de efeito no dispositivo.

Definir o estado não sombreador no dispositivo

Algum estado de pipeline não é definido por um efeito. Por exemplo, limpar um destino de renderização prepara o destino de renderização para dados. Antes de definir o estado de efeito no dispositivo, aqui está um exemplo de limpeza de buffers de saída.

    // 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 );

Definir o estado do efeito no dispositivo

A definição do estado do efeito é feita aplicando o estado de efeito dentro do loop de renderização. Isso é feito de fora para dentro. Ou seja, selecione uma técnica e defina o estado para cada uma das passagens (dependendo do resultado desejado).

    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 );
        }
    }

Um efeito não renderiza nada, ele simplesmente define o estado de efeito para o dispositivo. O código de renderização é chamado depois que o estado do efeito atualiza o estado do dispositivo. Neste exemplo, a chamada DrawIndexed executa a renderização.

Renderizando um efeito (Direct3D 10)