From bf594e9fb6d973259163f73881dd91c8910dd54f Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 7 Jan 2020 11:58:54 -0300 Subject: [PATCH] clutter/offscreen-effect: Clear offscreen framebuffer when disabling When changing the 'enabled' property and disabling the offscreen effect, it doesn't make sense to preserve the offscreen framebuffer. It's not drawing, after all. Furthermore, because ClutterOffscreenEffect only checks if the offscreen framebuffer exists to decide whether or not to redraw, keeping the fbo alive is a waste of resources. Clear the offscreen framebuffer when the effect is disabled or enabled. Fixes https://gitlab.gnome.org/GNOME/mutter/issues/810 https://gitlab.gnome.org/GNOME/mutter/merge_requests/992 --- clutter/clutter/clutter-offscreen-effect.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/clutter/clutter/clutter-offscreen-effect.c b/clutter/clutter/clutter-offscreen-effect.c index 13390dad8..d83f0444a 100644 --- a/clutter/clutter/clutter-offscreen-effect.c +++ b/clutter/clutter/clutter-offscreen-effect.c @@ -483,6 +483,19 @@ clutter_offscreen_effect_paint (ClutterEffect *effect, clutter_offscreen_effect_paint_texture (self, paint_context); } +static void +clutter_offscreen_effect_notify (GObject *gobject, + GParamSpec *pspec) +{ + ClutterOffscreenEffect *offscreen_effect = CLUTTER_OFFSCREEN_EFFECT (gobject); + ClutterOffscreenEffectPrivate *priv = offscreen_effect->priv; + + if (strcmp (pspec->name, "enabled") == 0) + g_clear_pointer (&priv->offscreen, cogl_object_unref); + + G_OBJECT_CLASS (clutter_offscreen_effect_parent_class)->notify (gobject, pspec); +} + static void clutter_offscreen_effect_finalize (GObject *gobject) { @@ -513,6 +526,7 @@ clutter_offscreen_effect_class_init (ClutterOffscreenEffectClass *klass) effect_class->paint = clutter_offscreen_effect_paint; gobject_class->finalize = clutter_offscreen_effect_finalize; + gobject_class->notify = clutter_offscreen_effect_notify; } static void