diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-05-04 15:27:50 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-05-04 15:30:06 +0300 |
commit | 57a5ef8c611b2c0952153e9624c46ffb369b6a42 (patch) | |
tree | 248b2c00cc5564cbebf9b86d21eeb53f95e96e43 /source/blender/depsgraph | |
parent | 02baf714093e7bfbcd6a72ea8032b2cff74a1f00 (diff) |
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.
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations.cc | 35 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations.h | 1 |
2 files changed, 36 insertions, 0 deletions
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); |