From 047950db7ccd9440b04fb4bff82844de764bd444 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 16 Apr 2018 16:12:15 +0200 Subject: Depsgraph: Pull indirect relations via driver targets --- .../depsgraph/intern/builder/deg_builder_nodes.cc | 41 ++++++++++++++++++++++ .../depsgraph/intern/builder/deg_builder_nodes.h | 1 + 2 files changed, 42 insertions(+) (limited to 'source') 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); -- cgit v1.2.3