我也尝试使用DirectX 桌面复制 API。
\n\n我尝试运行示例
\n\nhttp://www.codeproject.com/Tips/1116253/Desktop-Screen-Capture-on-Windows-via-Windows-Desk
\n\n并从
\n\nhttps://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处理器。
NVIDIA Control Panel > 3D Settings当选择为时,这些示例工作得非常好Auto select processor。
但是,如果我手动将设置设置为NVIDIA Graphics Card样本将停止工作。
以下行发生错误。
\n\n//IDXGIOutput1* DxgiOutput1\nhr = DxgiOutput1->DuplicateOutput(m_Device, &m_DeskDupl);\nRun Code Online (Sandbox Code Playgroud)\n\n错误hr(HRESULT)是DXGI_ERROR_UNSUPPORTED 0x887A0004
我是 DirectX 新手,我不知道这里的问题,NVIDIA 不支持 DirectX 桌面复制吗?
\n\n如果是这种情况,那么有没有办法在程序启动时选择特定处理器,以便程序可以使用任何设置运行?
\n\n#编辑
\n\n问题:当您在具有可切换显卡的计算机上使用独立显卡控制器运行应用程序时,调用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 的限制?
Windows 控制面板中有一个选项可以将应用程序设置为“高性能”。控制面板 -> 系统 -> 显示 -> 图形设置。
在那里添加我的应用程序时,我注意到,当使用 Media Foundation 和 H.265 编码时,它使用 NVIDIA gfx 适配器进行编码。在此之前,它使用嵌入式Intel显卡,只能进行H.264编码,因此H.265编码在CPU中慢慢完成。
如何以编程方式在那里添加我的应用程序?这对我的音序器的性能至关重要。
非常感谢。