Comment : énumérer des adaptateurs
Cette rubrique montre comment utiliser Microsoft DirectX Graphics infrastructure (DXGI) pour énumérer les cartes graphiques disponibles sur un ordinateur. Direct3D 10 et 11 peuvent utiliser DXGI pour énumérer les adaptateurs.
En général, vous devez énumérer les adaptateurs pour les raisons suivantes :
- Pour déterminer le nombre de cartes graphiques installées sur un ordinateur.
- Pour vous aider à choisir la carte à utiliser pour créer un appareil Direct3D.
- Pour récupérer un objet IDXGIAdapter que vous pouvez utiliser pour récupérer les fonctionnalités de l’appareil.
Pour énumérer des adaptateurs
Créez un objet IDXGIFactory en appelant la fonction CreateDXGIFactory . L’exemple de code suivant montre comment initialiser un objet IDXGIFactory .
IDXGIFactory * pFactory = NULL; CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)Énumérez chaque adaptateur en appelant la méthode IDXGIFactory :: EnumAdapters . Le paramètre adapter vous permet de spécifier un numéro d’index de base zéro de l’adaptateur à énumérer. Si aucun adaptateur n’est disponible à l’index spécifié, la méthode retourne l' _ erreur dxgi _ _ introuvable.
L’exemple de code suivant montre comment énumérer les adaptateurs sur un ordinateur.
for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i) { ... }
L’exemple de code suivant montre comment énumérer tous les adaptateurs d’un ordinateur.
Notes
Pour Direct3D 11,0 et versions ultérieures, nous recommandons que les applications utilisent toujours IDXGIFactory1 et CreateDXGIFactory1 à la place.
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;
}