[Bf-blender-cvs] [672c7d7] fracture_modifier: fixes / cleanup after static analysis of code which showed some potential issues

Martin Felke noreply at git.blender.org
Fri Nov 25 21:00:46 CET 2016


Commit: 672c7d72c2642c9049047d4885d3a567c2664ae1
Author: Martin Felke
Date:   Fri Nov 25 21:00:33 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB672c7d72c2642c9049047d4885d3a567c2664ae1

fixes / cleanup after static analysis of code which showed some potential issues

===================================================================

M	extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
M	source/blender/blenkernel/intern/fracture.c
M	source/blender/modifiers/intern/MOD_fracture.c

===================================================================

diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp b/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
index 8dffc91..f17b338 100644
--- a/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
+++ b/extern/bullet2/src/BulletDynamics/Dynamics/btFractureDynamicsWorld.cpp
@@ -763,7 +763,7 @@ void	btFractureDynamicsWorld::breakDisconnectedParts( btFractureBody* fracObj)
 	}
 
 	unionFind.reset(index);
-	int numElem = unionFind.getNumElements();
+	//int numElem = unionFind.getNumElements();
 	for (i=0;i<fracObj->m_connections.size();i++)
 	{
 		btConnection connection = fracObj->m_connections[i];
@@ -783,7 +783,7 @@ void	btFractureDynamicsWorld::breakDisconnectedParts( btFractureBody* fracObj)
 			unionFind.unite(tag0, tag1);
 		}
 	}
-	numElem = unionFind.getNumElements();
+	int numElem = unionFind.getNumElements();
 
 	index=0;
 	for (int ai=0;ai<numChildren;ai++)
diff --git a/source/blender/blenkernel/intern/fracture.c b/source/blender/blenkernel/intern/fracture.c
index 5ab536b..ddbf4f3 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -626,12 +626,14 @@ static void handle_boolean_fractal(Shard* s, Shard* t, int expected_shards, Deri
 			if (*dm_p != NULL) {
 				(*dm_p)->needsFree = 1;
 				(*dm_p)->release(*dm_p);
+				*dm_p = NULL;
 			}
 
-			*dm_p = BKE_shard_create_dm(p, true);
-
-			BKE_shard_free((*tempresults)[j], true);
-			(*tempresults)[j] = NULL;
+			if (p != NULL) {
+				*dm_p = BKE_shard_create_dm(p, true);
+				BKE_shard_free((*tempresults)[j], true);
+				(*tempresults)[j] = NULL;
+			}
 		}
 		(*i)++; //XXX remember to "double" the shard amount....
 	}
@@ -783,14 +785,10 @@ static void do_prepare_cells(FracMesh *fm, cell *cells, int expected_shards, int
 	//skipping /deletion pass
 	for (i = 0; i < expected_shards; i++)
 	{
-		Shard *t = NULL;
 		if (fm->cancel == 1) {
 			break;
 		}
 
-		if (fm->last_shards && i < fm->shard_count)
-			t = fm->last_shards[i];
-
 		if (skipmap[i])
 		{
 			printf("Skipping shard: %d\n", i);
@@ -1221,7 +1219,7 @@ static void stroke_to_faces(FractureModifierData *fmd, BMesh** bm, bGPDstroke *g
 			if (lastv1)
 			{
 				BMFace* f;
-				float nvec[3], co1[3], co2[3];
+				float nvec[3] = {0.0f, 0.0f, 0.0f}, co1[3], co2[3];
 
 				/*also "extrude" this along the normal, no...use global axises instead*/
 				if (fmd->cutter_axis == MOD_FRACTURE_CUTTER_X)
@@ -1348,7 +1346,7 @@ static void do_intersect(FractureModifierData *fmd, Object* ob, Shard *t, short
 
 	(*shard_counts)[k] = shards;
 	//printf("k, shards: %d %d \n", k, shards);
-	shards = 0;
+	//shards = 0;
 }
 
 
@@ -2007,7 +2005,7 @@ DerivedMesh *BKE_shard_create_dm(Shard *s, bool doCustomData)
 	MLoop *mloops;
 	MPoly *mpolys;
 	
-	dm  = CDDM_new(s->totvert, 0, 0, s->totloop, s->totpoly);
+	dm = CDDM_new(s->totvert, 0, 0, s->totloop, s->totpoly);
 
 	mverts = CDDM_get_verts(dm);
 	mloops = CDDM_get_loops(dm);
@@ -2553,6 +2551,8 @@ static MeshIsland* fracture_shard_to_island(FractureModifierData *fmd, Shard *s,
 		mi->vertco[j * 3 + 1] = mv->co[1];
 		mi->vertco[j * 3 + 2] = mv->co[2];
 
+		copy_v3_v3_short(no, mv->no);
+
 		mi->vertno[j * 3] = no[0];
 		mi->vertno[j * 3 + 1] = no[1];
 		mi->vertno[j * 3 + 2] = no[2];
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 933b418..a46d2f9 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -1906,7 +1906,7 @@ static int do_shard_to_island(FractureModifierData *fmd, BMesh* bm_new, ShardID
 		s = BKE_custom_data_to_shard(s, dmtemp);
 
 		/*for dynamic mode, store this in the main shardmap instead of separately */
-		if (fmd->fracture_mode == MOD_FRACTURE_DYNAMIC) {
+		if (fmd->fracture_mode == MOD_FRACTURE_DYNAMIC && (&fmd->frac_mesh->shard_map != NULL)) {
 #if 0
 			/*delete all with same parent id and replace*/
 			Shard *t;
@@ -1925,12 +1925,15 @@ static int do_shard_to_island(FractureModifierData *fmd, BMesh* bm_new, ShardID
 			BLI_addtail(&fmd->frac_mesh->shard_map, s);
 			fmd->frac_mesh->shard_count = id + 1;
 		}
-		else {
+		else if (!BLI_listbase_is_empty(&fmd->islandShards)){
 			id = BLI_listbase_count(&fmd->islandShards);
 			s->shard_id = id;
 			s->parent_id = -1;
 			BLI_addtail(&fmd->islandShards, s);
 		}
+		else {
+			id = -1;
+		}
 
 		dmtemp->needsFree = 1;
 		dmtemp->release(dmtemp);
@@ -3233,6 +3236,9 @@ static void do_fix_normals_physics_mesh(FractureModifierData *fmd, Shard* s, Mes
 		if (fmd->fix_normals) {
 			find_normal(orig_dm, fmd->nor_tree, mv->co, mv->no, no, fmd->nor_range);
 		}
+		else {
+			copy_v3_v3_short(no, mv->no);
+		}
 
 		mi->vertno[j * 3] = no[0];
 		mi->vertno[j * 3 + 1] = no[1];




More information about the Bf-blender-cvs mailing list