[mutter/gbsneto/pick-culling: 31/32] clutter/paint-volume: Add new API to convert to graphene_box_t




commit 815c8e6f6121f55c02f859fd0d878b5cb06bd27b
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Oct 22 21:11:48 2020 -0300

    clutter/paint-volume: Add new API to convert to graphene_box_t
    
    Will be used to cull when picking based on the actor's projected
    paint volume.

 clutter/clutter/clutter-paint-volume-private.h |  3 +++
 clutter/clutter/clutter-paint-volume.c         | 22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+)
---
diff --git a/clutter/clutter/clutter-paint-volume-private.h b/clutter/clutter/clutter-paint-volume-private.h
index 5d51e5bf31..0a52b60c4b 100644
--- a/clutter/clutter/clutter-paint-volume-private.h
+++ b/clutter/clutter/clutter-paint-volume-private.h
@@ -133,6 +133,9 @@ void                _clutter_paint_volume_get_stage_paint_box  (ClutterPaintVolu
 void                _clutter_paint_volume_transform_relative   (ClutterPaintVolume *pv,
                                                                 ClutterActor *relative_to_ancestor);
 
+void                clutter_paint_volume_to_box                (ClutterPaintVolume *pv,
+                                                                graphene_box_t     *box);
+
 G_END_DECLS
 
 #endif /* __CLUTTER_PAINT_VOLUME_PRIVATE_H__ */
diff --git a/clutter/clutter/clutter-paint-volume.c b/clutter/clutter/clutter-paint-volume.c
index 97077f7d1d..a55c5a8e4e 100644
--- a/clutter/clutter/clutter-paint-volume.c
+++ b/clutter/clutter/clutter-paint-volume.c
@@ -1131,3 +1131,25 @@ _clutter_paint_volume_transform_relative (ClutterPaintVolume *pv,
 
   _clutter_paint_volume_transform (pv, &matrix);
 }
+
+void
+clutter_paint_volume_to_box (ClutterPaintVolume *pv,
+                             graphene_box_t     *box)
+{
+  int vertex_count;
+
+  if (pv->is_empty)
+    {
+      graphene_box_init_from_box (box, graphene_box_empty ());
+      return;
+    }
+
+  _clutter_paint_volume_complete (pv);
+
+  if (G_LIKELY (pv->is_2d))
+    vertex_count = 4;
+  else
+    vertex_count = 8;
+
+  graphene_box_init_from_points (box, vertex_count, pv->vertices);
+}


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