Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Подсказки / Как определить тип установленой видеокарты с помощью D3D

Как определить тип установленой видеокарты с помощью D3D

Автор:

Иногда нужно знать какая видеокарта стоит на компьютере. С помощью этого кода, например, можно определить наличие некоторых видеокарт.

bool GeForce9500GT = false; // NVIDIA GeForce 9500 GT
bool RadeonHD4800Series = false; // ATI Radeon HD 4800 Series

const int VENDOR_NVIDIA = 0x10DE;
const int VENDOR_ATI = 0x1002;

const int DEV_G96 = 0x0643;
const int DEV_RV790 = 0x9462;

D3DADAPTER_IDENTIFIER8 id;
lpObj->GetAdapterIdentifier (D3DADAPTER_DEFAULT, D3DENUM_NO_WHQL_LEVEL, &id);
if (id.VendorId == VENDOR_NVIDIA)
{
  GeForce9500GT = (id.DeviceId == DEV_G96);
}
else if (id.VendorId == VENDOR_ATI)
{
  RadeonHD4800Series = (id.DeviceId == DEV_RV790);
}

Подставив нужные вам константы можно определить наличие той или иной видеокарты.
Константы можно найти здесь http://www.pcidatabase.com/vendors.php?sort=name.

16 октября 2009

#Direct3D

Комментарии:
$!№9@rНовичокwww9 июля 201315:25#1
Идея конечно хорошая, но на 9 директе, я сделал проще...)))

D3DADAPTER_IDENTIFIER9 id;

m_pD3Device->GetAdapterIdentifier(D3DADAPTER_DEFAULT, D3DENUM_WHQL_LEVEL, &id);
pFontT->DrawText(NULL, id.Description, -1, NULL, DT_LEFT, 0xFE0000B4);

Ненадо сравнивать константы, а просто тупо вывести название модели на экран, через - "id.Description"...)))

ЗЫ.На 11 директе такое уже не проканает...)))

;););)

ExecutorУдалёнwww9 июля 201318:02#2
$!№9@r
В description может не быть конкретного названия GPU. Может быть написано аля "Radeon Series", "Intel HD Family" или что-нибудь подобное.
asvpПостоялецwww9 июля 201319:07#3
$!№9@r
> ЗЫ.На 11 директе такое уже не проканает...)))
В DX11:
1. Получаем IDXGIDevice
2. Получаем IDXGIAdapter через GetAdapter интерфейса  IDXGIDevice
3. Получаем DXGI_ADAPTER_DESC через GetDesc  интерфейса  IDXGIAdapter

Согласен, что лучше юзать Id.

KKHПостоялецwww10 июля 20132:50#4
Я не пробовал именно с видео, но в реестре должна быть информация.
Должно быть указано что является первичным видеоадаптером
Должна быть информация о том сколько видеоадаптеров
GUID для каждого
и по GUID смотреть как они называются ...

В теорию лезть лень ....

DeadMeatПостоялецwww10 июля 20138:36#5
KKH
Та же беда, что и с description. Может не оказаться полного названия модели. Я пробовал разные варианта: WinAPI + Registry, DxDiag, OpenGL + GL_VENDOR. Ни один не дает 100% гарантии получения ПОЛНОГО названия видео карты. Единственный вариант - vendorID + deviceID, а потом смотреть в базе.
AnerounПостоялецwww10 июля 201312:14#6
А как быть в случае когда имеется две видеокарты? Например на ноутбуке одна Intel а другая AMD?
TheGrayWolfПостоялецwww10 июля 201313:34#7
Aneroun

см. GetAdapterIdentifier - первый параметр и есть номер видео в системе

правда бываюи и вертуальные адаптеры, см NVPerfHUD

AnerounПостоялецwww10 июля 201314:57#8
TheGrayWolf
Если бы все было так просто. GetAdapterIdentifier для всех адаптеров возвращает description "Intel(R) HD Graphics Family", а установленного AMD Radeon HD 7670M для этой функции не существует.
DeadMeatПостоялецwww10 июля 201315:26#9
ИМХО, в случае переключаемой графики надо работать через нативное АПИ, что бы активировать нужную. Правда хез как это сделать. Не пробовал еще. Где-то читал (кажется на сайте НВ), что надо через нативное АПИ добавить свое приложение в профили и видео карта сама переключится. Но как-то мне этот способ не очень нравится.
AnerounПостоялецwww13 июля 201320:15#10
DeadMeat
Да активировать не обязательно. Желательно просто получить список для сбора статистики.

/ Форум / Программирование игр / Графика

Тема в архиве.

2001—2017 © GameDev.ru — Разработка игр