Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-08-16 15:20:36 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-08-16 15:42:06 +0300
commite19439a16978d75574c7fd9d5988c807b739cf3d (patch)
treed8368cf61bd2dc5087644f7d5a581f30056c9db4 /source/blender/blenkernel/intern
parent50cb9b52bb13d6805c9ffdf39f84d0af7592160b (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/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c32
-rw-r--r--source/blender/blenkernel/intern/mesh.c13
-rw-r--r--source/blender/blenkernel/intern/multires.c8
3 files changed, 18 insertions, 35 deletions
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;
}