2010-06-17 49 views
2

我使用 System.Windows.Media.RenderCapability.Tier显示我的应用程序的诊断面板中的当前渲染模式。 如果我强迫应用程序(3.5SP1)通过下面的代码System.Windows.Media.RenderCapability.Tier不返回渲染模式

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。等级属性发生了变化。但是这些更改已应用于应用程序。如果使用Perforator查看,则渲染模式已更改为所需的模式。

虽然我已经在那System.Windows.Media.RenderCapability.Tier可用于检测当前渲染状态许多地方发现(也MSDN,看到this),看来,只有System.Windows.Media.RenderCapability提供有关功能的信息,而不是有关当前模式的信息。如果我查看课程的名称,这也很有意义。

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

回答

2

只是结合RenderCapability.TierHwndTarget.RenderMode在一起,你会得到你在找什么:

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

RenderCapability.Tier变化和火灾TierChanged Direct3D的表面切换到一个新的视频卡(例如,窗口被监视器或开关之间拖动任何时间显示到新的监视器)。

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

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