Nye gengivelsesmotorer til OpenGL og Vulkan er blevet tilføjet til GTK

Udviklerne af GTK-biblioteket har annonceret tilgængeligheden af ​​to nye gengivelsesmotorer - "ngl" og "vulkan", ved hjælp af OpenGL (GL 3.3+ og GLES 3.0+) og Vulkan grafik API'er. Nye motorer er inkluderet i den eksperimentelle udgivelse af GTK 4.13.6. I den eksperimentelle GTK-gren bruges ngl-motoren nu som standard, men hvis der identificeres væsentlige problemer i den næste stabile gren 4.14, vil den gamle "gl"-gengivelsesmotor blive returneret.

Nye motorer er placeret som samlet og samlet fra en enkelt kodebase. Essensen af ​​ensretningen er, at Vulkan API bruges som grundlag, hvorpå der er lavet et separat abstraktionsniveau for OpenGL, der tager højde for forskellene mellem OpenGL og Vulkan. Denne tilgang gjorde det muligt at bruge en fælles infrastruktur i begge motorer til behandling af scenegrafen, transformationer, caching-teksturer og glyffer. Ensretning forenklede også betydeligt vedligeholdelsen af ​​kodebasen for begge motorer og holdt dem opdaterede og synkroniserede.

I modsætning til den gamle gl-motor, som brugte en separat simpel shader for hver type gengivelsesknude og periodisk omsorterede dataene under offscreen-rendering, bruger de nye motorer i stedet for offscreen-rendering en kompleks shader (ubershader), der fortolker dataene fra bufferen . I sin nuværende form halter den nye implementering stadig bagud i forhold til den gamle med hensyn til niveauet af optimeringer, da hovedfokus på nuværende stadie er på korrekt drift og nem vedligeholdelse.

Nye funktioner, der mangler i den gamle gl-motor:

  • Konturudjævning - giver dig mulighed for at bevare fine detaljer og opnå glattere konturer.
    Nye gengivelsesmotorer til OpenGL og Vulkan er blevet tilføjet til GTK
  • Dannelse af vilkårlige gradienter, som kan bruge et hvilket som helst antal farver og anti-aliasing (i gl-motoren blev kun lineære, radiale og koniske gradienter med 6 stopfarver understøttet).
    Nye gengivelsesmotorer til OpenGL og Vulkan er blevet tilføjet til GTK
  • Brøkskala, som giver dig mulighed for at indstille ikke-heltalsskalaværdier, for eksempel, når du bruger en skala på 125% for et vindue på 1200x800, vil der blive tildelt en buffer på 1500x1000, og ikke 2400x1600 som i den gamle motor.
  • Understøttelse af DMA-BUF-teknologi til brug af flere GPU'er og overførsel af individuelle operationer til en anden GPU.
  • Mange gengivelsesknuder, der havde problemer i den gamle implementering, behandles korrekt.

Begrænsningerne for de nye motorer omfatter manglen på støtte til positionering af ikke-heltalsværdier (brøkposition) og glshader-knudepunkter, som var stærkt knyttet til funktionerne i den gamle motor, og som ikke længere var nødvendige efter tilføjelse af understøttelse af noder med masker (maske) og teksturer med gennemsigtighed. Det nævnes også, at der er mulighed for mulige problemer med grafikdrivere, der opstår på grund af ændringer i metoden til at arbejde med drivere.

I fremtiden, baseret på den nye forenede model, er oprettelsen af ​​gengivelsesmotorer ved hjælp af Metal i macOS og DirectX i Windows ikke udelukket, men oprettelsen af ​​sådanne motorer kompliceres af brugen af ​​andre sprog til shaders (den "ngl" ” og “vulkan”-motorer bruger GLSL-sproget, så for Metal og Direct bliver du nødt til enten at duplikere shaders eller bruge et lag baseret på SPIRV-Cross-værktøjssættet).

Fremtidige planer omfatter levering af HDR-understøttelse og værktøjer til korrekt farvestyring, understøttelse af Path-gengivelse på GPU-siden, muligheden for at gengive glyffer, off-stream-gengivelse og ydeevneoptimeringer for ældre enheder med lavt strømforbrug. I sin nuværende form er "vulkan"-motorens ydeevne tæt på den gamle "gl"-motors ydeevne. "ngl"-motoren er ringere i ydeevne i forhold til den gamle "gl"-motor, men den tilgængelige ydeevne er tilstrækkelig til gengivelse ved 60 eller 144 FPS. Det forventes, at situationen vil ændre sig efter optimering.

Kilde: opennet.ru

Tilføj en kommentar