From e3bf255d2f4ff338088cb39e95fe5aae2f5c2edf Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 6 Jul 2016 17:10:12 +0100 Subject: [PATCH] gsk: Use the right pointer to the parent RenderItem We copy the local RenderItem into the render items array, so we need to use the copy in the array in order to get the correct reference. --- gsk/gskglrenderer.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/gsk/gskglrenderer.c b/gsk/gskglrenderer.c index 07a0dbe808..f0d4344694 100644 --- a/gsk/gskglrenderer.c +++ b/gsk/gskglrenderer.c @@ -699,6 +699,7 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self, graphene_rect_t bounds; GskRenderNode *child; RenderItem item; + RenderItem *ritem = NULL; int program_id; if (gsk_render_node_is_hidden (node)) @@ -801,14 +802,24 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self, node->name != NULL ? node->name : "unnamed", node)); if (gsk_render_node_is_opaque (node) && gsk_render_node_get_opacity (node) == 1.f) - g_array_append_val (self->opaque_render_items, item); + { + g_array_append_val (self->opaque_render_items, item); + ritem = &g_array_index (self->opaque_render_items, + RenderItem, + self->opaque_render_items->len - 1); + } else - g_array_prepend_val (self->transparent_render_items, item); + { + g_array_append_val (self->transparent_render_items, item); + ritem = &g_array_index (self->transparent_render_items, + RenderItem, + self->transparent_render_items->len - 1); + } recurse_children: gsk_render_node_iter_init (&iter, node); while (gsk_render_node_iter_next (&iter, &child)) - gsk_gl_renderer_add_render_item (self, child, &item); + gsk_gl_renderer_add_render_item (self, child, ritem); } static gboolean