Partilhar via


Como: enumerar adaptadores

Este tópico mostra como usar o Microsoft DirectX Graphics Infrastructure (DXGI) para enumerar os adaptadores gráficos disponíveis em um computador. Direct3D 10 e 11 podem usar DXGI para enumerar adaptadores.

Geralmente, você precisa enumerar adaptadores pelos seguintes motivos:

  • Para determinar quantos adaptadores gráficos estão instalados em um computador.
  • Para ajudá-lo a escolher qual adaptador usar para criar um dispositivo Direct3D.
  • Para recuperar um objeto IDXGIAdapter que possa ser usado para recuperar as capacidades do dispositivo.

Para enumerar adaptadores

  1. Crie um objeto IDXGIFactory chamando a função CreateDXGIFactory. O exemplo de código a seguir demonstra como inicializar um IDXGIFactory objeto.

    IDXGIFactory * pFactory = NULL;
    
    CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
    
  2. Enumere cada adaptador chamando o método IDXGIFactory::EnumAdapters. O parâmetro Adapter permite especificar um número de índice baseado em zero do adaptador a ser enumerado. Se nenhum adaptador estiver disponível no índice especificado, o método retornará DXGI_ERROR_NOT_FOUND.

    O exemplo de código a seguir demonstra como enumerar através dos adaptadores em um computador.

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

O exemplo de código a seguir demonstra como enumerar todos os adaptadores em um computador.

Observação

Para Direct3D 11.0 e posterior, recomendamos que os aplicativos sempre usem IDXGIFactory1 e CreateDXGIFactory1 em vez disso.

 

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;

}

Como usar o Direct3D 11