Практическое руководство. Перечисление адаптеров
В этом разделе показано, как использовать инфраструктуру графики Microsoft DirectX (DXGI) для перечисления доступных графических адаптеров на компьютере. Direct3D 10 и 11 могут использовать DXGI для перечисления адаптеров.
Обычно необходимо перечислить адаптеры по следующим причинам:
- Определение количества графических адаптеров, установленных на компьютере.
- Сведения о том, как выбрать адаптер для создания устройства Direct3D.
- Для получения объекта IDXGIAdapter , который можно использовать для получения возможностей устройства.
Перечисление адаптеров
Создайте объект IDXGIFactory , вызвав функцию CreateDXGIFactory . В следующем примере кода показано, как инициализировать объект IDXGIFactory .
IDXGIFactory * pFactory = NULL; CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
Перечисление по каждому адаптеру путем вызова метода IDXGIFactory::EnumAdapters . Параметр Adapter позволяет указать отсчитываемый от нуля номер индекса адаптера для перечисления. Если адаптер недоступен по указанному индексу, метод возвращает DXGI_ERROR_NOT_FOUND.
В следующем примере кода показано, как выполнить перечисление через адаптеры на компьютере.
for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i) { ... }
В следующем примере кода показано, как перечислить все адаптеры на компьютере.
Примечание
Для Direct3D 11.0 и более поздних версий рекомендуется, чтобы приложения всегда использовали IDXGIFactory1 и 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;
}
Связанные темы