如何解决通过现有的 IDXGIDevice 获取新的连接显示器
我有一个程序,它在启动时创建 ID3D11Device
设备并在关闭时销毁。我在创建 ID3D11Device
后连接第二台显示器时遇到了这个问题。
在这段简化的代码中,它枚举了适配器输出,并且此枚举仅返回一个监视器,即在程序启动之前已连接的第一个监视器。
A
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
设备获取的适配器的“刷新”输出列表,而无需重新创建此设备,并在代码中查看任何监视器插件/插件,如第一个( A)?
解决方法
方法 context.getExternalFilesDir(null)
应该会有所帮助。如果它返回 FALSE,那么您应该销毁并重新创建工厂以刷新信息。每次都检查一下IDXGIFactory1::IsCurrent()
。
我使用这种方法在我的directx-vs-templates 项目中支持 HDR10 输出。请参阅 DX11 和 DX12。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。