[Bf-blender-cvs] [57a5ef8c611] blender2.8: Depsgraph: Fix missing relations for IDs brought by drivers

Sergey Sharybin noreply at git.blender.org
Fri May 4 14:30:11 CEST 2018


Commit: 57a5ef8c611b2c0952153e9624c46ffb369b6a42
Author: Sergey Sharybin
Date:   Fri May 4 14:27:50 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB57a5ef8c611b2c0952153e9624c46ffb369b6a42

Depsgraph: Fix missing relations for IDs brought by drivers

This is similar to rather recent fix in nodes builder.

Fixes crash when creating static override for chicken from Dweebs.

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

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

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 4dfcf5229e3..94c9f0cdd57 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -390,6 +390,40 @@ void DepsgraphRelationBuilder::begin_build()
 {
 }
 
+void DepsgraphRelationBuilder::build_id(ID* id) {
+	if (id == NULL) {
+		return;
+	}
+	switch (GS(id->name)) {
+		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_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 DepsgraphRelationBuilder::build_group(Object *object, Group *group)
 {
 	const bool group_done = built_map_.checkIsBuiltAndTag(group);
@@ -1214,6 +1248,7 @@ void DepsgraphRelationBuilder::build_driver_variables(ID *id, FCurve *fcu)
 			if (dtar->id == NULL) {
 				continue;
 			}
+			build_id(dtar->id);
 			/* Special handling for directly-named bones. */
 			if ((dtar->flag & DTAR_FLAG_STRUCT_REF) &&
 			    (((Object *)dtar->id)->type == OB_ARMATURE) &&
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 7c88eea6f72..9e45d01fd79 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -194,6 +194,7 @@ struct DepsgraphRelationBuilder
 	                                       const char *description,
 	                                       bool check_unique = false);
 
+	void build_id(ID* id);
 	void build_view_layer(Scene *scene, ViewLayer *view_layer);
 	void build_group(Object *object, Group *group);
 	void build_object(Base *base, Object *object);



More information about the Bf-blender-cvs mailing list