diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-08-16 15:20:36 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-08-16 15:42:06 +0300 |
commit | e19439a16978d75574c7fd9d5988c807b739cf3d (patch) | |
tree | d8368cf61bd2dc5087644f7d5a581f30056c9db4 /source | |
parent | 50cb9b52bb13d6805c9ffdf39f84d0af7592160b (diff) |
Cleanup: Use dedicated function to copy mesh during evaluation process
It is rather fully annoying to have same sets of obscure flags all over.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 32 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 13 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 8 |
4 files changed, 21 insertions, 35 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 66b0b550744..8a1a27b4999 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -117,6 +117,9 @@ struct Mesh *BKE_mesh_new_nomain_from_template( int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len); +/* Performs copy for use during evaluation. */ +struct Mesh *BKE_mesh_copy_for_eval(struct Mesh *source); + /* These functions construct a new Mesh, contrary to BKE_mesh_from_nurbs which modifies ob itself. */ struct Mesh *BKE_mesh_new_nomain_from_curve(struct Object *ob); struct Mesh *BKE_mesh_new_nomain_from_curve_displist(struct Object *ob, struct ListBase *dispbase); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 6fba5ec4eee..86c6f175340 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1287,13 +1287,7 @@ static Mesh *create_orco_mesh(Object *ob, Mesh *me, BMEditMesh *em, int layer) mesh = BKE_bmesh_to_mesh_nomain(em->bm, &(struct BMeshToMeshParams){0}); } 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 | - LIB_ID_COPY_CD_REFERENCE), - false); + mesh = BKE_mesh_copy_for_eval(me); } orco = get_orco_coords_dm(ob, em, layer, &free); @@ -2088,13 +2082,7 @@ static void mesh_calc_modifiers( * coordinates (vpaint, etc.) */ 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 | - LIB_ID_COPY_CD_REFERENCE), - false); + *r_deform_mesh = BKE_mesh_copy_for_eval(me); /* XXX: Is build_shapekey_layers ever even true? This should have crashed long ago... */ BLI_assert(!build_shapekey_layers); @@ -2234,13 +2222,7 @@ 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 | - LIB_ID_COPY_CD_REFERENCE), - false); + mesh = BKE_mesh_copy_for_eval(me); ASSERT_IS_VALID_MESH(mesh); // XXX: port to Mesh if build_shapekey_layers can ever be true @@ -2409,13 +2391,7 @@ static void mesh_calc_modifiers( #endif } 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 | - LIB_ID_COPY_CD_REFERENCE), - false); + final_mesh = BKE_mesh_copy_for_eval(me); //if (build_shapekey_layers) { // add_shapekey_layers(final_mesh, me, ob); diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index df20d5a2b5d..3e1412e0f5a 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -695,6 +695,19 @@ Mesh * BKE_mesh_new_nomain_from_template( CD_MASK_EVERYTHING); } +Mesh *BKE_mesh_copy_for_eval(struct Mesh *source) +{ + Mesh *result; + BKE_id_copy_ex( + NULL, &source->id, (ID **)&result, + (LIB_ID_CREATE_NO_MAIN | + LIB_ID_CREATE_NO_USER_REFCOUNT | + LIB_ID_CREATE_NO_DEG_TAG | + LIB_ID_COPY_CD_REFERENCE), + false); + return result; +} + Mesh *BKE_mesh_copy(Main *bmain, const Mesh *me) { Mesh *me_copy; diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index bd6c30606f4..28ce2a1e1c0 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -307,13 +307,7 @@ Mesh *get_multires_mesh( .flag = MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY}; Mesh *result = modifier_applyModifier(&mmd->modifier, &modifier_ctx, deformed_mesh); if (result == deformed_mesh) { - /* TODO(sergey): De-duplicate with copy in modifier stack. */ - BKE_id_copy_ex(NULL, &deformed_mesh->id, (ID **)&result, - (LIB_ID_CREATE_NO_MAIN | - LIB_ID_CREATE_NO_USER_REFCOUNT | - LIB_ID_CREATE_NO_DEG_TAG | - LIB_ID_COPY_CD_REFERENCE), - false); + result = BKE_mesh_copy_for_eval(deformed_mesh); } return result; } |