[gtk/wip/baedert/for-master: 7/8] gl renderer: Properly clean up program state transforms



commit b062594ae65ed907eabff73df8cfb5036e21d20c
Author: Timm Bäder <mail baedert org>
Date:   Sat Jul 6 13:38:55 2019 +0200

    gl renderer: Properly clean up program state transforms

 gsk/gl/gskglrenderer.c         |  1 +
 gsk/gl/gskglrenderops.c        | 12 ++++++++++++
 gsk/gl/gskglrenderopsprivate.h |  1 +
 3 files changed, 14 insertions(+)
---
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index f464c728a5..46c9e64c1c 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -2342,6 +2342,7 @@ gsk_gl_renderer_dispose (GObject *gobject)
   GskGLRenderer *self = GSK_GL_RENDERER (gobject);
 
   g_clear_pointer (&self->render_ops, g_array_unref);
+  ops_free (&self->op_builder);
 
   G_OBJECT_CLASS (gsk_gl_renderer_parent_class)->dispose (gobject);
 }
diff --git a/gsk/gl/gskglrenderops.c b/gsk/gl/gskglrenderops.c
index b23e8c5cde..7c02442d08 100644
--- a/gsk/gl/gskglrenderops.c
+++ b/gsk/gl/gskglrenderops.c
@@ -187,6 +187,17 @@ ops_init (RenderOpBuilder *builder)
     }
 }
 
+void
+ops_free (RenderOpBuilder *builder)
+{
+  int i;
+
+  for (i = 0; i < GL_N_PROGRAMS; i ++)
+    {
+      gsk_transform_unref (builder->program_state[i].modelview);
+    }
+}
+
 void
 ops_set_program (RenderOpBuilder *builder,
                  const Program   *program)
@@ -225,6 +236,7 @@ ops_set_program (RenderOpBuilder *builder,
       op.op = OP_CHANGE_MODELVIEW;
       gsk_transform_to_matrix (builder->current_modelview, &op.modelview);
       g_array_append_val (builder->render_ops, op);
+      gsk_transform_unref (program_state->modelview);
       program_state->modelview = gsk_transform_ref (builder->current_modelview);
     }
 
diff --git a/gsk/gl/gskglrenderopsprivate.h b/gsk/gl/gskglrenderopsprivate.h
index 84bafa74a0..b58f01af05 100644
--- a/gsk/gl/gskglrenderopsprivate.h
+++ b/gsk/gl/gskglrenderopsprivate.h
@@ -290,6 +290,7 @@ void              ops_dump_framebuffer   (RenderOpBuilder         *builder,
                                           int                      width,
                                           int                      height);
 void              ops_init               (RenderOpBuilder         *builder);
+void              ops_free               (RenderOpBuilder         *builder);
 void              ops_push_debug_group    (RenderOpBuilder         *builder,
                                            const char              *text);
 void              ops_pop_debug_group     (RenderOpBuilder         *builder);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]