OBS D3D9Capture 思路

为什么80%的码农都做不了架构师?>>>   hot3.png

 init(D3D线程):

  1. CreateOffscreenPlainSurface 创建copy_surface
  2. copy_surface->LockRect 取D3DLOCKED_RECT,得到Pitch,最后UnlockRect
  3. CreateRenderTarget创建一个无抗锯齿RT render_target
  4. CreateQuery D3DQUERYTYPE_EVENT 创建查询事件query

 capture(D3D线程):

  1. GetRenderTarget取0号RT backbuffer
  2. 判断query是否发布(issued_queries == true?)
  3. query->GetData判断事件是否完成(hres == S_OK?)
  4. copy_surface->LockRect以只读形式取出D3DLOCKED_RECT
  5. 通知copythread进行复制
  6. StretchRect从backbuffer复制到render_target N
  7. 如果copy_surfaces在第四步时已经Lock成功,则在此处UnlockRect
  8. GetRenderTargetData从render_targets (N + 1)复制到copy_surfaces(N + 1) 
  9. query->Issue(D3DISSUE_END);通知query已经完成,让其转变为无信号状态
  10. 设置issued_queries = true

思路:第N帧截取第N-1或第N-2帧的图像

转载于:https://my.oschina.net/hzqst/blog/685767

你可能感兴趣的:(OBS D3D9Capture 思路)