Как определить, какие дисплеи подключены к тому же физическому устройству с помощью Direct3D9? - PullRequest
3 голосов
/ 25 марта 2009

Используя 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?

1 Ответ

2 голосов
/ 26 марта 2009

В случае, если кому-то интересно, я узнал, как это сделать: NumberOfAdaptersInGroup в D3DCAPS9 содержит количество выходов для мастера группы адаптеров (физического устройства с несколькими цепями подкачки) и равно нулю для подчиненного («нефизические» адаптеры). MSDN заявляет:

NumberOfAdaptersInGroup равно 1 для обычных адаптеров и больше 1 для основного адаптера карты с несколькими головками. Значение будет 0 для подчиненного адаптера карты с несколькими головками. Каждая карта может иметь не более одного мастера, но может иметь много подчиненных.

...