[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44659] trunk/blender/source/blender/ blenlib/intern/pbvh.c: Code cleanup: split PBVH build_sub() into two functions.
Nicholas Bishop
nicholasbishop at gmail.com
Mon Mar 5 22:56:03 CET 2012
Revision: 44659
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44659
Author: nicholasbishop
Date: 2012-03-05 21:55:53 +0000 (Mon, 05 Mar 2012)
Log Message:
-----------
Code cleanup: split PBVH build_sub() into two functions.
Removes also a confusing else{} block that didn't make much sense.
Modified Paths:
--------------
trunk/blender/source/blender/blenlib/intern/pbvh.c
Modified: trunk/blender/source/blender/blenlib/intern/pbvh.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/pbvh.c 2012-03-05 21:42:17 UTC (rev 44658)
+++ trunk/blender/source/blender/blenlib/intern/pbvh.c 2012-03-05 21:55:53 UTC (rev 44659)
@@ -416,6 +416,31 @@
node->flag |= PBVH_UpdateDrawBuffers;
}
+static void build_leaf(PBVH *bvh, int node_index, const BBC *prim_bbc,
+ int offset, int count)
+{
+ int i;
+
+ bvh->nodes[node_index].flag |= PBVH_Leaf;
+
+ bvh->nodes[node_index].prim_indices = bvh->prim_indices + offset;
+ bvh->nodes[node_index].totprim = count;
+
+ /* Still need vb for searches */
+ BB_reset(&bvh->nodes[node_index].vb);
+ for(i = offset + count - 1; i >= offset; --i) {
+ BB_expand_with_bb(&bvh->nodes[node_index].vb,
+ (BB*)(prim_bbc +
+ bvh->prim_indices[i]));
+ }
+
+ if(bvh->faces)
+ build_mesh_leaf_node(bvh, bvh->nodes + node_index);
+ else
+ build_grids_leaf_node(bvh, bvh->nodes + node_index);
+ bvh->nodes[node_index].orig_vb= bvh->nodes[node_index].vb;
+}
+
/* Recursively build a node in the tree
*
* vb is the voxel box around all of the primitives contained in
@@ -434,41 +459,20 @@
BB cb_backing;
/* Decide whether this is a leaf or not */
- // XXX adapt leaf limit for grids
if(count <= bvh->leaf_limit) {
- bvh->nodes[node_index].flag |= PBVH_Leaf;
-
- bvh->nodes[node_index].prim_indices = bvh->prim_indices + offset;
- bvh->nodes[node_index].totprim = count;
-
- /* Still need vb for searches */
- BB_reset(&bvh->nodes[node_index].vb);
- for(i = offset + count - 1; i >= offset; --i) {
- BB_expand_with_bb(&bvh->nodes[node_index].vb,
- (BB*)(prim_bbc +
- bvh->prim_indices[i]));
- }
-
- if(bvh->faces)
- build_mesh_leaf_node(bvh, bvh->nodes + node_index);
- else
- build_grids_leaf_node(bvh, bvh->nodes + node_index);
- bvh->nodes[node_index].orig_vb= bvh->nodes[node_index].vb;
-
- /* Done with this subtree */
+ build_leaf(bvh, node_index, prim_bbc, offset, count);
return;
}
- else {
- BB_reset(&bvh->nodes[node_index].vb);
- bvh->nodes[node_index].children_offset = bvh->totnode;
- grow_nodes(bvh, bvh->totnode + 2);
- if(!cb) {
- cb = &cb_backing;
- BB_reset(cb);
- for(i = offset + count - 1; i >= offset; --i)
- BB_expand(cb, prim_bbc[bvh->prim_indices[i]].bcentroid);
- }
+ BB_reset(&bvh->nodes[node_index].vb);
+ bvh->nodes[node_index].children_offset = bvh->totnode;
+ grow_nodes(bvh, bvh->totnode + 2);
+
+ if(!cb) {
+ cb = &cb_backing;
+ BB_reset(cb);
+ for(i = offset + count - 1; i >= offset; --i)
+ BB_expand(cb, prim_bbc[bvh->prim_indices[i]].bcentroid);
}
axis = BB_widest_axis(cb);
More information about the Bf-blender-cvs
mailing list