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.

Nota:

En este artículo se usan interfaces y objetos de estado de Direct3D 11. Para la implementación de Direct3D 10, consulte Aplicar una técnica (Direct3D 10).

Establecer el estado de no sombreador en el dispositivo

Parte del estado de la canalización no está establecida por un efecto. Por ejemplo, al limpiar un objetivo de renderizado, se prepara el objetivo de renderizado para recibir 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 hacia el interior. Es decir, seleccione una técnica y, a continuación, establezca el estado de cada uno de los pasos (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 del 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)