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:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-09-14 13:26:49 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-09-14 15:43:56 +0300
commit95f257395e0f0322ce539671dee1370e5b081cd4 (patch)
treecdb72f23078ad92d693cf1033de7cc8f927b7203 /source/blender
parent06c0febe7094a5caee731edebde300f5dabf2d8c (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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc10
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h2
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc2
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,