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];

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to