[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