Набор графов сцены GTK
Оригинальный автор(ы) | Эммануэле Басси и др. |
---|---|
Разработчик(и) | Проект GNOME |
Первоначальный выпуск | 24 марта 2017 г |
Написано в | С |
Операционная система | Часть ГТК |
Тип | Библиотека программного обеспечения |
Лицензия | LGPL |
Веб-сайт | документы |
GTK Scene Graph Kit ( GSK ) — это API рендеринга и графа сцены для GTK, представленный в версии 3.90. GSK находится между элементами графического управления (виджетами) и рендерингом.
Как и GDK , GSK является частью GTK и распространяется по лицензии GNU Lesser General Public License (LGPL).
Обоснование
[ редактировать ]ГСК входит в состав ГТК. GSK предназначен для использования самим GTK и приложениями на базе GTK, которые хотят заменить Clutter для своего пользовательского интерфейса. Приложения, которые использовали Clutter вместо использования только GTK, - это, например, GNOME Shell , GNOME Videos , GNOME Boxes и Cheese .
Любое приложение, которое использует графические элементы управления GTK (виджеты), в отличие от тех приложений, которые получают окно GTK и затем рисуют себя в нем, получают выгоду от GSK.
Производительность
[ редактировать ]Рисование графических элементов управления (виджетов) без графа сцены приводит к рендерингу вещей, которые не отображаются на экране, вещей, которые не нужно визуализировать; следовательно, это приводит к предотвратимым потерям производительности и срока службы батареи. График сцены используется для определения скрытой поверхности .
Простота
[ редактировать ]Способ рисования виджетов в GTK (без использования Clutter) заключался в том, что функция рисования (часть GDK , отсюда и название (GIMP «Drawing» Kit)) рисовала все. Невозможно было узнать, что только что было нарисовано. Чтобы узнать, где в данный момент находился указатель мыши, необходимо было вычислить текущую позицию. С помощью GSK должно быть довольно легко писать сложные графические элементы управления (виджеты) и при этом легко отслеживать местонахождение указателя мыши.
CSS
[ редактировать ]Для GTK было решено перейти на модель на основе каскадной таблицы стилей (CSS) для определения стилей (т. е . оформления тем или оформления ) и отображения элементов графического управления (виджетов). В CSS тени, границы, отступы и свойства стиля имеют четко определенную семантику . Некоторые из этих семантик трудно реализовать с помощью старой модели рисования GTK.
GSK использует графен, [1] внешняя библиотека, в которой хранится коллекция типов геометрии — точек, размеров, прямоугольников, векторов, квадратов, кватернионов, матриц. графен был портирован в систему сборки Meson .
Конвейер рендеринга GSK
[ редактировать ]GSK использует двухуровневый подход: [2]
- Нижний уровень представляет собой простое дерево операций рендеринга; его можно преобразовать в соответствующие команды рендеринга с минимальными изменениями состояния, поэтому он преобразуется в конвейер рендеринга. Дерево операций рендеринга представлено экземплярами GskRenderNode; экземпляр GskRenderer берет узлы рендеринга и отправляет их (после возможного изменения порядка и преобразования в более подходящее представление) базовой графической системе.
- более высокий уровень: сложный набор логических уровней; он добавляет удобный API высокого уровня для разработчиков приложений.
API рендеринга
[ редактировать ]Начиная с GTK 3.90, который является номером разрабатываемой версии того, что впоследствии станет GTK 4, GSK поддерживает рендеринг с использованием следующих серверных частей:
История
[ редактировать ]Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( март 2017 г. ) |
беспорядок
[ редактировать ]Clutter был выпущен для публики 22 июня 2006 г. Библиотека интеграции «clutter-gtk» доступна с 29 ноября 2006 г. [3]
На 2-м саммите Desktop Summit в августе 2011 года в Берлине много говорилось о «GTK+ 4.0 и Clutter 2.0». [4]
Идея внедрить граф сцены в GTK.
[ редактировать ]В 2008 году такие разработчики, как Havoc Pennington, рассматривали возможность добавления в GTK холста сцены, поскольку люди за пределами GTK использовали такие вещи, как Clutter , Pigment, HippoCanvas или GooCanvas . [5] Элементы графического управления (виджеты) было предложено сделать одним видом объектов в более гибком графе сцены.
ГСК
[ редактировать ]До GSK рисование выполнялось с помощью GDK — обработка базового рендеринга , такого как рисование примитивов, растровой графики (растровые изображения), курсоров , шрифтов , а также оконных событий и функций перетаскивания . [6]
В июне 2006 года была выпущена Clutter , библиотека «интерактивного холста» на основе OpenGL. У Clutter есть собственный граф сцены, и разработчики GNOME предпочитали использовать граф сцены Clutter с GTK, чему способствовала библиотека clutter-gtk. [7] Clutter можно встроить в каждое приложение GNOME с помощью библиотеки clutter-gtk. Библиотека clutter-gtk предоставляет виджет GtkClutterEmbed GTK, который можно использовать для отображения ClutterStage.
Некоторые думали, как объединить Clutter и GTK лучше, чем библиотека clutter-gtk.
В 2011 году Firefox представил «Azure», и Джо Дрю и Бас Схоутен озаботились некоторыми объяснениями. [8] [9] [10]
- На GUADEC2013 в Брно Эммануэле поделился своей идеей по реализации графа сцены и структуры анимации внутри платформы GNOME (после шестилетней работы над Clutter). [11]
- GTK Scene Graph Kit (GSK) — это предстоящий граф сцен для GTK, который находится в процессе написания Эммануэле Басси. [12]
- 30 июля 2014 года Эмануэль заявил, что, по его мнению, не должно быть отдельного Clutter 2.0. [13]
На Developer Experience Hackfest 2014 года была представлена презентация нового графа сцен для GTK, который планируется объединить с GTK+ 3.16. [14] Затем планировалось, что GSK будет готов и полностью интегрирован в GTK+ версии 3.20, которая выйдет в марте 2016 года. Это было отложено до версии 3.22. [15] а затем окончательно слился с версией 3.90.
Наличие поддержки OpenGL (или OpenGL ES ) в GDK облегчает немного лучший контроль над графическим конвейером ; OpenGL хорошо подходит для компоновки текстурированных данных, но совершенно непригоден для рисования. [ нужна ссылка ]
Самая последняя информация о статусе GSK получена с GUADEC 2016. [16]
Другие проекты
[ редактировать ]- Библиотеки Enlightenment Foundation с 2000 года используют граф сцены, реализованный в библиотеке Evas . [17]
- Qt был переработан, и, начиная с версии 5, он включает Qt Quick 2 с рендерингом на основе графа сцены. [18]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Басси, Эммануэле (2 мая 2014 г.). «Графен» .
- ^ Басси, Эммануэле (18 октября 2016 г.). «Первоначальная реализация конвейера рендеринга GSK» .
- ^ Басси, Эммануэле (29 ноября 2006 г.). «добавить беспорядок-gtk» .
- ^ Басси, Эммануэле (31 августа 2011 г.). «GTK+ 4.0 и Clutter 2.0: радуга и единороги» .
- ^ Пеннингтон, Хэвок (7 марта 2008 г.). «Предложение Хэвока Пеннингтона по графу сцены» .
- ^ Басси, Эммануэле (29 июля 2014 г.). «Набор графов сцен GTK+» .
- ^ «clutter-gtk на git.gnome» .
- ^ «Представляем проект Azure» . 26 апреля 2011 г. Архивировано из оригинала 8 сентября 2016 г. Проверено 17 марта 2017 г.
- ^ «Сравнение производительности: Azure и Cairo» . 06.06.2011.
- ^ «Освобождение Лазури» . 16 августа 2011 г.
- ^ Басси, Эммануэле (12 августа 2013 г.). «Будущее в прошлом GTK-сцена-граф» .
- ^ Басси, Эммануэле (29 июля 2014 г.). «Набор графов сцен GTK+» .
- ^ Басси, Эммануэле (30 июля 2014 г.). «Проблема остановки – будущее в прошлом» .
- ^ «Hackfest 2014 Developer Experience: граф сцены для GTK+ 3.16» .
- ^ «GNOME Wiki: план развития GTK+» .
- ^ Басси, Эммануэле (16 августа 2016 г.). «GTK: мы уже в будущем?» . Ютуб .
- ^ «Евас» .
- ^ «Граф быстрой сцены Qt» .
Внешние ссылки
[ редактировать ]- Справочное руководство GNOME для нестабильной версии GSK4
- ГСК на wiki.gnome.org
- GSK развенчивает миф (I) , (II) , (III) – Эммануэле Басси, 2016/08
- Код GSK из версии GTK 3.89.5
- Современная модель рисования Gtk – Александр Ларссон, 4 ноября 2013 г.
- Обзор GTK и его библиотек. Архивировано 12 марта 2019 г. на Wayback Machine - Проект GTK.
- https://git.gnome.org/browse/gtk-web/plain/images/architecture.svg
- https://wiki.gnome.org/Projects/Clutter
- https://wiki.gnome.org/Projects/Clutter/Future
- https://wiki.gnome.org/Projects/Clutter/Apocalypses
- https://wiki.gnome.org/Projects/Clutter/Roadmap