Utvecklarna av GTK-biblioteket har meddelat att tvÄ nya renderingsmotorer - "ngl" och "vulkan" - Àr redo och anvÀnder grafik-API:er som OpenGL (GL 3.3+ och GLES 3.0+) samt Vulkan. De nya motorerna ingÄr i den experimentella utgÄvan av GTK 4.13.6. I den experimentella grenen av GTK anvÀnds motoren ngl som standard, men om betydande problem upptÀcks kommer den gamla renderingsmotorn "gl" att Äterinföras i nÀsta stabila version 4.14.
De nya motorerna positioneras som enhetliga och byggs frÄn en gemensam kodbas. KÀrnan i enheten Àr att API Vulkan anvÀnds som grund, ovanpÄ vilket ett separat abstraheringslager skapats för OpenGL som tar hÀnsyn till skillnaderna mellan OpenGL och Vulkan. Denna metod har möjliggjort att bÄda motorerna anvÀnder en gemensam infrastruktur för att hantera scenens graf (scene graph), transformationer, textur- och glyff-cache. Enheten har ocksÄ avsevÀrt förenklat underhÄllet av kodbasen för bÄda motorerna och att hÄlla dem aktuella och synkroniserade.
Till skillnad frÄn den gamla motorn "gl", dÀr en separat enkel shader anvÀndes för varje typ av renderingsnoder (rendernode) och periodisk omsortering av data genomfördes vid oförskÀmd rendering (offscreen), tillÀmpas i de nya motorerna en komplex shader (ubershader) som tolkar data frÄn bufferten istÀllet för oförskÀmd rendering. I nuvarande skepnad ligger den nya implementeringen fortfarande efter den gamla nÀr det gÀller optimeringsnivÄer, eftersom fokus i detta skede ligger pÄ att sÀkerstÀlla korrekt fungerande och enkel underhÄllning.
De nya funktionerna som saknas i den gamla motorn "gl":
- KantutjÀmning - möjliggör bevarande av smÄ detaljer och ger en jÀmnare renderingskontur.

- Skapande av godtyckliga gradienter, dÀr ett valfritt antal fÀrger och utjÀmning kan anvÀndas (i motorn "gl" stöddes endast linjÀra, radiella och koniska gradienter med 6 fÀrgstopp).

- BrĂ„kdelsskalning (fractional scale), vilket möjliggör anvĂ€ndning av icke-heltaliga skalvĂ€rden, exempelvis vid anvĂ€ndning av 125% skalning för ett fönster pĂ„ 1200Ă800 kommer en buffer pĂ„ 1500Ă1000 att allokeras istĂ€llet för 2400Ă1600 som i den gamla motorn.
- Stöd för DMA-BUF-teknologi för att anvÀnda flera GPU:er och utföra separata operationer pÄ en annan GPU.
- MÄnga rendering-noder som hade problem med den gamla implementeringen hanteras korrekt.
De nya motorernas begrÀnsningar inkluderar bristen pÄ stöd för positionering med icke hela vÀrden (fraktionell position) och glshader-noder, som var starkt knutna till den gamla motorns sÀrdrag, och dÀr behovet försvann efter att stöd för mask-noder och genomskinliga texturer lagts till. Det nÀmns ocksÄ en möjlighet till problem med grafikdrivrutiner pÄ grund av förÀndringar i hur man arbetar med drivrutiner.
I framtiden kan det, baserat pÄ den nya enhetliga modellen, komma att skapas rendering-motorer som anvÀnder Metal i macOS och DirectX i Windows, men skapandet av sÄdana motorer försvÄras av anvÀndningen av andra sprÄk för shaders (i motorerna "ngl" och "vulkan" anvÀnds GLSL, sÄ för Metal och Direct mÄste shaders antingen dupliceras eller en mellanlager baserad pÄ SPIRV-Cross-verktyget anvÀndas).
Framtidsplanerna inkluderar att sÀkerstÀlla stöd för HDR och verktyg för korrekt fÀrghantering, stöd för path rendering pÄ GPU-sidan, möjlighet till glyph-rendering, rendering utanför huvudtrÄden och optimering av prestandan för gamla och svagare enheter. I nuvarande skick Àr prestandan hos "vulkan"-motorn nÀra prestandan hos den gamla "gl"-motorn. "ngl"-motorn ligger efter i prestanda jÀmfört med den gamla "gl"-motorn, men de nuvarande siffrorna rÀcker för rendering i 60 eller 144 FPS. Det antas att situationen kommer att förÀndras efter optimering.
KĂ€lla: opennet.ru

