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