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

Vývojáři knihovny GTK oznámili připravenost dvou nových vykreslovacích enginů — „ngl“ a „vulkan“, které využívají grafické API OpenGL (GL 3.3+ a GLES 3.0+) a Vulkan. Nové enginy jsou zahrnuty ve zkušební verzi GTK 4.13.6. V experimentální větvi GTK je engine ngl nyní používán jako výchozí, ale v případě zjištění významných problémů bude v následující stabilní větvi 4.14 vrácen starý vykreslovací engine „gl“.

Nové enginy jsou pozicionovány jako sjednocené a sestavené z jediné kódové základny. Podstatou sjednocení je, že jako základ se používá API Vulkan, na jehož základě byl pro OpenGL vytvořen samostatný abstraktní úroveň, která zohledňuje rozdíly mezi OpenGL a Vulkan. Tento přístup umožnil zapojit do obou enginů společnou infrastrukturu pro zpracování grafu scény (scene graph), transformací, caching textur a glifů. Sjednocení také výrazně zjednodušilo údržbu kódové základny obou enginů a jejich udržování v aktuálním a synchronizovaném stavu.

Na rozdíl od starého enginu „gl“, ve kterém pro každý typ uzlu pro renderování (rendernode) byl používán samostatný jednoduchý shader a probíhala periodická přeřazení dat při offscreen renderování, v nových enginech místo offscreen renderování se používá složitý shader (ubershader), který interpretuje data z bufferu. V aktuálním stavu nová implementace zatím zaostává za starou po úrovni optimalizací, protože hlavní důraz v této fázi je kladen na správnost funkce a jednoduchost údržby.

Nové možnosti, které chybí ve starém enginu „gl“:

  • Vyhlazování kontur — umožňuje zachovat drobné detaily a dosáhnout hladších kontur.
    V GTK byly přidány nové renderovací enginy pro OpenGL a Vulkan.
  • Vytváření libovolných gradientů, ve kterých může být použito libovolné množství barev a vyhlazování (v enginu „gl“ byly podporovány pouze lineární, radiální a kuželové gradienty s 6 barevnými zastávkami).
    V GTK byly přidány nové renderovací enginy pro OpenGL a Vulkan.
  • Zlomkové škálování (fractional scale), které umožňuje nastavit necelá hodnoty měřítka, například při použití měřítka 125 % pro okno 1200×800 bude vyčleněn buffer 1500×1000, a ne 2400×1600 jako ve starém enginu.
  • Podpora technologie DMA-BUF pro použití několika GPU a delegování jednotlivých operací na jiný GPU.
  • Mnoho renderovacích uzlů, které měly problémy ve staré implementaci, je nyní správně zpracováváno.

Mezi omezeními nových engineů je absence podpory pro pozicování s necelými hodnotami (fractional position) a uzly glshader, které byly silně vázány na vlastnosti starého engine, a u kterých po přidání podpory pro uzly s maskami (mask) a textury s průhledností zanikla potřeba. Také se zmiňuje pravděpodobnost vzniku možných problémů s grafickými ovladači kvůli změně metodiky práce s ovladači.

V budoucnu není vyloučeno vytvoření renderovacích engineů na základě nové unifikované modelu, které by používaly Metal na macOS a DirectX na Windows, ale vytvoření takových engineů je komplikováno použitím jiných jazyků pro shadery (v enginech „ngl“ a „vulkan“ je použit jazyk GLSL, takže pro Metal a Direct bude nutné buď duplikovat shadery, nebo použít mezivrstvu na základě nástrojů SPIRV-Cross).

Mezi plány do budoucna patří zajištění podpory HDR a prostředků pro správu barev, podpora renderovací cesty (Path rendering) na straně GPU, možnost renderování glifů, renderování mimo hlavní vlákno a optimalizace výkonu pro starší a slabší zařízení. V současné podobě je výkon engine „vulkan“ blízký výkonu starého engine „gl“. Engine „ngl“ zaostává za starým engine „gl“ ve výkonu, ale dosažené hodnoty jsou dostatečné pro renderování při 60 nebo 144 FPS. Předpokládá se, že situace se změní po provedení optimalizace.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster