OBS D3D9Capture 思路
为什么80%的码农都做不了架构师?>>>
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帧的图像
转载于//my.oschina.net/hzqst/blog/685767
还没有评论,来说两句吧...