Nya renderingsmotorer för OpenGL och Vulkan har lagts till i GTK

Utvecklarna av GTK-biblioteket har meddelat att det finns två nya renderingsmotorer - "ngl" och "vulkan", med hjälp av OpenGL (GL 3.3+ och GLES 3.0+) och Vulkan grafik-API:er. Nya motorer ingår i experimentversionen av GTK 4.13.6. I den experimentella GTK-grenen används nu ngl-motorn som standard, men om betydande problem identifieras i nästa stabila gren 4.14 kommer den gamla "gl"-renderingsmotorn att returneras.

Nya motorer är placerade som enhetliga och sammansatta från en enda kodbas. Kärnan i enandet är att Vulkan API används som bas, på vilken en separat abstraktionsnivå har skapats för OpenGL, med hänsyn till skillnaderna mellan OpenGL och Vulkan. Detta tillvägagångssätt gjorde det möjligt att använda en gemensam infrastruktur i båda motorerna för att bearbeta scengrafen, transformationer, cachingtexturer och glyfer. Enheten förenklade också avsevärt underhållet av kodbasen för båda motorerna och höll dem uppdaterade och synkroniserade.

Till skillnad från den gamla gl-motorn, som använde en separat enkel shader för varje typ av renderingsnod och periodiskt sorterade om data under offscreen-rendering, använder de nya motorerna istället för offscreen-rendering en komplex shader (ubershader) som tolkar data från bufferten . I sin nuvarande form ligger den nya implementeringen fortfarande efter den gamla när det gäller optimeringsnivån, eftersom huvudfokus i det aktuella skedet ligger på korrekt drift och enkelt underhåll.

Nya funktioner som saknas i den gamla gl-motorn:

  • Konturutjämning - låter dig bevara fina detaljer och uppnå jämnare konturer.
    Nya renderingsmotorer för OpenGL och Vulkan har lagts till i GTK
  • Bildning av godtyckliga gradienter, som kan använda valfritt antal färger och kantutjämning (i gl-motorn stöddes endast linjära, radiella och koniska gradienter med 6 stoppfärger).
    Nya renderingsmotorer för OpenGL och Vulkan har lagts till i GTK
  • Bråkskala, som låter dig ställa in icke-heltalsskalvärden, till exempel när du använder en skala på 125% för ett fönster på 1200x800, kommer en buffert på 1500x1000 att tilldelas, och inte 2400x1600 som i den gamla motorn.
  • Stöd för DMA-BUF-teknik för att använda flera GPU:er och överföra individuella operationer till en annan GPU.
  • Många renderingsnoder som hade problem i den gamla implementeringen bearbetas korrekt.

Begränsningarna för de nya motorerna inkluderar bristen på stöd för positionering av icke-heltalsvärden (fraktionell position) och glshader-noder, som var starkt knutna till funktionerna i den gamla motorn, och som inte längre var nödvändiga efter att ha lagt till stöd för noder med masker (mask) och texturer med transparens. Det nämns också att det finns en möjlighet att eventuella problem med grafikdrivrutiner uppstår på grund av förändringar i arbetssättet med drivrutiner.

I framtiden, baserat på den nya enhetliga modellen, är skapandet av renderingsmotorer med Metal i macOS och DirectX i Windows inte uteslutet, men skapandet av sådana motorer kompliceras av användningen av andra språk för shaders (den "ngl" ” och “vulkan”-motorer använder GLSL-språket, så för Metal och Direct måste antingen duplicera shaders eller använda ett lager baserat på SPIRV-Cross-verktygssatsen).

Framtida planer inkluderar tillhandahållande av HDR-stöd och verktyg för korrekt färghantering, stöd för Path-rendering på GPU-sidan, möjligheten att rendera glyfer, off-stream-rendering och prestandaoptimeringar för äldre och lågeffektsenheter. I sin nuvarande form är "vulkan"-motorns prestanda nära prestandan för den gamla "gl"-motorn. "ngl"-motorn är sämre i prestanda än den gamla "gl"-motorn, men den tillgängliga prestandan är tillräcklig för rendering vid 60 eller 144 FPS. Det förväntas att situationen kommer att förändras efter optimering.

Källa: opennet.ru

Lägg en kommentar