GTK Scene Graph Kit ( GSK ) es la API de renderizado y gráficos de escena para GTK introducida con la versión 3.90. GSK se encuentra entre los elementos de control gráfico (widgets) y el renderizado.
Autor (es) original (es) | Manuelle Bassi y col. |
---|---|
Desarrollador (es) | El proyecto GNOME |
Versión inicial | 24 de marzo de 2017 |
Escrito en | C |
Sistema operativo | Parte de GTK |
Tipo | Biblioteca de software |
Licencia | LGPL |
Sitio web | desarrollador |
Al igual que GDK , GSK es parte de GTK y tiene la licencia GNU Lesser General Public License (LGPL).
Razón fundamental
GSK es parte de GTK. GSK está destinado a ser utilizado por GTK y por aplicaciones basadas en GTK que deseen reemplazar Clutter para su interfaz de usuario. Las aplicaciones que hicieron uso de Clutter en lugar de usar solo GTK son, por ejemplo, GNOME Shell , GNOME Videos , GNOME Boxes y Cheese .
Cualquier aplicación que haga uso de los elementos de control gráfico de GTK (widgets), a diferencia de aquellas aplicaciones que obtienen una ventana GTK y luego se dibujan en ella, se benefician de GSK.
Actuación
Dibujar elementos de control gráfico (widgets) sin un gráfico de escena conduce a renderizar cosas que no se muestran en la pantalla, cosas que no necesitan renderizarse; por lo tanto, conduce a pérdidas evitables de rendimiento y vida útil de la batería. El gráfico de escenas se utiliza para realizar la determinación de superficies ocultas .
Sencillez
La forma en que se dibujaban los widgets en GTK (cuando no se usaba Clutter) era que una función de dibujo (parte de GDK de ahí el nombre (GIMP "Drawing" Kit)) dibujaba todo. No había forma de saber qué se acaba de dibujar. Para saber dónde se encontraba actualmente el puntero del mouse, se tenía que calcular la posición actual. Con GSK, debería ser bastante fácil escribir elementos de control gráfico complejos (widgets) y seguir fácilmente el paradero del puntero del mouse.
CSS
Se decidió que GTK se trasladara a un modelo basado en hojas de estilo en cascada (CSS) sobre cómo se estilizan y renderizan los elementos de control gráfico (widgets) (es decir, temáticos / revestidos ). En CSS, las propiedades de sombras, bordes, relleno y estilo tienen una semántica bien definida . Algunas de esas semánticas son difíciles de implementar con el antiguo modelo de dibujo GTK.
GSK utiliza grafeno, [1] una biblioteca externa que alberga una colección de tipos de geometría: puntos, tamaños, rectángulos, vectores, quads, cuaterniones, matrices. el grafeno se ha adaptado al sistema de compilación Meson .
Canalización de renderizado de GSK
GSK utiliza un enfoque de doble capa: [2]
- La capa inferior es un árbol de operaciones de renderizado simple; se puede transformar en comandos de renderizado apropiados con cambios de estado mínimos, por lo que se transforma en la canalización de renderizado. El árbol de operaciones de renderizado está representado por instancias de GskRenderNode; una instancia de GskRenderer toma los nodos de renderizado y los envía (después de potencialmente reordenarlos y transformarlos a una representación más apropiada) al sistema gráfico subyacente.
- capa superior: un conjunto complejo de capas lógicas; agrega una API de conveniencia de alto nivel para los desarrolladores de aplicaciones.
API de renderizado
A partir de GTK 3.90, que es el número de versión de desarrollo de lo que se convertirá en GTK 4, GSK admite el renderizado utilizando estos back-end:
Historia
Desorden
Clutter se lanzó al público el 22 de junio de 2006. La biblioteca de integración "clutter-gtk" ha estado disponible desde 2006-11-29. [3]
En la 2nd Desktop Summit en agosto de 2011 en Berlín se habló bastante sobre "GTK + 4.0 y Clutter 2.0". [4]
Idea para introducir un gráfico de escena en GTK
En 2008, desarrolladores como Havoc Pennington estaban considerando agregar un lienzo de escena a GTK, ya que personas ajenas a GTK estaban haciendo uso de cosas como Clutter , Pigment, HippoCanvas o GooCanvas . [5] Se propuso hacer de los elementos de control gráfico (widgets) un tipo de objeto en un escenario gráfico más flexible.
GSK
Antes de GSK, el dibujo solía ser realizado por GDK: manejaba la representación básica como primitivas de dibujo, gráficos rasterizados (mapas de bits), cursores , fuentes , así como eventos de ventana y funcionalidad de arrastrar y soltar . [6]
En junio de 2006 , se lanzó Clutter , una biblioteca de 'lienzo interactivo' basada en OpenGL. Clutter tiene su propio gráfico de escena, y los desarrolladores de GNOME prefirieron usar el gráfico de escena de Clutter con GTK, facilitado por una biblioteca llamada clutter-gtk. [7] Clutter puede integrarse en todas las aplicaciones de GNOME utilizando la biblioteca clutter-gtk. La biblioteca clutter-gtk proporciona un widget GtkClutterEmbed GTK que se puede utilizar para mostrar un ClutterStage.
Se pensó en cómo fusionar Clutter y GTK de una mejor manera que la biblioteca clutter-gtk.
En 2011, Firefox presentó "Azure" y Joe Drew y Bas Schouten se molestaron en dar algunas explicaciones. [8] [9] [10]
- En GUADEC2013 en Brno, Emmanuele compartió su idea sobre la implementación de un gráfico de escena y un marco de animación dentro de la plataforma GNOME (después de trabajar durante los últimos 6 años en Clutter). [11]
- GTK Scene Graph Kit (GSK) es el próximo escenario gráfico para GTK en proceso de ser escrito por Emanuele Bassi. [12]
- El 30 de julio de 2014, Emanuelle declaró que pensaba que no debería haber un Clutter 2.0 independiente. [13]
Hubo una presentación en el Developer Experience Hackfest de 2014 sobre un nuevo gráfico de escena para GTK destinado a fusionarse en GTK + 3.16. [14] Luego se planeó que GSK estuviera listo y completamente integrado en GTK + versión 3.20, que se lanzaría en marzo de 2016. Esto se pospuso a 3.22, [15] y finalmente se fusionó en 3.90.
Tener soporte para OpenGL (o OpenGL ES ) en GDK facilita un control ligeramente mejor de la canalización de gráficos ; OpenGL es muy adecuado para componer datos texturizados pero totalmente inadecuado para dibujar. [ cita requerida ]
La información más reciente sobre el estado de GSK es de GUADEC 2016. [16]
Otros proyectos
- Enlightenment Foundation Libraries ha estado utilizando un escenario gráfico desde 2000, implementado en la biblioteca Evas . [17]
- Qt ha sido rediseñado y, a partir de la versión 5, presenta Qt Quick 2 con renderizado basado en gráficos de escena. [18]
Ver también
- Desorden
Referencias
- ↑ Bassi, Emmanuele (2 de mayo de 2014). "Grafeno" .
- ^ Bassi, Emmanuele (18 de octubre de 2016). "Implementación inicial del proceso de renderizado de GSK" .
- ^ Bassi, Emmanuele (29 de noviembre de 2006). "agregar desorden-gtk" .
- ^ Bassi, Emmanuele (31 de agosto de 2011). "GTK + 4.0 y Clutter 2.0: arcoíris y unicornios" .
- ^ Pennington, Havoc (7 de marzo de 2008). "Propuesta de escenario gráfico de Havoc Pennington" .
- ^ Bassi, Emmanuele (29 de julio de 2014). "El kit de gráficos de escena GTK +" .
- ^ "desorden-gtk en git.gnome" .
- ^ "Presentación del proyecto Azure" . 2011-04-26. Archivado desde el original el 8 de septiembre de 2016 . Consultado el 17 de marzo de 2017 .
- ^ "Comparación de rendimiento: Azure vs Cairo" . 2011-06-06.
- ^ "Lanzamiento de Azure" . 2011-08-16.
- ^ Bassi, Emmanuele (12 de agosto de 2013). "Futuro en el gráfico de escena GTK pasado" .
- ^ Bassi, Emmanuele (29 de julio de 2014). "El kit de gráficos de escena GTK +" .
- ^ Bassi, Emmanuele (30 de julio de 2014). "Problema de detención - futuro en el pasado" .
- ^ "2014 Developer Experience Hackfest: Un gráfico de escena para GTK + 3.16" .
- ^ "Wiki de GNOME: hoja de ruta para GTK +" .
- ^ Bassi, Emmanuele (16 de agosto de 2016). "GTK: ¿ya estamos en el futuro?" .
- ^ "Evas" .
- ^ "Gráfico de escena rápido Qt" .
enlaces externos
- Manual de referencia de GNOME para GSK4 inestable
- GSK en wiki.gnome.org
- GSK Desmitificado (I) , (II) , (III) - Emmanuele Bassi, 2016/08
- Código GSK de la versión GTK 3.89.5
- El modelo de dibujo moderno de Gtk - Alexander Larsson, 04/11/2013
- Descripción general de GTK y sus bibliotecas : el proyecto 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