Zastanawiam się tylko, czy można zainicjować i używać DX11 lub DX9 tylko do renderowania poza ekranem - czyli bez dołączonego okna. Moim zamiarem jest wykonanie testu porównawczego GPU przed otwarciem rzeczywistego okna. Podczas tego testu porównawczego niektóre sceny testowe są renderowane, ale nie powinny być widoczne. (Właściwie w zależności od wyniku testu otwierają się różne okna)
13
Odpowiedzi:
Tak. Możesz zainicjować urządzenie Direct3D za pomocą
D3D11CreateDevice
, które nie wymaga okna. Po prostu wcale nie tworzysz łańcucha wymiany. Nadal możesz tworzyć cele renderowania poza ekranem i rysować do nich w zwykły sposób. Zamiast wywoływaćPresent
łańcuch wymiany, możesz zadzwonić,ID3D11DeviceContext::Flush
aby uruchomić procesor graficzny za pomocą pracy, którą ustawiłeś w kolejce.Jeśli chcesz później utworzyć okno, możesz zniszczyć urządzenie i odtworzyć je za pomocą
D3D11CreateDeviceAndSwapChain
lub utworzyć łańcuch wymiany i dołączyć go do istniejącego urządzenia za pomocąIDXGIFactory::CreateSwapChain
. (IDXGIFactory
Jest to oddzielny obiekt COM, który należyCreateDXGIFactory
najpierw utworzyć ).źródło
Flush
zamiast prezentacji łańcucha wymiany, jest fajne!IDirect3D9::CreateDevice
metody?D3D9CreateDevice
Niestety nie mogłem znaleźć metody.HWND
utworzenia.