[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