Мне просто интересно, можно ли инициализировать и использовать DX11 или DX9 только для закадрового рендеринга - то есть без прикрепленного окна. Мое намерение состоит в том, чтобы сделать некоторые тесты GPU, прежде чем открывать фактическое окно. В этом бенчмаркинге визуализируется некоторая тестовая сцена, но она не должна быть видимой. (На самом деле в зависимости от оценки производительности открываются разные окна)
13
Ответы:
Да. Вы можете инициализировать устройство Direct3D с помощью
D3D11CreateDevice
окна, которое не требует окна. Вы просто не создаете цепочку обмена вообще. Вы по-прежнему можете создавать цели закадрового рендера и рисовать их обычным способом. Вместо того, чтобы вызыватьPresent
цепочку обмена, вы можете позвонить,ID3D11DeviceContext::Flush
чтобы пнуть GPU с работой, которую вы поставили в очередь.Если позже вы захотите создать окно, вы можете уничтожить устройство и воссоздать его с помощью
D3D11CreateDeviceAndSwapChain
или вы можете создать цепочку подкачки и присоединить ее к существующему устройству с помощьюIDXGIFactory::CreateSwapChain
. (ЭтоIDXGIFactory
отдельный COM-объект, который должен быть созданCreateDXGIFactory
первым.)источник
Flush
вместо представления цепочки свопов, это здорово!IDirect3D9::CreateDevice
метод? Я не мог найтиD3D9CreateDevice
метод, к сожалению.HWND
создать.