System.Windows.Media.RenderCapability.Tier不返回渲染模式
我使用System.Windows.Media.RenderCapability.Tier在我的应用程序的诊断面板中显示当前的渲染模式。 如果我通过以下代码强制应用程序(3.5sp1)更改渲染模式
HwndSource hwndSource = PresentationSource.FromVisual(visual) as System.Windows.Interop.HwndSource; HwndTarget hwndTarget = hwndSource.CompositionTarget; hwndTarget.RenderMode = renderMode;
System.Windows.Media.RenderCapability.TierChanged既不会触发,也不会更改System.Windows.Media.RenderCapability.Tier属性。 但是,更改将应用于应用程序。 如果我查看Perforator ,渲染模式已更改为所需模式。
虽然我在很多地方都发现System.Windows.Media.RenderCapability.Tier可以用来检测当前的渲染状态(也就是msdn,看看这个 ),但似乎System.Windows.Media.RenderCapability只提供了有关function而不是当前模式。 如果我看一下class级的名字,那也是有道理的。
有没有其他来源知道如何呈现实际的wpf内容或我做错了什么?
只需将RenderCapability.Tier
和HwndTarget.RenderMode
结合在一起,您就可以得到您想要的东西:
- RenderCapability.Tier告诉您当前图形卡支持的内容
- HwndTarget.RenderMode告诉您WPF是否实际使用GPU
只要Direct3D曲面切换到新的video卡(例如在监视器之间拖动窗口或将显示切换到新监视器),RenderCapability.Tier就会更改并触发TierChanged。
HwndTarget.RenderMode仅由用户代码更改,但在更改时没有通知机制。 如果您只在一个地方设置它,您可以从那里简单地通知,否则您可能需要使用计时器定期检查它。
基本上如果HwndTarget.RenderMode == RenderMode.Default和RenderCapability.Tier足够高,你就有硬件加速。