Nuovi motori di rendering per OpenGL e Vulkan aggiunti in GTK

Gli sviluppatori della libreria GTK hanno annunciato la disponibilità 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 release sperimentale GTK 4.13.6. Nella branch sperimentale di GTK, il motore ngl è ora utilizzato di default, ma in caso di problemi significativi nella successiva branch stabile 4.14, verrà ripristinato il vecchio motore di rendering «gl».

I nuovi motori sono posizionati come unificati e costruiti da un'unica base di codice. Il concetto di unificazione è che si utilizza come base l'API Vulkan, sopra la quale per OpenGL è stato creato un livello di astrazione distinto, che tiene conto delle differenze tra OpenGL e Vulkan. Questo approccio ha permesso di utilizzare in entrambi i motori una infrastruttura comune per la gestione del grafo della scena (scene graph), delle trasformazioni, della memorizzazione temporanea delle texture e dei glifi. L'unificazione ha anche notevolmente semplificato la manutenzione della base di codice di entrambi i motori e il loro mantenimento aggiornato e sincronizzato.

A differenza del vecchio motore «gl», in cui per ogni tipo di nodo di rendering (rendernode) veniva utilizzato uno shader semplice separato e si eseguiva un riordino periodico dei dati durante il rendering fuori schermo (offscreen), nei nuovi motori invece del rendering fuori schermo si applica uno shader complesso (ubershader), che interpreta i dati dal buffer. Nella sua forma attuale, la nuova implementazione è ancora indietro rispetto alla 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 mancavano nel vecchio motore «gl»:

  • L'anti-aliasing consente di conservare i dettagli fini e di ottenere contorni più uniformi.
    Nuovi motori di rendering per OpenGL e Vulkan aggiunti in GTK
  • Formazione di gradienti arbitrari, in cui è possibile utilizzare qualsiasi numero di colori e il smoothing (nel motore "gl" erano supportati solo gradienti lineari, radiali e conici con 6 punti di stop).
    Nuovi motori di rendering per OpenGL e Vulkan aggiunti in GTK
  • Scalatura frazionaria che consente di impostare valori di scala non interi; ad esempio, utilizzando una scala del 125% per una finestra 1200×800, verrà evidenziato un buffer 1500×1000, e non 2400×1600 come nel vecchio motore.
  • Supporto della tecnologia DMA-BUF per utilizzare più GPU e spostare singole operazioni su un'altra GPU.
  • Molti nodi di rendering problematici nella vecchia implementazione vengono ora gestiti correttamente.

Tra i limiti dei nuovi motori rientra l'assenza di supporto per il posizionamento su valori non interi (fractional position) e nodi glshader, che erano molto legati alle peculiarità del vecchio motore e di cui non c'era più bisogno dopo l'aggiunta del supporto ai nodi con maschere (mask) e texture con trasparenza. Viene inoltre menzionata la possibilità che possano sorgere problemi con i driver grafici a causa della modifica 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 su macOS e DirectX su Windows, ma la creazione di tali motori è complicata dall'uso di altri linguaggi per gli shader (nei motori "ngl" e "vulkan" viene utilizzato il linguaggio GLSL, quindi per Metal e Direct sarà necessario duplicare gli shader o utilizzare un layer basato su strumenti SPIRV-Cross).

Tra i piani futuri si menziona il supporto HDR e strumenti per una gestione corretta del colore, il supporto del rendering path (Path rendering) lato GPU, la possibilità di rendering di glifi, rendering al di fuori del thread principale e ottimizzazione delle prestazioni per dispositivi vecchi e a bassa potenza. Attualmente, 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 valori attuali sono sufficienti per il rendering a 60 o 144 FPS. Si prevede che la situazione cambi dopo l'ottimizzazione.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster