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. De nouveaux moteurs sont inclus dans la version expérimentale de GTK 4.13.6. Dans la branche expérimentale GTK, le moteur ngl est désormais utilisé par défaut, mais si des problèmes importants sont identifiés dans la prochaine branche stable 4.14, l'ancien moteur de rendu "gl" sera renvoyé.

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

Contrairement à l'ancien moteur gl, qui utilisait un shader simple séparé pour chaque type de nœud de rendu et triait périodiquement les données pendant le rendu hors écran, les nouveaux moteurs, au lieu du rendu hors écran, utilisent un shader complexe (ubershader) qui interprète les données du tampon. . Dans sa forme actuelle, la nouvelle implémentation est encore en retard par rapport à l'ancienne en termes de niveau d'optimisation, puisque l'accent principal au stade actuel est mis sur le bon fonctionnement et la facilité de maintenance.

Nouvelles fonctionnalités qui manquent dans l'ancien moteur gl :

  • Lissage des contours - vous permet de préserver les détails fins 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 anti-aliasing (dans le moteur gl, seuls les 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
  • Échelle fractionnaire, qui permet de définir des valeurs d'échelle non entières, par exemple, lors de l'utilisation d'une échelle de 125 % pour une fenêtre de 1200x800, un tampon de 1500x1000 sera alloué, et non de 2400x1600 comme dans l'ancien moteur.
  • Prise en charge de la technologie DMA-BUF pour utiliser plusieurs GPU et décharger des opérations individuelles vers un autre GPU.
  • De nombreux nœuds de rendu qui rencontraient des problèmes dans l'ancienne implémentation sont traités correctement.

Les limitations des nouveaux moteurs incluent le manque de prise en charge du positionnement par valeurs non entières (position fractionnaire) et des nœuds glshader, qui étaient fortement liés aux fonctionnalités de l'ancien moteur et qui n'étaient plus nécessaires après l'ajout de la prise en charge de nœuds avec masques (masque) et textures avec transparence. Il est également mentionné qu'il existe une possibilité de problèmes avec les pilotes graphiques dus à des changements dans la méthode de travail avec les pilotes.

A l'avenir, sur la base du nouveau modèle unifié, la création de moteurs de rendu utilisant Metal sous macOS et DirectX sous Windows n'est pas exclue, mais la création de tels moteurs est compliquée par l'utilisation d'autres langages pour les shaders (le « ngl Les moteurs " et " vulkan " utilisent le langage GLSL, donc pour Metal et Direct il faudra soit dupliquer les shaders, soit utiliser une couche basée sur la boîte à outils SPIRV-Cross).

Les projets futurs incluent la prise en charge HDR et des outils pour une gestion correcte des couleurs, la prise en charge du rendu Path côté GPU, la possibilité de restituer des glyphes, le rendu hors flux et l'optimisation des performances pour les appareils plus anciens et à faible consommation. Dans sa forme actuelle, les performances du moteur « vulkan » sont proches des performances de l'ancien moteur « gl ». Le moteur "ngl" est inférieur en performances à l'ancien moteur "gl", mais les performances disponibles sont suffisantes pour un rendu à 60 ou 144 FPS. On s'attend à ce que la situation change après l'optimisation.

Source: opennet.ru

Ajouter un commentaire