Доступен графический тулкит 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.
Источник: http://www.opennet.ru/opennews/art.shtml? num=60778
© OpenNet