[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