Отрисовка 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). Дополнительные сведения о непосредственных и отложенных контекстах см. в разделе Интерпретация и Отложенная отрисовка.

 

Отрисовка