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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to