[Bf-blender-cvs] [a20d350dd50] blender2.8: Depsgraph: Cleanup, make it easier to create relations with flags

Sergey Sharybin noreply at git.blender.org
Thu Nov 22 16:17:24 CET 2018


Commit: a20d350dd50c731c880e5c8099f64396145d3d94
Author: Sergey Sharybin
Date:   Thu Nov 22 14:54:08 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBa20d350dd50c731c880e5c8099f64396145d3d94

Depsgraph: Cleanup, make it easier to create relations with flags

===================================================================

M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h
M	source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
M	source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
M	source/blender/depsgraph/intern/depsgraph.cc
M	source/blender/depsgraph/intern/depsgraph.h

===================================================================

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index ab4acef6668..8f579216518 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -304,10 +304,12 @@ DepsRelation *DepsgraphRelationBuilder::add_time_relation(
         TimeSourceDepsNode *timesrc,
         DepsNode *node_to,
         const char *description,
-        bool check_unique)
+        bool check_unique,
+        int flags)
 {
 	if (timesrc && node_to) {
-		return graph_->add_new_relation(timesrc, node_to, description, check_unique);
+		return graph_->add_new_relation(
+		        timesrc, node_to, description, check_unique, flags);
 	}
 	else {
 		DEG_DEBUG_PRINTF((::Depsgraph *)graph_,
@@ -323,13 +325,15 @@ DepsRelation *DepsgraphRelationBuilder::add_operation_relation(
         OperationDepsNode *node_from,
         OperationDepsNode *node_to,
         const char *description,
-        bool check_unique)
+        bool check_unique,
+        int flags)
 {
 	if (node_from && node_to) {
 		return graph_->add_new_relation(node_from,
 		                                node_to,
 		                                description,
-		                                check_unique);
+		                                check_unique,
+		                                flags);
 	}
 	else {
 		DEG_DEBUG_PRINTF((::Depsgraph *)graph_,
@@ -2499,10 +2503,10 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
 				OperationKey data_copy_on_write_key(object_data_id,
 				                                    DEG_NODE_TYPE_COPY_ON_WRITE,
 				                                    DEG_OPCODE_COPY_ON_WRITE);
-				DepsRelation *rel = add_relation(data_copy_on_write_key,
-				                                 copy_on_write_key,
-				                                 "Eval Order");
-				rel->flag |= DEPSREL_FLAG_GODMODE;
+				add_relation(data_copy_on_write_key,
+				             copy_on_write_key,
+				             "Eval Order",
+				             DEPSREL_FLAG_GODMODE);
 			}
 		}
 		else {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 81f21f5bf77..c6db975c6c2 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -44,6 +44,7 @@
 #include "BLI_string.h"
 
 #include "intern/builder/deg_builder_map.h"
+#include "intern/depsgraph.h"
 #include "intern/nodes/deg_node.h"
 #include "intern/nodes/deg_node_component.h"
 #include "intern/nodes/deg_node_operation.h"
@@ -186,19 +187,28 @@ struct DepsgraphRelationBuilder
 	DepsRelation *add_relation(const KeyFrom& key_from,
 	                           const KeyTo& key_to,
 	                           const char *description,
-	                           bool check_unique = false);
+	                           bool check_unique = false,
+	                           int flags = 0);
+
+	template <typename KeyFrom, typename KeyTo>
+	DepsRelation *add_relation(const KeyFrom& key_from,
+	                           const KeyTo& key_to,
+	                           const char *description,
+	                           eDepsRelation_Flag flag);
 
 	template <typename KeyTo>
 	DepsRelation *add_relation(const TimeSourceKey& key_from,
 	                           const KeyTo& key_to,
 	                           const char *description,
-	                           bool check_unique = false);
+	                           bool check_unique = false,
+	                           int flags = 0);
 
 	template <typename KeyType>
 	DepsRelation *add_node_handle_relation(const KeyType& key_from,
 	                                       const DepsNodeHandle *handle,
 	                                       const char *description,
-	                                       bool check_unique = false);
+	                                       bool check_unique = false,
+	                                       int flags = 0);
 
 	void add_customdata_mask(const ComponentKey &key, uint64_t mask);
 	void add_special_eval_flag(ID *object, uint32_t flag);
