diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2018-04-25 16:38:26 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2018-05-01 19:02:17 +0300 |
commit | 1553f6b656feed517023dbc07e8c07637732b746 (patch) | |
tree | a80afe077859479bdec1951a4b4e3a9c262b89b3 /source/blender/blenkernel/intern/modifier.c | |
parent | 4211d02ab5685f73da6a85a0c130ccf704c66de8 (diff) |
Introduced CDDM_from_mesh_ex() to create a non-referencing CDDM
This allows the mesh to be freed and the CDDM kept.
Diffstat (limited to 'source/blender/blenkernel/intern/modifier.c')
-rw-r--r-- | source/blender/blenkernel/intern/modifier.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 42ebce44b07..eafa7292908 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -1123,11 +1123,8 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md struct Mesh *new_mesh = mti->applyModifier(md, depsgraph, ob, mesh, flag); - DerivedMesh *ndm = CDDM_from_mesh(new_mesh); /* Make a DM that doesn't reference new_mesh so we can free the latter. */ - /* TODO(sybren): create CDDM_from_mesh_ex() that creates a copy directly. */ - DerivedMesh *nonref_dm = CDDM_copy(ndm); - ndm->release(ndm); + DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE); if(new_mesh != mesh) { BKE_mesh_free(new_mesh); @@ -1138,7 +1135,7 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md MEM_freeN(mesh); } - return nonref_dm; + return ndm; } } @@ -1162,14 +1159,10 @@ struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData * struct Mesh *new_mesh = mti->applyModifierEM(md, depsgraph, ob, editData, mesh, flag); - DerivedMesh *ndm = CDDM_from_mesh(new_mesh); - if(new_mesh != mesh) { - /* Make a DM that doesn't reference new_mesh so we can free the latter. */ - /* TODO(sybren): create CDDM_from_mesh_ex() that creates a copy directly. */ - DerivedMesh *nonref_dm = CDDM_copy(ndm); - ndm->release(ndm); - ndm = nonref_dm; + /* Make a DM that doesn't reference new_mesh so we can free the latter. */ + DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE); + if(new_mesh != mesh) { BKE_mesh_free(new_mesh); MEM_freeN(new_mesh); } |