more refactors..
[carveJwlIkooP6JGAAIwe30JlM.git] / world_volumes.h
index 450c8c2cc2a7f147bc251d1bee65a64894b2a676..5bdc2d9ffdc5e52a01fb46536d2e3fde0c1bb012 100644 (file)
@@ -2,58 +2,19 @@
 #define WORLD_VOLUMES_H
 
 #include "world.h"
+#include "bvh.h"
 
-/*
- * BVH implementation
- * ----------------------------------------------------------------------------
- */
-
-VG_STATIC void volume_vg_expand_bound( void *user, boxf bound, u32 item_index )
-{
-   world_instance *world = user;
-   struct world_volume *volume = &world->volumes[ item_index ];
-
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f, 1.0f, 1.0f} );
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f, 1.0f,-1.0f} );
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f,-1.0f, 1.0f} );
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f,-1.0f,-1.0f} );
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f, 1.0f, 1.0f} );
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f, 1.0f,-1.0f} );
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f,-1.0f, 1.0f} );
-   m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f,-1.0f,-1.0f} );
-}
-
-VG_STATIC float volume_vg_centroid( void *user, u32 item_index, int axis )
-{
-   world_instance *world = user;
-   struct world_volume *volume = &world->volumes[ item_index ];
-
-   return volume->transform[3][axis];
+struct {
+   int inside;
 }
+static world_volumes;
 
-VG_STATIC void volume_vg_swap( void *user, u32 ia, u32 ib )
-{
-   world_instance *world = user;
-   struct world_volume *a = &world->volumes[ ia ],
-                       *b = &world->volumes[ ib ],
-                       temp;
-
-   temp = *a;
-   *a = *b;
-   *b = temp;
-}
-
-VG_STATIC void volume_vg_debug( void *user, u32 item_index )
-{
-   world_instance *world = user;
-   struct world_volume *zone = &world->volumes[ item_index ];
-
-   vg_line_boxf_transformed( zone->transform, (boxf){{-1.0f,-1.0f,-1.0f},
-                                                     { 1.0f, 1.0f, 1.0f}}, 
-                                                     0xff00ff00 );
-}
+VG_STATIC void volume_vg_expand_bound( void *user, boxf bound, u32 item_index );
+VG_STATIC float volume_vg_centroid( void *user, u32 item_index, int axis );
+VG_STATIC void volume_vg_swap( void *user, u32 ia, u32 ib );
+VG_STATIC void volume_vg_debug( void *user, u32 item_index );
 
-VG_STATIC bh_system bh_system_volumes = 
+static bh_system bh_system_volumes = 
 {
    .expand_bound = volume_vg_expand_bound,
    .item_centroid = volume_vg_centroid,