diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2018-12-03 18:09:45 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2018-12-03 18:29:06 +0300 |
commit | bb16167fd8727a330a97f591398ac0981c76a562 (patch) | |
tree | 3f19f8097a795242f254a3263bbe84ffb250c774 /source/blender/blenkernel | |
parent | fadad895b2f44044b829e7ffe83174d8ecd8a487 (diff) |
Depsgraph: completely move customdata_mask to the ID node.
Move all mask-related fields from Object and OperationDepsNode
to Object_Runtime and IDDepsNode. Auto-apply DEG_TAG_GEOMETRY
if the mask changes after DEG rebuild. Update DEG API and all
code that uses it.
This fixes "source mesh data is not ready" errors from Data
Transfer modifier when parameters are changed in the UI after
the recent mesh_get_eval_final fix.
Reviewers: sergey
Differential Revision: https://developer.blender.org/D4025
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 20 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/data_transfer.c | 2 |
2 files changed, 12 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 98d2e77c62f..de2cd5603a6 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -2035,8 +2035,8 @@ static void mesh_build_data( ob->derivedFinal->needsFree = 0; ob->derivedDeform->needsFree = 0; #endif - ob->lastDataMask = dataMask; - ob->lastNeedMapping = need_mapping; + ob->runtime.last_data_mask = dataMask; + ob->runtime.last_need_mapping = need_mapping; if ((ob->mode & OB_MODE_ALL_SCULPT) && ob->sculpt) { /* create PBVH immediately (would be created on the fly too, @@ -2080,7 +2080,7 @@ static CustomDataMask object_get_datamask(const Depsgraph *depsgraph, Object *ob { ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); Object *actob = view_layer->basact ? DEG_get_original_object(view_layer->basact->object) : NULL; - CustomDataMask mask = ob->customdata_mask; + CustomDataMask mask = DEG_get_customdata_mask_for_object(depsgraph, ob); if (r_need_mapping) { *r_need_mapping = false; @@ -2171,10 +2171,11 @@ Mesh *mesh_get_eval_final( dataMask |= object_get_datamask(depsgraph, ob, &need_mapping); if (!ob->runtime.mesh_eval || - ((dataMask & ob->lastDataMask) != dataMask) || - (need_mapping && !ob->lastNeedMapping)) + ((dataMask & ob->runtime.last_data_mask) != dataMask) || + (need_mapping && !ob->runtime.last_need_mapping)) { - mesh_build_data(depsgraph, scene, ob, dataMask | ob->lastDataMask, false, need_mapping || ob->lastNeedMapping); + mesh_build_data(depsgraph, scene, ob, dataMask | ob->runtime.last_data_mask, + false, need_mapping || ob->runtime.last_need_mapping); } if (ob->runtime.mesh_eval) { BLI_assert(!(ob->runtime.mesh_eval->runtime.cd_dirty_vert & CD_MASK_NORMAL)); } @@ -2219,10 +2220,11 @@ Mesh *mesh_get_eval_deform(struct Depsgraph *depsgraph, Scene *scene, Object *ob dataMask |= object_get_datamask(depsgraph, ob, &need_mapping); if (!ob->runtime.mesh_deform_eval || - ((dataMask & ob->lastDataMask) != dataMask) || - (need_mapping && !ob->lastNeedMapping)) + ((dataMask & ob->runtime.last_data_mask) != dataMask) || + (need_mapping && !ob->runtime.last_need_mapping)) { - mesh_build_data(depsgraph, scene, ob, dataMask | ob->lastDataMask, false, need_mapping || ob->lastNeedMapping); + mesh_build_data(depsgraph, scene, ob, dataMask | ob->runtime.last_data_mask, + false, need_mapping || ob->runtime.last_need_mapping); } return ob->runtime.mesh_deform_eval; diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c index 7ac9d2d985c..9ee27a29c8b 100644 --- a/source/blender/blenkernel/intern/data_transfer.c +++ b/source/blender/blenkernel/intern/data_transfer.c @@ -1118,7 +1118,7 @@ bool BKE_object_data_transfer_ex( if (is_modifier) { me_src = ob_src->runtime.mesh_eval; - if (me_src == NULL || (me_src_mask & ~ob_src->lastDataMask) != 0) { + if (me_src == NULL || (me_src_mask & ~ob_src->runtime.last_data_mask) != 0) { printf("Data Transfer: source mesh data is not ready - dependency cycle?\n"); return changed; } |