2010-06-17 63 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足夠高,你就有硬件加速。