2

多くの画像 (GIS スタイル、タイル画像の表示、ズーム/パンなど) を使用する Silverlight アプリケーションを最適化しています。ビットマップキャッシュ機能を使用して、多くのものを GPU にオフロードすることを考えていました。

しかし、私はそれを機能させることができないようです。私のホストページには正しいパラメーターが含まれています(私は思う?):

    <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>

(はい、キャッシュモードをルート要素に置くのは賢明ではないことはわかっています)

ただし、アプリケーションを起動すると、完全なアプリケーションが赤みを帯びたオーバーレイで表示されます。これは、何もキャッシュされていないことを示しているはずです。

GFX カード用の最新のドライバーが必要であると読みましたが、それで問題ありません。このマシンには、最新のドライバーを搭載した ATI Radeon HD5450 ビデオカードが搭載されています。それが足りないとは思えませんか?

私は困惑しています。誰かがこれを解決する方法を知っているなら、私が狂ってしまうのを防いでください!

4

1 に答える 1

2

MS がこのプロパティに関するドキュメントを台無しにしたと思います。

ドキュメントには、加速されていない場合は色合いが表示され、加速されている場合は着色されないと記載されています。これは本当ですが、異なるプロパティの場合: enableRedrawRegions!

このプロパティは EnableCacheVisualization に似ていますが、再描画ごとに色が変わります。したがって、enableRedrawRegions をオンにすると、再描画が発生したときに表示されます。発生している再描画を視覚化するのがはるかに簡単だと思います。

GPU アクセラレーションのオン/オフを切り替えると、GPU がオンの場合、CPU によってアニメーション化されたオブジェクトの再描画がないことがわかります (代わりに GPU によって行われます)。オフにすると、多くの再描画が表示されます。

次に、enableRedrawRegions をオフにして、EnableCacheVisualization をオンにします。GPU アクセラレーションをオフにすると、すべてが正常に見えることがわかります。オンにすると、すべてが色付きに見えます。色付きのDOESは加速を意味し、ドキュメントの状態とは反対です。

これをテストするのに適したプロジェクトは、ブログhttp://andybeaulieu.com/Home/tabid/67/EntryID/193/Default.aspxにあります。これは、CPU アクセラレーションの恩恵を受ける回転する電話を示しており、プロパティを切り替えることで、GPU で何が起こっているかを確認できます。

グレッグ

于 2012-09-18T20:19:27.530 に答える