Gli sviluppatori della libreria GTK hanno annunciato il completamento di due nuovi motori di rendering - "ngl" e "vulkan", che utilizzano le API grafiche OpenGL (GL 3.3+ e GLES 3.0+) e Vulkan. I nuovi motori sono inclusi nella versione sperimentale GTK 4.13.6. Nella branch sperimentale di GTK, il motore ngl è ora utilizzato per impostazione predefinita, ma in caso di problemi significativi nella prossima versione stabile 4.14, sarà ripristinato il vecchio motore di rendering "gl".
I nuovi motori sono posizionati come unificati e costruiti da una singola base di codice. L'essenza dell'unificazione è che viene utilizzata come base l'API Vulkan, sopra la quale è stato creato un livello di astrazione separato per OpenGL che considera le differenze tra OpenGL e Vulkan. Questo approccio ha permesso di utilizzare in entrambi i motori un'infrastruttura comune per la gestione del grafo della scena, delle trasformazioni, della memorizzazione nella cache di texture e glifi. L'unificazione ha anche notevolmente semplificato la manutenzione della base di codice di entrambi i motori e il loro mantenimento in uno stato aggiornato e sincronizzato.
A differenza del vecchio motore "gl", dove per ogni tipo di nodo di rendering (rendernode) veniva utilizzato un semplice shader separato e veniva effettuata una periodica riordinazione dei dati durante il rendering offscreen, nei nuovi motori al posto del rendering offscreen viene applicato uno shader complesso (ubershader), che interpreta i dati dal buffer. Nella sua forma attuale, la nuova implementazione è ancora indietro rispetto a quella vecchia in termini di ottimizzazioni, poiché l'attenzione principale in questa fase è rivolta alla correttezza del funzionamento e alla facilità di manutenzione.
Nuove funzionalità che mancano nel vecchio motore "gl:"
- Antialiasing - consente di preservare i dettagli fini e di ottenere contorni più uniformi.

- Formazione di gradienti arbitrari, che possono utilizzare qualsiasi numero di colori e antialiasing (nel motore "gl" erano supportati solo gradienti lineari, radiali e conici con 6 punti di colore).

- Scaling frazionario (fractional scale), che consente di impostare valori di scaling non interi, ad esempio, utilizzando una scala del 125% per una finestra 1200×800 verrà allocato un buffer 1500×1000, anziché 2400×1600 come nel vecchio motore.
- Supporto della tecnologia DMA-BUF per l'utilizzo di più GPU e lo spostamento di operazioni specifiche su un'altra GPU.
- Molti nodi di rendering, con i quali c'erano problemi nella vecchia implementazione, vengono ora gestiti correttamente.
Tra i limiti dei nuovi motori si segnala l'assenza di supporto per il posizionamento di valori frazionari (fractional position) e nodi glshader, che erano molto legati alle peculiarità del vecchio motore, e che non sono più necessari dopo l'aggiunta del supporto per nodi con maschere (mask) e texture con trasparenza. Si menziona anche la possibilità di problemi con i driver grafici, dovuti al cambiamento del metodo di interazione con i driver.
In futuro, sulla base del nuovo modello unificato, non si esclude la creazione di motori di rendering che utilizzano Metal in macOS e DirectX in Windows, ma la creazione di tali motori è complicata dall'uso di altri linguaggi per gli shader (nei motori "ngl" e "vulkan" è utilizzato il linguaggio GLSL, quindi per Metal e Direct sarà necessario duplicare gli shader o utilizzare un'interfaccia basata sull'utensile SPIRV-Cross).
Tra i piani futuri si menziona il supporto HDR e strumenti per una corretta gestione del colore, supporto del rendering di percorso (Path rendering) sul lato GPU, possibilità di rendering di glifi, rendering al di fuori del thread principale e ottimizzazione delle prestazioni per dispositivi più vecchi e meno potenti. Nella situazione attuale, le prestazioni del motore "vulkan" sono simili a quelle del vecchio motore "gl". Il motore "ngl" è inferiore in prestazioni rispetto al vecchio motore "gl", ma i dati attuali sono sufficienti per un rendering a 60 o 144 FPS. Si prevede che la situazione cambi dopo l'ottimizzazione.
Fonte: opennet.ru

