Используя Direct3D9, я могу сосчитать доступные адаптеры, используя IDirect3D9::GetAdapterCount()
. Однако это возвращает количество выходов, то есть 2 для одной видеокарты с двумя головками. Используя Win32 API, я могу перечислить устройства отображения и мониторы, подключенные с использованием следующего фрагмента:
DISPLAY_DEVICE displayDevice;
::ZeroMemory(&displayDevice, sizeof(displayDevice));
displayDevice.cb = sizeof(displayDevice);
/* Enumerate adapters. */
for (UINT i = 0; ::EnumDisplayDevices(NULL, i, &displayDevice, 0); i++) {
/* Enumerate the monitors. */
for (UINT j = 0; ::EnumDisplayDevices(displayDevice.DeviceName, j,
&displayDevice, 0); j++) {
// Do stuff here
}
}
Мои вопросы: есть ли эквивалент для этого в D3D, который также работает правильно, если впоследствии я создаю устройство D3D, используя D3DCREATE_ADAPTERGROUP_DEVICE
? Если нет, могу ли я сделать какие-либо предположения относительно порядка перечисления устройств, которые я могу использовать для сопоставления результатов Win32 API с адаптерами D3D? Другими словами: гарантированно ли адаптер Direct3D 0 будет первым адаптером, возвращаемым EnumDisplayDevices
?
Добавление: Я только что узнал, что могу сопоставить имя устройства от D3DADAPTER_IDENTIFIER9
с именем устройства Win32. Однако есть ли способ получить только физические устройства от D3D?