diff options
6 files changed, 43 insertions, 4 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index b88d90ca2d8..51fc69fcee4 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -602,14 +602,14 @@ void DepsgraphNodeBuilder::build_object(int base_index, } /* Object data. */ build_object_data(object, is_visible); + /* Paramaters, used by both drivers/animation and also to inform dependency + * from object's data. */ + build_parameters(&object->id); /* Build animation data, * * Do it now because it's possible object data will affect * on object's level animation, for example in case of rebuilding * pose for proxy. */ - OperationNode *op_node = add_operation_node( - &object->id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL); - op_node->set_as_exit(); build_animdata(&object->id); /* Particle systems. */ if (object->particlesystem.first != NULL) { @@ -983,6 +983,23 @@ void DepsgraphNodeBuilder::build_driver_id_property(ID *id, prop_identifier); } +void DepsgraphNodeBuilder::build_parameters(ID *id) +{ + (void) add_id_node(id); + OperationNode *op_node; + /* Explicit entry. */ + op_node = add_operation_node( + id, NodeType::PARAMETERS, OperationCode::PARAMETERS_ENTRY); + op_node->set_as_entry(); + /* Generic evaluation node. */ + add_operation_node( + id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL); + /* Explicit exit operation. */ + op_node = add_operation_node( + id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EXIT); + op_node->set_as_exit(); +} + /* Recursively build graph for world */ void DepsgraphNodeBuilder::build_world(World *world) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index ce3c6995fe7..40e710e755d 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -192,6 +192,7 @@ struct DepsgraphNodeBuilder { void build_driver(ID *id, FCurve *fcurve, int driver_index); void build_driver_variables(ID *id, FCurve *fcurve); void build_driver_id_property(ID *id, const char *rna_path); + void build_parameters(ID *id); void build_ik_pose(Object *object, bPoseChannel *pchan, bConstraint *con); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index b5ad391424b..dfd940a176f 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -710,6 +710,8 @@ void DepsgraphRelationBuilder::build_object(Base *base, Object *object) OperationCode::SYNCHRONIZE_TO_ORIGINAL); add_relation( final_transform_key, synchronize_key, "Synchronize to Original"); + /* Parameters. */ + build_parameters(&object->id); } void DepsgraphRelationBuilder::build_object_flags(Base *base, Object *object) @@ -806,8 +808,8 @@ void DepsgraphRelationBuilder::build_object_data_lamp(Object *object) { Lamp *lamp = (Lamp *)object->data; build_lamp(lamp); - ComponentKey object_parameters_key(&object->id, NodeType::PARAMETERS); ComponentKey lamp_parameters_key(&lamp->id, NodeType::PARAMETERS); + ComponentKey object_parameters_key(&object->id, NodeType::PARAMETERS); add_relation(lamp_parameters_key, object_parameters_key, "Light -> Object"); } @@ -1625,6 +1627,20 @@ void DepsgraphRelationBuilder::build_driver_variables(ID *id, FCurve *fcu) } } +void DepsgraphRelationBuilder::build_parameters(ID *id) +{ + OperationKey parameters_entry_key( + id, NodeType::PARAMETERS, OperationCode::PARAMETERS_ENTRY); + OperationKey parameters_eval_key( + id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL); + OperationKey parameters_exit_key( + id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EXIT); + add_relation( + parameters_entry_key, parameters_eval_key, "Entry -> Eval"); + add_relation( + parameters_eval_key, parameters_exit_key, "Entry -> Exit"); +} + void DepsgraphRelationBuilder::build_world(World *world) { if (built_map_.checkIsBuiltAndTag(world)) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h index b8dee11bebd..164f83fdaeb 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -243,6 +243,7 @@ struct DepsgraphRelationBuilder void build_driver(ID *id, FCurve *fcurve); void build_driver_data(ID *id, FCurve *fcurve); void build_driver_variables(ID *id, FCurve *fcurve); + void build_parameters(ID *id); void build_world(World *world); void build_rigidbody(Scene *scene); void build_particle_systems(Object *object); diff --git a/source/blender/depsgraph/intern/node/deg_node_operation.cc b/source/blender/depsgraph/intern/node/deg_node_operation.cc index f852a32450d..893c108dc5a 100644 --- a/source/blender/depsgraph/intern/node/deg_node_operation.cc +++ b/source/blender/depsgraph/intern/node/deg_node_operation.cc @@ -41,7 +41,9 @@ const char *operationCodeAsString(OperationCode opcode) /* Generic Operations. */ case OperationCode::OPERATION: return "OPERATION"; case OperationCode::ID_PROPERTY: return "ID_PROPERTY"; + case OperationCode::PARAMETERS_ENTRY: return "PARAMETERS_ENTRY"; case OperationCode::PARAMETERS_EVAL: return "PARAMETERS_EVAL"; + case OperationCode::PARAMETERS_EXIT: return "PARAMETERS_EXIT"; /* Animation, Drivers, etc. */ case OperationCode::ANIMATION_ENTRY: return "ANIMATION_ENTRY"; case OperationCode::ANIMATION_EVAL: return "ANIMATION_EVAL"; diff --git a/source/blender/depsgraph/intern/node/deg_node_operation.h b/source/blender/depsgraph/intern/node/deg_node_operation.h index 8ec71d1829f..c6db7b012d7 100644 --- a/source/blender/depsgraph/intern/node/deg_node_operation.h +++ b/source/blender/depsgraph/intern/node/deg_node_operation.h @@ -47,7 +47,9 @@ enum class OperationCode { /* Generic parameters evaluation. */ ID_PROPERTY, + PARAMETERS_ENTRY, PARAMETERS_EVAL, + PARAMETERS_EXIT, /* Animation, Drivers, etc. --------------------------------------------- */ /* NLA + Action */ |