[Bf-blender-cvs] [95f257395e0] blender2.8: Depsgraph: Make indirectly linked objects inherit visibility from parent

Sergey Sharybin noreply at git.blender.org
Fri Sep 14 14:44:59 CEST 2018


Commit: 95f257395e0f0322ce539671dee1370e5b081cd4
Author: Sergey Sharybin
Date:   Fri Sep 14 12:26:49 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB95f257395e0f0322ce539671dee1370e5b081cd4

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.

===================================================================

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc

===================================================================

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,



More information about the Bf-blender-cvs mailing list