De nouveaux moteurs de rendu pour OpenGL et Vulkan ont été ajoutés à GTK

Les développeurs de la bibliothèque GTK ont annoncé la disponibilité de deux nouveaux moteurs de rendu — «ngl» et «vulkan», utilisant les API graphiques OpenGL (GL 3.3+ et GLES 3.0+) et Vulkan. Les nouveaux moteurs sont inclus dans la version expérimentale de GTK 4.13.6. Dans la branche expérimentale de GTK, le moteur ngl est maintenant utilisé par défaut, mais si des problèmes majeurs sont détectés, le vieux moteur de rendu «gl» sera rétabli dans la prochaine version stable 4.14.

Les nouveaux moteurs sont positionnés comme unifiés et construits à partir d'une base de code unique. L'unification signifie qu'une API Vulkan est utilisée comme base, sur laquelle un niveau d'abstraction distinct pour OpenGL a été créé, tenant compte des différences entre OpenGL et Vulkan. Cette approche a permis de faire appel à une infrastructure commune dans les deux moteurs pour le traitement du graphe de scène, les transformations, le caching des textures et des glyphes. L'unification a également considérablement simplifié la maintenance de la base de code des deux moteurs et leur mise à jour dans un état actuel et synchronisé.

Contrairement à l'ancien moteur «gl», qui utilisait un simple shader distinct pour chaque type de nœud de rendu (rendernode) et effectuait un tri périodique des données lors du rendu hors écran (offscreen), les nouveaux moteurs appliquent un shader complexe (ubershader), interprétant les données du tampon. Dans sa forme actuelle, la nouvelle implémentation est encore en retard par rapport à l'ancienne en termes d'optimisations, car l'accent est mis à ce stade sur la correction du fonctionnement et la simplicité de maintenance.

Nouvelles fonctionnalités absentes dans l'ancien moteur «gl» :

  • Lissage des contours — permet de conserver les petits détails et d'obtenir des contours plus lisses.
    De nouveaux moteurs de rendu pour OpenGL et Vulkan ont été ajoutés à GTK
  • Formation de dégradés arbitraires, pouvant utiliser n'importe quel nombre de couleurs et l'antialiasing (dans le moteur «gl», seuls des dégradés linéaires, radiaux et coniques avec 6 couleurs d'arrêt étaient pris en charge).
    De nouveaux moteurs de rendu pour OpenGL et Vulkan ont été ajoutés à GTK
  • Mise à l'échelle fractionnaire (fractional scale), permettant de définir des valeurs de mise à l'échelle non entières, par exemple, avec une mise à l'échelle de 125 % pour une fenêtre de 1200×800, un tampon de 1500×1000 sera alloué, et non 2400×1600 comme dans l'ancien moteur.
  • Support de la technologie DMA-BUF pour l'utilisation de plusieurs GPU et l'exécution d'opérations spécifiques sur un autre GPU.
  • De nombreux nœuds de rendu sont correctement traités, ce qui posait des problèmes dans l'ancienne implémentation.

Les limitations des nouveaux moteurs incluent l'absence de support pour le positionnement par valeurs non entières (fractional position) et les nœuds glshader, qui étaient fortement liés aux spécificités de l'ancien moteur, et dont l'utilité a disparu après l'ajout du support des nœuds avec masques (mask) et des textures avec transparence. Il est également mentionné la probabilité d'émergence de problèmes potentiels avec les pilotes graphiques en raison du changement de méthode de travail avec eux.

À l'avenir, sur la base du nouveau modèle unifié, il est possible de créer des moteurs de rendu utilisant Metal sur macOS et DirectX sur Windows, mais la création de tels moteurs est compliquée par l'utilisation de langages différents pour les shaders (dans les moteurs « ngl » et « vulkan », le langage GLSL est utilisé, donc pour Metal et Direct, il faudra soit dupliquer les shaders, soit utiliser une couche basée sur l'outil SPIRV-Cross).

Parmi les projets futurs, il est prévu d'assurer le support HDR et des moyens pour une gestion correcte des couleurs, le support du chemin de rendu (Path rendering) côté GPU, la possibilité de rendre des glyphes, le rendu en dehors du thread principal et l'optimisation des performances pour les appareils anciens et peu puissants. Dans son état actuel, la performance du moteur « vulkan » est proche de celle de l'ancien moteur « gl ». Le moteur « ngl » est en retard par rapport à l'ancien moteur « gl », mais les performances actuelles suffisent pour un rendu à 60 ou 144 FPS. Il est supposé que la situation changera après optimisation.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster