diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2018-12-03 16:56:11 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2018-12-03 17:01:02 +0300 |
commit | 95be6826e3967caf26d577eba957153f86a0eb2d (patch) | |
tree | a8ec230869109fb41299dbcf9eb15ee5de9da280 /source/blender/blenkernel/intern | |
parent | 1983a52e04eb0b0a8a71d66a1bb2f316f1326d90 (diff) |
Data Transfer Modifier: fix mesh_get_eval_final usage.
It can't be used during modifier evaluation, and rna
enum code should access the evaluated objects.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/data_transfer.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c index 73c5f6cecdf..7ac9d2d985c 100644 --- a/source/blender/blenkernel/intern/data_transfer.c +++ b/source/blender/blenkernel/intern/data_transfer.c @@ -1087,6 +1087,7 @@ bool BKE_object_data_transfer_ex( bool geom_map_init[DATAMAX] = {0}; ListBase lay_map = {NULL}; bool changed = false; + bool is_modifier = false; const bool use_delete = false; /* We never delete data layers from destination here. */ @@ -1099,6 +1100,7 @@ bool BKE_object_data_transfer_ex( /* Never create needed custom layers on passed destination mesh * (assumed to *not* be ob_dst->data, aka modifier case). */ use_create = false; + is_modifier = true; } else { me_dst = ob_dst->data; @@ -1113,7 +1115,17 @@ bool BKE_object_data_transfer_ex( /* Get source evaluated mesh.*/ me_src_mask |= BKE_object_data_transfer_dttypes_to_cdmask(data_types); - me_src = mesh_get_eval_final(depsgraph, scene, ob_src, me_src_mask); + if (is_modifier) { + me_src = ob_src->runtime.mesh_eval; + + if (me_src == NULL || (me_src_mask & ~ob_src->lastDataMask) != 0) { + printf("Data Transfer: source mesh data is not ready - dependency cycle?\n"); + return changed; + } + } + else { + me_src = mesh_get_eval_final(depsgraph, scene, ob_src, me_src_mask); + } if (!me_src) { return changed; } |