问题:打电话IDXGIOutput1::DuplicateOutput 方法返回 DXGI_ERROR_UNSUPPORTED 当您在具有可切换图形的机器上使用独立图形控制器运行应用程序时。
这个答案为这个问题提供了一些启示。简而言之,独立显卡只渲染屏幕的一部分并将数据发送到集成显卡控制器的帧缓冲区——换句话说,所有输出总是通过集成显卡控制器。看来这就是 DuplicateOutput 返回 DXGI_ERROR_UNSUPPORTED 的原因。
我编写了一个示例,该示例使用winapi(EnumDisplayDevices 函数)和directx(IDXGIFactory::EnumAdapters 方法和IDXGIAdapter::EnumOutputs 方法)获取所有输出及其视频适配器,以在具有可切换图形(Intel HD 4600 和 NVIDIA 840M)的机器上进行比较。这是结果:
不确定我的比较可能有多正确,但你可以看到winapi说 DISPLAY1 属于 Intel 卡,directx说 DISPLAY1 属于 NVIDIA 卡。一种解决方案是复制英特尔卡的输出(因为一切都通过它),但 EnumOutputs 不返回任何输出。
目前有一种解决方法:始终使用集成图形控制器运行使用 Duplication API 的应用程序。
问题:如何使 DuplicateOutput 与具有可切换显卡的笔记本电脑上的独立显卡控制器一起工作?还是桌面复制 API 的限制?