2016-11-22 84 views
0

我想要捕獲和壓縮GPU上的屏幕。 C++ AMP和DXGI Desktop Duplication各自單獨工作,但似乎並不一起工作。Desktop Duplication和C++ AMP不兼容?

例子:

This project的偉大工程,但增加最少的C++ AMP代碼附近DesktopDuplication.cpp的頂部使得它失敗:

#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顯卡是首選。)

回答

0

MSDN沒有說明這是一個強制性的要求,但still suggests,你不跨越mutlithreaded環境中使用API​​:

的應用可以在單獨的線程上使用IDXGIOutputDuplication來接收桌面圖像並將它們饋送到其特定的圖像處理管道中。

也就是說,建議您有一個與捕獲更新的特定線程對齊的單個循環,並且您可以進一步利用各種多線程來加速處理。