Nuovi motori di rendering per OpenGL e Vulkan sono stati aggiunti a 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. Nuovi motori sono inclusi nella versione sperimentale di GTK 4.13.6. Nel ramo sperimentale GTK, il motore ngl è ora utilizzato di default, ma se vengono identificati problemi significativi nel prossimo ramo stabile 4.14, verrà restituito il vecchio motore di rendering "gl".

I nuovi motori sono posizionati come unificati e assemblati da un'unica base di codice. L'essenza dell'unificazione è che come base viene utilizzata l'API Vulkan, sulla quale è stato creato un livello di astrazione separato per OpenGL, tenendo conto delle differenze tra OpenGL e Vulkan. Questo approccio ha permesso di utilizzare un'infrastruttura comune in entrambi i motori per l'elaborazione del grafico della scena, delle trasformazioni, della memorizzazione nella cache di trame e glifi. L'unificazione ha inoltre semplificato notevolmente la manutenzione della base di codice di entrambi i motori, mantenendoli aggiornati e sincronizzati.

A differenza del vecchio motore gl, che utilizzava un semplice shader separato per ogni tipo di nodo di rendering e riordinava periodicamente i dati durante il rendering fuori schermo, i nuovi motori invece del rendering fuori schermo utilizzano uno shader complesso (ubershader) che interpreta i dati dal buffer . Nella sua forma attuale, la nuova implementazione è ancora in ritardo rispetto alla vecchia in termini di livello di ottimizzazione, poiché l'attenzione principale nella fase attuale è il corretto funzionamento e la facilità di manutenzione.

Nuove funzionalità che mancano nel vecchio motore gl:

  • Levigatura dei contorni: consente di preservare i dettagli più fini e ottenere contorni più uniformi.
    Nuovi motori di rendering per OpenGL e Vulkan sono stati aggiunti a GTK
  • Formazione di gradienti arbitrari, che possono utilizzare qualsiasi numero di colori e anti-aliasing (nel motore gl erano supportati solo gradienti lineari, radiali e conici con 6 colori stop).
    Nuovi motori di rendering per OpenGL e Vulkan sono stati aggiunti a GTK
  • Scala frazionaria, che consente di impostare valori di scala non interi, ad esempio, quando si utilizza una scala del 125% per una finestra di 1200x800, verrà allocato un buffer di 1500x1000 e non 2400x1600 come nel vecchio motore.
  • Supporto per la tecnologia DMA-BUF per l'utilizzo di più GPU e l'offload di singole operazioni su un'altra GPU.
  • Molti nodi di rendering che presentavano problemi nella vecchia implementazione vengono elaborati correttamente.

Tra i limiti dei nuovi motori vi è la mancanza del supporto per il posizionamento per valori non interi (posizione frazionaria) e dei nodi glshader, che erano fortemente legati alle funzionalità del vecchio motore, e che non erano più necessari dopo l'aggiunta del supporto per nodi con maschere (maschera) e trame con trasparenza. Si dice anche che esiste la possibilità che si verifichino problemi con i driver grafici a causa di cambiamenti nel metodo di lavoro con i driver.

In futuro, sulla base del nuovo modello unificato, non è esclusa la creazione di motori di rendering utilizzando Metal in macOS e DirectX in Windows, ma la realizzazione di tali motori è complicata dall'utilizzo di altri linguaggi per gli shader (il “ngl " e i motori "vulkan" utilizzano il linguaggio GLSL, quindi per Metal e Direct sarà necessario duplicare gli shader o utilizzare un livello basato sul toolkit SPIRV-Cross).

I piani futuri includono la fornitura di supporto HDR e strumenti per la corretta gestione del colore, supporto per il rendering del percorso sul lato GPU, la capacità di eseguire il rendering di glifi, rendering off-stream e ottimizzazioni delle prestazioni per dispositivi più vecchi e a basso consumo. Nella sua forma attuale, le prestazioni del motore "vulkan" sono vicine a quelle del vecchio motore "gl". Il motore "ngl" ha prestazioni inferiori al vecchio motore "gl", ma le prestazioni disponibili sono sufficienti per il rendering a 60 o 144 FPS. Si prevede che la situazione cambierà dopo l'ottimizzazione.

Fonte: opennet.ru

Aggiungi un commento