System.Windows.Media.RenderCapability.Tier不返回渲染模式

时间:2010-06-17 09:18:54

标签: c# .net wpf

我用 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,参见this),但似乎是System.Windows.Media .RenderCapability仅提供有关功能的信息,而不提供有关当前模式的信息。如果我看一下班级的名字,那也是有道理的。

是否有其他来源知道如何呈现实际的wpf内容或我做错了什么?

1 个答案:

答案 0 :(得分:2)

只需将RenderCapability.TierHwndTarget.RenderMode组合在一起,您就会得到您想要的内容:

  • RenderCapability.Tier告诉您当前图形卡支持的内容
  • HwndTarget.RenderMode告诉您WPF是否实际使用GPU
每当Direct3D曲面切换到新的视频卡(例如在显示器之间拖动窗口或将显示切换到新显示器)时,

RenderCapability.Tier会更改并触发TierChanged。

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

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