Noi motoare de randare pentru OpenGL și Vulkan au fost adăugate la GTK

Dezvoltatorii bibliotecii GTK au anunțat disponibilitatea a două noi motoare de randare - „ngl” și „vulkan”, folosind API-urile grafice OpenGL (GL 3.3+ și GLES 3.0+) și Vulkan. Noi motoare sunt incluse în versiunea experimentală a GTK 4.13.6. În ramura experimentală GTK, motorul ngl este acum utilizat implicit, dar dacă sunt identificate probleme semnificative în următoarea ramură stabilă 4.14, vechiul motor de randare „gl” va fi returnat.

Noile motoare sunt poziționate ca unificate și asamblate dintr-o singură bază de cod. Esența unificării este că API-ul Vulkan este folosit ca bază, pe deasupra căruia a fost creat un nivel de abstractizare separat pentru OpenGL, ținând cont de diferențele dintre OpenGL și Vulkan. Această abordare a făcut posibilă utilizarea unei infrastructuri comune în ambele motoare pentru procesarea graficului scenei, a transformărilor, a texturilor cache și a glifelor. De asemenea, unificarea a simplificat semnificativ întreținerea bazei de cod a ambelor motoare și menținându-le actualizate și sincronizate.

Spre deosebire de vechiul motor gl, care folosea un shader simplu separat pentru fiecare tip de nod de randare și resorta periodic datele în timpul redării offscreen, noile motoare în loc de randare offscreen folosesc un shader complex (ubershader) care interpretează datele din buffer. . În forma sa actuală, noua implementare rămâne încă în urmă față de cea veche în ceea ce privește nivelul de optimizări, deoarece accentul principal în stadiul actual este pe funcționarea corectă și ușurința întreținerii.

Caracteristici noi care lipsesc din vechiul motor gl:

  • Netezirea conturului - vă permite să păstrați detaliile fine și să obțineți contururi mai fine.
    Noi motoare de randare pentru OpenGL și Vulkan au fost adăugate la GTK
  • Formarea de gradienți arbitrari, care pot folosi orice număr de culori și anti-aliasing (în motorul gl, au fost acceptați numai gradienți liniari, radiali și conici cu 6 culori stop).
    Noi motoare de randare pentru OpenGL și Vulkan au fost adăugate la GTK
  • Scară fracțională, care vă permite să setați valori de scară non-întregi, de exemplu, când utilizați o scară de 125% pentru o fereastră de 1200x800, va fi alocată un buffer de 1500x1000, și nu 2400x1600 ca în vechiul motor.
  • Suport pentru tehnologia DMA-BUF pentru utilizarea mai multor GPU și descărcarea operațiunilor individuale pe un alt GPU.
  • Multe noduri de randare care au avut probleme în implementarea veche sunt procesate corect.

Limitările noilor motoare includ lipsa suportului pentru poziționarea prin valori non-integer (poziție fracțională) și nodurile glshader, care erau puternic legate de caracteristicile vechiului motor și care nu mai erau necesare după adăugarea suportului pentru noduri cu măști (mască) și texturi cu transparență. De asemenea, se menționează că există posibilitatea ca posibile probleme cu driverele grafice să apară din cauza modificărilor în metoda de lucru cu driverele.

În viitor, pe baza noului model unificat, crearea de motoare de randare folosind Metal în macOS și DirectX în Windows nu este exclusă, dar crearea unor astfel de motoare este complicată de utilizarea altor limbaje pentru shadere („ngl ” și motoarele „vulkan” folosesc limbajul GLSL, așa că pentru Metal și Direct va trebui fie să dubleze shadere-uri, fie să folosească un strat bazat pe setul de instrumente SPIRV-Cross).

Planurile viitoare includ furnizarea de suport HDR și instrumente pentru gestionarea corectă a culorilor, suport pentru randarea Path pe partea GPU, capacitatea de a reda glife, randare off-stream și optimizări de performanță pentru dispozitivele mai vechi și cu consum redus. În forma sa actuală, performanța motorului „vulcan” este aproape de performanța vechiului motor „gl”. Motorul „ngl” este inferior ca performanță față de vechiul motor „gl”, dar performanța disponibilă este suficientă pentru randarea la 60 sau 144 FPS. Este de așteptat ca situația să se schimbe după optimizare.

Sursa: opennet.ru

Adauga un comentariu