Quels sont les avantages d'utiliser la librairie graphique Skia dans les projets Delphi FireMonkey ?

 

Skia est une librairie graphique open source à l'initiative de Google. Elle est utilisée dans de très nombreux projets dont Google Chrome. Elle a fait ses preuves et est optimisée pour de nombreux types de configurations avec ou sans processeur graphique (GPU).

FireMonkey est le framework de composants disponibles dans Delphi pour le développement d'applications desktop (Windows, Mac, Linux) comme mobiles (iOS, Android). Les éléments visuels de ce framework sont dessinés à l'écran (sauf pour certains composants pour lesquels on peut activer le comportement hérité de la plateforme d'exécution). Ca implique un temps de calcul plus élevé que pour afficher un écran classique développé en VCL sous Windows.

FireMonkey s'appuit sur les librairies graphiques disponibles sur les différents systèmes d'exploitation pris en charge mais n'est pas toujours optimisée par rapport à ces SDK. Pour les applications bureautiques ça ne se voit que lorsqu'on a vraiment beaucoup de choses à l'écran donc pour de gros projets et les portages multiplateforme d'anciens projets VCL. Pour de petits projets, le temps de dessin des écrans est insignifiant.

Comme vous le savez je développe régulièrement de petits jeux vidéo, essentiellement avec Delphi et FireMonkey, et là, ça coince parfois. Généralement pas de soucis de temps de réponse, les programmes compilés sont rapides (si on fait les choses proprement en amont), mais il arrive que ça coince sur certaines plateformes à cause de subtilités qui n'auraient pas été prises en compte lors du développement de FMX et perdurent selon les versions des OS. Quand c'est un bogue, le reproduire est généralement faisable et du coup un signalement peut se faire, mais il arrive que ce ne soit pas possible. Utilisant des trucs qui ne sont pas utilisés en temps normal ou détournant un comportement standard, il est normal de découvrir des anomalies que personne n'avait vues jusque là.

C'est là qu'intervient la librairie Skia4Delphi.

Elle propose deux choses :

- un "Canvas Skia" et des composants VCL + FMX permettant de travailler dessus

- le remplacement de la librairie graphique par défaut dans les projets FMX par Skia

Sur le premier point, ce sont des composants en plus avec des capacités graphiques étonnantes qu'on n'avait pas de base et de nombreux formats de fichiers exploitables, mais ça ne n'entre en jeu que si on s'en sert.

La seconde possibilité est en revanche bien plus importante : tout projet FMX peut simplement bénéficier de la vitesse et des capacités de la librairie Skia en activant simplement Skia4Delphi sur le projet et en mettant un simple "UseGlobalSkia := true;" en démarrage du programme ou dans le bloc d'initialisation d'une unité.

En faisant ça, les Canvas habituels de FireMonkey sont surchargés par celui de Skia et les opérations de dessin des fiches, composants et images se font par la librairie graphique en passant par le portage effectué sur Skia4Delphi.

L'avantage, c'est que des trucs qui ne s'affichent pas correctement avec FMX fonctionnent correctement avec FMX+Skia. Les temps de réponse lors du dessin et de l'affichage des écrans sont réduits sur la plupart des configurations.

Embarcadero a organisé plusieurs présentations autour de la librairie Skia4Delphi et soutient officiellement ce projet qui est le bienvenu pour les développeurs FMX désireux d'avoir des possibilités graphiques supplémentaires à ce que fournissait déjà le framework.

La dernière en date, au moment où j'écris ce texte, a été faite par Ian Barker et Jim McKeeth. Je vous ai mis son teaser en vidéo.

La rediffusion complète, les pages de la présentation et les liens diffusés lors de cette présentation sont disponible sur ce billet de blog. La démo des vagues codées en shaders, nécessitant une capacité importante de calcul, est vraiment bluffante. J'ai pu la voir tourner sur un écran large (triple 4K en résolution) compilé sur Mac Studio M1 Ultra et franchement, j'ai hâte que Apple nous en sorte un en iMac Pro pour remplacer mon iMac de 2011...

Pour tout un tas de raisons je vous recommande de regarder cette présentation et vous intéresser à Skia4Delphi. Activez la librairie sur vos projets afin de voir ce que ça donne. Si ça coince, remontez l'info ou désactivez la simplement au niveau de votre projet pour reprendre le fonctionnement standard de FireMonkey.