DirectX11 tanpa jendela terpasang?

13

Saya hanya ingin tahu, apakah mungkin untuk menginisialisasi dan menggunakan DX11 atau DX9 hanya untuk rendering pada layar - artinya tanpa jendela yang terpasang. Tujuan saya adalah melakukan pembandingan GPU sebelum membuka jendela sebenarnya. Dalam pembandingan ini, beberapa adegan pengujian ditampilkan, tetapi seharusnya tidak terlihat. (Sebenarnya tergantung pada skor patokan jendela yang berbeda dibuka)

GPUquant
sumber
2
Dengan D3D11 Anda harus menyediakan pegangan jendela saat membuat rantai swap, lihat di sini . Tapi mungkin ada cara untuk menyembunyikan jendela ini?
Laurent Couvidou
1
ya, saya tahu, bahwa DX11 memerlukan pegangan jendela untuk swapchain - tetapi jika Anda membuat offscreen hanya apakah Anda benar-benar membutuhkan swapchain? Apakah ada beberapa cara untuk menginisialisasi dan me-render tanpa swapchain - Saya pikir swapchain hanya untuk rendering layar ...
GPUquant
1
Saat ini saya mencoba menggunakan jendela 1x1px yang disembunyikan. Tapi itu bukan solusi yang bagus.
GPUquant

Jawaban:

15

Iya. Anda dapat menginisialisasi perangkat Direct3D menggunakan D3D11CreateDevice, yang tidak memerlukan jendela. Anda sama sekali tidak membuat rantai swap sama sekali. Anda masih bisa membuat target render di layar dan menggambar dengan cara biasa. Alih-alih memanggil Presentrantai swap, Anda dapat menelepon ID3D11DeviceContext::Flushuntuk menendang GPU dengan pekerjaan yang telah Anda antri.

Jika nanti Anda ingin membuat jendela, Anda dapat menghancurkan perangkat dan membuatnya kembali D3D11CreateDeviceAndSwapChain, atau Anda dapat membuat rantai swap dan memasangnya dengan perangkat yang ada IDXGIFactory::CreateSwapChain. (Ini IDXGIFactoryadalah objek COM terpisah yang perlu dibuat CreateDXGIFactoryterlebih dahulu.)

Nathan Reed
sumber
+1 Memanggil Flushalih-alih menghadirkan rantai swap, ini rapi!
Laurent Couvidou
Apakah ini mungkin dilakukan dengan D3D9 melalui IDirect3D9::CreateDevicemetode ini? Saya tidak dapat menemukan D3D9CreateDevicemetode dengan sedih.
Vinz
@ Lenzenz saya tidak berpikir begitu. D3D9 tidak memisahkan konsep "perangkat" dan "rantai swap", seperti yang dilakukan D3D10 ke atas. Keduanya digulirkan ke objek perangkat D3D9, yang mengharuskan HWNDuntuk membuat.
Nathan Reed