我有一些D3D11过程中,我挂钩捕捉帧。如果进程调用Present()
,有捕捉框架没有问题,但... 在某些情况下,它是不可见的和不存在()方法被调用,但帧渲染真的。我可以连接Draw()
,ExecudeCommandList()
(和其他)方法。实际上,没有Present()调用,所以我无法访问SwapChain的backbuffer。我想在应用程序运行w/o窗口时没有创建SwapChain。钩到D3D11过程没有现在和抢的Texture2D
当我挂钩Draw()
或ExecuteCommandList()
时,我只能访问D3D11Device
和D3D11DeviceContext
。
使用API监控我抓获D3D11的一些信息要求在每一帧的末尾:
没有人有任何想法,我怎样才能得到的框架?我的目的是让框架进入D3D11Texture2D。
谢谢!
UPD:
我发现,这种方法可以对我有所帮助:ID3D11DeviceContext::ResolveSubresource
,但我不能处理它钩。这是摊销(在主应用程序,我试图抓住帧)。
虚函数表日志的部分:
[56] 5E225520 (CContext::TID3D11DeviceContext_GetResourceMinLOD_<1>)
[57] 5E1B95C0 (CContext::TID3D11DeviceContext_ResolveSubresource_Amortized<1>)
[58] 5E21DEC0 (CContext::TID3D11DeviceContext_ExecuteCommandList_<1>)
谢谢2!
好像你正试图钩使用DirectComposition的应用程序:https://msdn.microsoft.com/en-us/library/windows/desktop/hh437371%28v=vs.85%29.aspx?f = 255&MSPPError = -2147217396。您是否试图连接到Internet Explorer? DirectComposition不会发出Present calls。据我所知,它直接发送(共享)纹理到DWM。您可能需要挂钩DirectComposition或CreateTexture调用,并试图以何种方式捕获纹理内容。 – VuVirt
不,这是使用简单渲染转换的d3d11应用程序。如果输出窗口没有显示,这个应用程序会停止调用'Present'。这是3D游戏中间件。 我试图挂钩'CreateTexure2D',但最好的选择是'ResolveSubresource'。我无法挂钩它,因为它在主应用程序中是** amortized **。 –