我有一些 D3D11 进程正在挂钩以捕获帧。如果进程调用Present()
,捕获帧是没有问题的,但是......在某些情况下它没有可见窗口并且没有调用 Present() 方法,但是帧确实被渲染了。我可以连接Draw()
,ExecudeCommandList()
(和其他)方法。实际上,没有调用 Present() 所以我无法访问 SwapChain 的后台缓冲区。我想当应用程序在没有窗口的情况下运行时没有创建 SwapChain。
当我 hook Draw()
orExecuteCommandList()
时,我只能访问D3D11Device
and D3D11DeviceContext
。
使用 API 监视器,我在每一帧结束时捕获了有关 D3D11 调用的一些信息:
有谁知道我怎样才能得到结果帧?我的目的是将框架放入 D3D11Texture2D。
谢谢!
升级版:
我发现这种方法对我有帮助:ID3D11DeviceContext::ResolveSubresource
,但我无法处理它。它是摊销的(在主应用程序中我试图抓取框架)。
VTable 日志的一部分:
[56] 5E225520 (CContext::TID3D11DeviceContext_GetResourceMinLOD_<1>)
[57] 5E1B95C0 (CContext::TID3D11DeviceContext_ResolveSubresource_Amortized<1>)
[58] 5E21DEC0 (CContext::TID3D11DeviceContext_ExecuteCommandList_<1>)
谢谢2!