Bagikan melalui


Multiple-Pass Rendering

Penyajian multi-pass adalah proses di mana aplikasi melintasi grafik adegannya beberapa kali untuk menghasilkan output untuk dirender ke tampilan. Penyajian multi-pass meningkatkan performa karena memecah adegan kompleks menjadi tugas yang dapat berjalan secara bersamaan.

Untuk melakukan penyajian multi-pass, Anda membuat konteks dan daftar perintah yang ditangguhkan untuk setiap pass tambahan. Saat aplikasi melintasi grafik adegan, aplikasi merekam perintah (misalnya, perintah penyajian seperti Draw) ke dalam konteks yang ditangguhkan. Setelah aplikasi menyelesaikan traversal, aplikasi memanggil metode FinishCommandList pada konteks yang ditangguhkan. Terakhir, aplikasi memanggil metode ExecuteCommandList pada konteks langsung untuk menjalankan perintah di setiap daftar perintah.

Pseudocode berikut menunjukkan cara melakukan penyajian multi-pass:

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

Catatan

Konteks langsung memodifikasi sumber daya, yang terikat dengan konteks langsung sebagai tampilan target render (RTV); sebaliknya, setiap konteks yang ditangguhkan hanya menggunakan sumber daya, yang terikat pada konteks yang ditangguhkan sebagai tampilan sumber daya shader (SRV). Untuk informasi selengkapnya tentang konteks segera dan ditangguhkan, lihat Rendering Segera dan Ditangguhkan.

 

Merender