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
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.
-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,