Je me demande simplement s'il est possible d'initialiser et d'utiliser DX11 ou DX9 pour le rendu hors écran uniquement - c'est-à-dire sans fenêtre attachée. Mon intention est de faire un benchmarking GPU avant d'ouvrir la fenêtre réelle. Dans cette analyse comparative, une scène de test est rendue, mais ne doit pas être visible. (En fait, selon le score de référence, différentes fenêtres sont ouvertes)
13
Réponses:
Oui. Vous pouvez initialiser le périphérique Direct3D à l'aide de
D3D11CreateDevice
, qui ne nécessite aucune fenêtre. Vous ne créez tout simplement pas du tout de chaîne d'échange. Vous pouvez toujours créer des cibles de rendu hors écran et y dessiner de la manière habituelle. Au lieu d'appelerPresent
sur la chaîne de swap, vous pouvez appelerID3D11DeviceContext::Flush
pour lancer le GPU avec le travail que vous avez mis en file d'attente.Si vous souhaitez par la suite créer une fenêtre, vous pouvez détruire le périphérique et le recréer avec
D3D11CreateDeviceAndSwapChain
, ou vous pouvez créer une chaîne de permutation et l'attacher au périphérique existant avecIDXGIFactory::CreateSwapChain
. (LeIDXGIFactory
est un objet COM distinct qui doit d'abord être crééCreateDXGIFactory
.)la source
Flush
au lieu de présenter la chaîne de swap, c'est bien!IDirect3D9::CreateDevice
méthode? Je n'aiD3D9CreateDevice
malheureusement pas trouvé de méthode.HWND
création.