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(셰이더 리소스 뷰)로 사용합니다. 즉시 및 지연된 컨텍스트에 대한 자세한 내용은 직접 실행 및 지연된 렌더링을 참조하세요.
관련 항목