DirectX11 без доданого вікна?


13

Мені просто цікаво, чи можливо ініціалізувати та використовувати DX11 або DX9 лише для екранного відображення - тобто без вікна, що додається. Моя мета - зробити деякий бенчмаркінг GPU перед відкриттям фактичного вікна. У цьому тестуванні відображається деяка тестова сцена, але вона не повинна бути видною. (Насправді залежно від бальної оцінки відкриваються різні вікна)


2
З D3D11 вам потрібно забезпечити ручку вікна під час створення ланцюга swap, див. Тут . Але, можливо, є спосіб приховати це вікно?
Лоран Кувіду

1
так, я знаю, що для DX11 потрібна ручка вікна для swapchain - але якщо ви візуалізуєте лише екран, чи справді вам потрібен будь-який swapchain? Чи є якийсь спосіб ініціалізації та візуалізації без swapchain - я думав, що swapchain призначений лише для візуалізації екрану ...
GPUquant

1
Зараз я намагаюся використовувати вікно 1x1px, яке приховано. Але це не приємне рішення, я б сказав.
GPUquant

Відповіді:


15

Так. Ви можете ініціалізувати пристрій Direct3D, використовуючи D3D11CreateDevice, що не потребує вікна. Ви просто не створюєте своп ланцюжок взагалі. Ви все ще можете створювати цілі за межами екрану та малювати їх звичайним чином. Замість того, щоб дзвонити Presentпо ланцюгу swap, ви можете зателефонувати, ID3D11DeviceContext::Flushщоб розігнати GPU роботою, яку ви поставили в чергу.

Якщо згодом ви хочете створити вікно, ви можете знищити пристрій і відтворити його D3D11CreateDeviceAndSwapChain, або ви можете створити ланцюжок swap і приєднати його до вже наявного пристрою IDXGIFactory::CreateSwapChain. (Це IDXGIFactoryокремий об'єкт COM, який потрібно створити CreateDXGIFactoryспочатку.)


+1 Зателефонувавши, Flushа не презентувати ланцюжок своп, це акуратно!
Лоран Кувіду

Чи можливо це якось можливо з D3D9 за допомогою IDirect3D9::CreateDeviceметоду? Я не міг на D3D9CreateDeviceжаль знайти метод.
Вінц

@Vinzenz Я так не думаю. D3D9 не розділяє поняття "пристрій" і "ланцюг підкачки", як це роблять D3D10 і вище. Вони обидва об'єднані в об’єкт пристрою D3D9, для чого потрібно HWNDстворити.
Натан Рід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.