[Bf-blender-cvs] [d11592a] fracture_modifier: fix: crash with fast bisect and fast bisect / fill due to refactoring

Martin Felke noreply at git.blender.org
Wed Mar 18 16:06:33 CET 2015


Commit: d11592a7000f0192ac1b0a22cc0d81519baff47b
Author: Martin Felke
Date:   Wed Mar 18 16:06:13 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rBd11592a7000f0192ac1b0a22cc0d81519baff47b

fix: crash with fast bisect and fast bisect / fill due to refactoring

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

M	source/blender/blenkernel/intern/fracture.c

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

diff --git a/source/blender/blenkernel/intern/fracture.c b/source/blender/blenkernel/intern/fracture.c
index aefee84..556f1a2 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -357,7 +357,7 @@ FracMesh *BKE_create_fracture_container(void)
 	return fmesh;
 }
 
-static void handle_fast_bisect(FracMesh *fm, int expected_shards, int algorithm, BMesh* bm_parent, float obmat[4][4],
+static void handle_fast_bisect(FracMesh *fm, int expected_shards, int algorithm, BMesh** bm_parent, float obmat[4][4],
                                float centroid[3], short inner_material_index, int parent_id, Shard **tempshards, Shard ***tempresults)
 {
 	int i = 0;
@@ -393,8 +393,8 @@ static void handle_fast_bisect(FracMesh *fm, int expected_shards, int algorithm,
 		printf("Bisecting cell %d...\n", i);
 		printf("Bisecting cell %d...\n", i + 1);
 
-		s = BKE_fracture_shard_bisect(bm_parent, t, obmat, algorithm == MOD_FRACTURE_BISECT_FAST_FILL, false, true, index, centroid, inner_material_index);
-		s2 = BKE_fracture_shard_bisect(bm_parent, t, obmat, algorithm == MOD_FRACTURE_BISECT_FAST_FILL, true, false, index, centroid, inner_material_index);
+		s = BKE_fracture_shard_bisect(*bm_parent, t, obmat, algorithm == MOD_FRACTURE_BISECT_FAST_FILL, false, true, index, centroid, inner_material_index);
+		s2 = BKE_fracture_shard_bisect(*bm_parent, t, obmat, algorithm == MOD_FRACTURE_BISECT_FAST_FILL, true, false, index, centroid, inner_material_index);
 
 		if (s != NULL && s2 != NULL && tempresults != NULL) {
 			int j = 0;
@@ -407,9 +407,9 @@ static void handle_fast_bisect(FracMesh *fm, int expected_shards, int algorithm,
 			s2->parent_id = parent_id;
 			s2->flag = SHARD_INTACT;
 
-			if (bm_parent != NULL) {
-				BM_mesh_free(bm_parent);
-				bm_parent = NULL;
+			if (*bm_parent != NULL) {
+				BM_mesh_free(*bm_parent);
+				*bm_parent = NULL;
 			}
 
 			(*tempresults)[i] = s;
@@ -424,7 +424,7 @@ static void handle_fast_bisect(FracMesh *fm, int expected_shards, int algorithm,
 
 			/* continue splitting if not all expected shards exist yet */
 			if ((i + 2) < expected_shards) {
-				bm_parent = shard_to_bmesh((*tempresults)[j]);
+				*bm_parent = shard_to_bmesh((*tempresults)[j]);
 				copy_v3_v3(centroid, (*tempresults)[j]->centroid);
 
 				BKE_shard_free((*tempresults)[j], true);
@@ -647,7 +647,7 @@ static void parse_cells(cell *cells, int expected_shards, ShardID parent_id, Fra
 		}
 	}
 	else {
-		handle_fast_bisect(fm, expected_shards, algorithm, bm_parent, obmat, centroid, inner_material_index, parent_id, tempshards, &tempresults);
+		handle_fast_bisect(fm, expected_shards, algorithm, &bm_parent, obmat, centroid, inner_material_index, parent_id, tempshards, &tempresults);
 	}
 
 	if (bm_parent != NULL) {




More information about the Bf-blender-cvs mailing list