У GTK додані нові движки для OpenGL і Vulkan.

Розробники бібліотеки GTK оголосили про готовність двох нових движків малювання - ngl і vulkan, що використовують графічні API OpenGL (GL 3.3 + і GLES 3.0 +) і Vulkan. Нові двигуни включені до складу експериментального випуску GTK 4.13.6. В експериментальній гілки GTK двигун ngl тепер використовується за замовчуванням, але у разі виявлення значних проблем у наступній стабільній гілці 4.14 буде повернутий старий движок малювання «gl».

Нові двигуни позиціонуються як уніфіковані та збираються з єдиної кодової бази. Суть уніфікації в тому, що основою використовується API Vulkan, поверх якого для OpenGL створений окремий рівень абстракції, що враховує відмінності між OpenGL і Vulkan. Подібний підхід дозволив задіяти в обох двигунах загальну інфраструктуру для обробки графа сцени (scene graph), трансформацій, кешування текстур та гліфів. Уніфікація також помітно спростила супровід кодової бази обох двигунів та їх підтримку в актуальному та синхронізованому стані.

На відміну від старого движка «gl», в якому для кожного типу вузлів рендерингу (rendernode) використовувався окремий простий шейдер і виконувалася періодичне пересортування даних при закадровому рендерингу (offscreen), у нових движках замість закадрового рендерингу застосовується складний шейдер (ubershader) із буфера. У поточному вигляді нова реалізація поки що відстає від старої за рівнем оптимізації, оскільки основна увага на поточній стадії видаляється коректності роботи та простоті супроводу.

Нові можливості, які відсутні у старому движку «gl»:

  • Згладжування контурів - дозволяє зберегти дрібні деталі і домогтися відтворення більш рівних контурів.
    У GTK додані нові движки для OpenGL і Vulkan.
  • Формування довільних градієнтів, в яких може використовуватися будь-яке число кольорів та згладжування (у движку «gl» підтримувалися лише лінійні, радіальні та конічні градієнти з 6 кольорами зупинки).
    У GTK додані нові движки для OpenGL і Vulkan.
  • Дробне масштабування (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. Передбачається, що ситуація зміниться після оптимізації.

Джерело: opennet.ru

Додати коментар або відгук