[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