X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=bvh.h;h=23f8a564d54cd7ce1b7830457da97ce15ad790d7;hb=a1056ed8198f0f5be0e0f341da8bd49aa6c47198;hp=52ce24ab75e39175923ab95a00e508882349afe8;hpb=192990d6d24e53749ca046fef808a63cf162ab8a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/bvh.h b/bvh.h index 52ce24a..23f8a56 100644 --- a/bvh.h +++ b/bvh.h @@ -143,16 +143,9 @@ VG_STATIC bh_tree *bh_create( void *lin_alloc, bh_system *system, { 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; @@ -167,12 +160,14 @@ VG_STATIC bh_tree *bh_create( void *lin_alloc, bh_system *system, 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 ); - 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; }