Rendering Segera dan Ditangguhkan

Direct3D 11 mendukung dua jenis penyajian: segera dan ditangguhkan. Keduanya diimplementasikan dengan menggunakan antarmuka ID3D11DeviceContext .

Penyajian Langsung

Penyajian langsung mengacu pada panggilan API penyajian atau perintah dari perangkat, yang mengantre perintah dalam buffer untuk eksekusi pada GPU. Gunakan konteks langsung untuk merender, mengatur status alur, dan memutar kembali daftar perintah.

Buat konteks langsung menggunakan D3D11CreateDevice atau D3D11CreateDeviceAndSwapChain.

Penyajian Yang Ditangguhkan

Perintah grafik rekaman rendering yang ditangguhkan dalam buffer perintah sehingga dapat diputar kembali di lain waktu. Gunakan konteks yang ditangguhkan untuk merekam perintah (penyajian serta pengaturan status) ke daftar perintah. Rendering yang ditangguhkan adalah konsep baru dalam Direct3D 11; rendering yang ditangguhkan dirancang untuk mendukung penyajian pada satu utas sambil merekam perintah untuk penyajian pada utas tambahan. Strategi multithread paralel ini memungkinkan Anda memecah adegan kompleks menjadi tugas bersamaan. Untuk informasi selengkapnya tentang merender adegan kompleks, lihat Penyajian Multi-Pass.

Buat konteks yang ditangguhkan menggunakan ID3D11Device::CreateDeferredContext.

Direct3D menghasilkan overhead penyajian saat mengantre perintah di buffer perintah. Sebaliknya, daftar perintah berjalan jauh lebih efisien selama pemutaran. Untuk menggunakan daftar perintah, rendering rekaman perintah dengan konteks yang ditangguhkan dan memutarnya kembali menggunakan konteks langsung.

Anda hanya dapat menghasilkan satu daftar perintah dengan satu utas. Namun, Anda dapat membuat dan menggunakan beberapa konteks yang ditangguhkan secara bersamaan, masing-masing dalam utas terpisah. Kemudian, Anda dapat menggunakan beberapa konteks yang ditangguhkan tersebut untuk membuat beberapa daftar perintah secara bersamaan.

Anda tidak dapat memutar kembali dua atau beberapa daftar perintah secara bersamaan pada konteks langsung.

Untuk menentukan apakah konteks perangkat adalah konteks langsung atau ditangguhkan, panggil ID3D11DeviceContext::GetType.

Metode ID3D11DeviceContext::Map hanya didukung dalam konteks yang ditangguhkan untuk sumber daya dinamis (D3D11_USAGE_DYNAMIC) di mana panggilan pertama dalam daftar perintah D3D11_MAP_WRITE_DISCARD. D3D11_MAP_WRITE_NO_OVERWRITE didukung pada panggilan berikutnya jika tersedia untuk jenis sumber daya yang diberikan.

Kueri dalam konteks yang ditangguhkan terbatas pada pembuatan data dan gambar berpredikat. Anda tidak dapat memanggil ID3D11DeviceContext::GetData pada konteks yang ditangguhkan untuk mendapatkan data tentang kueri; Anda hanya bisa memanggil GetData pada konteks langsung untuk mendapatkan data tentang kueri. Anda dapat mengatur predikat penyajian (jenis kueri) dengan memanggil D3D11DeviceContext::SetPredication untuk menggunakan hasil kueri pada GPU. Anda dapat membuat data kueri melalui panggilan ke ID3D11DeviceContext::Begin dan ID3D11DeviceContext::End. Namun, data kueri tidak akan tersedia sampai Anda memanggil ID3D11DeviceContext::ExecuteCommandList pada konteks langsung untuk mengirimkan daftar perintah konteks yang ditangguhkan. Data kueri kemudian diproses oleh GPU.

Multiutas