From 57a5ef8c611b2c0952153e9624c46ffb369b6a42 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 4 May 2018 14:27:50 +0200 Subject: 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. --- .../intern/builder/deg_builder_relations.cc | 35 ++++++++++++++++++++++ .../intern/builder/deg_builder_relations.h | 1 + 2 files changed, 36 insertions(+) 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); -- cgit v1.2.3