Nye gjengivelsesmotorer for OpenGL og Vulkan er lagt til GTK

Utviklerne av GTK-biblioteket har annonsert tilgjengeligheten av to nye gjengivelsesmotorer - "ngl" og "vulkan", ved å bruke OpenGL (GL 3.3+ og GLES 3.0+) og Vulkan grafikk-APIer. Nye motorer er inkludert i den eksperimentelle utgivelsen av GTK 4.13.6. I den eksperimentelle GTK-grenen brukes nå ngl-motoren som standard, men hvis betydelige problemer blir identifisert i neste stabile gren 4.14, vil den gamle "gl"-gjengivelsesmotoren bli returnert.

Nye motorer er posisjonert som enhetlige og satt sammen fra en enkelt kodebase. Essensen av foreningen er at Vulkan API brukes som grunnlag, på toppen av dette er det laget et eget abstraksjonsnivå for OpenGL, tatt i betraktning forskjellene mellom OpenGL og Vulkan. Denne tilnærmingen gjorde det mulig å bruke en felles infrastruktur i begge motorene for å behandle scenegrafen, transformasjoner, caching-teksturer og glyfer. Sammenslåing forenklet også vedlikeholdet av kodebasen til begge motorene betydelig og holdt dem oppdatert og synkronisert.

I motsetning til den gamle gl-motoren, som brukte en separat enkel skyggelegging for hver type gjengivelsesnode og periodisk omsorterte dataene under gjengivelse utenfor skjermen, bruker de nye motorene i stedet for gjengivelse utenfor skjermen en kompleks skyggelegging (ubershader) som tolker dataene fra bufferen . I sin nåværende form ligger den nye implementeringen fortsatt bak den gamle når det gjelder nivået på optimaliseringer, siden hovedfokuset på nåværende stadium er på korrekt drift og enkelt vedlikehold.

Nye funksjoner som mangler i den gamle gl-motoren:

  • Konturutjevning – lar deg bevare fine detaljer og oppnå jevnere konturer.
    Nye gjengivelsesmotorer for OpenGL og Vulkan er lagt til GTK
  • Dannelse av vilkårlige gradienter, som kan bruke et hvilket som helst antall farger og anti-aliasing (i gl-motoren ble bare lineære, radielle og koniske gradienter med 6 stoppfarger støttet).
    Nye gjengivelsesmotorer for OpenGL og Vulkan er lagt til GTK
  • Brøkskala, som lar deg angi ikke-heltalls skalaverdier, for eksempel når du bruker en skala på 125 % for et vindu på 1200x800, vil en buffer på 1500x1000 bli tildelt, og ikke 2400x1600 som i den gamle motoren.
  • Støtte for DMA-BUF-teknologi for bruk av flere GPUer og overlasting av individuelle operasjoner til en annen GPU.
  • Mange gjengivelsesnoder som hadde problemer i den gamle implementeringen behandles riktig.

Begrensningene til de nye motorene inkluderer mangelen på støtte for posisjonering etter ikke-heltallsverdier (brøkposisjon) og glshader-noder, som var sterkt knyttet til funksjonene til den gamle motoren, og som ikke lenger var nødvendige etter å ha lagt til støtte for noder med masker (maske) og teksturer med gjennomsiktighet. Det nevnes også at det er en mulighet for mulige problemer med grafikkdrivere som oppstår på grunn av endringer i metoden for å jobbe med drivere.

I fremtiden, basert på den nye enhetlige modellen, er opprettelsen av gjengivelsesmotorer ved hjelp av Metal i macOS og DirectX i Windows ikke utelukket, men opprettelsen av slike motorer er komplisert ved bruk av andre språk for shaders («ngl "- og "vulkan"-motorer bruker GLSL-språket, så for Metal og Direct må du enten duplisere shaders eller bruke et lag basert på SPIRV-Cross-verktøysettet).

Fremtidige planer inkluderer å tilby HDR-støtte og verktøy for korrekt fargebehandling, støtte for Path-gjengivelse på GPU-siden, muligheten til å gjengi glyfer, off-stream-gjengivelse og ytelsesoptimaliseringer for eldre enheter og enheter med lavt strømforbruk. I sin nåværende form er ytelsen til "vulkan"-motoren nær ytelsen til den gamle "gl"-motoren. "ngl"-motoren er dårligere i ytelse enn den gamle "gl"-motoren, men den tilgjengelige ytelsen er tilstrekkelig for gjengivelse ved 60 eller 144 FPS. Det forventes at situasjonen vil endre seg etter optimalisering.

Kilde: opennet.ru

Legg til en kommentar