使用 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 中是否有与此等效的东西,如果我之后使用 D3DCREATE_ADAPTERGROUP_DEVICE
创建 D3D 设备,它也能正常工作?如果不是,我是否可以对可用于将 Win32 API 结果与 D3D 适配器匹配的设备的枚举顺序做出任何假设?换句话说:Direct3D 适配器 0 是否保证是 EnumDisplayDevices
返回的第一个适配器?
补充:我刚刚发现,我可以将 D3DADAPTER_IDENTIFIER9
中的设备名称与 Win32 的设备名称相匹配。但是,有没有办法首先从 D3D 获取物理设备?
最佳答案
如果有人感兴趣,我发现了如何去做:D3DCAPS9
中的 NumberOfAdaptersInGroup
包含适配器组(物理设备)主控的输出数量具有多个交换链)并且对于从属(“非物理”适配器)为零。 MSDN 指出:
NumberOfAdaptersInGroup is 1 for conventional adapters, and greater than 1 for the master adapter of a multihead card. The value will be 0 for a subordinate adapter of a multihead card. Each card can have at most one master, but might have many subordinates.
关于winapi - 如何使用 Direct3D9 确定哪些显示器连接到同一物理设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680997/