更新时间:2022-01-17 14:50:26
为了与UI并行呈现,执行此操作的干净方法似乎是呈现到单独的D3D图面中,并在调用Lock()和Unlock()之间将其复制到显示图面(即传递给SetBackBuffer的图面)。因此算法变成:
Lock()
SetBackBuffer(displaySurface)
AddDirtyRect()
Unlock()
D3DImage文档explicitely states:
这里的痛点是拷贝,这可能很昂贵(即,如果硬件繁忙,则大于2ms)。为了在解锁D3DImage时使用显示图面(避免渲染时潜在的代价高昂的操作),用户将不得不求助于反汇编和反射来挂钩到D3DImage自己的渲染中.解锁D3DImage时不要更新Direct3D表面。