Multiple-Pass渲染

多通道呈现是应用程序多次遍历其场景图以生成要呈现到显示器的输出的过程。 多路渲染可以提高性能,因为它将复杂的场景分解为可以同时运行的任务。

若要执行多通道呈现,请为每个额外的传递创建延迟的上下文和命令列表。 当应用程序遍历场景图时,它会记录命令 (例如,将命令(如 Draw) )呈现到延迟的上下文中。 应用程序完成遍历后,它会在延迟的上下文中调用 FinishCommandList 方法。 最后,应用程序在即时上下文中调用 ExecuteCommandList 方法,以执行每个命令列表中的命令。

以下伪代码演示如何执行多通道呈现:

{
 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.
}

注意

即时上下文修改资源,该资源作为呈现目标视图绑定到即时上下文 (RTV) ;相比之下,每个延迟的上下文仅使用 资源,该资源绑定到延迟上下文作为着色器资源视图 (SRV) 。 有关即时和延迟上下文的详细信息,请参阅 即时和延迟呈现

 

呈现