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.TierHwndTarget.RenderMode结合在一起,您就可以得到您想要的东西:

  • RenderCapability.Tier告诉您当前图形卡支持的内容
  • HwndTarget.RenderMode告诉您WPF是否实际使用GPU

只要Direct3D曲面切换到新的video卡(例如在监视器之间拖动窗口或将显示切换到新监视器),RenderCapability.Tier就会更改并触发TierChanged。

HwndTarget.RenderMode仅由用户代码更改,但在更改时没有通知机制。 如果您只在一个地方设置它,您可以从那里简单地通知,否则您可能需要使用计时器定期检查它。

基本上如果HwndTarget.RenderMode == RenderMode.Default和RenderCapability.Tier足够高,你就有硬件加速。