このトピックでは、Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) を使用して、コンピューターで使用可能なグラフィックス アダプターを列挙する方法について説明します。 Direct3D 10 と 11 では、DXGI を使用してアダプターを列挙できます。
通常、次の理由でアダプターを列挙する必要があります。
- コンピューターにインストールされているグラフィックス アダプターの数を確認します。
- Direct3D デバイスの作成に使用するアダプターを選択するのに役立ちます。
- デバイスの機能を取得するために使用できるIDXGIAdapter オブジェクトを取得します。
アダプターの を列挙するには
CreateDXGIFactory 関数を呼び出して、IDXGIFactory オブジェクトを作成します。 次のコード例では、IDXGIFactory オブジェクトを初期化する方法を示します。
IDXGIFactory * pFactory = NULL; CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
IDXGIFactory::EnumAdapters メソッドを呼び出して、各アダプターを列挙します。 Adapter パラメーターを使用すると、列挙するアダプターの 0 から始まるインデックス番号を指定できます。 指定したインデックスで使用できるアダプターがない場合、メソッドは DXGI_ERROR_NOT_FOUNDを返します。
次のコード例は、コンピューター上のアダプターを列挙する方法を示しています。
for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i) { ... }
次のコード例は、コンピューター上のすべてのアダプターを列挙する方法を示しています。
手記
Direct3D 11.0 以降の場合、アプリでは常に IDXGIFactory1 を使用し、代わりに CreateDXGIFactory1することをお勧めします。
std::vector <IDXGIAdapter*> EnumerateAdapters(void)
{
IDXGIAdapter * pAdapter;
std::vector <IDXGIAdapter*> vAdapters;
IDXGIFactory* pFactory = NULL;
// Create a DXGIFactory object.
if(FAILED(CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)))
{
return vAdapters;
}
for ( UINT i = 0;
pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND;
++i )
{
vAdapters.push_back(pAdapter);
}
if(pFactory)
{
pFactory->Release();
}
return vAdapters;
}
関連トピック
-
Direct3D 11 の使用方法