Freigeben über


Multiple-Pass Rendering

Das Multiple-Pass-Rendering ist ein Prozess, bei dem eine Anwendung mehrmals sein Szenendiagramm durchläuft, um eine Ausgabe zum Rendern in der Anzeige zu erzeugen. Das Multiple-Pass-Rendering verbessert die Leistung, da komplexe Szenen in Aufgaben aufgeteilt werden, die gleichzeitig ausgeführt werden können.

Zum Ausführen eines Multiple-Pass-Renderings erstellen Sie für jeden zusätzlichen Pass eine verzögerte Kontext- und Befehlsliste. Während die Anwendung das Szenendiagramm durchläuft, zeichnet sie Befehle (z. B. Renderbefehle wie Zeichnen) in einem verzögerten Kontext auf. Nachdem die Anwendung die Traversal abgeschlossen hat, ruft sie die FinishCommandList-Methode im 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 Rendern von mehreren Übergeben 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 sofortige Kontext ändert eine Ressource, die an den unmittelbaren Kontext als Renderzielansicht (RTV) 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 "Direkt- und Verzögertes Rendering".

 

Darstellung