Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-04-16 17:12:15 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-04-16 17:12:15 +0300
commit047950db7ccd9440b04fb4bff82844de764bd444 (patch)
tree5514374e65c106c5afc628fde6136fce37c1fad5 /source/blender/depsgraph
parent6617818c7a1f5729763aa214866b5d7dc0358f36 (diff)
Depsgraph: Pull indirect relations via driver targets
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc41
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h1
2 files changed, 42 insertions, 0 deletions
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);