@@ -306,11 +316,13 @@ protected:
 	DepsRelation *add_time_relation(TimeSourceDepsNode *timesrc,
 	                                DepsNode *node_to,
 	                                const char *description,
-	                                bool check_unique = false);
+	                                bool check_unique = false,
+	                                int flags = 0);
 	DepsRelation *add_operation_relation(OperationDepsNode *node_from,
 	                                     OperationDepsNode *node_to,
 	                                     const char *description,
-	                                     bool check_unique = false);
+	                                     bool check_unique = false,
+	                                     int flags = 0);
 
 	template <typename KeyType>
 	DepsNodeHandle create_node_handle(const KeyType& key,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
index 894d4172c00..726393f39b9 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
@@ -49,14 +49,16 @@ template <typename KeyFrom, typename KeyTo>
 DepsRelation *DepsgraphRelationBuilder::add_relation(const KeyFrom &key_from,
                                                      const KeyTo &key_to,
                                                      const char *description,
-                                                     bool check_unique)
+                                                     bool check_unique,
+                                                     int flags)
 {
 	DepsNode *node_from = get_node(key_from);
 	DepsNode *node_to = get_node(key_to);
 	OperationDepsNode *op_from = node_from ? node_from->get_exit_operation() : NULL;
 	OperationDepsNode *op_to = node_to ? node_to->get_entry_operation() : NULL;
 	if (op_from && op_to) {
-		return add_operation_relation(op_from, op_to, description, check_unique);
+		return add_operation_relation(
+		        op_from, op_to, description, check_unique, flags);
 	}
 	else {
 		if (!op_from) {
@@ -81,18 +83,31 @@ DepsRelation *DepsgraphRelationBuilder::add_relation(const KeyFrom &key_from,
 	return NULL;
 }
 
+template <typename KeyFrom, typename KeyTo>
+DepsRelation *DepsgraphRelationBuilder::add_relation(
+        const KeyFrom& key_from,
+        const KeyTo& key_to,
+        const char *description,
+        eDepsRelation_Flag flag)
+{
+	return add_relation(
+	        key_from, key_to, description, false, static_cast<int>(flag));
+}
+
 template <typename KeyTo>
 DepsRelation *DepsgraphRelationBuilder::add_relation(
         const TimeSourceKey &key_from,
         const KeyTo &key_to,
         const char *description,
-        bool check_unique)
+        bool check_unique,
+        int flags)
 {
 	TimeSourceDepsNode *time_from = get_node(key_from);
 	DepsNode *node_to = get_node(key_to);
 	OperationDepsNode *op_to = node_to ? node_to->get_entry_operation() : NULL;
 	if (time_from != NULL && op_to != NULL) {
-		return add_time_relation(time_from, op_to, description, check_unique);
+		return add_time_relation(
+		        time_from, op_to, description, check_unique, flags);
 	}
 	return NULL;
 }
@@ -102,13 +117,15 @@ DepsRelation *DepsgraphRelationBuilder::add_node_handle_relation(
         const KeyType &key_from,
         const DepsNodeHandle *handle,
         const char *description,
-        bool check_unique)
+        bool check_unique,
+        int flags)
 {
 	DepsNode *node_from = get_node(key_from);
 	OperationDepsNode *op_from = node_from ? node_from->get_exit_operation() : NULL;
 	OperationDepsNode *op_to = handle->node->get_entry_operation();
 	if (op_from != NULL && op_to != NULL) {
-		return add_operation_relation(op_from, op_to, description, check_unique);
+		return add_operation_relation(
+		        op_from, op_to, description, check_unique, flags);
 	}
 	else {
 		if (!op_from) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
index d9f07955123..f95060ee6ec 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
@@ -341,8 +341,7 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
 	 * Unsolved Issues:
 	 * - Care is needed to ensure that multi-headed trees work out the same as
 	 *   in ik-tree building
-	 * - Animated chain-lengths are a problem...
-	 */
+	 * - Animated chain-lengths are a problem. */
 	RootPChanMap root_map;
 	bool pose_depends_on_local_transform = false;
 	LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
@@ -359,8 +358,7 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
 					break;
 
 				/* Constraints which needs world's matrix for transform.
-				 * TODO(sergey): More constraints here?
-				 */
+				 * TODO(sergey): More constraints here? */
 				case CONSTRAINT_TYPE_ROTLIKE:
 				case CONSTRAINT_TYPE_SIZELIKE:
 				case CONSTRAINT_TYPE_LOCLIKE:
@@ -377,15 +375,13 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
 	//root_map.print_debug();
 	if (pose_depends_on_local_transform) {
 		/* TODO(sergey): Once partial updates are possible use relation between
-		 * object transform and solver itself in it's build function.
-		 */
+		 * object transform and solver itself in it's build function. */
 		ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE);
 		ComponentKey local_transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM);
 		add_relation(local_transform_key, pose_key, "Local Transforms");
 	}
 	/* Links between operations for each bone. */
 	LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
-		DepsRelation *relation;
 		OperationKey bone_local_key(&object->id,
 		                

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list