GTK a récemment introduit deux nouveaux moteurs de rendu, "ngl" pour GL et "vulkan" pour Vulkan, tous deux construits à partir de la même source et modélisés pour suivre les API Vulkan afin de faciliter la maintenance et les mises à jour. Bien qu'ils ne soient pas encore plus rapides que l'ancien moteur de rendu GL, ces moteurs "unifiés" apportent de nouvelles fonctionnalités intéressantes telles que l'anticrénelage, la mise à l'échelle fractionnaire ou la prise en charge des dmabuf. ngl est par ailleurs devenu le nouveau moteur de rendu par défaut dans le snapshot 4.13.6 qui vient d'être publié.GTK (anciennement GIMP ToolKit et GTK+) est un ensemble de bibliothèques logicielles multiplateforme libre et gratuite pour la création d'interfaces utilisateur graphiques (GUI). Développée originellement pour les besoins du logiciel de traitement d'images GIMP, GTK est soumis à la licence GNU Lesser General Public License, ce qui permet aux logiciels libres et propriétaires de l'utiliser dans de nombreux projets. GTK est notamment l'une des boîtes à outils les plus populaires pour les systèmes de fenêtrage Wayland et X11.
Récemment, GTK a gagné non pas un, mais deux nouveaux moteurs de rendu : un pour GL et un pour Vulkan. Appelés "ngl" et "vulkan", ils sont construits à partir des mêmes sources, c'est pourquoi ils sont également appelés des moteurs de rendu "unifiés".
Découvrez ce qu'ils ont de si excitant.
Une source unique
Comme cela a déjà été mentionné, les deux moteurs de rendu sont construits à partir de la même source. Ils ont été modélisés pour suivre les API Vulkan, avec quelques abstractions pour couvrir les différences entre Vulkan et GL (plus spécifiquement, GL 3.3+ et GLES 3.0+). Cela permet de partager une grande partie de l'infrastructure pour parcourir le graphe de scène, maintenir les transformations et autres états, mettre en cache les textures et les glyphes, et facilitera la mise à jour et le maintien à niveau des deux moteurs de rendu.
Cette approche unifiée pourrait-elle être étendue, pour couvrir un moteur de rendu basé sur Metal sur macOS ou un moteur de rendu basé sur DirectX sur Windows ? C'est possible. L'avantage de la combinaison Vulkan/GL est qu'ils partagent fondamentalement le même langage de shader (GLSL, avec quelques variations). Ce n'est pas le cas pour Metal ou DirectX. Pour ces plateformes, il faut soit dupliquer les shaders, soit utiliser un outil de traduction comme SPIRV-Cross.
Détails de l'implémentation
L'ancien moteur de rendu GL utilise des shaders simples pour chaque type de nœud de rendu et a souvent recours au rendu hors écran pour les contenus plus complexes. Les moteurs de rendu unifiés ont également des shaders par nœud (plus performants), mais au lieu de s'appuyer sur les écrans extérieurs, ils utiliseront également un shader complexe qui interprète les données à partir d'un tampon. Dans la programmation des jeux, cette approche est connue sous le nom d'ubershader.
L'implémentation du moteur de rendu unifié est moins optimisée que l'ancien moteur de rendu GL et a été écrite en mettant l'accent sur la correction et la maintenabilité. Par conséquent, elle peut gérer correctement des arbres de nœuds de rendu beaucoup plus variés.
Voici un exemple anodin :
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 | repeat {
bounds: 0 0 50 50;
child: border {
outline: 0 0 4.3 4.3;
widths: 1.3;
}
} |
Nouvelles capacités
Tout ce travail n'aurait pas été réalisé s'il n'y avait pas eu des avantages tangibles. Bien sûr, il y a de nouvelles fonctionnalités et capacités. Voyons-en quelques-unes :
L'anticrénelage. L'un des gros problèmes de l'ancien moteur de rendu GL est qu'il perd les détails les plus fins. Si quelque chose est suffisamment petit pour se trouver entre les limites d'une seule ligne de pixels, il disparaîtra tout simplement. Cela peut notamment affecter les soulignés, tels que les mnémoniques. Les moteurs de rendu unifiés gèrent mieux ces cas, en effectuant un anti-crénelage. Cela permet non seulement de préserver les détails fins, mais aussi d'éviter les contours irréguliers des primitives.
Échelle fractionnaire. L'anticrénelage est également la base qui vous permet de gérer correctement les échelles fractionnaires. Si votre fenêtre 1200 × 800 est réglée pour être mise à l'échelle à 125 %, avec les moteurs de rendu unifiés, un framebuffer de taille 1500 × 1000 sera utilisé, au lieu de laisser le...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.