Depsgraph: Pull indirect relations via driver targets

This commit is contained in:
Sergey Sharybin 2018-04-16 16:12:15 +02:00
parent 6617818c7a
commit 047950db7c
2 changed files with 42 additions and 0 deletions

View File

@ -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

View File

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