summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2020-07-05 17:57:37 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2020-12-08 18:08:27 -0300
commit77f97a2bf46f3ce68fe02d8a917853d2a1a80673 (patch)
tree74da1cd0c49a97b47555455930e386311e7cda92
parent9497b5237c7d8cd11805f1ad627bbbf46519a634 (diff)
downloadmutter-77f97a2bf46f3ce68fe02d8a917853d2a1a80673.tar.gz
clutter/offscreen-effect: Implement paint_node()
The paint node tree that ClutterOffscreenEffect generates is simple: Root |------------+ | | Layer Pipeline | Actor Right now, both pre-paint and ClutterLayerNode push the offscreen to the framebuffer stack. That's harmless, and will go away soon anyway.
-rw-r--r--clutter/clutter/clutter-offscreen-effect.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/clutter/clutter/clutter-offscreen-effect.c b/clutter/clutter/clutter-offscreen-effect.c
index b940e837d..c77890bb7 100644
--- a/clutter/clutter/clutter-offscreen-effect.c
+++ b/clutter/clutter/clutter-offscreen-effect.c
@@ -486,6 +486,30 @@ clutter_offscreen_effect_post_paint (ClutterEffect *effect,
}
static void
+clutter_offscreen_effect_paint_node (ClutterEffect *effect,
+ ClutterPaintNode *node,
+ ClutterPaintContext *paint_context,
+ ClutterEffectPaintFlags flags)
+{
+ ClutterOffscreenEffect *offscreen_effect = CLUTTER_OFFSCREEN_EFFECT (effect);
+ ClutterOffscreenEffectPrivate *priv = offscreen_effect->priv;
+ ClutterPaintNode *layer_node;
+ ClutterPaintNode *actor_node;
+ CoglFramebuffer *fb;
+
+ fb = COGL_FRAMEBUFFER (priv->offscreen);
+ layer_node = clutter_layer_node_new_to_framebuffer (fb, priv->pipeline);
+ clutter_paint_node_set_static_name (layer_node,
+ "ClutterOffscreenEffect (actor offscreen)");
+ clutter_paint_node_add_child (node, layer_node);
+ clutter_paint_node_unref (layer_node);
+
+ actor_node = clutter_actor_node_new (priv->actor, 255);
+ clutter_paint_node_add_child (layer_node, actor_node);
+ clutter_paint_node_unref (actor_node);
+}
+
+static void
clutter_offscreen_effect_paint (ClutterEffect *effect,
ClutterPaintContext *paint_context,
ClutterEffectPaintFlags flags)
@@ -558,6 +582,7 @@ clutter_offscreen_effect_class_init (ClutterOffscreenEffectClass *klass)
effect_class->pre_paint = clutter_offscreen_effect_pre_paint;
effect_class->post_paint = clutter_offscreen_effect_post_paint;
effect_class->paint = clutter_offscreen_effect_paint;
+ effect_class->paint_node = clutter_offscreen_effect_paint_node;
gobject_class->finalize = clutter_offscreen_effect_finalize;
}