[mutter/gbsneto/offscreen-paint-node: 7/10] clutter/offscreen-effect: Implement paint_node()




commit 77f97a2bf46f3ce68fe02d8a917853d2a1a80673
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sun Jul 5 17:57:37 2020 -0300

    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.

 clutter/clutter/clutter-offscreen-effect.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
---
diff --git a/clutter/clutter/clutter-offscreen-effect.c b/clutter/clutter/clutter-offscreen-effect.c
index b940e837d6..c77890bb73 100644
--- a/clutter/clutter/clutter-offscreen-effect.c
+++ b/clutter/clutter/clutter-offscreen-effect.c
@@ -485,6 +485,30 @@ clutter_offscreen_effect_post_paint (ClutterEffect       *effect,
   clutter_offscreen_effect_paint_texture (self, paint_context);
 }
 
+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,
@@ -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;
 }


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