In GTK wurden neue Rendering-Engines fĂŒr OpenGL und Vulkan hinzugefĂŒgt.

Die Entwickler der GTK-Bibliothek haben die Fertigstellung zweier neuer Rendering-Engines – „ngl“ und „vulkan“ – bekannt gegeben, die die Grafik-APIs OpenGL (GL 3.3+ und GLES 3.0+) und Vulkan nutzen. Die neuen Engines sind Teil der experimentellen Veröffentlichung von GTK 4.13.6. In der experimentellen Version von GTK wird die Engine ngl nun standardmĂ€ĂŸig verwendet, doch im Falle signifikanten Problemen wird in der nĂ€chsten stabilen Version 4.14 die alte Rendering-Engine „gl“ zurĂŒckgebracht.

Die neuen Engines werden als einheitlich und aus einem gemeinsamen Codebasis zusammengestellt betrachtet. Der Kern der Vereinheitlichung besteht darin, dass die API Vulkan als Grundlage verwendet wird, ĂŒber die ein separates Abstraktionslevel fĂŒr OpenGL geschaffen wurde, das die Unterschiede zwischen OpenGL und Vulkan berĂŒcksichtigt. Dieser Ansatz hat es ermöglicht, in beiden Engines eine gemeinsame Infrastruktur fĂŒr die Verarbeitung von Szenengraphen, Transformationen, Textur- und Glyphen-Caching zu nutzen. Die Vereinheitlichung hat auch die Wartung des Codebestands beider Engines und deren Aktualisierung und Synchronisierung erheblich vereinfacht.

Im Gegensatz zur alten Engine „gl“, bei der fĂŒr jeden Knotentyp der Rendierung (rendernode) ein einfacher Shader verwendet wurde und eine periodische Neusortierung der Daten beim Offscreen-Rendering durchgefĂŒhrt wurde, wird in den neuen Engines anstelle des Offscreen-Renderings ein komplexer Shader (ubershader) angewendet, der die Daten aus dem Puffer interpretiert. In der aktuellen Implementierung bleibt die neue Version hinsichtlich der Optimierungsstufe hinter der alten zurĂŒck, da in dieser Phase der Fokus auf der Korrektheit der Funktion und der Wartungsfreundlichkeit liegt.

Neue Funktionen, die in der alten Engine „gl“ fehlen:

  • KantenglĂ€ttung – ermöglicht es, feine Details zu erhalten und eine gleichmĂ€ĂŸigere Konturzeichnung zu erreichen.
    In GTK wurden neue Rendering-Engines fĂŒr OpenGL und Vulkan hinzugefĂŒgt.
  • Erstellung beliebiger FarbĂŒbergĂ€nge, bei denen eine beliebige Anzahl von Farben und GlĂ€ttung verwendet werden kann (in der Engine „gl“ wurden nur lineare, radiale und konische ÜbergĂ€nge mit 6 Farben unterstĂŒtzt).
    In GTK wurden neue Rendering-Engines fĂŒr OpenGL und Vulkan hinzugefĂŒgt.
  • Bruchskalierung (fractional scale), die das Setzen von nicht-ganzzahligen MaßstĂ€ben ermöglicht. Beispielsweise wird bei einer Skalierung von 125% fĂŒr ein Fenster von 1200×800 ein Puffer von 1500×1000 reserviert und nicht 2400×1600, wie in der alten Engine.
  • UnterstĂŒtzung der DMA-BUF-Technologie zur Nutzung mehrerer GPUs und zur Auslagerung einzelner Operationen auf eine andere GPU.
  • Viele Rendering-Knoten, die in der alten Implementierung Probleme bereitet haben, werden nun korrekt verarbeitet.

Zu den EinschrĂ€nkungen der neuen Engines gehört der Mangel an UnterstĂŒtzung fĂŒr die Positionierung mit nicht ganzen Werten (fractional position) und Knoten glshader, die stark von den Eigenschaften der alten Engine abhingen und nach der EinfĂŒhrung der UnterstĂŒtzung fĂŒr Knoten mit Masken (mask) und Texturen mit Transparenz nicht mehr notwendig sind. Es wird auch erwĂ€hnt, dass es möglicherweise Probleme mit Grafiktreibern geben könnte, die durch die Änderung der Methode im Umgang mit Treibern verursacht werden.

In Zukunft ist nicht auszuschließen, dass auf Basis des neuen einheitlichen Modells Rendering-Engines erstellt werden, die Metal in macOS und DirectX in Windows nutzen, jedoch wird die Erstellung solcher Engines durch die Verwendung anderer Sprachen fĂŒr Shaders erschwert (in den Engines "ngl" und "vulkan" wird die GLSL-Sprache verwendet, weshalb fĂŒr Metal und Direct entweder Shaders dupliziert oder eine Schicht auf Basis des SPIRV-Cross-Toolkits verwendet werden muss).

In den zukĂŒnftigen PlĂ€nen wird die UnterstĂŒtzung von HDR und Möglichkeiten zur korrekten Farbverwaltung, die UnterstĂŒtzung des Rendering-Pfades (Path rendering) auf der GPU, die Möglichkeit zum Rendern von Glyphen, das Rendering außerhalb des Hauptthreads und die Leistungsoptimierung fĂŒr alte und leistungs schwache GerĂ€te erwĂ€hnt. Die Leistung der "vulkan"-Engine ist derzeit mit der des alten "gl"-Engines vergleichbar. Die "ngl"-Engine bleibt in der Leistung hinter dem alten "gl"-Engine zurĂŒck, aber die vorhandenen Werte reichen aus, um mit 60 oder 144 FPS zu rendern. Es wird angenommen, dass sich die Situation nach der Optimierung Ă€ndern wird.

Quelle: opennet.ru

60GB SSD 8Gb DDR4