IDXGIFactory インターフェイスの参照は、スワップ チェーンを作成するために、Direct3D デバイスの作成に使用されたものと同じファクトリを使用する可能性があることを示しています。
スワップ チェーンを作成せずに Direct3D デバイスを作成できるため、スワップ チェーンを作成するには、デバイスの作成に使用されるファクトリを取得する必要がある場合があります。
また、次のコード例も示します。
IDXGIDevice * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice);
IDXGIAdapter * pDXGIAdapter;
hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter);
IDXGIFactory * pIDXGIFactory;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory), (void **)&pIDXGIFactory);
記事は非常に控えめで、完全に理解しようとすると、次の 2 つの疑問が生じましたが、最初の疑問が主な疑問です (このスレッドのタイトルに関するものです)。
スワップ チェーンを作成するために、Direct3D デバイスの作成に使用したものと同じファクトリを使用する必要があるのはなぜですか? ファクトリ インスタンスは、重要な内部状態を維持していますか?それとも、リソースを消費するファクトリの別のインスタンスを作成しないようにするだけですか?
また、コード サンプル内で、次のコード行に苦労しています。
hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter);
私にとって、IDXGIAdapter が IDXGIDevice の親であることは論理的ではありません。それ以外の場合、IDXGIAdapterには、アダプターをデバイスの親にする CreateDevice のようなメソッドが必要です。しかし、そうではありません。アダプターがデバイスの親であるのはなぜですか?