DXGIの理解がある程度できたので、初期化コードを書き始めている。
スワップチェーンの生成までの流れは下記の通りである。
- CreateDXGIFactory1で、 IDXGIFactory1インターフェースを得る
- IDXGIFactory1のEnumAdapter1メソッドでIDXGIAdapter1インターフェースを得る。 0番目がデフォルトのディスプレイ・アダプタである。
- D3D11CreateDeviceでID3D11Deviceを生成する。D3D11CreateDeviceの第一引数には2.で得たIDXGIAdapter1インターフェースを指定する。D3D11CreateDeviceの第一引数にIDXGIAdapter1インターフェースを指定する場合は、第二引数にはD3D_DRIVER_TYPE_UNKNOWNを指定する。指定しないとエラーになる。
- 3.で得たID3D11Deviceを第一引数に使い、IDXGIFactory::CreateSwapChainメソッドにてスワップ・チェーンを作成する。第一引数はスワップチェーンに対して2Dレンダリングするデバイスならなんでも良いようだが、今のところD3D10/11デバイスしか指定できない。それしかないので。
ちょっとハマったのはIDXGIAdapter::CheckInterfaceSupportメソッドがID3D10Deviceの場合しかS_OKを返さないこと。ID3D11Deviceを指定してもDXGI_ERROR_UNSUPPORTEDを返してしまう。