通过现有 IDXGIDevice 获取新连接的显示器
Get new connected display via existing IDXGIDevice
我有一个程序可以在启动时创建 ID3D11Device
设备并在关闭时销毁。我在创建 ID3D11Device
后连接第二台显示器时遇到了这个问题。
在这段简化的代码中,它枚举了适配器输出,并且这个枚举 returns 只有一个监视器,第一个在程序启动之前连接的监视器。
一个
IDXGIDevice* DXGIDevice;
D3D11Device->QueryInterface(IID_IDXGIDevice, (void**)&DXGIDevice);
IDXGIAdapter* DXGIAdapter;
DXGIDevice->GetAdapter(&DXGIAdapter);
IDXGIOutput* Output;
int i = 0;
while (DXGIAdapter->EnumOutputs(i, &Output) != DXGI_ERROR_NOT_FOUND)
{
DXGI_OUTPUT_DESC desc;
Output->GetDesc(&desc);
PrintMonitor(desc.Monitor);
}
但是如果我尝试手动创建工厂并获取主适配器,它会枚举两个监视器。
B
IDXGIFactory* DXGIFactory;
IDXGIAdapter* DXGIAdapter;
CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&DXGIFactory);
factory->EnumAdapters(0, &DXGIAdapter);
IDXGIOutput* Output;
int i = 0;
while (DXGIAdapter->EnumOutputs(i, &Output) != DXGI_ERROR_NOT_FOUND)
{
DXGI_OUTPUT_DESC desc;
Output->GetDesc(&desc);
PrintMonitor(desc.Monitor);
}
我的问题是:从 DXGIDevice
设备获取的适配器是否可能“刷新”输出列表而无需重新创建此设备,并在代码中看到任何监视器 plug-in/plug-out 与第一个一样( A)?
我有一个程序可以在启动时创建 ID3D11Device
设备并在关闭时销毁。我在创建 ID3D11Device
后连接第二台显示器时遇到了这个问题。
在这段简化的代码中,它枚举了适配器输出,并且这个枚举 returns 只有一个监视器,第一个在程序启动之前连接的监视器。
一个
IDXGIDevice* DXGIDevice;
D3D11Device->QueryInterface(IID_IDXGIDevice, (void**)&DXGIDevice);
IDXGIAdapter* DXGIAdapter;
DXGIDevice->GetAdapter(&DXGIAdapter);
IDXGIOutput* Output;
int i = 0;
while (DXGIAdapter->EnumOutputs(i, &Output) != DXGI_ERROR_NOT_FOUND)
{
DXGI_OUTPUT_DESC desc;
Output->GetDesc(&desc);
PrintMonitor(desc.Monitor);
}
但是如果我尝试手动创建工厂并获取主适配器,它会枚举两个监视器。
B
IDXGIFactory* DXGIFactory;
IDXGIAdapter* DXGIAdapter;
CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&DXGIFactory);
factory->EnumAdapters(0, &DXGIAdapter);
IDXGIOutput* Output;
int i = 0;
while (DXGIAdapter->EnumOutputs(i, &Output) != DXGI_ERROR_NOT_FOUND)
{
DXGI_OUTPUT_DESC desc;
Output->GetDesc(&desc);
PrintMonitor(desc.Monitor);
}
我的问题是:从 DXGIDevice
设备获取的适配器是否可能“刷新”输出列表而无需重新创建此设备,并在代码中看到任何监视器 plug-in/plug-out 与第一个一样( A)?