您的位置:首页 > 其它

OBS D3D9Capture 思路

2016-06-02 00:00 323 查看
init(D3D线程):

CreateOffscreenPlainSurface 创建copy_surface

copy_surface->LockRect 取D3DLOCKED_RECT,得到Pitch,最后UnlockRect

CreateRenderTarget创建一个无抗锯齿RT render_target

CreateQuery D3DQUERYTYPE_EVENT 创建查询事件query

capture(D3D线程):

GetRenderTarget取0号RT backbuffer

判断query是否发布(issued_queries == true?)

query->GetData判断事件是否完成(hres == S_OK?)

从copy_surface->LockRect以只读形式取出D3DLOCKED_RECT

通知copythread进行复制

StretchRect从backbuffer复制到render_target N

如果copy_surfaces在第四步时已经Lock成功,则在此处UnlockRect

GetRenderTargetData从render_targets (N + 1)复制到copy_surfaces(N + 1)

query->Issue(D3DISSUE_END);通知query已经完成,让其转变为无信号状态

设置issued_queries = true

思路:第N帧截取第N-1或第N-2帧的图像
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  D3D9 OBS