我一直在玩别人的实现 DXGI 桌面复制 API 的代码,我遇到了一个奇怪的问题。这是我正在使用的代码的 github 链接。
https://github.com/diederickh/screen_capture/blob/master/src/test/test_win_api_directx_research.cpp
所有代码都可以正常工作,直到我尝试查看 D3D11_MAPPED_SUBRESOURCE map.pData 中的内容,我得到的只是一个空白屏幕,特别是它是一组重复的 0xFF000000,全 alpha 为黑色。在寻找其他解决方案时,我发现有人使用 while 循环来检查框架何时成功更新,从而解决了这个问题。
while (true)
{
hr = duplication->AcquireNextFrame(INFINITE, &frame_info, &desktop_resource);
if (hr && frame_info.LastPresentTime.QuadPart)
{
break;
}
}
但是,当我运行此代码时,控制台永远不会退出并继续永远运行。显然,根据 frame_info.LastPresentTime.QuadPart,框架永远不会更新。这可能是什么原因造成的?是否存在可能导致这种情况的已知情况?