Anwenden einer Technik (Direct3D 11)

Wenn die Konstanten, Texturen und Shaderstatus deklariert und initialisiert wurden, müssen Sie nur den Effektstatus auf dem Gerät festlegen.

Note

In diesem Artikel werden Direct3D 11-Schnittstellen und Zustandsobjekte verwendet. Informationen zur Direct3D 10-Implementierung finden Sie unter Anwenden einer Technik (Direct3D 10).

Festlegen des Nicht-Shaderstatus im Gerät

Ein Teil des Pipeline-Zustands wird nicht durch einen Effekt festgelegt. Zum Beispiel bereitet das Löschen eines Renderziels das Renderziel für Daten vor. Bevor Sie den Effektstatus auf dem Gerät festlegen, sehen Sie hier ein Beispiel zum Löschen von Ausgabepuffern.

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

Festlegen des Effektstatus im Gerät

Das Festlegen des Effektzustands erfolgt durch Anwenden des Effektzustands innerhalb der Renderschleife. Dies geschieht von außen nach innen. Das heißt, wählen Sie eine Technik aus und legen Sie dann für jeden der Durchgänge den Status fest (je nach gewünschtem Ergebnis).

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

Ein Effekt rendert nichts, er legt einfach den Effektzustand auf das Gerät fest. Der Renderingcode wird aufgerufen, nachdem der Effektstatus den Gerätestatus aktualisiert hat. In diesem Beispiel führt der DrawIndexed-Aufruf das Rendering aus.

Rendern eines Effekts (Direct3D 11)