From 41fac4fa76d677ce6bf8b1411d46dd18d04d6943 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 30 May 2018 16:25:35 +0200 Subject: [PATCH] Modifiers: Make input of modifier stack referencing copied CD layers The idea is to allow modifier stack to reference custom data layers from copied version of mesh datablock. --- .../blender/blenkernel/intern/DerivedMesh.c | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index c8d5bb5ffd7..3c9e0efa12e 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1294,7 +1294,11 @@ static Mesh *create_orco_mesh(Object *ob, Mesh *me, BMEditMesh *em, int layer) else { BKE_id_copy_ex( NULL, &me->id, (ID **)&mesh, - LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT | LIB_ID_CREATE_NO_DEG_TAG, false); + (LIB_ID_CREATE_NO_MAIN | + LIB_ID_CREATE_NO_USER_REFCOUNT | + LIB_ID_CREATE_NO_DEG_TAG | + LIB_ID_COPY_CD_REFERENCE), + false); } orco = get_orco_coords_dm(ob, em, layer, &free); @@ -2125,7 +2129,11 @@ static void mesh_calc_modifiers( if (r_deform_mesh) { BKE_id_copy_ex( NULL, &me->id, (ID **)r_deform_mesh, - LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT | LIB_ID_CREATE_NO_DEG_TAG, false); + (LIB_ID_CREATE_NO_MAIN | + LIB_ID_CREATE_NO_USER_REFCOUNT | + LIB_ID_CREATE_NO_DEG_TAG | + LIB_ID_COPY_CD_REFERENCE), + false); /* XXX: Is build_shapekey_layers ever even true? This should have crashed long ago... */ BLI_assert(!build_shapekey_layers); @@ -2268,7 +2276,11 @@ static void mesh_calc_modifiers( else { BKE_id_copy_ex( NULL, &me->id, (ID **)&mesh, - LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT | LIB_ID_CREATE_NO_DEG_TAG, false); + (LIB_ID_CREATE_NO_MAIN | + LIB_ID_CREATE_NO_USER_REFCOUNT | + LIB_ID_CREATE_NO_DEG_TAG | + LIB_ID_COPY_CD_REFERENCE), + false); ASSERT_IS_VALID_MESH(mesh); // XXX: port to Mesh if build_shapekey_layers can ever be true @@ -2439,7 +2451,11 @@ static void mesh_calc_modifiers( else { BKE_id_copy_ex( NULL, &me->id, (ID **)&final_mesh, - LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT | LIB_ID_CREATE_NO_DEG_TAG, false); + (LIB_ID_CREATE_NO_MAIN | + LIB_ID_CREATE_NO_USER_REFCOUNT | + LIB_ID_CREATE_NO_DEG_TAG | + LIB_ID_COPY_CD_REFERENCE), + false); //if (build_shapekey_layers) { // add_shapekey_layers(final_mesh, me, ob);