diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2020-07-05 17:57:37 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2020-12-08 18:08:27 -0300 |
commit | 77f97a2bf46f3ce68fe02d8a917853d2a1a80673 (patch) | |
tree | 74da1cd0c49a97b47555455930e386311e7cda92 | |
parent | 9497b5237c7d8cd11805f1ad627bbbf46519a634 (diff) | |
download | mutter-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.c | 25 |
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; } |