Directx 桌面复制API&;可切换图形

Directx 桌面复制API&;可切换图形,directx,screen-capture,dxgi,video-card,Directx,Screen Capture,Dxgi,Video Card,问题:在具有可切换图形的计算机上使用离散图形控制器运行应用程序时,调用返回不支持的DXGI\u错误 让我们对这个问题有所了解。简而言之,离散图形只渲染屏幕的一部分,并将数据发送到集成图形控制器的帧缓冲区——换句话说,所有输出始终通过集成图形控制器。这似乎就是DuplicateOutput返回不受支持的DXGI\u ERROR\u的原因 我编写了一个示例,该示例使用winapi()&directx(&)获取所有输出及其视频适配器,以便在具有可切换图形(Intel HD 4600和NVIDIA 84

问题:在具有可切换图形的计算机上使用离散图形控制器运行应用程序时,调用返回不支持的DXGI\u错误

让我们对这个问题有所了解。简而言之,离散图形只渲染屏幕的一部分,并将数据发送到集成图形控制器的帧缓冲区——换句话说,所有输出始终通过集成图形控制器。这似乎就是DuplicateOutput返回不受支持的DXGI\u ERROR\u的原因

我编写了一个示例,该示例使用winapi()&directx(&)获取所有输出及其视频适配器,以便在具有可切换图形(Intel HD 4600和NVIDIA 840M)的机器上进行比较。结果是:

不确定我的比较结果是否正确,但您可以看到winapi说DISPLAY1属于Intel卡,directx说DISPLAY1属于NVIDIA卡。一种解决方案是复制Intel卡的输出(因为所有内容都经过它),但EnumOutputs不会为其返回任何输出

目前有一种解决方法:始终使用集成图形控制器运行使用复制API的应用程序

问题:如何在具有可切换图形的笔记本电脑上使用离散图形控制器使DuplicateOutput工作?或者这是桌面复制API的一个限制?

已解决:

不幸的是,出现此问题是因为桌面复制API 不支持在Microsoft上针对离散GPU运行 混合动力系统。根据设计,调用失败时会出现错误代码 这种情况下不支持DXGI\u错误

要解决此问题,请在集成GPU上运行应用程序 而不是在微软混合系统上的离散GPU上


从这里开始:

您的解决方案是如何解决的?如果桌面在集成卡上运行,那么首先需要使用该适配器进行复制,这难道不合理吗?使用离散适配器复制桌面的目标是什么?@MooseBoys,我的目标只是复制屏幕,使用哪个适配器无关紧要。集成或离散适配器的使用由NVIDIA设置决定,而不是由作为开发人员的我决定。默认情况下,对于重型WPF应用程序,将选择离散适配器,并且只有其dxgi对象具有输出(复制返回dxgi_,但不受支持,因为实际上所有内容都通过集成适配器-请参见图片)。因此,解决方法是要求用户在NVIDIA控制面板中强制使用Intel卡。问题是是否有一种没有变通办法的方法