【问题标题】:How can I determine which displays are attached to the same physical device using Direct3D9?如何使用 Direct3D9 确定哪些显示器连接到同一物理设备?
【发布时间】:2009-03-25 10:22:50
【问题描述】:

使用 Direct3D9,我可以使用 IDirect3D9::GetAdapterCount() 计算可用的适配器。但是,这会返回输出数量,即单个双头显卡的 2 个。使用 Win32 API,我可以使用以下 sn-p 枚举显示设备和连接的监视器:

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

【问题讨论】:

    标签: winapi direct3d multiple-monitors


    【解决方案1】:

    如果有人感兴趣,我发现了如何做到这一点:NumberOfAdaptersInGroupin D3DCAPS9 包含适配器组(具有多个交换链的物理设备)的主设备的输出数量,而从属设备为零(“非物理”适配器)。 MSDN 状态:

    NumberOfAdaptersInGroup 对于常规适配器为 1,对于多头卡的主适配器大于 1。对于多头卡的从属适配器,该值将为 0。每张卡最多可以有一个主人,但可能有很多下属。

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2013-03-07
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多