[Bf-blender-cvs] [dfa123916f8] temp-modifier-rm-cddm: Always get the vertex coordinates from the original mesh
Sybren A. Stüvel
noreply at git.blender.org
Tue Apr 24 11:52:45 CEST 2018
Commit: dfa123916f8e7c96916121da39e60ef2eda33e37
Author: Sybren A. Stüvel
Date: Tue Apr 24 11:46:25 2018 +0200
Branches: temp-modifier-rm-cddm
https://developer.blender.org/rBdfa123916f8e7c96916121da39e60ef2eda33e37
Always get the vertex coordinates from the original mesh
Get from original instead of CoW copy, otherwise there is the risk of
deforming already-deformed coordinates.
===================================================================
M source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 9a1594b00cf..b28beaa5b99 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1162,7 +1162,10 @@ DerivedMesh *mesh_create_derived_for_modifier(
if (mti->type == eModifierTypeType_OnlyDeform) {
int numVerts;
- float (*deformedVerts)[3] = BKE_mesh_vertexCos_get(me, &numVerts);
+ /* Always get the vertex coordinates from the original mesh. Otherwise
+ * there is the risk of deforming already-deformed coordinates. */
+ Mesh *mesh_orig_id = (me->id.tag & LIB_TAG_COPY_ON_WRITE) ? (Mesh *)me->id.orig_id : me;
+ float (*deformedVerts)[3] = BKE_mesh_vertexCos_get(mesh_orig_id, &numVerts);
modwrap_deformVerts(md, depsgraph, ob, NULL, deformedVerts, numVerts, 0);
dm = mesh_create_derived(me, deformedVerts);
@@ -1745,6 +1748,9 @@ static void mesh_calc_modifiers(
DerivedMesh **r_deform, DerivedMesh **r_final)
{
Mesh *me = ob->data;
+ /* Always get the vertex coordinates from the original mesh. Otherwise
+ * there is the risk of deforming already-deformed coordinates. */
+ Mesh *mesh_orig_id = (me->id.tag & LIB_TAG_COPY_ON_WRITE) ? (Mesh *)me->id.orig_id : me;
ModifierData *firstmd, *md, *previewmd = NULL;
CDMaskLink *datamasks, *curr;
/* XXX Always copying POLYINDEX, else tessellated data are no more valid! */
@@ -1834,7 +1840,7 @@ static void mesh_calc_modifiers(
if (mti->type == eModifierTypeType_OnlyDeform && !sculpt_dyntopo) {
if (!deformedVerts)
- deformedVerts = BKE_mesh_vertexCos_get(me, &numVerts);
+ deformedVerts = BKE_mesh_vertexCos_get(mesh_orig_id, &numVerts);
modwrap_deformVerts(md, depsgraph, ob, NULL, deformedVerts, numVerts, deform_app_flags);
}
@@ -1867,7 +1873,7 @@ static void mesh_calc_modifiers(
if (inputVertexCos)
deformedVerts = inputVertexCos;
else
- deformedVerts = BKE_mesh_vertexCos_get(me, &numVerts);
+ deformedVerts = BKE_mesh_vertexCos_get(mesh_orig_id, &numVerts);
}
@@ -1964,7 +1970,7 @@ static void mesh_calc_modifiers(
dm->getVertCos(dm, deformedVerts);
}
else {
- deformedVerts = BKE_mesh_vertexCos_get(me, &numVerts);
+ deformedVerts = BKE_mesh_vertexCos_get(mesh_orig_id, &numVerts);
}
}
More information about the Bf-blender-cvs
mailing list