Fix T63616: applying armature modifier with another modifier under it doesnt apply...
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 29 Apr 2019 07:34:20 +0000 (09:34 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 29 Apr 2019 08:08:16 +0000 (10:08 +0200)
Some deform modifiers (like armature) use passed Mesh parameter to
retrieve some extra data (vgroups in our case), and default to obdata
when it is not available.

This should be fine in theory in the 'apply modifier to obdata' case,
since this is always the first modifier, but here upper-level code
passes **evaluated** object, not orig one, so ob->data is not orig
anymore, and might miss some stuff...

Note that am quiet unsure whether the way evaluated data is passed
around in that apply modifier operator code is actually OK, but for now
it seems to work at least...

source/blender/blenkernel/intern/mesh_convert.c

index 0402524e03d2d2ec2d582022f6e650fb26a58682..3f4e504867c925158f74f87cd79f34bdaa29bd6b 100644 (file)
@@ -1265,8 +1265,8 @@ Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
     int numVerts;
     float(*deformedVerts)[3] = BKE_mesh_vertexCos_get(me, &numVerts);
 
-    mti->deformVerts(md_eval, &mectx, NULL, deformedVerts, numVerts);
     BKE_id_copy_ex(NULL, &me->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
+    mti->deformVerts(md_eval, &mectx, result, deformedVerts, numVerts);
     BKE_mesh_apply_vert_coords(result, deformedVerts);
 
     if (build_shapekey_layers) {