diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-06-06 12:53:04 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-06-06 13:36:51 +0300 |
commit | 7810c60fe37b017c715b8214d497e3b5ca200038 (patch) | |
tree | 22a85e7403d2fffcf4c11e96cd5f899ad72f5067 /source/blender | |
parent | 695747aad121eca605d3bafde43a644a0988a677 (diff) |
Depsgraph: Handle key->object relations from object builder
Diffstat (limited to 'source/blender')
3 files changed, 20 insertions, 20 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index 037d441269f..607e1389c5f 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -990,6 +990,9 @@ void DepsgraphNodeBuilder::build_cloth(Object *object) /* Shapekeys */ void DepsgraphNodeBuilder::build_shapekeys(Key *key) { + if (built_map_.checkIsBuiltAndTag(key)) { + return; + } build_animdata(&key->id); add_operation_node(&key->id, DEG_NODE_TYPE_GEOMETRY, diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 9afde9945ac..d91d80cead6 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -1646,27 +1646,13 @@ void DepsgraphRelationBuilder::build_cloth(Object *object, } /* Shapekeys */ -void DepsgraphRelationBuilder::build_shapekeys(ID *obdata, Key *key) +void DepsgraphRelationBuilder::build_shapekeys(Key *key) { - ComponentKey obdata_key(obdata, DEG_NODE_TYPE_GEOMETRY); - + if (built_map_.checkIsBuiltAndTag(key)) { + return; + } /* attach animdata to geometry */ build_animdata(&key->id); - - if (key->adt) { - // TODO: this should really be handled in build_animdata, since many of these cases will need it - if (key->adt->action || key->adt->nla_tracks.first) { - ComponentKey adt_key(&key->id, DEG_NODE_TYPE_ANIMATION); - add_relation(adt_key, obdata_key, "Animation"); - } - - /* NOTE: individual shapekey drivers are handled above already */ - } - - /* attach to geometry */ - // XXX: aren't shapekeys now done as a pseudo-modifier on object? - //ComponentKey key_key(&key->id, DEG_NODE_TYPE_GEOMETRY); // FIXME: this doesn't exist - //add_relation(key_key, obdata_key, "Shapekeys"); } /** @@ -1808,6 +1794,17 @@ void DepsgraphRelationBuilder::build_object_data_geometry(Object *object) } /* Object data datablock. */ build_object_data_geometry_datablock((ID *)object->data); + Key *key = BKE_key_from_object(object); + if (key != NULL) { + if (key->adt != NULL) { + if (key->adt->action || key->adt->nla_tracks.first) { + ComponentKey obdata_key((ID *)object->data, + DEG_NODE_TYPE_GEOMETRY); + ComponentKey adt_key(&key->id, DEG_NODE_TYPE_ANIMATION); + add_relation(adt_key, obdata_key, "Animation"); + } + } + } } void DepsgraphRelationBuilder::build_object_data_geometry_datablock(ID *obdata) @@ -1820,7 +1817,7 @@ void DepsgraphRelationBuilder::build_object_data_geometry_datablock(ID *obdata) /* ShapeKeys. */ Key *key = BKE_key_from_id(obdata); if (key != NULL) { - build_shapekeys(obdata, key); + build_shapekeys(key); } /* Link object data evaluation node to exit operation. */ OperationKey obdata_geom_eval_key(obdata, diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h index e61fe40d93e..ec932eccc9f 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -248,7 +248,7 @@ struct DepsgraphRelationBuilder RootPChanMap *root_map); void build_rig(Object *object); void build_proxy_rig(Object *object); - void build_shapekeys(ID *obdata, Key *key); + void build_shapekeys(Key *key); void build_armature(bArmature *armature); void build_camera(Camera *camera); void build_lamp(Lamp *lamp); |