Compartir a través de


Aplicar una técnica (Direct3D 11)

Con las constantes, texturas y estado del sombreador declarados e inicializados, lo único que queda por hacer es establecer el estado de efecto en el dispositivo.

Establecer el estado no sombreador en el dispositivo

Un efecto no establece algún estado de canalización. Por ejemplo, al borrar un destino de representación, se prepara el destino de representación para los datos. Antes de establecer el estado de efecto en el dispositivo, este es un ejemplo de borrado de búferes de salida.

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

Establecer el estado de efecto en el dispositivo

Para establecer el estado del efecto, se aplica el estado de efecto dentro del bucle de representación. Esto se hace desde el exterior. Es decir, seleccione una técnica y, a continuación, establezca el estado de cada uno de los pases (según el resultado deseado).

    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 efecto no representa nada, simplemente establece el estado de efecto en el dispositivo. Se llama al código de representación después de que el estado del efecto actualice el estado del dispositivo. En este ejemplo, la llamada DrawIndexed realiza la representación.

Representación de un efecto (Direct3D 11)