Engadíronse a GTK novos motores de renderizado para OpenGL e Vulkan

Os desenvolvedores da biblioteca GTK anunciaron a dispoñibilidade de dous novos motores de renderizado: "ngl" e "vulkan", utilizando as API de gráficos OpenGL (GL 3.3+ e GLES 3.0+) e Vulkan. Inclúense novos motores na versión experimental de GTK 4.13.6. Na rama experimental de GTK, agora úsase o motor ngl por defecto, pero se se identifican problemas significativos na seguinte rama estable 4.14, devolverase o antigo motor de renderizado "gl".

Os novos motores colócanse unificados e ensamblados a partir dunha única base de código. A esencia da unificación é que a API de Vulkan utilízase como base, ademais de que se creou un nivel de abstracción separado para OpenGL, tendo en conta as diferenzas entre OpenGL e Vulkan. Este enfoque permitiu utilizar unha infraestrutura común en ambos os motores para procesar o gráfico da escena, as transformacións, as texturas e os glifos de almacenamento en caché. A unificación tamén simplificou significativamente o mantemento da base de código de ambos os motores e mantelos actualizados e sincronizados.

A diferenza do antigo motor gl, que utilizaba un sombreador sinxelo separado para cada tipo de nodo de renderizado e reordenaba periódicamente os datos durante a renderización fóra da pantalla, os novos motores en lugar da representación fóra da pantalla usan un sombreador complexo (ubershader) que interpreta os datos do búfer. . Na súa forma actual, a nova implementación aínda está por detrás da antiga en canto ao nivel de optimizacións, xa que o foco principal na fase actual é o correcto funcionamento e a facilidade de mantemento.

Novas funcións que faltan no antigo motor gl:

  • Suavizado de contornos: permítelle conservar detalles finos e conseguir contornos máis suaves.
    Engadíronse a GTK novos motores de renderizado para OpenGL e Vulkan
  • Formación de gradientes arbitrarios, que poden usar calquera número de cores e anti-aliasing (no motor gl só se admitían gradientes lineais, radiais e cónicos con 6 cores de parada).
    Engadíronse a GTK novos motores de renderizado para OpenGL e Vulkan
  • Escala fraccional, que permite establecer valores de escala non enteiros, por exemplo, cando se usa unha escala do 125% para unha xanela de 1200x800, asignarase un búfer de 1500x1000, e non 2400x1600 como no motor antigo.
  • Compatibilidade coa tecnoloxía DMA-BUF para usar varias GPU e descargar operacións individuais a outra GPU.
  • Moitos nodos de renderizado que tiveron problemas na implementación antiga procesáronse correctamente.

As limitacións dos novos motores inclúen a falta de soporte para o posicionamento por valores non enteiros (posición fraccionaria) e nodos glshader, que estaban fortemente ligados ás características do motor antigo e que xa non eran necesarios despois de engadir soporte para nós con máscaras (máscara) e texturas con transparencia. Tamén se menciona que existe a posibilidade de posibles problemas cos controladores de gráficos que xurdan debido a cambios no método de traballo cos controladores.

No futuro, baseándose no novo modelo unificado, non se exclúe a creación de motores de renderizado usando Metal en macOS e DirectX en Windows, pero a creación deste tipo de motores complícase polo uso doutras linguaxes para os sombreadores (o “ngl ” e os motores “vulkan” usan a linguaxe GLSL, polo que para Metal e Direct terán que duplicar os sombreadores ou usar unha capa baseada no kit de ferramentas SPIRV-Cross).

Os plans futuros inclúen proporcionar compatibilidade con HDR e ferramentas para unha correcta xestión da cor, compatibilidade coa representación de Path no lado da GPU, a capacidade de renderizar glifos, renderización fóra de fluxo e optimizacións de rendemento para dispositivos máis antigos e de baixo consumo. Na súa forma actual, o rendemento do motor "vulkan" é próximo ao rendemento do antigo motor "gl". O motor "ngl" é inferior en rendemento ao motor "gl" antigo, pero o rendemento dispoñible é suficiente para renderizarse a 60 ou 144 FPS. Espérase que a situación cambie despois da optimización.

Fonte: opennet.ru

Engadir un comentario