Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-11-23 14:04:57 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-11-23 14:04:57 +0300
commit545f671b80f2ad39c8fdee07db3b03119c274187 (patch)
tree601793f1c8c7221512b22e822fb3cde0df6a3241 /source/blender
parent7ba1babc902b9baf460b26ac24a19497231b64b5 (diff)
parentf2842ac65ea28e38af45ca8202a1b0d3fcd6c172 (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc121
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h1
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc151
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.h1
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,