[Bf-blender-cvs] [f038197] depsgraph_refactor: Depsgraph: Don't add operations to graph if they already existed

Sergey Sharybin noreply at git.blender.org
Fri Jan 9 12:20:13 CET 2015


Commit: f0381975f4a635e480e23f95ba41811014347dea
Author: Sergey Sharybin
Date:   Fri Jan 9 16:15:31 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rBf0381975f4a635e480e23f95ba41811014347dea

Depsgraph: Don't add operations to graph if they already existed

We would need to avoid creating such an operations, but current solution
makes graph robust for such accidents. It's a bit slower but good enough
at this state.

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

M	source/blender/depsgraph/intern/depsgraph_build.cpp

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

diff --git a/source/blender/depsgraph/intern/depsgraph_build.cpp b/source/blender/depsgraph/intern/depsgraph_build.cpp
index 7580f0c..5944f18 100644
--- a/source/blender/depsgraph/intern/depsgraph_build.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build.cpp
@@ -229,24 +229,36 @@ ComponentDepsNode *DepsgraphNodeBuilder::add_component_node(ID *id, eDepsNode_Ty
 }
 
 OperationDepsNode *DepsgraphNodeBuilder::add_operation_node(ComponentDepsNode *comp_node,
-                                                            eDepsOperation_Type optype, DepsEvalOperationCb op, 
-                                                            eDepsOperation_Code opcode, const string &description)
-{
-	OperationDepsNode *op_node = comp_node->add_operation(optype, op, opcode, description);
-	m_graph->operations.push_back(op_node);
+                                                            eDepsOperation_Type optype,
+                                                            DepsEvalOperationCb op,
+                                                            eDepsOperation_Code opcode,
+                                                            const string &description)
+{
+	OperationDepsNode *op_node = comp_node->has_operation(opcode, description);
+	if (op_node == NULL) {
+		op_node = comp_node->add_operation(optype, op, opcode, description);
+		m_graph->operations.push_back(op_node);
+	}
+	else {
+		/* TODO(sergey): Ideally graph builder shouldn't create duplicate nodes. */
+		fprintf(stderr, "add_operation: Operation already exists - %s has %s at %p\n",
+		        comp_node->identifier().c_str(),
+		        op_node->identifier().c_str(),
+		        op_node);
+	}
 	return op_node;
 }
 
-OperationDepsNode *DepsgraphNodeBuilder::add_operation_node(ID *id, eDepsNode_Type comp_type, const string &comp_name,
-                                                            eDepsOperation_Type optype, DepsEvalOperationCb op,
-                                                            eDepsOperation_Code opcode, const string &description)
+OperationDepsNode *DepsgraphNodeBuilder::add_operation_node(ID *id,
+                                                            eDepsNode_Type comp_type,
+                                                            const string &comp_name,
+                                                            eDepsOperation_Type optype,
+                                                            DepsEvalOperationCb op,
+                                                            eDepsOperation_Code opcode,
+                                                            const string &description)
 {
 	ComponentDepsNode *comp_node = add_component_node(id, comp_type, comp_name);
-	
-	OperationDepsNode *op_node = comp_node->add_operation(optype, op, opcode, description);
-	m_graph->operations.push_back(op_node);
-	
-	return op_node;
+	return add_operation_node(comp_node, optype, op, opcode, description);
 }
 
 /* ************************************************* */




More information about the Bf-blender-cvs mailing list