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
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)
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;
}
Tópicos relacionados