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++ )
{
avg += bh->system->item_centroid( bh->user, idx, axis );
}
avg /= (float)node->count;
-
split = avg;
+
i32 i = node->start,
j = i + node->count-1;
{
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;
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 );