DirectX11 桌面复制不适用于 NVIDIA

11t*_*ion 6 c++ directx-11

我也尝试使用DirectX 桌面复制 API

\n\n

我尝试运行示例

\n\n

http://www.codeproject.com/Tips/1116253/Desktop-Screen-Capture-on-Windows-via-Windows-Desk

\n\n

并从

\n\n

https://code.msdn.microsoft.com/windowsdesktop/Desktop-Duplication-Sample-da4c696a

\n\n

这两个都是使用 DXGI 进行屏幕捕获的示例。

\n\n

我的机器上NVIDIA GeForce GTX 1060有。Windows 10 Pro它有Intel\xe2\x84\xa2 Core i7-6700HQ处理器。

\n\n

NVIDIA Control Panel > 3D Settings当选择为时,这些示例工作得非常好Auto select processor

\n\n

但是,如果我手动将设置设置为NVIDIA Graphics Card样本将停止工作。

\n\n

以下行发生错误。

\n\n
//IDXGIOutput1* DxgiOutput1\nhr = DxgiOutput1->DuplicateOutput(m_Device, &m_DeskDupl);\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误hr(HRESULT)DXGI_ERROR_UNSUPPORTED 0x887A0004

\n\n

我是 DirectX 新手,我不知道这里的问题,NVIDIA 不支持 DirectX 桌面复制吗

\n\n

如果是这种情况,那么有没有办法在程序启动时选择特定处理器,以便程序可以使用任何设置运行?

\n\n

#编辑

\n\n

环顾四周后,我在codeproject.com上询问了第二个示例项目的开发人员 (Evgeny Pereguda)

\n\n

这是讨论的链接\n https://www.codeproject.com/Tips/1116253/Desktop-Screen-Capture-on-Windows-via-Windows-Desk?msg=5319978#xx5319978xx

\n\n

在 codeproject.com 上发布讨论的屏幕截图,以防原始链接失效

\n\n

与叶夫根尼·佩雷古达的讨论

\n\n

我还在stackoverflow 上找到了一个答案,它明确表明无法使用桌面复制 API 来完成,参考微软支持网站的支持票https://support.microsoft.com/en-us/help/3019314/当桌面重复 api-capable-application-is-ru 时生成错误

\n\n

门票上的报价

\n\n
\n

出现此问题的原因是 DDA 不支持针对 Microsoft 混合系统上的独立 GPU 运行。根据设计,在这种情况下,调用会失败并出现错误代码 DXGI_ERROR_UNSUPPORTED。

\n
\n\n

然而,有一些应用程序可以在我的计算机上以两种模式(集成显卡和独立显卡)有效地复制 Windows 上的桌面。(https://www.youtube.com/watch?v=bjE6qXd6Itw

\n\n

我查看了Virtual Desktop我机器上的安装文件夹,可以看到以下DLLs感兴趣的内容

\n\n
SharpDX.D3DCompiler.dll\nSharpDX.Direct2D1.dll\nSharpDX.Direct3D10.dll\nSharpDX.Direct3D11.dll\nSharpDX.Direct3D9.dll\nSharpDX.dll\nSharpDX.DXGI.dll\nSharpDX.Mathematics.dll\n
Run Code Online (Sandbox Code Playgroud)\n\n

这可能表明该应用程序正在使用 DXGI 来复制桌面,或者该应用程序可能能够在启动之前选择特定的处理器。

\n\n

无论如何,问题仍然存在,是否有其他有效的方法在两种模式下复制桌面?

\n

Rom*_* R. 3

可能的原因是桌面复制 API 的某些内部限制,如针对独立 GPU 运行支持桌面复制 API 的应用程序时生成的错误中所述:

...当应用程序尝试针对 Microsoft 混合系统上的独立 GPU 复制桌面图像时,应用程序可能无法正确运行,或者可能会生成以下错误之一:

  • 无法创建 Windows 交换链,代码为 0x80070005
  • CDesktopCaptureDWM:IDXGIOutput1::重复输出失败:0x887a0004

除了使用不同的 GPU 之外,本文没有建议任何其他解决方法(没有更具体的细节来说明是否可以通过编程方式实现):

要解决此问题,请在 Microsoft 混合系统上的集成 GPU 上运行应用程序,而不是在独立 GPU 上运行。