Do GTK byly přidány nové renderovací enginy pro OpenGL a Vulkan

Vývojáři knihovny GTK oznámili dostupnost dvou nových vykreslovacích enginů – „ngl“ a „vulkan“, využívajících rozhraní OpenGL (GL 3.3+ a GLES 3.0+) a grafické rozhraní Vulkan. Nové motory jsou součástí experimentálního vydání GTK 4.13.6. V experimentální větvi GTK se nyní standardně používá jádro ngl, ale pokud budou v další stabilní větvi 4.14 identifikovány významné problémy, bude vráceno staré vykreslovací jádro „gl“.

Nové motory jsou umístěny jako unifikované a sestavené z jediné kódové základny. Podstatou sjednocení je, že jako základ je použito Vulkan API, nad nímž byla vytvořena samostatná úroveň abstrakce pro OpenGL zohledňující rozdíly mezi OpenGL a Vulkanem. Tento přístup umožnil využít společnou infrastrukturu v obou enginech pro zpracování grafu scény, transformací, cachování textur a glyfů. Sjednocení také výrazně zjednodušilo údržbu kódové základny obou motorů a jejich aktualizaci a synchronizaci.

Na rozdíl od starého enginu gl, který používal samostatný jednoduchý shader pro každý typ vykreslovacího uzlu a pravidelně přeřazoval data během vykreslování mimo obrazovku, nové motory místo vykreslování mimo obrazovku používají komplexní shader (ubershader), který interpretuje data z vyrovnávací paměti. . Ve své současné podobě nová implementace stále zaostává za tou starou, pokud jde o úroveň optimalizací, protože hlavní důraz je v současné fázi kladen na správný provoz a snadnou údržbu.

Nové funkce, které ve starém enginu gl chybí:

  • Vyhlazení kontur - umožňuje zachovat jemné detaily a dosáhnout hladších kontur.
    Do GTK byly přidány nové renderovací enginy pro OpenGL a Vulkan
  • Tvorba libovolných přechodů, které mohou používat libovolný počet barev a vyhlazování (v enginu gl byly podporovány pouze lineární, radiální a kuželové přechody se 6 stop barvami).
    Do GTK byly přidány nové renderovací enginy pro OpenGL a Vulkan
  • Zlomkové měřítko, které umožňuje nastavit neceločíselné hodnoty měřítka, například při použití měřítka 125 % pro okno 1200x800 bude přidělena vyrovnávací paměť 1500x1000 a nikoli 2400x1600 jako ve starém enginu.
  • Podpora technologie DMA-BUF pro použití více GPU a přenesení jednotlivých operací na jiný GPU.
  • Mnoho vykreslovacích uzlů, které měly problémy ve staré implementaci, je zpracováno správně.

Omezení nových enginů zahrnují nedostatek podpory pro určování polohy pomocí neceločíselných hodnot (frakční pozice) a uzlů glshader, které byly silně svázány s funkcemi starého enginu a které již nebyly nutné po přidání podpory pro uzly s maskami (maska) a textury s průhledností. Dále je zmíněno, že existuje možnost možných problémů s grafickými ovladači vzniklých v důsledku změn ve způsobu práce s ovladači.

V budoucnu na základě nového jednotného modelu není vyloučeno vytváření vykreslovacích enginů pomocí Metal v macOS a DirectX ve Windows, ale vytváření takových enginů je komplikováno použitím jiných jazyků pro shadery („ngl “ a “vulkan” motory používají jazyk GLSL, takže pro Metal a Direct bude nutné buď duplikovat shadery, nebo použít vrstvu založenou na sadě nástrojů SPIRV-Cross).

Plány do budoucna zahrnují poskytování podpory HDR a nástrojů pro správnou správu barev, podporu vykreslování Path na straně GPU, schopnost vykreslovat glyfy, vykreslování mimo stream a optimalizaci výkonu pro starší zařízení a zařízení s nízkou spotřebou. V současné podobě se výkon motoru „vulkan“ blíží výkonu starého motoru „gl“. Engine „ngl“ je výkonově horší než starý engine „gl“, ale dostupný výkon je dostatečný pro vykreslování při 60 nebo 144 FPS. Očekává se, že po optimalizaci se situace změní.

Zdroj: opennet.ru

Přidat komentář