Udviklerne af GTK-biblioteket har annonceret klarheden af to nye renderingsmotorer - «ngl» og «vulkan», der bruger de grafiske API'er OpenGL (GL 3.3+ og GLES 3.0+) samt Vulkan. De nye motorer er inkluderet i den eksperimentelle udgave af GTK 4.13.6. I den eksperimentelle gren af GTK er der nu indgået en standard brug af ngl-motoren, men hvis der opstår betydelige problemer, vil den gamle renderingsmotor «gl» blive genindført i den næste stabile version 4.14.
De nye motorer positioneres som enhedlige og bygget fra en fælles kodebase. Essensen af enhedligheden er, at API Vulkan anvendes som grundlag, hvorefter et separat abstraheringslag er udformet for OpenGL, der tager hensyn til forskellene mellem OpenGL og Vulkan. En sådan tilgang har gjort det muligt at benytte en fælles infrastruktur i begge motorer til behandling af scene grafen, transformationer, tekstur- og glyph-cache. Enhedligheden har også væsentligt forenklet vedligeholdelsen af kodebasen i begge motorer samt deres opdatering og synkronisering.
I kontrast til den gamle «gl»-motor, hvor hver type renderingsknude (rendernode) anvendte en separat simpel shader, og der blev udført periodisk omorganisering af data under offscreen rendering, anvendes der nu en kompleks shader (ubershader) i de nye motorer, som fortolker data fra bufferen i stedet for offscreen rendering. I sin nuværende form ligger den nye implementering stadig bagefter den gamle med hensyn til niveauet af optimeringer, da det primære fokus på nuværende stadier er på korrekt drift og enkel vedligeholdelse.
Nye funktioner, der ikke findes i den gamle «gl»-motor:
- Kantglatning - giver mulighed for at bevare små detaljer og opnå mere jævne konturer.

- Generering af vilkårlige gradienter, hvor et vilkårligt antal farver og glatning kan anvendes (i «gl»-motoren understøttedes kun lineære, radiale og koniske gradienter med 6 farvestop).

- Brøkdels skalering (fractional scale), der tillader at indstille ikke-hele skalaer, for eksempel, ved anvendelse af en skala på 125% for et vindue på 1200×800, vælges en buffer på 1500×1000 i stedet for 2400×1600 som i den gamle motor.
- Understøttelse af DMA-BUF teknologi til brug af flere GPU'er og udflyttelse af enkelte operationer til en anden GPU.
- Mange renderknuder, som tidligere har givet problemer i den gamle implementering, behandles korrekt.
De nye moteurs begrænsninger omfatter manglende support til positionering med ikke-heltal (fractional position) og glshader-noder, som var stærkt afhængige af den gamle motors særegenheder, og som blev overflødige efter introduktionen af støtte til noder med masker (mask) og teksturer med gennemsigtighed. Der nævnes også en mulighed for, at der kan opstå problemer med grafikkortdrivere som følge af ændringer i metoden til at arbejde med drivere.
I fremtiden kan der baseres nye, ensartede modeller for rendering, der bruger Metal i macOS og DirectX i Windows, men det er vanskeligt at skabe sådanne motorer, da der anvendes andre sprog til shaders (i motorerne 'ngl' og 'vulkan' anvendes GLSL-sproget, så for Metal og Direct skal man enten duplikere shaders eller bruge et lag baseret på værktøjet SPIRV-Cross).
Fremtidige planer inkluderer at sikre HDR-support og værktøjer til korrekt farvestyring, support til path rendering på GPU-siden, muligheden for at renderere glyffer, rendering uden for hovedtråden og optimering af ydeevnen for ældre og mindre kraftfulde enheder. I sin nuværende form er ydeevnen af 'vulkan'-motoren tæt på ydeevnen af den gamle 'gl'-motor. 'ngl'-motoren halter bagud i forhold til den gamle 'gl'-motor, men de nuværende målinger er tilstrækkelige til at renderere med 60 eller 144 FPS. Det forventes, at situationen vil ændre sig efter optimering.
Kilde: opennet.ru

