我正在使用D3DImage来显示一系列在同一Direct3D Surface上渲染的帧。我的当前逻辑如下:
现在我正在尝试使用单独的Direct3D纹理进行渲染,并在显示之前执行复制到“显示纹理”,这样可以获得更好的结果,但会产生相当大的开销。最好能够知道D3DImage何时完成刷新,并在立即开始渲染下一帧。如果可能的话,如何实现?或者您还有更好的想法吗?
谢谢。
- 显示最后渲染的帧(即 D3DImage.Lock()/AddDirtyRect()/Unlock())
- 开始渲染下一帧
- 等待下一帧准备就绪并且到了展示它的时间
- 显示最后渲染的帧
- ...
现在我正在尝试使用单独的Direct3D纹理进行渲染,并在显示之前执行复制到“显示纹理”,这样可以获得更好的结果,但会产生相当大的开销。最好能够知道D3DImage何时完成刷新,并在立即开始渲染下一帧。如果可能的话,如何实现?或者您还有更好的想法吗?
谢谢。
CompositionTarget.Rendering
有用吗? - Kent BoogaartCompositionTarget.Rendering
作为触发器,在你的D3DImage
上调用Unlock()
(如果你的渲染准备就绪)并安排另一个渲染?这意味着你只会以 WPF 的帧速率(但可能少于此速率)渲染和显示图像。 - Kent BoogaartUnlock()
,你就可以立即开始另一个对D3DImage
的渲染。 调用Lock()
会阻塞,直到WPF渲染线程将后备缓冲区复制到前缓冲区为止。完成渲染后,在下一个CompositionTarget.Rendering
之前等待才调用Unlock()
并重复该过程。如果在控件重新绘制之前完成渲染,这根本没有关系,因为它是从前缓冲区而不是你正在修改的后缓冲区重新绘制的。 - Kent Boogaart