Vorgehensweise: Auflisten von Adaptern

In diesem Thema wird gezeigt, wie Sie die Microsoft DirectX-Grafikinfrastruktur (DXGI) verwenden, um die verfügbaren Grafikkarten auf einem Computer aufzulisten. Direct3D 10 und 11 können DXGI verwenden, um Adapter aufzulisten.

Im Allgemeinen müssen Sie Adapter aus folgenden Gründen aufzählen:

  • Um zu bestimmen, wie viele Grafikkarten auf einem Computer installiert sind.
  • Sie können den Adapter auswählen, der zum Erstellen eines Direct3D-Geräts verwendet werden soll.
  • Zum Abrufen eines IDXGIAdapter-Objekts , das Sie zum Abrufen von Gerätefunktionen verwenden können.

So enumerieren Sie Adapter

  1. Erstellen Sie ein IDXGIFactory-Objekt , indem Sie die CreateDXGIFactory-Funktion aufrufen. Im folgenden Codebeispiel wird veranschaulicht, wie ein IDXGIFactory-Objekt initialisiert wird.

    IDXGIFactory * pFactory = NULL;
    
    CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
    
  2. Führen Sie die einzelnen Adapter durch, indem Sie die IDXGIFactory::EnumAdapters-Methode aufrufen. Mit dem Adapter-Parameter können Sie eine nullbasierte Indexnummer des zu enumerierenden Adapters angeben. Wenn am angegebenen Index kein Adapter verfügbar ist, gibt die Methode DXGI_ERROR_NOT_FOUND zurück.

    Im folgenden Codebeispiel wird veranschaulicht, wie Sie die Adapter auf einem Computer auflisten.

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

Im folgenden Codebeispiel wird veranschaulicht, wie alle Adapter auf einem Computer aufgezählt werden.

Hinweis

Für Direct3D 11.0 und höher wird empfohlen, dass Apps stattdessen immer IDXGIFactory1 und CreateDXGIFactory1 verwenden.

 

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;

}

Verwenden von Direct3D 11