[mutter/gbsneto/offscreen-fix: 1/3] clutter/offscreen-effect: Clear offscreen framebuffer when disabling
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gbsneto/offscreen-fix: 1/3] clutter/offscreen-effect: Clear offscreen framebuffer when disabling
- Date: Tue, 7 Jan 2020 17:20:28 +0000 (UTC)
commit bf594e9fb6d973259163f73881dd91c8910dd54f
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Tue Jan 7 11:58:54 2020 -0300
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]