2012-09-17 74 views
2

我正在優化使用大量圖像(GIS風格,顯示平鋪圖像,縮放/平移/等等)的silverlight應用程序,並且我正在考慮使用位圖緩存功能,它應該將一堆東西卸載到GPU上。Silverlight + Bitmapcache:無法使其工作

但是,我似乎無法得到它的工作。我的主頁包含正確PARAMS(我認爲):

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 
     <param name="EnableCacheVisualization" value="true" /> 
     <param name="EnableGPUAcceleration" value="true" /> 
     <param name="EnableFramerateCounter" value="true" /> 
     <param name="source" value="ClientBin/BitmapCaching.xap"/> 
     <param name="onError" value="onSilverlightError" /> 
     <param name="background" value="white" /> 
     <param name="minRuntimeVersion" value="5.0.61118.0" /> 
     <param name="autoUpgrade" value="true" /> 
     <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none"> 
      <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/> 
     </a> 
    </object> 

我的XAML應該啓用緩存,以及:

<UserControl x:Class="BitmapCaching.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White" CacheMode="BitmapCache"> 
     <Rectangle x:Name="img" Width="200" Height="200" Stroke="Black"> 
      <Rectangle.Fill> 
       <ImageBrush ImageSource="/BitmapCaching;component/download.jpg" /> 
      </Rectangle.Fill> 
      <Rectangle.RenderTransform> 
       <RotateTransform /> 
      </Rectangle.RenderTransform> 
     </Rectangle> 
     <Button Content="Scale" Height="40" Width="100" Click="Button_Click" /> 
    </Grid> 
</UserControl> 

(是的,我知道這不是聰明地把CacheMode參數上根元素)

但是,當我啓動應用程序時,完整的應用程序會顯示紅色疊加層。這應該表明沒有任何被緩存。

我讀過,你需要一個最近的驅動程序爲您的GFX卡,但應該沒問題。這臺機器配有最新驅動程序的ATI Radeon HD5450顯卡。我無法想象這還不夠?

我很難過。如果有人知道如何解決這個問題,請把我從瘋狂中解救出來!

回答

2

我相信MS搞砸了這個屬性的文檔。

該文檔指出,如果未加速,則會顯示色調,如果加速則顯示爲未着色。這是真的,但對於不同的屬性:enableRedrawRegions!

此屬性與EnableCacheVisualization類似,但它會更改每次重繪的顏色。所以如果你打開enableRedrawRegions,你會看到重畫。我發現這很容易可視化正在發生的重繪。

通過打開/關閉GPU加速,您將看到GPU開啓後,CPU不會重新繪製動畫(由gpu代替)對象。關閉它,你會看到很多重繪。

然後關閉enableRedrawRegions並打開EnableCacheVisualization。你會看到,關閉GPU加速,一切看起來很正常。打開它,一切都看起來有顏色。意思是彩色的意思是加速的,與文檔陳述相反。

一個很好的項目來測試這個是從這個博客:http://andybeaulieu.com/Home/tabid/67/EntryID/193/Default.aspx。它顯示了一個旋轉式手機,它受益於CPU加速以及切換屬性,您可以看到GPU正在發生的事情。

Greg

+0

看起來確實如此。謝謝,清理了很多! –