diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-14 13:26:49 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-14 15:43:56 +0300 |
commit | 95f257395e0f0322ce539671dee1370e5b081cd4 (patch) | |
tree | cdb72f23078ad92d693cf1033de7cc8f927b7203 | |
parent | 06c0febe7094a5caee731edebde300f5dabf2d8c (diff) |
Depsgraph: Make indirectly linked objects inherit visibility from parent
This way objects which are pulled into dependency graph via modifier
stack from an invisible object will be invisible.
3 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index d39371db299..a8dbe1325c8 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -540,24 +540,28 @@ void DepsgraphNodeBuilder::build_object(int base_index, if (object->modifiers.first != NULL) { BuilderWalkUserData data; data.builder = this; + data.is_parent_visible = is_visible; modifiers_foreachIDLink(object, modifier_walk, &data); } /* Grease Pencil Modifiers. */ if (object->greasepencil_modifiers.first != NULL) { BuilderWalkUserData data; data.builder = this; + data.is_parent_visible = is_visible; BKE_gpencil_modifiers_foreachIDLink(object, modifier_walk, &data); } - /* Shadr FX. */ + /* Shader FX. */ if (object->shader_fx.first != NULL) { BuilderWalkUserData data; data.builder = this; + data.is_parent_visible = is_visible; BKE_shaderfx_foreachIDLink(object, modifier_walk, &data); } /* Constraints. */ if (object->constraints.first != NULL) { BuilderWalkUserData data; data.builder = this; + data.is_parent_visible = is_visible; BKE_constraints_id_loop(&object->constraints, constraint_walk, &data); } /* Object data. */ @@ -1599,7 +1603,7 @@ void DepsgraphNodeBuilder::modifier_walk(void *user_data, data->builder->build_object(-1, (Object *)id, DEG_ID_LINKED_INDIRECTLY, - true); + data->is_parent_visible); break; case ID_TE: data->builder->build_texture((Tex *)id); @@ -1626,7 +1630,7 @@ void DepsgraphNodeBuilder::constraint_walk(bConstraint * /*con*/, data->builder->build_object(-1, (Object *)id, DEG_ID_LINKED_INDIRECTLY, - true); + data->is_parent_visible); break; default: /* pass */ diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index 5c9ddde8c5a..35e81de8304 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -241,6 +241,8 @@ protected: struct BuilderWalkUserData { DepsgraphNodeBuilder *builder; + /* Denotes whether object the walk is invoked from is visible. */ + bool is_parent_visible; }; static void modifier_walk(void *user_data, struct Object *object, diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc index 2853c96ef9d..71810e5efe8 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc @@ -74,6 +74,8 @@ void DepsgraphNodeBuilder::build_pose_constraints(Object *object, /* Pull indirect dependencies via constraints. */ BuilderWalkUserData data; data.builder = this; + /* TODO(sergey): Use own visibility. */ + data.is_parent_visible = true; BKE_constraints_id_loop(&pchan->constraints, constraint_walk, &data); /* Create node for constraint stack. */ add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name, |