DXGI - 初期化コードを書く

公開:2011-06-27 18:21
更新:2020-02-15 04:36
カテゴリ:directx,dxgi,windows,c++

DXGIの理解がある程度できたので、初期化コードを書き始めている。

スワップチェーンの生成までの流れは下記の通りである。


  1. CreateDXGIFactory1で、 IDXGIFactory1インターフェースを得る
  2. IDXGIFactory1のEnumAdapter1メソッドでIDXGIAdapter1インターフェースを得る。 0番目がデフォルトのディスプレイ・アダプタである。
  3. D3D11CreateDeviceでID3D11Deviceを生成する。D3D11CreateDeviceの第一引数には2.で得たIDXGIAdapter1インターフェースを指定する。D3D11CreateDeviceの第一引数にIDXGIAdapter1インターフェースを指定する場合は、第二引数にはD3D_DRIVER_TYPE_UNKNOWNを指定する。指定しないとエラーになる。
  4. 3.で得たID3D11Deviceを第一引数に使い、IDXGIFactory::CreateSwapChainメソッドにてスワップ・チェーンを作成する。第一引数はスワップチェーンに対して2Dレンダリングするデバイスならなんでも良いようだが、今のところD3D10/11デバイスしか指定できない。それしかないので。

ちょっとハマったのはIDXGIAdapter::CheckInterfaceSupportメソッドがID3D10Deviceの場合しかS_OKを返さないこと。ID3D11Deviceを指定してもDXGI_ERROR_UNSUPPORTEDを返してしまう。