[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