Новые движки позиционируются как унифицированные и собираемые из единой кодовой базы. Суть унификации в том, что в качестве основы используется API Vulkan, поверх которого для OpenGL создан отдельный уровень абстракции, учитывающий отличия между OpenGL и Vulkan. Подобный подход позволил задействовать в обоих движках общую инфраструктуру для обработки графа сцены (scene graph), трансформаций, кэширования текстур и глифов. Унификация также заметно упростила сопровождение кодовой базы обоих движков и их поддержание в актуальном и синхронизированном состоянии.
В отличие от старого движка «gl», в котором для каждого типа узлов рендеринга (rendernode) использовался отдельный простой шейдер и выполнялась периодическая пересортировка данных при закадровом рендеринге (offscreen), в новых движках вместо закадрового рендеринга применяется сложный шейдер (ubershader), интерпретирующий данные из буфера. В текущем виде новая реализация пока отстаёт от старой по уровню оптимизаций, так как основное внимание на текущей стадии удаляется корректности работы и простоте сопровождения.
Новые возможности, которые отсутствуют в старом движке «gl»:
- Сглаживание контуров — позволяет сохранить мелкие детали и добиться отрисовки более ровных контуров.
- Формирование произвольных градиентов, в которых может использоваться любое число цветов и сглаживание (в движке «gl» поддерживались только линейные, радиальные и конические градиенты c 6 цветами остановки).
- Дробное масштабирование (fractional scale), позволяющее выставлять нецелые значения масштаба, например, при использовании масштаба 125% для окна 1200×800 будет выделен буфер 1500×1000, а не 2400×1600 как в старом движке.
- Поддержка технологии DMA-BUF для использования нескольких GPU и выноса отдельных операций на другой GPU.
- Корректно обрабатываются многие узлы рендеринга, с которыми были проблемы в старой реализации.
К ограничениям новых движков отнесено отсутствие поддержки позиционирования по нецелым значениям (fractional position) и узлов
glshader, которые были сильно завязаны на особенностях старого движка, и в которых пропала необходимость после добавления поддержка узлов с масками (mask) и текстур с прозрачностью. Также упоминается наличие вероятности всплытия возможных проблем с графическими драйверами, обусловленных изменением метода работы с драйверами.
В будущем на базе новой унифицированной модели не исключается создание движков отрисовки, использующих Metal в macOS и DirectX в Windows, но создание подобных движков затруднено использованием иных языков для шейдеров (в движках «ngl» и «vulkan» задействован язык GLSL, поэтому для Metal и Direct придётся либо дублировать шейдеры, либо использовать прослойку на базе инструментария SPIRV-Cross).
Из планов на будущее упоминается обеспечение поддержки HDR и средств для корректного управления цветом, поддержка пути рендеринга (Path rendering) на стороне GPU, возможность рендеринга глифов, рендеринг вне основного потока и оптимизация производительности для старых и маломощных устройств. В текущем виде производительность движка «vulkan» близка к производительности старого движка «gl». Движок «ngl» отстаёт по производительности от старого движка «gl», но имеющихся показателей достаточно для отрисовки с частотой 60 или 144 FPS. Предполагается, что ситуация изменится после проведения оптимизации.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60515