次の方法で共有


方法: アダプターを列挙する

このトピックでは、Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) を使用して、コンピューターで使用可能なグラフィックス アダプターを列挙する方法について説明します。 Direct3D 10 と 11 では、DXGI を使用してアダプターを列挙できます。

通常、次の理由でアダプターを列挙する必要があります。

  • コンピューターにインストールされているグラフィックス アダプターの数を確認します。
  • Direct3D デバイスの作成に使用するアダプターを選択するのに役立ちます。
  • デバイス機能の取得に使用できる IDXGIAdapter オブジェクトを取得するには。

アダプターを列挙するには

  1. CreateDXGIFactory 関数を呼び出して IDXGIFactory オブジェクトを作成します。 次のコード例では、 IDXGIFactory オブジェクトを初期化する方法を示します。

    IDXGIFactory * pFactory = NULL;
    
    CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
    
  2. IDXGIFactory::EnumAdapters メソッドを呼び出して、各アダプターを列挙します。 Adapter パラメーターを使用すると、列挙するアダプターの 0 から始まるインデックス番号を指定できます。 指定したインデックスで使用できるアダプターがない場合、メソッドは DXGI_ERROR_NOT_FOUNDを返します。

    次のコード例は、コンピューター上のアダプターを列挙する方法を示しています。

    for (UINT i = 0; 
         pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; 
         ++i) 
    { ... }
    

次のコード例では、コンピューター上のすべてのアダプターを列挙する方法を示します。

注意

Direct3D 11.0 以降では、代わりにアプリで常に IDXGIFactory1CreateDXGIFactory1 を使用することをお勧めします。

 

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 の使用方法