diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2006-12-23 02:02:10 +0300 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2006-12-23 02:02:10 +0300 |
commit | 48b62511bf9535dcaf484f5324c1776975b8791f (patch) | |
tree | 3d087e7bc13f3cffd7d1d9bba5debd86711c8676 /source/blender/src/multires.c | |
parent | 30cc7499c3fd93d6bce7fbdfb0966d124488ddb3 (diff) |
Fix for bug #5372, multires - adding new multires level in Edit Mode causes odd behaviour
Also fixed a memory leak with multires+deformverts in editmode.
Diffstat (limited to 'source/blender/src/multires.c')
-rw-r--r-- | source/blender/src/multires.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/source/blender/src/multires.c b/source/blender/src/multires.c index 0d7000db691..ff8d1b94512 100644 --- a/source/blender/src/multires.c +++ b/source/blender/src/multires.c @@ -584,7 +584,7 @@ void multires_update_deformverts(Multires *mr, CustomData *src) if(CustomData_has_layer(src, CD_MDEFORMVERT)) { if(G.obedit) { EditVert *eve= G.editMesh->verts.first; - CustomData_add_layer(&mr->vdata, CD_MDEFORMVERT, 0, NULL, lvl->totvert); + CustomData_add_layer(&mr->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, lvl->totvert); for(i=0; i<lvl->totvert; ++i) { CustomData_from_em_block(&G.editMesh->vdata, &mr->vdata, eve->data, i); eve= eve->next; @@ -1062,6 +1062,8 @@ void multires_level_to_mesh(Object *ob, Mesh *me) free_edgelist(&em->edges); free_facelist(&em->faces); + EM_free_data_layer(&G.editMesh->vdata, CD_MDEFORMVERT); + eves= MEM_callocN(sizeof(EditVert)*lvl->totvert, "editvert pointers"); } else { CustomData_free_layer(&me->vdata, CD_MVERT, me->totvert); @@ -1223,9 +1225,10 @@ void multires_level_to_mesh(Object *ob, Mesh *me) } - if(em) + if(em) { MEM_freeN(eves); - else { + DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); + } else { multires_edge_level_update(ob,me); DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA); mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL); |