Commit: 6f16ce5df931d33559573afe0c482b47941a9bf0
Author: Sybren A. Stüvel
Date:   Wed Apr 25 10:08:21 2018 +0200
Branches: temp-modifier-rm-cddm
https://developer.blender.org/rB6f16ce5df931d33559573afe0c482b47941a9bf0

Just pass mesh=NULL to wrapped modifier when dm=NULL

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

M       source/blender/blenkernel/intern/modifier.c

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

diff --git a/source/blender/blenkernel/intern/modifier.c 
b/source/blender/blenkernel/intern/modifier.c
index 8f4f5b79618..c95ed3bcd8f 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -1006,16 +1006,19 @@ void modifier_deformVerts_DM_deprecated(struct 
ModifierData *md, struct Depsgrap
        }
        else {
                /* TODO(sybren): deduplicate all the copies of this code in 
this file. */
-               Mesh *new_mesh = BKE_libblock_alloc_notest(ID_ME);
-               BKE_mesh_init(new_mesh);
+               Mesh *new_mesh = NULL;
                if (dm != NULL) {
+                       new_mesh = BKE_libblock_alloc_notest(ID_ME);
+                       BKE_mesh_init(new_mesh);
                        DM_to_mesh(dm, new_mesh, ob, CD_MASK_EVERYTHING, false);
                }
 
                mti->deformVerts(md, depsgraph, ob, new_mesh, vertexCos, 
numVerts, flag);
 
-               BKE_mesh_free(new_mesh);
-               MEM_freeN(new_mesh);
+               if (new_mesh != NULL) {
+                       BKE_mesh_free(new_mesh);
+                       MEM_freeN(new_mesh);
+               }
        }
 }
 
@@ -1051,13 +1054,19 @@ void modifier_deformVertsEM_DM_deprecated(struct 
ModifierData *md, struct Depsgr
                mti->deformVertsEM_DM(md, depsgraph, ob, editData, dm, 
vertexCos, numVerts);
        }
        else {
-               Mesh *mesh = BKE_libblock_alloc_notest(ID_ME);
-               BKE_mesh_init(mesh);
+               Mesh *mesh = NULL;
                if (dm != NULL) {
+                       mesh = BKE_libblock_alloc_notest(ID_ME);
+                       BKE_mesh_init(mesh);
                        DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
                }
 
                mti->deformVertsEM(md, depsgraph, ob, editData, mesh, 
vertexCos, numVerts);
+
+               if (mesh != NULL) {
+                       BKE_mesh_free(mesh);
+                       MEM_freeN(mesh);
+               }
        }
 }
 
@@ -1092,12 +1101,10 @@ struct DerivedMesh 
*modifier_applyModifier_DM_deprecated(struct ModifierData *md
        }
        else {
                /* TODO(sybren): deduplicate all the copies of this code in 
this file. */
-               struct Mesh *mesh = ob->data;
-               BLI_assert(DEG_depsgraph_use_copy_on_write());
-               BLI_assert(mesh->id.tag & LIB_TAG_COPY_ON_WRITE); /* This 
should be a CoW mesh */
-               BLI_assert(BLI_findindex(&G.main->mesh, mesh) == -1); /* This 
should be a CoW mesh */
-
+               Mesh *mesh = NULL;
                if (dm != NULL) {
+                       mesh = BKE_libblock_alloc_notest(ID_ME);
+                       BKE_mesh_init(mesh);
                        DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
                }
 
@@ -1114,6 +1121,10 @@ struct DerivedMesh 
*modifier_applyModifier_DM_deprecated(struct ModifierData *md
                        BKE_mesh_free(new_mesh);
                        MEM_freeN(new_mesh);
                }
+               if (mesh != NULL) {
+                       BKE_mesh_free(mesh);
+                       MEM_freeN(mesh);
+               }
 
                return ndm;
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to