[Bf-blender-cvs] [1569c64] temp_custom_loop_normals: Add a 'lnor spaceset clear' func too (avoids freeing the memarena).

Bastien Montagne noreply at git.blender.org
Fri Jan 23 18:59:10 CET 2015


Commit: 1569c64b51022ae419a6a8dc02c4315efd8669a3
Author: Bastien Montagne
Date:   Fri Jan 23 18:58:11 2015 +0100
Branches: temp_custom_loop_normals
https://developer.blender.org/rB1569c64b51022ae419a6a8dc02c4315efd8669a3

Add a 'lnor spaceset clear' func too (avoids freeing the memarena).

Not crucial currently, but could be later, and for sake of consistency...

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

M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/intern/mesh_evaluate.c
M	source/blender/bmesh/intern/bmesh_mesh.c

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

diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 765ef49..c7b4365 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -198,6 +198,7 @@ typedef struct MLoopNorSpaceset {
 	struct MemArena *mem;
 } MLoopNorSpaceset;
 void BKE_lnor_spaceset_init(MLoopNorSpaceset *lnors_spaceset, const int numLoops);
+void BKE_lnor_spaceset_clear(MLoopNorSpaceset *lnors_spaceset);
 void BKE_lnor_spaceset_free(MLoopNorSpaceset *lnors_spaceset);
 MLoopNorSpace *BKE_lnor_space_create(MLoopNorSpaceset *lnors_spaceset);
 void BKE_lnor_space_define(
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c
index 4e61093..d552dfc 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.c
+++ b/source/blender/blenkernel/intern/mesh_evaluate.c
@@ -321,9 +321,23 @@ void BKE_mesh_calc_normals_tessface(MVert *mverts, int numVerts, MFace *mfaces,
 
 void BKE_lnor_spaceset_init(MLoopNorSpaceset *lnors_spaceset, const int numLoops)
 {
-	MemArena *mem = lnors_spaceset->mem = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, __func__);
-	lnors_spaceset->lspaceset = BLI_memarena_calloc(mem, sizeof(MLoopNorSpace *) * (size_t)numLoops);
-	lnors_spaceset->loops_pool = BLI_memarena_alloc(mem, sizeof(LinkNode) * (size_t)numLoops);
+	if (!(lnors_spaceset->lspaceset && lnors_spaceset->loops_pool)) {
+		MemArena *mem;
+
+		if (!lnors_spaceset->mem) {
+			lnors_spaceset->mem = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, __func__);
+		}
+		mem = lnors_spaceset->mem;
+		lnors_spaceset->lspaceset = BLI_memarena_calloc(mem, sizeof(MLoopNorSpace *) * (size_t)numLoops);
+		lnors_spaceset->loops_pool = BLI_memarena_alloc(mem, sizeof(LinkNode) * (size_t)numLoops);
+	}
+}
+
+void BKE_lnor_spaceset_clear(MLoopNorSpaceset *lnors_spaceset)
+{
+	BLI_memarena_clear(lnors_spaceset->mem);
+	lnors_spaceset->lspaceset = NULL;
+	lnors_spaceset->loops_pool = NULL;
 }
 
 void BKE_lnor_spaceset_free(MLoopNorSpaceset *lnors_spaceset)
@@ -1109,9 +1123,7 @@ void BKE_mesh_normals_loop_split(MVert *mverts, const int numVerts, MEdge *medge
 		r_lnors_spaceset = &_lnors_spaceset;
 	}
 	if (r_lnors_spaceset) {
-		if (!r_lnors_spaceset->mem) {
-			BKE_lnor_spaceset_init(r_lnors_spaceset, numLoops);
-		}
+		BKE_lnor_spaceset_init(r_lnors_spaceset, numLoops);
 		sharp_verts = BLI_BITMAP_NEW((size_t)numVerts, __func__);
 	}
 
@@ -1334,7 +1346,7 @@ static void mesh_normals_loop_custom_set(MVert *mverts, const int numVerts, MEdg
 		}
 
 		/* And now, recompute our new auto lnors and lnor spaceset! */
-		BKE_lnor_spaceset_free(&lnors_spaceset);
+		BKE_lnor_spaceset_clear(&lnors_spaceset);
 		BKE_mesh_normals_loop_split(mverts, numVerts, medges, numEdges, mloops, lnors, numLoops,
 		                            mpolys, polynors, numPolys, use_split_normals, split_angle,
 		                            &lnors_spaceset, NULL, loop_to_poly);
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index ac33482..1644747 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -556,9 +556,7 @@ static void bm_mesh_loops_calc_normals(BMesh *bm, const float (*vcos)[3], const
 		r_lnors_spaceset = &_lnors_spaceset;
 	}
 	if (r_lnors_spaceset) {
-		if (!r_lnors_spaceset->mem) {
-			BKE_lnor_spaceset_init(r_lnors_spaceset, bm->totloop);
-		}
+		BKE_lnor_spaceset_init(r_lnors_spaceset, bm->totloop);
 		edge_vectors = BLI_stack_new(sizeof(float[3]), __func__);
 	}




More information about the Bf-blender-cvs mailing list