[Bf-blender-cvs] [f2842ac65ea] master: Depsgraph: Cleanup, split build_object() a bit
Sergey Sharybin
noreply at git.blender.org
Thu Nov 23 12:01:50 CET 2017
Commit: f2842ac65ea28e38af45ca8202a1b0d3fcd6c172
Author: Sergey Sharybin
Date: Thu Nov 23 12:01:31 2017 +0100
Branches: master
https://developer.blender.org/rBf2842ac65ea28e38af45ca8202a1b0d3fcd6c172
Depsgraph: Cleanup, split build_object() a bit
===================================================================
M source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M source/blender/depsgraph/intern/builder/deg_builder_relations.h
===================================================================
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 60150eda0bf..838afbbdbbb 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -335,74 +335,26 @@ void DepsgraphNodeBuilder::build_object(Base *base, Object *object)
}
object->id.tag |= LIB_TAG_DOIT;
object->customdata_mask = 0;
-
- /* Standard components. */
+ /* Transform. */
build_object_transform(object);
-
+ /* Parent. */
if (object->parent != NULL) {
build_object(NULL, object->parent);
}
+ /* 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;
-
- 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
@@ -410,29 +362,75 @@ void DepsgraphNodeBuilder::build_object(Base *base, 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(base, object->proxy);
}
-
/* Object dupligroup. */
if (object->dup_group != NULL) {
build_group(base, 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: /* 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:
+ 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;
+ 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 cd1355558ea..2fa9ba01cc7 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -121,6 +121,7 @@ struct DepsgraphNodeBuilder {
void build_scene(Scene *scene);
void build_group(Base *base, Group *group);
void build_object(Base *base, Object *object);
+ 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 3520c518c36..67faa59bbc3 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -438,54 +438,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");
@@ -503,72 +506,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;
- }
-
- 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;
@@ -580,13 +534,55 @@ void DepsgraphRelationBuilder::build_object(Object *object)
ComponentKey proxy_po
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list