gl renderer: Add helper for printing a render node tree
authorTimm Bäder <mail@baedert.org>
Sat, 12 May 2018 04:57:59 +0000 (06:57 +0200)
committerTimm Bäder <mail@baedert.org>
Sat, 19 May 2018 08:18:50 +0000 (10:18 +0200)
gsk/gl/gskglrenderer.c

index 43b775bdcfce93fe69326c9d83991915fb4ba2bd..5ccd3a61d8f4f0754c31f3b2642280110f682ad8 100644 (file)
                               glGetUniformLocation(program_ptr->id, "u_" #uniform_basename);\
               }G_STMT_END
 
+
+static void G_GNUC_UNUSED
+print_render_node_tree (GskRenderNode *root, int level)
+{
+#define INDENT 4
+  const guint type = gsk_render_node_get_node_type (root);
+  guint i;
+
+  switch (type)
+    {
+      case GSK_CONTAINER_NODE:
+        g_print ("%*s Container\n", level * INDENT, " ");
+        for (i = 0; i < gsk_container_node_get_n_children (root); i++)
+          print_render_node_tree (gsk_container_node_get_child (root, i), level + 1);
+        break;
+
+      case GSK_OFFSET_NODE:
+        g_print ("%*s Offset\n", level * INDENT, " ");
+        print_render_node_tree (gsk_offset_node_get_child (root), level + 1);
+        break;
+
+      case GSK_TRANSFORM_NODE:
+        g_print ("%*s Transform\n", level * INDENT, " ");
+        print_render_node_tree (gsk_transform_node_get_child (root), level + 1);
+        break;
+
+      case GSK_COLOR_MATRIX_NODE:
+        g_print ("%*s Color Matrix\n", level * INDENT, " ");
+        print_render_node_tree (gsk_color_matrix_node_get_child (root), level + 1);
+        break;
+
+      case GSK_CROSS_FADE_NODE:
+        g_print ("%*s Crossfade(%.2f)\n", level * INDENT, " ",
+                 gsk_cross_fade_node_get_progress (root));
+        print_render_node_tree (gsk_cross_fade_node_get_start_child (root), level + 1);
+        print_render_node_tree (gsk_cross_fade_node_get_end_child (root), level + 1);
+        break;
+
+      case GSK_TEXT_NODE:
+        g_print ("%*s Text\n", level * INDENT, " ");
+        break;
+
+      case GSK_SHADOW_NODE:
+        g_print ("%*s Shadow\n", level * INDENT, " ");
+        print_render_node_tree (gsk_shadow_node_get_child (root), level + 1);
+        break;
+
+      case GSK_TEXTURE_NODE:
+        g_print ("%*s Texture %p\n", level * INDENT, " ", gsk_texture_node_get_texture (root));
+        break;
+
+      default:
+        g_print ("UNKNOWN: %u\n", type);
+    }
+
+#undef INDENT
+}
+
+
 static void G_GNUC_UNUSED
 dump_framebuffer (const char *filename, int w, int h)
 {