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
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)
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;
}
Zugehörige Themen