Mit Direct3D9 kann ich die verfügbaren Adapter mit IDirect3D9::GetAdapterCount()
zählen. Dies ergibt jedoch die Anzahl der Ausgänge, d. H. 2 für eine einzelne Dual-Head-Grafikkarte. Mit Win32-API, kann ich die Anzeigevorrichtungen aufzählen und die Monitore mit dem folgenden Code-Schnipsel angehängt:Wie kann ich feststellen, welche Displays mit Direct3D9 an dasselbe physische Gerät angeschlossen sind?
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
}
}
Meine Fragen sind: Gibt es ein Äquivalent für das in D3D, die auch richtig funktioniert, wenn ich die D3D-Gerät danach erstellen mit D3DCREATE_ADAPTERGROUP_DEVICE
? Wenn nicht, gibt es irgendwelche Annahmen, die ich über die Aufzählungsreihenfolge der Geräte machen kann, die ich verwenden kann, um die Win32-API-Ergebnisse mit D3D-Adaptern zu vergleichen? Mit anderen Worten: Ist der Direct3D-Adapter 0 garantiert der erste Adapter, der von EnumDisplayDevices
zurückgegeben wird?
Zusatz: Ich habe gerade herausgefunden, dass ich den Gerätenamen von D3DADAPTER_IDENTIFIER9
mit dem Gerätenamen von Win32 übereinstimmen konnte. Gibt es jedoch eine Möglichkeit, nur die physischen Geräte von D3D zu bekommen?