0

我想在 GPU 上捕获和压缩屏幕。C++ AMP 和 DXGI 桌面复制各自单独工作,但似乎不能一起工作。

例子:

该项目运行良好,但在 DesktopDuplication.cpp 顶部附近添加最少的 C++ AMP 代码使其失败:

#include <amp.h>
//void f() { Concurrency::direct3d::create_accelerator_view( nullptr ); }
//void f() { Concurrency::accelerator default_acc; }
void f() { Concurrency::accelerator::get_all(); }

即使f()从未被调用,也会m_Factory->CreateSwapChainForHwnd(...)返回E_ACCESSDENIED. (注释的版本f()产生相同的结果。)

在我自己的项目中,当我尝试使用 C++ AMP 时IDXGIOutput1::DuplicateOutput()返回。DXGI_ERROR_UNSUPPORTED

这是怎么回事?


更新:在 NVIDIA 控制面板中,将“首选图形处理器”更改为“集成图形”有效。(但是,最好使用 NVIDIA 卡。)

4

1 回答 1

0

MSDN 并未将此声明为强制性要求,但仍建议您不要在多线程环境中使用 API:

应用程序可以IDXGIOutputDuplication在单独的线程上使用来接收桌面图像并将它们馈送到其特定的图像处理管道中。

也就是说,建议您有一个与捕获更新的特定线程对齐的单个循环,然后您可以自由地利用各种多线程来加速处理。

于 2017-07-25T09:38:11.917 回答