[Bf-blender-cvs] [71e99e2] depsgraph_refactor: Add inter-relations for modifiers to represent the stack order.

Lukas Tönne noreply at git.blender.org
Thu Apr 17 15:32:38 CEST 2014


Commit: 71e99e2602f9873b052bc20637a9c65dd78517ce
Author: Lukas Tönne
Date:   Thu Apr 17 15:26:17 2014 +0200
https://developer.blender.org/rB71e99e2602f9873b052bc20637a9c65dd78517ce

Add inter-relations for modifiers to represent the stack order.

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

M	source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
M	source/blender/depsgraph/intern/depsgraph_build_relations.cpp
M	source/blender/depsgraph/intern/depsgraph_type_defines.cpp
M	source/blender/depsgraph/intern/depsgraph_types.h

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

diff --git a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
index a078b9d..158cce6 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
@@ -728,7 +728,7 @@ void DepsgraphNodeBuilder::build_obdata_geom(IDDepsNode *ob_node, IDDepsNode *ob
 			
 			add_operation_node(ob_node, DEPSNODE_TYPE_OP_GEOMETRY,
 			                   DEPSOP_TYPE_EXEC, BKE_object_eval_modifier,
-			                   string_format("Modifier %s", md->name), make_rna_pointer(ob, &RNA_Modifier, md));
+			                   deg_op_name_modifier(md), make_rna_pointer(ob, &RNA_Modifier, md));
 		}
 	}
 	
diff --git a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
index 7e18921..c01ed43 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -841,14 +841,22 @@ void DepsgraphRelationBuilder::build_obdata_geom(Scene *scene, Object *ob)
 	/* Modifiers */
 	if (ob->modifiers.first) {
 		ModifierData *md;
+		OperationKey prev_mod_key;
 		
 		for (md = (ModifierData *)ob->modifiers.first; md; md = md->next) {
 			ModifierTypeInfo *mti = modifierType_getInfo((ModifierType)md->type);
+			OperationKey mod_key(ob, DEPSNODE_TYPE_OP_GEOMETRY, deg_op_name_modifier(md));
+			
+			/* stack relation: modifier depends on previous modifier in the stack */
+			if (md->prev)
+				add_relation(prev_mod_key, mod_key, DEPSREL_TYPE_GEOMETRY_EVAL, "Modifier Stack");
 			
 			if (mti->updateDepsgraph) {
-				DepsNodeHandle handle = create_node_handle(OperationKey(ob, DEPSNODE_TYPE_OP_GEOMETRY, md->name));
+				DepsNodeHandle handle = create_node_handle(mod_key);
 				mti->updateDepsgraph(md, scene, ob, &handle);
 			}
+			
+			prev_mod_key = mod_key;
 		}
 	}
 	
diff --git a/source/blender/depsgraph/intern/depsgraph_type_defines.cpp b/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
index 3d89a54..3368140 100644
--- a/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_type_defines.cpp
@@ -37,6 +37,7 @@ extern "C" {
 
 #include "DNA_action_types.h"
 #include "DNA_anim_types.h"
+#include "DNA_modifier_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 
@@ -100,6 +101,10 @@ string deg_op_name_driver(const ChannelDriver *driver)
 {
 	return string_format("Driver @ %p", driver);
 }
+string deg_op_name_modifier(const ModifierData *md)
+{
+	return string_format("Modifier %s", md->name);
+}
 
 /* ******************************************************** */
 /* External API */
diff --git a/source/blender/depsgraph/intern/depsgraph_types.h b/source/blender/depsgraph/intern/depsgraph_types.h
index fcffa09..938b298 100644
--- a/source/blender/depsgraph/intern/depsgraph_types.h
+++ b/source/blender/depsgraph/intern/depsgraph_types.h
@@ -36,6 +36,7 @@
 #include "depsgraph_util_string.h"
 
 struct ChannelDriver;
+struct ModifierData;
 
 /* Evaluation Operation for atomic operation 
  * < context: (ComponentEvalContext) context containing data necessary for performing this operation
@@ -111,6 +112,7 @@ extern const string deg_op_name_ik_solver;
 extern const string deg_op_name_spline_ik_solver;
 extern const string deg_op_name_psys_eval;
 string deg_op_name_driver(const ChannelDriver *driver);
+string deg_op_name_modifier(const ModifierData *md);
 
 /* Type of operation */
 typedef enum eDepsOperation_Type {




More information about the Bf-blender-cvs mailing list