

GTK Scene Graph Kit ( GSK ) es la API de renderizado y grafo de escena para GTK , introducida con la versión 3.90. GSK se sitúa entre los elementos de control gráfico (widgets) y el renderizado.
Al igual que GDK , GSK forma parte de GTK y está licenciado bajo la Licencia Pública General Reducida de GNU (LGPL).
Razón fundamental
GSK forma parte de GTK. GSK está diseñado para ser utilizado por GTK y por aplicaciones basadas en GTK que deseen reemplazar Clutter en su interfaz de usuario. Algunas aplicaciones que utilizaron Clutter en lugar de solo GTK son, por ejemplo, GNOME Shell , GNOME Videos , GNOME Boxes y Cheese .
Cualquier aplicación que utilice los elementos de control gráfico (widgets) de GTK, en lugar de aquellas aplicaciones que obtienen una ventana GTK y luego dibujan sobre ella, se beneficia de GSK.
Actuación
Dibujar elementos de control gráfico (widgets) sin un grafo de escena conlleva a la representación de elementos que no se muestran en la pantalla, elementos que no necesitan ser representados; por lo tanto, conlleva pérdidas evitables de rendimiento y duración de la batería. El grafo de escena se utiliza para determinar las superficies ocultas .
Sencillez
En GTK (cuando no se usaba Clutter), los widgets se dibujaban mediante una función de dibujo (parte de GDK , de ahí el nombre: GIMP "Drawing Kit"). No había forma de saber qué se acababa de dibujar. Para saber dónde se encontraba el puntero del ratón, era necesario calcular su posición. Con GSK, debería ser bastante fácil escribir elementos de control gráfico complejos (widgets) y, al mismo tiempo, rastrear fácilmente la posición del puntero del ratón.
CSS
Se decidió que GTK adoptara un modelo basado en hojas de estilo en cascada (CSS) para el diseño y la representación de los elementos de control gráfico (widgets) . En CSS, las propiedades de sombras, bordes, relleno y estilo tienen una semántica bien definida . Algunas de estas propiedades son difíciles de implementar con el antiguo modelo de dibujo de GTK.
GSK utiliza graphene, [ 1 ] una biblioteca externa que alberga una colección de tipos de geometría: puntos, tamaños, rectángulos, vectores, cuadriláteros, cuaterniones, matrices. graphene se ha portado al sistema de compilación Meson .
Pipeline 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 mínimos de estado, por lo que se integra 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 reordenarlos y transformarlos a una representación más apropiada) al sistema gráfico subyacente.
- Capa superior: un conjunto complejo de capas lógicas; añade una API de conveniencia de alto nivel para los desarrolladores de aplicaciones.
API de renderizado
A partir de GTK 3.90, que es la versión de desarrollo de lo que se convertirá en GTK 4, GSK admite la renderización utilizando estos back-ends:
Historia
Desorden
Clutter se lanzó al público el 22 de junio de 2006. La biblioteca de integración "clutter-gtk" está disponible desde el 29 de noviembre de 2006. [ 3 ]
En la 2ª Cumbre de Escritorio celebrada en agosto de 2011 en Berlín, se habló bastante sobre "GTK+ 4.0 y Clutter 2.0". [ 4 ]
Idea para introducir un grafo de escena en GTK.
En 2008, desarrolladores como Havoc Pennington consideraron agregar un lienzo de escena a GTK, ya que personas ajenas a GTK estaban utilizando cosas como Clutter, Pigment, HippoCanvas o GooCanvas . [ 5 ] Se propuso hacer que los elementos de control gráfico (widgets) fueran un tipo de objeto en un grafo de escena más flexible.
GSK
Antes de GSK, el dibujo se realizaba mediante GDK, que 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 grafo de escena, y los desarrolladores de GNOME prefirieron usar el grafo de escena de Clutter con GTK, facilitado por una biblioteca llamada clutter-gtk. [ 7 ] Clutter se puede integrar en cualquier aplicación de GNOME usando la biblioteca clutter-gtk. Esta biblioteca proporciona un widget GTK llamado GtkClutterEmbed que se puede usar para mostrar un ClutterStage.
Se dedicó tiempo a pensar en cómo fusionar Clutter y GTK de una manera mejor que la biblioteca clutter-gtk.
En 2011, Firefox introdujo "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 grafo 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 grafo de escena para GTK que está siendo escrito por Emmanuele Bassi. [ 12 ]
- El 30 de julio de 2014, Emanuelle declaró que pensaba que no debería haber una versión independiente de Clutter 2.0. [ 13 ]
En el Hackfest de Experiencia del Desarrollador de 2014 se presentó un nuevo gráfico de escena para GTK que se iba a integrar en GTK+ 3.16. [ 14 ] Luego, se planeó que GSK estuviera listo e integrado completamente en la versión 3.20 de GTK+, que se lanzaría en marzo de 2016. Esto se pospuso a la versión 3.22, [ 15 ] y finalmente se integró en la versión 3.90.
Disponer de compatibilidad con OpenGL (o OpenGL ES ) en GDK facilita un control ligeramente mejor del flujo de trabajo gráfico ; OpenGL es muy adecuado para la composición de datos texturizados, pero totalmente inadecuado para el dibujo.
La información más reciente sobre el estado de GSK proviene de GUADEC 2016. [ 16 ]
Otros proyectos
- Enlightenment Foundation Libraries ha estado utilizando un grafo de escena desde 2000, implementado en la biblioteca Evas . [ 17 ]
- Qt ha sido rediseñado y, a partir de la versión 5, incluye Qt Quick 2 con renderizado basado en grafos de escena. [ 18 ]
Véase también
- Desorden
Referencias
- ^ Bassi, Emmanuele (2 de mayo de 2014). "Grafeno" .
- ↑ Bassi, Emmanuele (2016-10-18). "Implementación inicial de la canalización 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 (2008-03-07). "Propuesta de grafo de escena de Havoc Pennington" .
- ↑ Bassi, Emmanuele (29-07-2014). "El kit de gráficos de escena GTK+" .
- ↑ "clutter-gtk en git.gnome" .
- ↑ "Presentación del proyecto Azure" . 26 de abril de 2011. Archivado del original el 8 de septiembre de 2016. Consultado el 17 de marzo de 2017 .
- ↑ "Comparativa de rendimiento: Azure vs Cairo" . 6 de junio de 2011.
- ↑ "Lanzamiento de Azure" . 16 de agosto de 2011.
- ↑ Bassi, Emmanuele (2013-08-12). "Futuro en el pasado GTK scene-graph" .
- ↑ Bassi, Emmanuele (29-07-2014). "El kit de gráficos de escena GTK+" .
- ↑ Bassi, Emmanuele (30 de julio de 2014). "El problema de la parada: el futuro en el pasado" .
- ↑ "Hackfest de experiencia del desarrollador 2014: Un gráfico de escena para GTK+ 3.16" .
- ↑ "GNOME Wiki: hoja de ruta para GTK+" .
- ↑ Bassi, Emmanuele (16 de agosto de 2016). "GTK: ¿ya estamos en el futuro?" . YouTube .
- ↑ "Evas" .
- ↑ "Qt Quick Scene Graph" .
Enlaces externos
- Manual de referencia de GNOME para GSK4 inestable
- GSK en wiki.gnome.org
- GSK desmitificada (I) , (II) , (III) – Emmanuele Bassi, 2016/08
- Código GSK de la versión GTK 3.89.5
- El modelo de dibujo GTK moderno – Alexander Larsson, 4 de noviembre de 2013
- Descripción general de GTK y sus bibliotecas. Archivado el 12 de marzo de 2019 en Wayback Machine - 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
- Bibliotecas gráficas
- GTK