Condividi tramite


Procedura: Enumerare gli adapter

Questo argomento illustra come usare Microsoft DirectX Graphics Infrastructure (DXGI) per enumerare le schede grafiche disponibili in un computer. Direct3D 10 e 11 possono usare DXGI per enumerare gli adattatori.

In genere è necessario enumerare gli adattatori per questi motivi:

  • Per determinare il numero di schede grafiche installate in un computer.
  • Per aiutarti a scegliere quale adattatore usare per creare un dispositivo Direct3D.
  • Per ottenere un oggetto IDXGIAdapter utilizzabile per accedere alle funzionalità del dispositivo.

Per enumerare gli adattatori

  1. Creare un oggettoIDXGIFactorychiamando la funzioneCreateDXGIFactory. Nell'esempio di codice seguente viene illustrato come inizializzare un oggetto IDXGIFactory.

    IDXGIFactory * pFactory = NULL;
    
    CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
    
  2. Enumerare tramite ogni adapter chiamando il metodo IDXGIFactory::EnumAdapters. Il parametro dell'adattatore consente di specificare un numero di indice a partire da zero dell'adattatore da enumerare. Se nessun adattatore è disponibile nell'indice specificato, il metodo restituisce DXGI_ERROR_NOT_FOUND.

    Nell'esempio di codice seguente viene illustrato come enumerare gli adapter in un computer.

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

Nell'esempio di codice seguente viene illustrato come enumerare tutti gli adattatori in un computer.

Nota

Per Direct3D 11.0 e versioni successive, è consigliabile che le app usino sempre IDXGIFactory1 e CreateDXGIFactory1.

 

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;

}

Come usare Direct3D 11