diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 480a9d60805..ca4f3ef2657 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -119,20 +119,30 @@ namespace blender::deg { namespace { -bool driver_target_depends_on_time(const DriverTarget *target) +bool is_time_dependent_scene_driver_target(const DriverTarget *target) { - if (target->idtype == ID_SCE && - (target->rna_path != nullptr && STREQ(target->rna_path, "frame_current"))) + return target->rna_path != nullptr && STREQ(target->rna_path, "frame_current"); +} + +bool driver_target_depends_on_time(const DriverVar *variable, const DriverTarget *target) +{ + if (variable->type == DVAR_TYPE_CONTEXT_PROP && + target->context_property == DTAR_CONTEXT_PROPERTY_ACTIVE_SCENE) { - return true; + return is_time_dependent_scene_driver_target(target); } + + if (target->idtype == ID_SCE) { + return is_time_dependent_scene_driver_target(target); + } + return false; } bool driver_variable_depends_on_time(const DriverVar *variable) { for (int i = 0; i < variable->num_targets; ++i) { - if (driver_target_depends_on_time(&variable->targets[i])) { + if (driver_target_depends_on_time(variable, &variable->targets[i])) { return true; } }