diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-04-04 15:42:33 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-04-04 16:49:30 +0300 |
commit | 59f6371a85824b4785db8e2b526c1101a5e30ca7 (patch) | |
tree | f8e512d18b21ed8b58e0dc111e8e807e1bb01c4f /source/blender/modifiers/intern/MOD_meshdeform.c | |
parent | c81eca3d986115ae8f3c542e9b00b89795233864 (diff) |
Fix T63252: Bind in Mesh Deform Modifier fails
A regression since 64c8d72ef1ad.
The solution is to force modifier evaluation for an evaluated
object, and let it to copy binding data back to original when
is being evaluated for binding.
Reviewers: brecht
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D4642
Diffstat (limited to 'source/blender/modifiers/intern/MOD_meshdeform.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_meshdeform.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index 310b05d4580..7ae03cc43f3 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -298,14 +298,6 @@ static void meshdeformModifier_do( */ Object *ob_target = mmd->object; cagemesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(ob_target, false); -#if 0 /* This shall not be needed if we always get evaluated target object... */ - if (cagemesh == NULL && mmd->bindcagecos == NULL && ob == DEG_get_original_object(ob)) { - /* Special case, binding happens outside of depsgraph evaluation, so we can build our own - * target mesh if needed. */ - cagemesh = mesh_create_eval_final_view(ctx->depsgraph, DEG_get_input_scene(ctx->depsgraph), mmd->object, &CD_MASK_BAREMESH); - free_cagemesh = cagemesh != NULL; - } -#endif if (cagemesh == NULL) { modifier_setError(md, "Cannot get mesh from cage object"); return; @@ -321,13 +313,11 @@ static void meshdeformModifier_do( /* bind weights if needed */ if (!mmd->bindcagecos) { /* progress bar redraw can make this recursive .. */ + if (!DEG_is_active(ctx->depsgraph)) { + modifier_setError(md, "Attempt to bind from inactive dependency graph"); + goto finally; + } if (!recursive_bind_sentinel) { - if (ob != DEG_get_original_object(ob)) { - BLI_assert(!"Trying to bind inside of depsgraph evaluation"); - modifier_setError(md, "Trying to bind inside of depsgraph evaluation"); - goto finally; - } - recursive_bind_sentinel = 1; mmd->bindfunc(mmd, cagemesh, (float *)vertexCos, numVerts, cagemat); recursive_bind_sentinel = 0; |