DirectX11 sem janela anexada?

13

Só me pergunto, se é possível inicializar e usar o DX11 ou o DX9 apenas para renderização fora da tela - ou seja, sem janela anexada. Minha intenção é fazer alguns testes de GPU antes de abrir a janela real. Nesse benchmarking, algumas cenas de teste são renderizadas, mas não devem ser visíveis. (Na verdade, dependendo da pontuação de referência, janelas diferentes são abertas)

GPUquant
fonte
2
Com o D3D11, você precisa fornecer um identificador de janela ao criar a cadeia de troca, veja aqui . Mas talvez haja uma maneira de esconder essa janela?
Laurent Couvidou
1
Sim, eu sei, que o DX11 requer identificador de janela para swapchain - mas se você renderizar apenas fora da tela, realmente precisará de algum swapchain? Existe alguma maneira para inicializar e tornar sem swapchain - Eu pensei que swapchain é apenas para processamento de tela ...
GPUquant
1
No momento, estou tentando usar a janela 1x1px, que está oculta. Mas não é uma solução legal, eu diria.
GPUquant

Respostas:

15

Sim. Você pode inicializar o dispositivo Direct3D usando D3D11CreateDevice, o que não requer janela. Você simplesmente não cria uma cadeia de troca. Você ainda pode criar destinos de renderização fora da tela e desenhar para eles da maneira usual. Em vez de ligar Presentpara a cadeia de troca, você pode ligar ID3D11DeviceContext::Flushpara ativar a GPU com o trabalho na fila.

Se você desejar criar uma janela posteriormente, poderá destruir o dispositivo e recriá-lo D3D11CreateDeviceAndSwapChain, ou criar uma cadeia de troca e anexá-la ao dispositivo existente IDXGIFactory::CreateSwapChain. (O IDXGIFactoryé um objeto COM separado que precisa ser criado CreateDXGIFactoryprimeiro.)

Nathan Reed
fonte
Marcar com +1 em Flushvez de apresentar a cadeia de swap, isso é legal!
22713 Laurent Couvidou
Isso é possível de alguma forma com o D3D9 através do IDirect3D9::CreateDevicemétodo? D3D9CreateDeviceInfelizmente não consegui encontrar um método.
Vinz #
@ Vinzenz Acho que não. O D3D9 não separa os conceitos de "dispositivo" e "cadeia de troca", como o D3D10 e outros fazem. Ambos são lançados no objeto de dispositivo D3D9, que requer HWNDa criação de um.
Nathan Reed