Share via


Guide pratique pour é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.

Vous devez généralement é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 l’adaptateur à utiliser pour créer un appareil Direct3D.
  • Pour récupérer un objet IDXGIAdapter que vous pouvez utiliser pour récupérer des fonctionnalités d’appareil.

Pour énumérer les adaptateurs

  1. 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)
    
  2. É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 DXGI_ERROR_NOT_FOUND.

    L’exemple de code suivant montre comment énumérer les cartes 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 toutes les cartes sur un ordinateur.

Notes

Pour Direct3D 11.0 et versions ultérieures, nous recommandons aux applications d’utiliser 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;

}

Comment utiliser Direct3D 11