Dezvoltatorii bibliotecii GTK au anunțat disponibilitatea a două noi motoare de randare — „ngl” și „vulkan”, care utilizează API-uri grafice OpenGL (GL 3.3+ și GLES 3.0+) și Vulkan. Noile motoare sunt incluse în versiunea experimentală GTK 4.13.6. În ramura experimentală a GTK, motorul ngl este acum utilizat implicit, dar în cazul descoperirii unor probleme semnificative, în următoarea versiune stabilă 4.14, va fi revenit la vechiul motor de randare „gl”.
Noile motoare sunt poziționate ca fiind unificate și construite dintr-o singură bază de cod. Esența unificării constă în faptul că API-ul Vulkan este folosit ca bază, deasupra căruia a fost creat un nivel de abstractizare separat pentru OpenGL, care ține cont de diferențele dintre OpenGL și Vulkan. Această abordare a permis implicarea unei infrastructuri comune pentru procesarea graficului de scenă, transformări, caching pentru texturi și glife. Unificarea a simplificat de asemenea semnificativ întreținerea bazei de cod a ambelor motoare și menținerea acestora actualizate și sincronizate.
Spre deosebire de vechiul motor „gl”, în care pentru fiecare tip de nod de randare (rendernode) era folosit un shader simplu separat și era efectuată o sortare periodică a datelor în timpul randării în afara ecranului (offscreen), noile motoare utilizează în schimb un shader complex (ubershader), care interpretează datele din buffer. În stadiul actual, noua implementare este încă în urma vechii din punct de vedere al nivelului de optimizări, deoarece atenția principală este îndreptată spre corectitudinea funcționării și simplificarea întreținerii.
Noile funcționalități care lipsesc în vechiul motor „gl”:
- Antialiasing — permite păstrarea detaliilor fine și obținerea unor contururi mai netede.

- Generarea de degradeuri arbitrarii, care pot folosi un număr orice de culori și antialiasing (în motorul „gl” erau suportate doar degradeuri liniare, radiale și conice cu 6 culori de oprire).

- Scalarea fracționară (fractional scale), care permite setarea valorilor de scalare non-integre, de exemplu, folosind o scalare de 125% pentru o fereastră de 1200×800 va fi alocat un buffer de 1500×1000, nu 2400×1600 ca în vechiul motor.
- Suport pentru tehnologia DMA-BUF pentru utilizarea mai multor GPU-uri și delegarea unor operațiuni pe un alt GPU.
- Multe noduri de randare sunt tratate corect, acolo unde au existat probleme în implementarea anterioară.
Printre restricțiile noilor motoare se numără lipsa suportului pentru poziționarea pe valori fracționale (fractional position) și nodurile glshader, care erau foarte legate de caracteristicile vechiului motor, în care nu mai este necesar să se mențină după ce a fost adăugat suportul pentru noduri cu măști (mask) și texturi cu transparență. De asemenea, se menționează existența unei probabilități de apariție a posibilelor probleme cu driverele grafice, determinate de schimbarea modului de operare al acestora.
În viitor, pe baza noii modele unificate, nu se exclud crearea de motoare de randare care să utilizeze Metal în macOS și DirectX în Windows, dar crearea unor astfel de motoare este îngreunată de utilizarea altor limbaje pentru shadere (în motoarele „ngl” și „vulkan” este folosit limbajul GLSL, astfel că pentru Metal și Direct va fi necesar fie să se duplicate shaderele, fie să se utilizeze un strat bazat pe instrumentele SPIRV-Cross).
Printre planurile de viitor se menționează asigurarea suportului pentru HDR și instrumente pentru gestionarea corectă a culorii, suport pentru randarea pe calea (Path rendering) pe GPU, posibilitatea randării glyph-urilor, randare în afara firului principal și optimizarea performanței pentru dispozitivele mai vechi și cu resurse limitate. În forma actuală, performanța motorului „vulkan” este aproape de cea a vechiului motor „gl”. Motorul „ngl” se află în urmă față de vechiul motor „gl”, însă performanțele existente sunt suficiente pentru randarea la 60 sau 144 FPS. Se prevestește că situația se va schimba după optimizare.
Sursa: opennet.ro

