projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
stepping
[carveJwlIkooP6JGAAIwe30JlM.git]
/
bvh.h
diff --git
a/bvh.h
b/bvh.h
index 8b6b0784785973f1adf89ddbbb01636d656f1d64..23f8a564d54cd7ce1b7830457da97ce15ad790d7 100644
(file)
--- a/
bvh.h
+++ b/
bvh.h
@@
-90,7
+90,6
@@
VG_STATIC void bh_subdivide( bh_tree *bh, u32 inode )
if( extent[2] > extent[axis] ) axis = 2;
float split = node->bbx[0][axis] + extent[axis]*0.5f;
if( extent[2] > extent[axis] ) axis = 2;
float split = node->bbx[0][axis] + extent[axis]*0.5f;
-
float avg = 0.0;
for( u32 t=0; t<node->count; t++ )
{
float avg = 0.0;
for( u32 t=0; t<node->count; t++ )
{
@@
-98,9
+97,9
@@
VG_STATIC void bh_subdivide( bh_tree *bh, u32 inode )
avg += bh->system->item_centroid( bh->user, idx, axis );
}
avg /= (float)node->count;
avg += bh->system->item_centroid( bh->user, idx, axis );
}
avg /= (float)node->count;
-
split = avg;
split = avg;
+
i32 i = node->start,
j = i + node->count-1;
i32 i = node->start,
j = i + node->count-1;
@@
-144,16
+143,9
@@
VG_STATIC bh_tree *bh_create( void *lin_alloc, bh_system *system,
{
assert( max_per_leaf > 0 );
{
assert( max_per_leaf > 0 );
- if( item_count == 0 )
- {
- bh_tree *bh = vg_linear_alloc( lin_alloc, sizeof(bh_tree) );
- bh->node_count = 0;
- bh->system = system;
- bh->user = user;
- return bh;
- }
+ u32 alloc_count = VG_MAX( 1, item_count );
- u32 totsize = sizeof(bh_tree) + sizeof(bh_node)*(
item
_count*2-1);
+ u32 totsize = sizeof(bh_tree) + sizeof(bh_node)*(
alloc
_count*2-1);
bh_tree *bh = vg_linear_alloc( lin_alloc, vg_align8(totsize) );
bh->system = system;
bh->user = user;
bh_tree *bh = vg_linear_alloc( lin_alloc, vg_align8(totsize) );
bh->system = system;
bh->user = user;
@@
-168,12
+160,14
@@
VG_STATIC bh_tree *bh_create( void *lin_alloc, bh_system *system,
root->start = 0;
bh_update_bounds( bh, 0 );
root->start = 0;
bh_update_bounds( bh, 0 );
- bh_subdivide( bh, 0 );
+
+ if( item_count > 2 )
+ bh_subdivide( bh, 0 );
totsize = sizeof(bh_tree) + sizeof(bh_node) * bh->node_count;
bh = vg_linear_resize( lin_alloc, bh, totsize );
totsize = sizeof(bh_tree) + sizeof(bh_node) * bh->node_count;
bh = vg_linear_resize( lin_alloc, bh, totsize );
- vg_success( "BVH done, size: %u/%u\n", bh->node_count, (
item
_count*2-1) );
+ vg_success( "BVH done, size: %u/%u\n", bh->node_count, (
alloc
_count*2-1) );
return bh;
}
return bh;
}