[mutter/gbsneto/pick-culling: 7/10] clutter/pick-context: Store point and ray on construction




commit 2bc6f6bdea2e7fab93f33ee78e11800e6c73c3e2
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Oct 22 21:10:33 2020 -0300

    clutter/pick-context: Store point and ray on construction
    
    It'll be used to do a quick box test to cull out while picking.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1520

 clutter/clutter/clutter-pick-context-private.h |  7 +++++--
 clutter/clutter/clutter-pick-context.c         | 11 +++++++++--
 clutter/clutter/clutter-stage.c                |  6 +++---
 3 files changed, 17 insertions(+), 7 deletions(-)
---
diff --git a/clutter/clutter/clutter-pick-context-private.h b/clutter/clutter/clutter-pick-context-private.h
index cfbfce6eb4..cc8baf8814 100644
--- a/clutter/clutter/clutter-pick-context-private.h
+++ b/clutter/clutter/clutter-pick-context-private.h
@@ -21,8 +21,11 @@
 #include "clutter-pick-context.h"
 #include "clutter-pick-stack-private.h"
 
-ClutterPickContext * clutter_pick_context_new_for_view (ClutterStageView *view,
-                                                        ClutterPickMode   mode);
+ClutterPickContext *
+clutter_pick_context_new_for_view (ClutterStageView         *view,
+                                   ClutterPickMode           mode,
+                                   const graphene_point3d_t *point,
+                                   const graphene_ray_t     *ray);
 
 ClutterPickStack *
 clutter_pick_context_steal_stack (ClutterPickContext *pick_context);
diff --git a/clutter/clutter/clutter-pick-context.c b/clutter/clutter/clutter-pick-context.c
index 4e6fb7a882..b9758366d4 100644
--- a/clutter/clutter/clutter-pick-context.c
+++ b/clutter/clutter/clutter-pick-context.c
@@ -26,6 +26,9 @@ struct _ClutterPickContext
 
   ClutterPickMode mode;
   ClutterPickStack *pick_stack;
+
+  graphene_ray_t ray;
+  graphene_point3d_t point;
 };
 
 G_DEFINE_BOXED_TYPE (ClutterPickContext, clutter_pick_context,
@@ -33,8 +36,10 @@ G_DEFINE_BOXED_TYPE (ClutterPickContext, clutter_pick_context,
                      clutter_pick_context_unref)
 
 ClutterPickContext *
-clutter_pick_context_new_for_view (ClutterStageView *view,
-                                   ClutterPickMode   mode)
+clutter_pick_context_new_for_view (ClutterStageView         *view,
+                                   ClutterPickMode           mode,
+                                   const graphene_point3d_t *point,
+                                   const graphene_ray_t     *ray)
 {
   ClutterPickContext *pick_context;
   CoglContext *context;
@@ -42,6 +47,8 @@ clutter_pick_context_new_for_view (ClutterStageView *view,
   pick_context = g_new0 (ClutterPickContext, 1);
   g_ref_count_init (&pick_context->ref_count);
   pick_context->mode = mode;
+  graphene_ray_init_from_ray (&pick_context->ray, ray);
+  graphene_point3d_init_from_point (&pick_context->point, point);
 
   context = clutter_backend_get_cogl_context (clutter_get_default_backend ());
   pick_context->pick_stack = clutter_pick_stack_new (context);
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 55ae6423ed..fcb00b28de 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -1151,14 +1151,14 @@ _clutter_stage_do_pick_on_view (ClutterStage     *stage,
 
   COGL_TRACE_BEGIN_SCOPED (ClutterStagePickView, "Pick (view)");
 
-  pick_context = clutter_pick_context_new_for_view (view, mode);
+  setup_ray_for_coordinates (stage, x, y, &p, &ray);
+
+  pick_context = clutter_pick_context_new_for_view (view, mode, &p, &ray);
 
   clutter_actor_pick (CLUTTER_ACTOR (stage), pick_context);
   pick_stack = clutter_pick_context_steal_stack (pick_context);
   clutter_pick_context_destroy (pick_context);
 
-  setup_ray_for_coordinates (stage, x, y, &p, &ray);
-
   actor = clutter_pick_stack_search_actor (pick_stack, &p, &ray);
   return actor ? actor : CLUTTER_ACTOR (stage);
 }


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