[mutter] clutter: Use pick context to track the framebuffer



commit 61b1ead1a26d05b29cb64157163b722f38a470da
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Thu Nov 21 17:48:20 2019 +0100

    clutter: Use pick context to track the framebuffer
    
    Instead of pushing and popping the Cogl framebuffer stack, use the
    framebuffer passed around using the pick context. This removes usage of
    the deprecated framebuffer stack when picking.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/935

 clutter/clutter/clutter-actor.c | 23 +++++++++++++++--------
 clutter/clutter/clutter-stage.c |  3 ---
 2 files changed, 15 insertions(+), 11 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 9d23a357c..3e9bf8e0b 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -1287,10 +1287,12 @@ clutter_actor_verify_map_state (ClutterActor *self)
 static gboolean
 _clutter_actor_transform_local_box_to_stage (ClutterActor          *self,
                                              ClutterStage          *stage,
+                                             ClutterPickContext    *pick_context,
                                              const ClutterActorBox *box,
                                              graphene_point_t       vertices[4])
 {
-  CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
+  CoglFramebuffer *fb =
+   clutter_pick_context_get_framebuffer (pick_context);
   CoglMatrix stage_transform, inv_stage_transform;
   CoglMatrix modelview, transform_to_stage;
   int v;
@@ -1356,12 +1358,14 @@ clutter_actor_pick_box (ClutterActor          *self,
 
   stage = CLUTTER_STAGE (_clutter_actor_get_stage_internal (self));
 
-  if (_clutter_actor_transform_local_box_to_stage (self, stage, box, vertices))
+  if (_clutter_actor_transform_local_box_to_stage (self, stage, pick_context,
+                                                   box, vertices))
     clutter_stage_log_pick (stage, vertices, self);
 }
 
 static gboolean
 _clutter_actor_push_pick_clip (ClutterActor          *self,
+                               ClutterPickContext    *pick_context,
                                const ClutterActorBox *clip)
 {
   ClutterStage *stage;
@@ -1369,7 +1373,8 @@ _clutter_actor_push_pick_clip (ClutterActor          *self,
 
   stage = CLUTTER_STAGE (_clutter_actor_get_stage_internal (self));
 
-  if (!_clutter_actor_transform_local_box_to_stage (self, stage, clip, vertices))
+  if (!_clutter_actor_transform_local_box_to_stage (self, stage, pick_context,
+                                                    clip, vertices))
     return FALSE;
 
   clutter_stage_push_pick_clip (stage, vertices);
@@ -4183,6 +4188,7 @@ clutter_actor_pick (ClutterActor       *actor,
                     ClutterPickContext *pick_context)
 {
   ClutterActorPrivate *priv;
+  CoglFramebuffer *framebuffer;
   ClutterActorBox clip;
   gboolean clip_set = FALSE;
 
@@ -4202,15 +4208,16 @@ clutter_actor_pick (ClutterActor       *actor,
   /* mark that we are in the paint process */
   CLUTTER_SET_PRIVATE_FLAGS (actor, CLUTTER_IN_PICK);
 
-  cogl_push_matrix ();
+  framebuffer = clutter_pick_context_get_framebuffer (pick_context);
+  cogl_framebuffer_push_matrix (framebuffer);
 
   if (priv->enable_model_view_transform)
     {
       CoglMatrix matrix;
 
-      cogl_get_modelview_matrix (&matrix);
+      cogl_framebuffer_get_modelview_matrix (framebuffer, &matrix);
       _clutter_actor_apply_modelview_transform (actor, &matrix);
-      cogl_set_modelview_matrix (&matrix);
+      cogl_framebuffer_set_modelview_matrix (framebuffer, &matrix);
     }
 
   if (priv->has_clip)
@@ -4231,7 +4238,7 @@ clutter_actor_pick (ClutterActor       *actor,
     }
 
   if (clip_set)
-    clip_set = _clutter_actor_push_pick_clip (actor, &clip);
+    clip_set = _clutter_actor_push_pick_clip (actor, pick_context, &clip);
 
   priv->next_effect_to_paint = NULL;
   if (priv->effects)
@@ -4245,7 +4252,7 @@ clutter_actor_pick (ClutterActor       *actor,
   if (clip_set)
     _clutter_actor_pop_pick_clip (actor);
 
-  cogl_pop_matrix ();
+  cogl_framebuffer_pop_matrix (framebuffer);
 
   /* paint sequence complete */
   CLUTTER_UNSET_PRIVATE_FLAGS (actor, CLUTTER_IN_PICK);
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 14838bd2b..38ffe7f50 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -1647,7 +1647,6 @@ _clutter_stage_do_pick_on_view (ClutterStage     *stage,
 {
   ClutterMainContext *context = _clutter_context_get_default ();
   ClutterStagePrivate *priv = stage->priv;
-  CoglFramebuffer *fb = clutter_stage_view_get_framebuffer (view);
   int i;
 
   g_assert (context->pick_mode == CLUTTER_PICK_NONE);
@@ -1659,7 +1658,6 @@ _clutter_stage_do_pick_on_view (ClutterStage     *stage,
       _clutter_stage_clear_pick_stack (stage);
 
       pick_context = clutter_pick_context_new_for_view (view);
-      cogl_push_framebuffer (fb);
 
       context->pick_mode = mode;
       setup_view_for_pick_or_paint (stage, view, NULL);
@@ -1667,7 +1665,6 @@ _clutter_stage_do_pick_on_view (ClutterStage     *stage,
       context->pick_mode = CLUTTER_PICK_NONE;
       priv->cached_pick_mode = mode;
 
-      cogl_pop_framebuffer ();
       clutter_pick_context_destroy (pick_context);
 
       add_pick_stack_weak_refs (stage);


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