winapi - 如何使用 Direct3D9 确定哪些显示器连接到同一物理设备?

标签 winapi direct3d multiple-monitors

使用 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/

相关文章:

c++ - 覆盖 "Run as Administrator"的 COM shell 扩展在开始菜单搜索中失败

c++ - WinApi OpenProcess 错误 87

graphics - OpenGL ES或Direct3D中的表面到底是什么?

directx - 是否可以共享 DXVA 表面?

javafx - 如何将JavaFX-Alert设置到实际监视器的中间?

c++ - 如何使用 "priority"进行多线程处理?

c++ - 对 `WindowProc(HWND__*, unsigned int, unsigned int, long)@16' 的 undefined reference

c++ - 无法加载PDB符号(未加载igvk32.pdb)

java - 获取左上角监视器左上角位置的坐标

winapi - HMONITOR 什么时候可以与多个物理显示器关联?