Depsgraph: Pull indirect relations via driver targets
This commit is contained in:
parent
6617818c7a
commit
047950db7c
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue