diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-23 14:04:57 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-23 14:04:57 +0300 |
commit | 545f671b80f2ad39c8fdee07db3b03119c274187 (patch) | |
tree | 601793f1c8c7221512b22e822fb3cde0df6a3241 /source | |
parent | 7ba1babc902b9baf460b26ac24a19497231b64b5 (diff) | |
parent | f2842ac65ea28e38af45ca8202a1b0d3fcd6c172 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source')
4 files changed, 134 insertions, 140 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index aea74af6861..948e1410df5 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -412,78 +412,26 @@ void DepsgraphNodeBuilder::build_object(Object *object, id_node->linked_state = linked_state; object->customdata_mask = 0; - - /* Standard components. */ + /* Transform. */ build_object_transform(object); - + /* Parent. */ if (object->parent != NULL) { build_object(object->parent, linked_state); } + /* Modifiers. */ if (object->modifiers.first != NULL) { BuilderWalkUserData data; data.builder = this; modifiers_foreachObjectLink(object, modifier_walk, &data); } + /* Constraints. */ if (object->constraints.first != NULL) { BuilderWalkUserData data; data.builder = this; BKE_constraints_id_loop(&object->constraints, constraint_walk, &data); } - /* Object data. */ - if (object->data != NULL) { - /* type-specific data... */ - switch (object->type) { - case OB_MESH: /* Geometry */ - case OB_CURVE: - case OB_FONT: - case OB_SURF: - case OB_MBALL: - case OB_LATTICE: - build_obdata_geom(object); - /* TODO(sergey): Only for until we support granular - * update of curves. - */ - if (object->type == OB_FONT) { - Curve *curve = (Curve *)object->data; - if (curve->textoncurve) { - id_node->eval_flags |= DAG_EVAL_NEED_CURVE_PATH; - } - } - break; - - case OB_ARMATURE: /* Pose */ - if (ID_IS_LINKED(object) && object->proxy_from != NULL) { - build_proxy_rig(object); - } - else { - build_rig(object); - } - break; - - case OB_LAMP: /* Lamp */ - build_lamp(object); - break; - - case OB_CAMERA: /* Camera */ - build_camera(object); - break; - - case OB_LIGHTPROBE: - build_lightprobe(object); - break; - - default: - { - ID *obdata = (ID *)object->data; - if ((obdata->tag & LIB_TAG_DOIT) == 0) { - build_animdata(obdata); - } - break; - } - } - } - + build_object_data(object); /* Build animation data, * * Do it now because it's possible object data will affect @@ -491,29 +439,78 @@ void DepsgraphNodeBuilder::build_object(Object *object, * pose for proxy. */ build_animdata(&object->id); - - /* particle systems */ + /* Particle systems. */ if (object->particlesystem.first != NULL) { build_particles(object); } - /* Grease pencil. */ if (object->gpd != NULL) { build_gpencil(object->gpd); } - /* Object that this is a proxy for. */ if (object->proxy) { object->proxy->proxy_from = object; build_object(object->proxy, DEG_ID_LINKED_INDIRECTLY); } - /* Object dupligroup. */ if (object->dup_group != NULL) { build_group(object->dup_group); } } +void DepsgraphNodeBuilder::build_object_data(Object *object) +{ + if (object->data == NULL) { + return; + } + IDDepsNode *id_node = graph_->find_id_node(&object->id); + /* type-specific data. */ + switch (object->type) { + case OB_MESH: + case OB_CURVE: + case OB_FONT: + case OB_SURF: + case OB_MBALL: + case OB_LATTICE: + build_obdata_geom(object); + /* TODO(sergey): Only for until we support granular + * update of curves. + */ + if (object->type == OB_FONT) { + Curve *curve = (Curve *)object->data; + if (curve->textoncurve) { + id_node->eval_flags |= DAG_EVAL_NEED_CURVE_PATH; + } + } + break; + case OB_ARMATURE: + if (ID_IS_LINKED(object) && object->proxy_from != NULL) { + build_proxy_rig(object); + } + else { + build_rig(object); + } + break; + case OB_LAMP: + build_lamp(object); + break; + case OB_CAMERA: + build_camera(object); + break; + case OB_LIGHTPROBE: + build_lightprobe(object); + break; + default: + { + ID *obdata = (ID *)object->data; + if ((obdata->tag & LIB_TAG_DOIT) == 0) { + build_animdata(obdata); + } + break; + } + } +} + void DepsgraphNodeBuilder::build_object_transform(Object *object) { OperationDepsNode *op_node; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index a956c94a682..00109eeafcc 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -163,6 +163,7 @@ struct DepsgraphNodeBuilder { void build_group(Group *group); void build_object(Object *object, eDepsNode_LinkedState_Type linked_state); + void build_object_data(Object *object); void build_object_transform(Object *object); void build_object_constraints(Object *object); void build_pose_constraints(Object *object, bPoseChannel *pchan); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 9da3046ff07..26eaea9a18c 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -439,54 +439,57 @@ void DepsgraphRelationBuilder::build_object(Object *object) return; } object->id.tag |= LIB_TAG_DOIT; - /* Object Transforms */ - eDepsOperation_Code base_op = (object->parent) ? DEG_OPCODE_TRANSFORM_PARENT : DEG_OPCODE_TRANSFORM_LOCAL; + eDepsOperation_Code base_op = (object->parent) ? DEG_OPCODE_TRANSFORM_PARENT + : DEG_OPCODE_TRANSFORM_LOCAL; OperationKey base_op_key(&object->id, DEG_NODE_TYPE_TRANSFORM, base_op); - - OperationKey local_transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_LOCAL); - OperationKey parent_transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_PARENT); - OperationKey final_transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_FINAL); - - OperationKey ob_ubereval_key(&object->id, DEG_NODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_OBJECT_UBEREVAL); - - /* parenting */ + OperationKey local_transform_key(&object->id, + DEG_NODE_TYPE_TRANSFORM, + DEG_OPCODE_TRANSFORM_LOCAL); + OperationKey parent_transform_key(&object->id, + DEG_NODE_TYPE_TRANSFORM, + DEG_OPCODE_TRANSFORM_PARENT); + OperationKey final_transform_key(&object->id, + DEG_NODE_TYPE_TRANSFORM, + DEG_OPCODE_TRANSFORM_FINAL); + OperationKey ob_ubereval_key(&object->id, + DEG_NODE_TYPE_TRANSFORM, + DEG_OPCODE_TRANSFORM_OBJECT_UBEREVAL); + /* Parenting. */ if (object->parent != NULL) { - /* parent relationship */ + /* Parent relationship. */ build_object_parent(object); - - /* local -> parent */ - add_relation(local_transform_key, parent_transform_key, "[ObLocal -> ObParent]"); + /* Local -> parent. */ + add_relation(local_transform_key, + parent_transform_key, + "[ObLocal -> ObParent]"); } - + /* Modifiers. */ if (object->modifiers.first != NULL) { BuilderWalkUserData data; data.builder = this; modifiers_foreachObjectLink(object, modifier_walk, &data); } + /* Constraints. */ if (object->constraints.first != NULL) { BuilderWalkUserData data; data.builder = this; BKE_constraints_id_loop(&object->constraints, constraint_walk, &data); } - - /* object constraints */ + /* Object constraints. */ if (object->constraints.first != NULL) { OperationKey constraint_key(&object->id, DEG_NODE_TYPE_TRANSFORM, DEG_OPCODE_TRANSFORM_CONSTRAINTS); - - /* constraint relations */ + /* Constraint relations. */ build_constraints(&object->id, DEG_NODE_TYPE_TRANSFORM, "", &object->constraints, NULL); - /* operation order */ add_relation(base_op_key, constraint_key, "[ObBase-> Constraint Stack]"); add_relation(constraint_key, final_transform_key, "[ObConstraints -> Done]"); - // XXX add_relation(constraint_key, ob_ubereval_key, "Temp Ubereval"); add_relation(ob_ubereval_key, final_transform_key, "Temp Ubereval"); @@ -504,76 +507,23 @@ void DepsgraphRelationBuilder::build_object(Object *object) } add_relation(ob_ubereval_key, final_transform_key, "Temp Ubereval"); } - - /* AnimData */ + /* Animation data */ build_animdata(&object->id); - // XXX: This should be hooked up by the build_animdata code if (needs_animdata_node(&object->id)) { ComponentKey adt_key(&object->id, DEG_NODE_TYPE_ANIMATION); add_relation(adt_key, local_transform_key, "Object Animation"); } - - /* object data */ - if (object->data) { - ID *obdata_id = (ID *)object->data; - - /* object data animation */ - build_animdata(obdata_id); - - /* type-specific data... */ - switch (object->type) { - case OB_MESH: /* Geometry */ - case OB_CURVE: - case OB_FONT: - case OB_SURF: - case OB_MBALL: - case OB_LATTICE: - { - build_obdata_geom(object); - break; - } - - case OB_ARMATURE: /* Pose */ - if (ID_IS_LINKED(object) && object->proxy_from != NULL) { - build_proxy_rig(object); - } - else { - build_rig(object); - } - break; - - case OB_LAMP: /* Lamp */ - build_lamp(object); - break; - - case OB_CAMERA: /* Camera */ - build_camera(object); - break; - - case OB_LIGHTPROBE: - build_lightprobe(object); - break; - } - - Key *key = BKE_key_from_object(object); - if (key != NULL) { - ComponentKey geometry_key((ID *)object->data, DEG_NODE_TYPE_GEOMETRY); - ComponentKey key_key(&key->id, DEG_NODE_TYPE_GEOMETRY); - add_relation(key_key, geometry_key, "Shapekeys"); - } - } - + /* Object data. */ + build_object_data(object); /* Particle systems. */ if (object->particlesystem.first != NULL) { build_particles(object); } - /* Grease pencil. */ if (object->gpd != NULL) { build_gpencil(object->gpd); } - /* Object that this is a proxy for. */ if (object->proxy != NULL) { object->proxy->proxy_from = object; @@ -585,13 +535,58 @@ void DepsgraphRelationBuilder::build_object(Object *object) ComponentKey proxy_pose_key(&object->proxy->id, DEG_NODE_TYPE_EVAL_POSE); add_relation(ob_pose_key, proxy_pose_key, "Proxy"); } - /* Object dupligroup. */ if (object->dup_group != NULL) { build_group(object, object->dup_group); } } +void DepsgraphRelationBuilder::build_object_data(Object *object) +{ + if (object->data == NULL) { + return; + } + ID *obdata_id = (ID *)object->data; + /* Object data animation. */ + build_animdata(obdata_id); + /* type-specific data. */ + switch (object->type) { + case OB_MESH: + case OB_CURVE: + case OB_FONT: + case OB_SURF: + case OB_MBALL: + case OB_LATTICE: + { + build_obdata_geom(object); + break; + } + case OB_ARMATURE: + if (ID_IS_LINKED(object) && object->proxy_from != NULL) { + build_proxy_rig(object); + } + else { + build_rig(object); + } + break; + case OB_LAMP: + build_lamp(object); + break; + case OB_CAMERA: + build_camera(object); + break; + case OB_LIGHTPROBE: + build_lightprobe(object); + break; + } + Key *key = BKE_key_from_object(object); + if (key != NULL) { + ComponentKey geometry_key((ID *)object->data, DEG_NODE_TYPE_GEOMETRY); + ComponentKey key_key(&key->id, DEG_NODE_TYPE_GEOMETRY); + add_relation(key_key, geometry_key, "Shapekeys"); + } +} + void DepsgraphRelationBuilder::build_object_parent(Object *object) { /* XXX: for now, need to use the component key (not just direct to the parent op), diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h index 15d9f1db4dc..57c9c762d9b 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -189,6 +189,7 @@ struct DepsgraphRelationBuilder void build_view_layer(Scene *scene, ViewLayer *view_layer); void build_group(Object *object, Group *group); void build_object(Object *object); + void build_object_data(Object *object); void build_object_parent(Object *object); void build_constraints(ID *id, eDepsNode_Type component_type, |