ウィンドウが接続されていないDirectX11


13

オフスクリーンレンダリングのみにDX11またはDX9を初期化して使用することが可能かどうか、つまりウィンドウが接続されていないことを意味します。私の意図は、実際のウィンドウを開く前にGPUベンチマークを行うことです。このベンチマークでは、いくつかのテストシーンがレンダリングされますが、表示されるべきではありません。(実際には、ベンチマークスコアに応じて異なるウィンドウが開きます)


2
D3D11では、スワップチェーンを作成するときにウィンドウハンドルを提供する必要がありますこちらを参照してください。しかし、おそらくこのウィンドウを非表示にする方法はありますか?
ローランクーヴィドゥー

1
ええ、DX11にはスワップチェーン用のウィンドウハンドルが必要なことはわかっていますが、オフスクリーンでレンダリングする場合、スワップチェーンは本当に必要ですか?swapchainせずに初期化し、レンダリングするためのいくつかの方法があります-私はswapchainがちょうど画面のレンダリングのためにあると思っ...
GPUquant

1
今、私は隠されている1x1pxウィンドウを使用しようとしています。しかし、それはいい解決策ではありません。
GPUquant

回答:


15

はい。D3D11CreateDeviceウィンドウを必要としないを使用して、Direct3Dデバイスを初期化できます。単にスワップチェーンを作成しないでください。オフスクリーンレンダーターゲットを作成し、通常の方法でそれらに描画できます。Presentスワップチェーンを呼び出す代わりに、ID3D11DeviceContext::Flushキューに入れた作業でGPUをキックするために呼び出すことができます。

後でウィンドウを作成する場合、デバイスを破棄してを使用して再作成するD3D11CreateDeviceAndSwapChainか、スワップチェーンを作成して既存のデバイスにを使用してアタッチしIDXGIFactory::CreateSwapChainます。(これIDXGIFactoryCreateDXGIFactory最初に作成する必要がある別個のCOMオブジェクトです。)


Flushスワップチェーンを提示する代わりに+1呼び出しを行うと、すてきです!
ローランクーヴィドゥー

IDirect3D9::CreateDeviceメソッドを介してD3D9でこれが何らかの形で可能ですか?D3D9CreateDevice悲しいことに方法が見つかりませんでした。
ビンツ

@Vinzenzそうは思いません。D3D9は、D3D10以降のように「デバイス」と「スワップチェーン」の概念を分離しません。どちらもD3D9デバイスオブジェクトにロールされ、HWND作成する必要があります。
ネイサンリード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.