Multiple-Pass отрисовка
Многопроходная отрисовка — это процесс, в котором приложение проходит по графу сцены несколько раз, чтобы создать выходные данные для отображения на экране. Многопроходная отрисовка улучшает производительность, так как разбивает сложные сцены на задачи, которые могут выполняться параллельно.
Чтобы выполнить отрисовку с несколькими проходами, необходимо создать отложенный контекст и командный список для каждого дополнительного прохода. Хотя приложение проходит по графу сцены, он записывает команды (например, команды отрисовки, такие как рисование) в отложенный контекст. После завершения обхода приложение вызывает метод 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). Дополнительные сведения о непосредственных и отложенных контекстах см. в разделе Оперативная и отложенная отрисовка.
Связанные разделы