diff options
Diffstat (limited to 'source/blender/depsgraph/intern/builder')
4 files changed, 39 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); |