Stosowanie techniki (Direct3D 11)

Przy zadeklarowaniu i zainicjowaniu stałych, tekstur i stanu cieniowania jedyną rzeczą, którą należy wykonać, jest ustawienie stanu efektu na urządzeniu.

Note

W tym artykule użyto interfejsów i obiektów stanu Direct3D 11. Aby zapoznać się z implementacją direct3D 10, zobacz Stosowanie techniki (Direct3D 10).

Ustawianie stanu niezwiązanego ze shaderem w urządzeniu

Pewien stan potoku nie jest ustawiany przez efekt. Na przykład wyczyszczenie elementu docelowego renderowania przygotowuje element docelowy renderowania dla danych. Przed ustawieniem stanu efektu na urządzeniu poniżej przedstawiono przykład czyszczenia buforów wyjściowych.

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

Ustawianie stanu efektu na urządzeniu

Ustawianie stanu efektu odbywa się przez zastosowanie stanu efektu w pętli renderowania. Odbywa się to z zewnątrz do wewnątrz. Oznacza to, że wybierz technikę, a następnie ustaw stan dla każdego z przebiegów (w zależności od żądanego wyniku).

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

Efekt niczego nie renderuje, jedynie ustawia stan efektu w urządzeniu. Kod renderujący jest wywoływany po tym, jak stan efektu zaktualizuje stan urządzenia. W tym przykładzie wywołanie DrawIndexed odpowiada za renderowanie.

Renderowanie efektu (Direct3D 11)