使用 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 获取物理设备?