24.04.2024

Доступен графический тулкит GTK 4.14 с новыми движками для OpenGL и Vulkan

После семи месяцев разработки опубликован релиз многоплатформенного тулкита для создания графического интерфейса пользователя — GTK 4.14.0. GTK 4 развивается в рамках нового процесса разработки, который пытается предоставить разработчикам приложений стабильный и поддерживаемый в течение нескольких лет API, который можно использовать не опасаясь, что каждые полгода придётся переделывать приложения из-за изменения API в очередной ветке GTK.

В дальнейшем планируется сформировать экспериментальную ветку 4.90, в которой будет развиваться функциональность для будущего выпуска GTK5. В ветку GTK5 будут включены изменения нарушающие совместимость на уровне API, например, связанные с переводом в разряд устаревших некоторых виджетов, таких как старый диалог выбора файлов. Также обсуждается возможность прекращения в ветке GTK5 поддержки протокола X11 и оставления возможности работы только с использованием протокола Wayland.

Среди наиболее заметных улучшений в GTK 4.14:

  • В состав включены новые унифицированные движки отрисовки «ngl» и «vulkan», использующие графические API OpenGL (GL 3.3+ и GLES 3.0+) и Vulkan. Оба движка базируются на API Vulkan, но в движке «ngl» для OpenGL создан отдельный уровень абстракции, работающий поверх Vulkan с учётом отличий между OpenGL и Vulkan. Подобный подход позволил задействовать в обоих движках общую инфраструктуру для обработки графа сцены (scene graph), трансформаций, кэширования текстур и глифов. Унификация также заметно упростила сопровождение кодовой базы обоих движков и их поддержание в актуальном и синхронизированном состоянии.

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

  • По умолчанию включён новый движок отрисовки «ngl», а также включена по умолчанию поддержка графического API Vulkan. При сборке в конфигурации по умолчанию теперь требуется поддержка Vulkan 1.3.
  • В библиотеку GSK (GTK Scene Kit), предоставляющей возможности отрисовки графических сцен через OpenGL и Vulkan, внесены значительные улучшения, связанные с отрисовкой шрифтов, хинтингом и использованием нецелых значений масштаба при выводе текста. При хинтинге (сглаживание контура глифа при растеризации для повышения чёткости на экранах с низким разрешением) реализовано субпиксельное позиционирование глифов. Повышено качество отрисовки шрифтов при нецелых значениях масштаба (например, 125%). Реализована поддержка вытеснения элементов из кэшей для глифов и текстур. Повышена эффективность кэширования глифов.
  • В рамках работы по уходу от использования библиотеки Cairo в пользу отрисовки при помощи GPU добавлена поддержка «путей» (Path) для отрисовки фигур и областей, используя последовательность линий или кубических и квадратичных кривых Безье. Для отрисовки при помощи путей предложен объект GskPath, определяющий параметры линий или кривых, а также объекты GskPathBuilder для создания кривых, GskPathPoint для определения точки на фигуре и GskPathMeasure для выполнения измерений, таких как длина контура.

  • В библиотеке GDK, предоставляющей прослойку между GTK и графической подсистемой, расширена поддержка механизма DMA-BUF, позволяющего использовать буферы на уровне ядра, адресуемые при помощи дескриптора, что даёт возможность вместо копирования пиксельных данных передавать их между подсистемами ядра через дескриптор. В контексте GTK DMA-BUF может использоваться для минимизации копирования пиксельных данных в процессе композитинга и при работе с видео (например, видео может быть записано аппаратным декодировщиком в dmabuf, после чего прикреплено к поверхности Wayland и передано в композитный менеджер для наложения элементов интерфейса и вывода на экран без лишних операций копирования данных).

    Для прямой отправки контента, такого как видео, композитному менеджеру (минуя рендер GSK) добавлен виджет GtkGraphicsOffload, а для создания контента для прямой передачи добавлен класс GdkDmabufTextureBuilder, создающий объекты GdkTexture из dmabuf. В качестве источника для dmabuf могут использоваться pipewire, video4linux или gstreamer. Поддерживаются форматы dmabuf NV16, NV61, NV24, NV42 и YUV.

  • Добавлен класс GtkPrintDialog, предназначенный для формирования диалогов вывода на печать и предлагающий асинхронный API для использования вместо GtkPrintOperation.
  • В виджете GtkEmojiChooser обновлены данные Emoji и добавлена возможность поиска на разных языках с учётом разных локалей.
  • В виджете GtkEntry улучшено отслеживание изменений, произведённых пользователем (для реализации операции undo).
  • В виджете GtkFileChooser ускорено открытие диалога выбора файлов.
  • Класс GtkShortcutsWindow, отображающий подсказку по клавиатурным комбинациям и экранным жестам, адаптирован для небольших экранов.
  • В режиме инспектирования (GTK inspector) обеспечено отображение информации об OpenGL, подповерхностях и FPS.
  • В утилиту gtk4-rendernode-tool добавлена команда «compare».
  • Предложена новая утилита gtk4-path-tool для работы с путями.
  • В утилите gtk4-node-editor добавлена поддержка автозаписи.
  • Устранено аварийное завершение, проявлявшееся при использовании Wayland в окружениях не на базе GNOME Shell.
  • Добавлены новые средства для людей с ограниченными возможностями, связанные с показом сложного отформатированного текста, работой WebKitGTK и выводом уведомлений. Улучшена поддержка спецификаций ARIA. Добавлен интерфейс GtkAccessibleText для использования accessibility-возможностей в сторонних текстовых виджетах. В интерфейсе GtkText добавлена поддержка протокола AT-SPI для взаимодействия с экранными ридерами.
  • Добавлена возможность рендеринга с привлечением GPU, используя API WGL на платформе Windows.
  • Сокращено потребление памяти при загрузке тем оформления на базе CSS.

Источник: https://www.opennet.ru/opennews/art.shtml?num=60778 Источник.