The following simple Animation strangely still uses swIRT shown in Perforator.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL-4206yRxZ0ToPKnt5p2ltjtNf8p4tDgqqtSowWOmxVp4AXS2rvvYH9ebGz3PpNISjkDx964jZg2GUkhKjKdMxn8GX5KoCSdqDBEq1bLJiSV2jgbgju6iFGSnraBoQsltxLdtVgBU/s400/swhwRT.png)
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