Ottenere il massimo delle performace grafiche nella Universal Windows Platform

di Marco Leoncini, in Windows 10,

Nel recente update di Ottobre 2018 di Windows 10, è stato introdotto un nuovo set di API pensato per ottenere il massimo delle performace e un miglior uso della GPU.
Questo nuovo set di API si trova sotto il namespace Windows.UI.Xaml.Core.Direct e permette di creare l'UI non attraverso i classici tipi definiti con XAML, ma attraverso oggetti che implementano IXamlDirectObjects.

Prendiamo ad esempio il seguente XAML:

<Grid x:Name="RootGrid">
 <Border BorderBrush="Black" BorderThickness="5">
     <Rectangle Height="100" Width="100" Fill="Red" />
 </Border>
</Grid>

Lo stesso codice può essere scritto anche utilizzando la sintassi imperativa:

Border border = new Border();
border.BorderBrush = new SolidColorBrush(Colors.Black);
border.BorderThickness = new Thickness(5);

Rectangle rectangle = new Rectangle();
rectangle.Height = 100;
rectangle.Width = 100;
SolidColorBrush rectBrush = new SolidColorBrush(Colors.Red);
rectangle.Fill = rectBrush;

border.Child = rectangle;

RootGrid.Children.Add(border);

Le performace però sono pressoché identiche a quelle ottenute con lo XAML. Di seguito vediamo come ottenere il massimo delle performance. riscrivendo le istruzioni precedenti, questa volta utilizzando il nuovo set di API:

XamlDirectObject border = XamlDirect.CreateInstance(XamlTypeIndex.Border);
XamlDirect.SetThicknessProperty(border, XamlPropertyIndex.Border_BorderThickness, new Thickness(5));

IXamlDirectObject borderBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush);
XamlDirect.SetColorProperty(borderBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Black);
XamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_BorderBrush, borderBrush);

IXamlDirectObject rectangle = XamlDirect.CreateInstance(XamlTypeIndex.Rectangle);
XamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Width, 100);
XamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Height, 100);

IXamlDirectObject rectBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush);
XamlDirect.SetColorProperty(rectBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Red);
XamlDirect.SetXamlDirectObjectProperty(rectangle, XamlPropertyIndex.Shape_Fill, rectangleBrush);

XamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_Child, rectangle);

RootGrid.Children.Add((UIElement) XamlDirect.GetObject(border));

È facile intuire, vista la complessità del codice, che le nuove API non sono pensate per realizzare la normale UI delle nostre applicazioni, ma, piuttosto, per la realizzazione e riscrittura di particolari funzionalità, dove ottenere il massimo delle performance dalla scheda grafica è essenziale.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi