Noesis Gui

教程20:优化NoesisGUI性能

2020-03-14  本文已影响0人  YottaYuan

优化NoesisGUI性能

本部分旨在作为参考指南,介绍提高NoesisGUI性能的方法。

渲染效果

注意

Optimizing1.png

为了优化图形性能,XamlPlayer具有一个“统计”面板,可以使用CTRL + F进行切换。此信息也可以在IView界面中以编程方式获得。

抗锯齿

NoesisGUI实现了一种非常快速的抗锯齿算法,可以用来代替GPU全屏抗锯齿。要使用它,您必须在视图中激活PPAA(按原始算法)算法。PPAA通过拉伸使三角形平滑的三角形轮廓来实现抗锯齿。路径虽然略有改变。

尽管取决于硬件,但是PPAA通常比GPU MSAA快很多。我们建议尽可能使用它。我们的应用程序框架默认启用PPAA

不透明度组

只要有可能,就必须避免元素的不透明度属性,因为它可能导致使用屏幕外的表面。统计面板中的SetRT计数器指示使用的屏幕外表面的数量。

例如,在以下XAML中:

<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Background="Aqua" Width="500" Height="500">

    <Rectangle Fill="#FFFF0000" Width="100" Height="100" Opacity="0.50"/>
    <Rectangle Fill="#80FF0000" Width="100" Height="100"/>

</StackPanel>

尽管两个矩形的外观相同,但第一个矩形将呈现为屏幕外的纹理,然后将其复制到主表面。当只有一个节点时(例如在此示例中),不要使用这种不透明度非常重要。在这些情况下,最好将alpha传递到笔刷,如第二个示例所示。我们将来可以检测和优化此情况,但最好不要依赖它。

当您使用Brush设置元素的FillStroke时,最好设置Brush.Opacity值,而不是设置元素的Opacity属性。

小费

在XamlPlayer中,Overdraw调试模式(CTRL + O)以红色显示不透明。

批处理

通常,必须使用最少数量的路径。如果您可以折叠同一条路径中的多条路径,这将提高渲染性能,因为发送到GPU的绘制调用(批处理)的数量已降至最低。只要您的内容允许,就执行此操作。即使您不这样做,NoesisGUI也可以通过遵循以下规则来优化批处理数量:

统计面板显示每种画笔的三角形百分比。您还可以在XamlPlayer中激活Batching Debug Mode批处理调试模式)(CTRL + B),以使用不同的颜色显示每个批处理。

共享资源

尽可能使用字典共享资源。这是减少内存使用量的关键,但提高渲染性能也很重要,因为它使我们可以改进批处理。在Blend中使用资源非常容易,您只需单击资源的白点并选择“转换为新资源...”。

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Grid.Resources>
    <GradientStopCollection x:Key="grad">
      <GradientStop Offset="0" Color="Red"/>
      <GradientStop Offset="1" Color="Yellow"/>
    </GradientStopCollection>
  </Grid.Resources>

  <StackPanel>
    <Rectangle Width="200" Height="100" Margin="10">
      <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"
          GradientStops="{StaticResource grad}"/>
      </Rectangle.Fill>
    </Rectangle>
    <Rectangle Width="200" Height="100" Margin="10">
      <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"
          GradientStops="{StaticResource grad}"/>
      </Rectangle.Fill>
    </Rectangle>
  </StackPanel>
</Grid>

加载时间

使用多个资源词典来组织样式和资源是一个好习惯。但是请记住,每次在XAML中引用资源字典时,都会加载该字典并重新创建其所有资源。因此,如样式指南中所述,建议将这些词典(如果它们在整个应用程序中一起使用)包含在全局词典中,因此它们仅被加载一次并且始终可以访问。

上一篇下一篇

猜你喜欢

热点阅读