Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2021-07-14 12:25:15 +0300
committerJacques Lucke <jacques@blender.org>2021-07-14 12:25:15 +0300
commit192f0c9e17e233ecc3a66432d34abeb5a3741739 (patch)
tree35baa8551a0e7eff8fcf308adc3c4be29da23d1c /source/blender/depsgraph/intern/builder
parent271f34f77e056611e5e227b60823dd94f76340df (diff)
Fix T89734: incorrect dependency cycle with id property on modifier
Differential Revision: https://developer.blender.org/D11851
Diffstat (limited to 'source/blender/depsgraph/intern/builder')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc3
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc4
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_rna.cc11
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_rna.h2
4 files changed, 15 insertions, 5 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index c8179fb1eff..bd3bc5d5ee7 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -114,6 +114,7 @@
#include "SEQ_iterator.h"
#include "intern/builder/deg_builder.h"
+#include "intern/builder/deg_builder_rna.h"
#include "intern/depsgraph.h"
#include "intern/depsgraph_tag.h"
#include "intern/depsgraph_type.h"
@@ -1199,7 +1200,7 @@ void DepsgraphNodeBuilder::build_driver_id_property(ID *id, const char *rna_path
if (prop == nullptr) {
return;
}
- if (!RNA_property_is_idprop(prop)) {
+ if (!rna_prop_affects_parameters_node(&ptr, prop)) {
return;
}
const char *prop_identifier = RNA_property_identifier((PropertyRNA *)prop);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 7486f798fdb..5650e95f55a 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1611,7 +1611,7 @@ void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
}
}
}
- if (property_entry_key.prop != nullptr && RNA_property_is_idprop(property_entry_key.prop)) {
+ if (rna_prop_affects_parameters_node(&property_entry_key.ptr, property_entry_key.prop)) {
RNAPathKey property_exit_key(property_entry_key.id,
property_entry_key.ptr,
property_entry_key.prop,
@@ -1714,7 +1714,7 @@ void DepsgraphRelationBuilder::build_driver_id_property(ID *id, const char *rna_
if (prop == nullptr) {
return;
}
- if (!RNA_property_is_idprop(prop)) {
+ if (!rna_prop_affects_parameters_node(&ptr, prop)) {
return;
}
const char *prop_identifier = RNA_property_identifier((PropertyRNA *)prop);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_rna.cc b/source/blender/depsgraph/intern/builder/deg_builder_rna.cc
index 2ae29dea213..8e3960e1a15 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_rna.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_rna.cc
@@ -180,8 +180,7 @@ RNANodeIdentifier RNANodeQuery::construct_node_identifier(const PointerRNA *ptr,
node_identifier.operation_name = "";
node_identifier.operation_name_tag = -1;
/* Handling of commonly known scenarios. */
- if (prop != nullptr && RNA_property_is_idprop(prop) &&
- !RNA_struct_is_a(ptr->type, &RNA_Modifier)) {
+ if (rna_prop_affects_parameters_node(ptr, prop)) {
node_identifier.type = NodeType::PARAMETERS;
node_identifier.operation_code = OperationCode::ID_PROPERTY;
node_identifier.operation_name = RNA_property_identifier(
@@ -398,4 +397,12 @@ RNANodeQueryIDData *RNANodeQuery::ensure_id_data(const ID *id)
return id_data.get();
}
+bool rna_prop_affects_parameters_node(const PointerRNA *ptr, const PropertyRNA *prop)
+{
+ return prop != nullptr && RNA_property_is_idprop(prop) &&
+ /* ID properties in the geometry nodes modifier don't affect that parameters node. Instead
+ they affect the modifier and therefore the geometry node directly. */
+ !RNA_struct_is_a(ptr->type, &RNA_NodesModifier);
+}
+
} // namespace blender::deg
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_rna.h b/source/blender/depsgraph/intern/builder/deg_builder_rna.h
index d03903d508c..24d7f5f3a30 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_rna.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_rna.h
@@ -108,5 +108,7 @@ class RNANodeQuery {
static bool contains(const char *prop_identifier, const char *rna_path_component);
};
+bool rna_prop_affects_parameters_node(const PointerRNA *ptr, const PropertyRNA *prop);
+
} // namespace deg
} // namespace blender