Multiple-Pass Rendering
Das Mehrfachdurchlaufrendering ist ein Prozess, bei dem eine Anwendung ihren Szenengraphen mehrmals durchläuft, um eine Ausgabe zum Rendern auf der Anzeige zu erzeugen. Das Rendering mit mehreren Durchläufen verbessert die Leistung, da komplexe Szenen in Aufgaben unterteilt werden, die gleichzeitig ausgeführt werden können.
Um das Rendering mit mehreren Durchlauf durchzuführen, erstellen Sie einen verzögerten Kontext und eine Befehlsliste für jeden zusätzlichen Durchlauf. Während die Anwendung das Szenendiagramm durchläuft, zeichnet sie Befehle (z. B. Renderingbefehle wie Zeichnen)in einen verzögerten Kontext auf. Nachdem die Anwendung den Durchlauf abgeschlossen hat, ruft sie die FinishCommandList-Methode für den verzögerten Kontext auf. Schließlich ruft die Anwendung die ExecuteCommandList-Methode im unmittelbaren Kontext auf, um die Befehle in jeder Befehlsliste auszuführen.
Der folgende Pseudocode zeigt, wie Das Rendering mit mehreren Kennungen ausgeführt wird:
{
ImmCtx->SetRenderTarget( pRTViewOfResourceX );
DefCtx1->SetTexture( pSRView1OfResourceX );
DefCtx2->SetTexture( pSRView2OfResourceX );
for () // Traverse the scene graph.
{
ImmCtx->Draw(); // Pass 0: immediate context renders primitives into resource X.
// The following texturing by the deferred contexts occurs after the
// immediate context makes calls to ExecuteCommandList.
// Resource X is then comletely updated by the immediate context.
DefCtx1->Draw(); // Pass 1: deferred context 1 performs texturing from resource X.
DefCtx2->Draw(); // Pass 2: deferred context 2 performs texturing from resource X.
}
// Create command lists and record commands into them.
DefCtx1->FinishCommandList( &pCL1 );
DefCtx2->FinishCommandList( &pCL2 );
ImmCtx->ExecuteCommandList( pCL1 ); // Execute pass 1.
ImmCtx->ExecuteCommandList( pCL2 ); // Exeucte pass 2.
}
Hinweis
Der direkte Kontext ändert eine Ressource, die als Renderzielansicht (RTV) an den unmittelbaren Kontext gebunden ist. Im Gegensatz dazu verwendet jeder verzögerte Kontext einfach die Ressource, die an den verzögerten Kontext als Shaderressourcenansicht (SRV) gebunden ist. Weitere Informationen zu unmittelbaren und verzögerten Kontexten finden Sie unter Sofortiges und verzögertes Rendering.