Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-11-29 20:26:39 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-11-29 20:26:39 +0400
commit07ccd3ee3f9700730a60013a66b09466af2585d3 (patch)
tree5794ab3a7d76889f291dc1a3ecf00a2cbff9ef85 /source/blender/modifiers
parentf1745706adcd2337fe183e30c1b026a05c198839 (diff)
fix [#33029] Applying modifier leaks memory
Thanks for Sergey for finding the bug & patching, This fix works a bit differently. Theres no need to allocate the customdata in the first place - since its written into. So add a flag for vert/edge/face/loop creation functions so they can skip customdata creation.
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r--source/blender/modifiers/intern/MOD_skin.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c
index a37835e11dc..a73d52a0a63 100644
--- a/source/blender/modifiers/intern/MOD_skin.c
+++ b/source/blender/modifiers/intern/MOD_skin.c
@@ -941,18 +941,18 @@ static void add_poly(SkinOutput *so,
BLI_assert(v3 != v4);
BLI_assert(v1 && v2 && v3);
- edges[0] = BM_edge_create(so->bm, v1, v2, NULL, TRUE);
- edges[1] = BM_edge_create(so->bm, v2, v3, NULL, TRUE);
+ edges[0] = BM_edge_create(so->bm, v1, v2, NULL, BM_CREATE_NO_DOUBLE);
+ edges[1] = BM_edge_create(so->bm, v2, v3, NULL, BM_CREATE_NO_DOUBLE);
if (v4) {
- edges[2] = BM_edge_create(so->bm, v3, v4, NULL, TRUE);
- edges[3] = BM_edge_create(so->bm, v4, v1, NULL, TRUE);
+ edges[2] = BM_edge_create(so->bm, v3, v4, NULL, BM_CREATE_NO_DOUBLE);
+ edges[3] = BM_edge_create(so->bm, v4, v1, NULL, BM_CREATE_NO_DOUBLE);
}
else {
- edges[2] = BM_edge_create(so->bm, v3, v1, NULL, TRUE);
+ edges[2] = BM_edge_create(so->bm, v3, v1, NULL, BM_CREATE_NO_DOUBLE);
edges[3] = NULL;
}
- f = BM_face_create(so->bm, verts, edges, v4 ? 4 : 3, TRUE);
+ f = BM_face_create(so->bm, verts, edges, v4 ? 4 : 3, BM_CREATE_NO_DOUBLE);
if (so->smd->flag & MOD_SKIN_SMOOTH_SHADING)
BM_elem_flag_enable(f, BM_ELEM_SMOOTH);
f->mat_nr = so->mat_nr;
@@ -996,7 +996,7 @@ static void output_frames(BMesh *bm,
f = &sn->frames[i];
for (j = 0; j < 4; j++) {
if (!f->merge[j].frame) {
- BMVert *v = f->verts[j] = BM_vert_create(bm, f->co[j], NULL);
+ BMVert *v = f->verts[j] = BM_vert_create(bm, f->co[j], NULL, 0);
if (input_dvert) {
MDeformVert *dv;
@@ -1309,7 +1309,7 @@ static void skin_hole_detach_partially_attached_frame(BMesh *bm, Frame *frame)
/* Detach everything */
for (i = 0; i < totattached; i++) {
BMVert **av = &frame->verts[attached[i]];
- (*av) = BM_vert_create(bm, (*av)->co, *av);
+ (*av) = BM_vert_create(bm, (*av)->co, *av, 0);
}
}