我使用 Microsoft 桌面复制 API,如果我的代码在集成(英特尔)显卡上运行,则一切正常。但如果我在专用卡上运行,则会出现错误。
我发现Microsoft 不支持Microsoft 混合系统上的专用卡上的这种用法
DXGI_ERROR_UNSUPPORTED
Run Code Online (Sandbox Code Playgroud)
类似的问题没有解决我的需求:
解决方法是在集成卡上启动该程序。
我想从代码中解决这个问题。
我发现可以从我的代码中强制使用 NVIDIA / AMD 卡
DXGI_ERROR_UNSUPPORTED
Run Code Online (Sandbox Code Playgroud)
问题:当您在具有可切换显卡的计算机上使用独立显卡控制器运行应用程序时,调用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 卡。一种解决方案是复制 Intel 卡的输出(因为一切都经过它),但 EnumOutputs 不返回任何输出。
目前有一个解决方法:始终使用集成图形控制器运行使用复制 API 的应用程序。
问题:如何使 DuplicateOutput 与具有可切换显卡的笔记本电脑上的独立显卡控制器配合使用?或者这是桌面复制 API 的限制?