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:
authorAlexander Gavrilov <angavrilov@gmail.com>2018-12-03 16:56:11 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2018-12-03 17:01:02 +0300
commit95be6826e3967caf26d577eba957153f86a0eb2d (patch)
treea8ec230869109fb41299dbcf9eb15ee5de9da280 /source/blender/blenkernel/intern/data_transfer.c
parent1983a52e04eb0b0a8a71d66a1bb2f316f1326d90 (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/data_transfer.c')
-rw-r--r--source/blender/blenkernel/intern/data_transfer.c14
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;
}