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 18:09:45 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2018-12-03 18:29:06 +0300
commitbb16167fd8727a330a97f591398ac0981c76a562 (patch)
tree3f19f8097a795242f254a3263bbe84ffb250c774 /source/blender/blenkernel
parentfadad895b2f44044b829e7ffe83174d8ecd8a487 (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.c20
-rw-r--r--source/blender/blenkernel/intern/data_transfer.c2
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;
}