diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-04-03 15:50:21 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-04-03 15:50:21 +0300 |
commit | ba2a81bcf18236cd79a996a8cc31429ffbc4b566 (patch) | |
tree | 5b2cacab20c666d6ff87abc750888e27be8dc08d /source/blender/depsgraph | |
parent | 382b2a9c66a9f8b64581dc2a360dffbbbe706e21 (diff) |
Fix T62817: Can't drive modifier property with another one
Random place in the modifier stack can not be referenced,
so it doesn't make sense to sue GEOMETRY component as a
FROM operation.
So now drivers on modifiers are driving GEOMETRY component,
but are using PARAMETERS as a source for variables.
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_rna.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_rna.cc b/source/blender/depsgraph/intern/builder/deg_builder_rna.cc index 3e9c3811fb5..c8c6cc75418 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_rna.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_rna.cc @@ -177,7 +177,7 @@ Node *RNANodeQuery::find_node(const PointerRNA *ptr, RNANodeIdentifier RNANodeQuery::construct_node_identifier( const PointerRNA *ptr, const PropertyRNA *prop, - RNAPointerSource /*source*/) + RNAPointerSource source) { RNANodeIdentifier node_identifier; if (ptr->type == NULL) { @@ -265,7 +265,18 @@ RNANodeIdentifier RNANodeQuery::construct_node_identifier( } } else if (RNA_struct_is_a(ptr->type, &RNA_Modifier)) { - node_identifier.type = NodeType::GEOMETRY; + /* When modifier is used as FROM operation this is likely referencing to + * the property (for example, modifier's influence). + * But when it's used as TO operation, this is geometry component. */ + switch (source) { + case RNAPointerSource::ENTRY: + node_identifier.type = NodeType::GEOMETRY; + break; + case RNAPointerSource::EXIT: + node_identifier.type = NodeType::PARAMETERS; + node_identifier.operation_code = OperationCode::PARAMETERS_EVAL; + break; + } return node_identifier; } else if (ptr->type == &RNA_Object) { |