- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在研究实现 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,框架永远不会更新。是什么原因造成的?是否存在可能导致此问题的已知情况?
最佳答案
IDXGIOutputDuplication::AcquireNextFrame
有充分的理由在没有框架的情况下返回。因此,您确实可能需要进行几次尝试并检查 LastPresentTime
是否为非零。
代码片段有两个问题:
hr
对零的检查不太准确ReleaseFrame
成功调用 AcquireNextFrame
所以是关于这个的:
while (true)
{
hr = duplication->AcquireNextFrame(INFINITE, &frame_info, &desktop_resource);
if (FAILED(hr))
{
// TODO: Handle error
}
if (frame_info.LastPresentTime.QuadPart)
{
break;
}
duplication->ReleaseFrame(); // TODO: check returned value here as well
}
关于c++ - DXGI API : AcquireNextFrame() never grabs an updated image, 总是空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51681923/
深度模板缓冲区资源定义为DXGI_FORMAT_D24_UNORM_S8_UINT格式。 我假设要在该资源中创建着色器资源 View (SRV),需要将 View 格式描述为: DXGI_FORMAT
我设置了一个 DX12 应用程序,该应用程序仅清除每帧的后缓冲区。 它确实是准系统:没有 PSO,没有 root...唯一的特殊性是,它在启动新帧 ( msdn waitable swap chain
不仅 fps 从 60 下降到 20-21,而且图像看起来像这样扭曲。第二张图应该是这样的 What it looks like What it should look like if (captur
我正在尝试通过 TextOut 移动文本 这是代码 IDXGISurface1* g_pSurface1 = NULL; HRESULT hr = pSwapChain->GetBuffer(0, _
使用 DXGI,我可以获得所有显卡的列表。 IDXGIFactory* factory; vector all_adapters; HRESULT result(S_FALSE); result =
我正在用 DirectX 12 处理的空白交换链填充一个窗口。在使用 Explicit Multi-Adapter 玩一圈时,我遇到了这种奇怪的行为...... 如目前存在的几乎所有 DX12 演示代
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我发现使用翻转模型(DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 或 DXGI_SWAP_EFFECT_FLIP_DISCARD)创建的交换链被锁定到 VSync(1/60 秒),
https://msdn.microsoft.com/en-us/library/windows/desktop/bb174562(v=vs.85).aspx 根据 IDXGIResource::Ge
https://msdn.microsoft.com/en-us/library/windows/desktop/bb174562(v=vs.85).aspx 根据 IDXGIResource::Ge
因此,我一直在学习创建直接 x 窗口的教程。运行教程代码发现 here我收到 DXGI.h 文件的一系列错误。主要是一系列的: C:\Program Files (x86)\Microsoft Dir
我正在使用 AcquireNextFrame 来截取我的桌面。是否可以在设置中设置我想要的输出图像的尺寸?我在文档中看到这个函数 IDXGIOutput::SetDisplaySurface 可以提供
我正在尝试使用 C++ 查询 Windows 机器以获得可用显卡的列表。 这个 SO 问题有一个答案(来自 moxize),它提供了一种方法(d3d9.h): get-the-graphics-car
我目前正在尝试使用 DirectX 创建一些基本的,但我目前卡住了,因为我似乎无法找到外部符号“CreateDXGIFactory2”。 我已经包含了库“dxgi.lib”,但找不到外部符号。我也查看
当我将其中一台显示器切换到全屏模式时,有时其他显示器会变成黑色并且不显示任何内容。是我做错了什么还是只是一些错误? 我创建了一个窗口,然后创建了一个绑定(bind)到该窗口的交换链。我用第一个参数 t
我正在调用这个方法: http://msdn.microsoft.com/en-us/library/dd371264(VS.85).aspx 调用失败并返回 E_NOINTERFACE。该文档对于为
我需要将 DXGI_FORMAT_R32G32B32A32_TYPELESS 类型的 ID3D11Texture2D 纹理有效地转换为 DXGI_FORMAT_B8G8R8A8_TYPELESS 类型
我想了解 DXGI 桌面复制。我已经阅读了很多,这是我从 Microsoft 网站上的 DesktopDuplication 示例部分复制的代码。我的计划是从 DesktopImage 获取 Buff
刚刚在尝试获取可用的显示模式时遇到了一个奇怪的问题。让我解释一下... 首先,我枚举可用的适配器,然后推送到 std::vector,这工作正常: for(UINT i = 0; pFactory->
我有一个使用 DXGI 桌面复制 API 捕获桌面屏幕的程序。 我使用 IDXGIOutputDuplication::AcquireNextFrame 获取帧,并且能够逐帧捕获我的桌面。 为了继续前
我是一名优秀的程序员,十分优秀!