C++ DXGI桌面复制API何时将区域标识为移动区域?
我有一个使用DXGI桌面复制API捕获桌面屏幕的程序 我使用C++ DXGI桌面复制API何时将区域标识为移动区域?,c++,directx,dxgi,C++,Directx,Dxgi,我有一个使用DXGI桌面复制API捕获桌面屏幕的程序 我使用IDXGIOutputDuplication::AcquireNextFrame获取帧,并且能够一帧一帧地捕获桌面帧 为了前进,我尝试优化我的程序,并尝试管理脏的和移动的矩形。API提供了IDXGIOutputDuplication::GetFrameDirectRects和IDXGIOutputDuplication::GetFrameMoveRects来获取这些信息 然而,似乎从来没有任何矩形被标识为正在移动。文档中说移动的矩形是:
IDXGIOutputDuplication::AcquireNextFrame
获取帧,并且能够一帧一帧地捕获桌面帧
为了前进,我尝试优化我的程序,并尝试管理脏的和移动的矩形。API提供了IDXGIOutputDuplication::GetFrameDirectRects
和IDXGIOutputDuplication::GetFrameMoveRects
来获取这些信息
然而,似乎从来没有任何矩形被标识为正在移动。文档中说移动的矩形是:
操作系统显示的桌面映像中像素的矩形
已移动到同一图像中的其他位置
这到底是什么意思?DXGI能否识别屏幕的任意部分已被移动?或者这只适用于正在移动的桌面窗口?我只能想象它取决于图形驱动程序、监视器等,因此可能很难给出源操作的完整列表
我玩了一个桌面复制api示例应用程序,当我最大化资源管理器窗口(windows 10周年纪念,surface pro 3,无外部屏幕)时,出现了一个移动矩形事件。在我的测试中,所有更改的区域都被标识为windows 10上的脏矩形。
在Windows Server 2012(如Windows 8)上,可以正确识别移动的区域。FWIW我能够在VMWare托管的Windows Server 2012 R2数据中心上,使用VMWare SVGA 3D显示适配器获取移动矩形