Se han agregado nuevos motores de renderizado para OpenGL y Vulkan a GTK

Los desarrolladores de la biblioteca GTK han anunciado la disponibilidad de dos nuevos motores de renderizado: "ngl" y "vulkan", que utilizan las API de gráficos OpenGL (GL 3.3+ y GLES 3.0+) y Vulkan. Se incluyen nuevos motores en la versión experimental de GTK 4.13.6. En la rama GTK experimental, el motor ngl ahora se usa de forma predeterminada, pero si se identifican problemas importantes en la próxima rama estable 4.14, se devolverá el antiguo motor de renderizado "gl".

Los nuevos motores se posicionan unificados y ensamblados a partir de una única base de código. La esencia de la unificación es que se utiliza la API de Vulkan como base, sobre la cual se ha creado un nivel de abstracción separado para OpenGL, teniendo en cuenta las diferencias entre OpenGL y Vulkan. Este enfoque hizo posible utilizar una infraestructura común en ambos motores para procesar gráficos de escenas, transformaciones, almacenamiento en caché de texturas y glifos. La unificación también simplificó significativamente el mantenimiento de la base de código de ambos motores y su actualización y sincronización.

A diferencia del antiguo motor gl, que usaba un sombreador simple separado para cada tipo de nodo de renderizado y reordenaba periódicamente los datos durante el renderizado fuera de la pantalla, los nuevos motores en lugar del renderizado fuera de la pantalla usan un sombreador complejo (ubershader) que interpreta los datos del búfer. . En su forma actual, la nueva implementación todavía está por detrás de la anterior en términos de nivel de optimización, ya que en la etapa actual el enfoque principal está en el correcto funcionamiento y la facilidad de mantenimiento.

Nuevas características que faltan en el antiguo motor gl:

  • Suavizado de contorno: le permite conservar los detalles finos y lograr contornos más suaves.
    Se han agregado nuevos motores de renderizado para OpenGL y Vulkan a GTK
  • Formación de degradados arbitrarios, que pueden utilizar cualquier cantidad de colores y suavizado (en el motor gl, solo se admitían degradados lineales, radiales y cónicos con 6 colores de parada).
    Se han agregado nuevos motores de renderizado para OpenGL y Vulkan a GTK
  • Escala fraccionaria, que le permite establecer valores de escala no enteros, por ejemplo, cuando se usa una escala del 125% para una ventana de 1200x800, se asignará un búfer de 1500x1000 y no 2400x1600 como en el motor anterior.
  • Soporte para la tecnología DMA-BUF para usar múltiples GPU y descargar operaciones individuales a otra GPU.
  • Muchos nodos de renderizado que tuvieron problemas en la implementación anterior se procesan correctamente.

Las limitaciones de los nuevos motores incluyen la falta de soporte para el posicionamiento mediante valores no enteros (posición fraccionaria) y nodos glshader, que estaban fuertemente ligados a las características del motor anterior y que ya no eran necesarios después de agregar soporte para nodos con máscaras (mascara) y texturas con transparencia. También se menciona que existe la posibilidad de que surjan posibles problemas con los controladores de gráficos debido a cambios en el método de trabajo con los controladores.

En el futuro, basándose en el nuevo modelo unificado, no se excluye la creación de motores de renderizado que utilicen Metal en macOS y DirectX en Windows, pero la creación de dichos motores se complica por el uso de otros lenguajes para sombreadores (el “ngl " y los motores "vulkan" usan el lenguaje GLSL, por lo que para Metal y Direct tendrá que duplicar sombreadores o usar una capa basada en el kit de herramientas SPIRV-Cross).

Los planes futuros incluyen brindar soporte HDR y herramientas para la gestión correcta del color, soporte para renderizado de rutas en el lado de la GPU, la capacidad de renderizar glifos, renderizado fuera de flujo y optimizaciones de rendimiento para dispositivos más antiguos y de bajo consumo. En su forma actual, el rendimiento del motor "vulkan" se acerca al rendimiento del antiguo motor "gl". El motor "ngl" tiene un rendimiento inferior al antiguo motor "gl", pero el rendimiento disponible es suficiente para renderizar a 60 o 144 FPS. Se espera que la situación cambie después de la optimización.

Fuente: opennet.ru

Añadir un comentario