The following simple Animation strangely still uses swIRT shown in Perforator.

It turns out that WPF Rendering pipe need to rasterize DrawingBrush in software and hand over to GPU. And the only solution is to use RenderingOption,CachingHint on DrawingBrush <Window x:Class="WpfApplication5.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <DrawingBrush x:Key="MyBlueGridBrushResource" Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile" RenderOptions.CachingHint="Cache" RenderOptions.CacheInvalidationThresholdMaximum="1000" RenderOptions.CacheInvalidationThresholdMinimum="0.5"> <DrawingBrush.Drawing> <DrawingGroup> <DrawingGroup.Children> <GeometryDrawing Brush="White"> <GeometryDrawing.Geometry> <RectangleGeometry Rect="0,0,1,1" /> </GeometryDrawing.Geometry> </GeometryDrawing> </DrawingGroup.Children> </DrawingGroup> </DrawingBrush.Drawing> </DrawingBrush> </Window.Resources> <DockPanel Margin="10"> <Canvas Width="250" Height="250" Background="{StaticResource MyBlueGridBrushResource}"> <Rectangle Height="50" Width="50" Fill="#CCCCCCFF" Stroke="Blue" StrokeThickness="2" Canvas.Left="100" Canvas.Top="100"> <Rectangle.RenderTransform> <ScaleTransform x:Name="MyAnimatedScaleTransform" CenterX="25" CenterY="25" ScaleX="1" ScaleY="1" /> </Rectangle.RenderTransform> </Rectangle> <Rectangle Height="50" Width="50" Stroke="#99000000" StrokeDashArray="4,1" StrokeThickness="2" Canvas.Left="100" Canvas.Top="100" /> </Canvas> <DockPanel HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="10"> <Button Name="startButton" Margin="0,0,2,0">Start</Button> <DockPanel.Triggers> <EventTrigger SourceName="startButton" RoutedEvent="Button.Click"> <BeginStoryboard Name="myBeginStoryboard"> <Storyboard> <DoubleAnimation Storyboard.TargetName="MyAnimatedScaleTransform" Storyboard.TargetProperty="ScaleX" From="0" To="5" Duration="0:0:2" /> <DoubleAnimation Storyboard.TargetName="MyAnimatedScaleTransform" Storyboard.TargetProperty="ScaleY" From="0" To="5" Duration="0:0:2" /> </Storyboard> </BeginStoryboard> </EventTrigger> </DockPanel.Triggers> </DockPanel> </DockPanel> </Window>
No comments:
Post a Comment