[Bf-blender-cvs] [047950db7cc] master: Depsgraph: Pull indirect relations via driver targets

Sergey Sharybin noreply at git.blender.org
Mon Apr 16 16:15:48 CEST 2018


Commit: 047950db7ccd9440b04fb4bff82844de764bd444
Author: Sergey Sharybin
Date:   Mon Apr 16 16:12:15 2018 +0200
Branches: master
https://developer.blender.org/rB047950db7ccd9440b04fb4bff82844de764bd444

Depsgraph: Pull indirect relations via driver targets

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

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

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 7b2914303ce..b3f6958e9c3 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -264,6 +264,46 @@ OperationDepsNode *DepsgraphNodeBuilder::find_operation_node(
 void DepsgraphNodeBuilder::begin_build() {
 }
 
+void DepsgraphNodeBuilder::build_id(ID* id) {
+	if (id == NULL) {
+		return;
+	}
+	switch (GS(id->name)) {
+		case ID_SCE:
+			build_scene((Scene *)id);
+			break;
+		case ID_GR:
+			build_group(NULL, (Group *)id);
+			break;
+		case ID_OB:
+			build_object(NULL, (Object *)id);
+			break;
+		case ID_NT:
+			build_nodetree((bNodeTree *)id);
+			break;
+		case ID_MA:
+			build_material((Material *)id);
+			break;
+		case ID_TE:
+			build_texture((Tex *)id);
+			break;
+		case ID_IM:
+			build_image((Image *)id);
+			break;
+		case ID_WO:
+			build_world((World *)id);
+			break;
+		case ID_MSK:
+			build_mask((Mask *)id);
+			break;
+		case ID_MC:
+			build_movieclip((MovieClip *)id);
+			break;
+		default:
+			fprintf(stderr, "Unhandled ID %s\n", id->name);
+	}
+}
+
 void DepsgraphNodeBuilder::build_group(Base *base, Group *group)
 {
 	if (built_map_.checkIsBuiltAndTag(group)) {
@@ -522,6 +562,7 @@ void DepsgraphNodeBuilder::build_driver_variables(ID * id, FCurve *fcurve)
 	LISTBASE_FOREACH (DriverVar *, dvar, &fcurve->driver->variables) {
 		DRIVER_TARGETS_USED_LOOPER(dvar)
 		{
+			build_id(dtar->id);
 			build_driver_id_property(dtar->id, dtar->rna_path);
 		}
 		DRIVER_TARGETS_LOOPER_END
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index d64aee11536..f2154e58703 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -126,6 +126,7 @@ struct DepsgraphNodeBuilder {
 	                                       const char *name = "",
 	                                       int name_tag = -1);
 
+	void build_id(ID* id);
 	void build_scene(Scene *scene);
 	void build_group(Base *base, Group *group);
 	void build_object(Base *base, Object *object);



More information about the Bf-blender-cvs mailing list