Fix T98525: depsgraph for indirectly referenced ID Properties in drivers.
If the RNA path of a Single Property variable goes through a pointer to a different ID, the property should be attached to that ID using the owner reference in the RNA pointer. This already happened when building some, but not all of the relations and nodes. This patch fixes the remaining cases. Differential Revision: https://developer.blender.org/D15323
This commit is contained in:
parent
f987d9b758
commit
2f729bc111
Notes:
blender-bot
2023-02-14 11:18:07 +01:00
Referenced by issue #98525, Getting multiple system console error traces on Animation Drivers that appear to be functional
|
@ -1219,11 +1219,11 @@ void DepsgraphNodeBuilder::build_driver_id_property(ID *id, const char *rna_path
|
|||
if (RNA_struct_is_a(ptr.type, &RNA_PoseBone)) {
|
||||
const bPoseChannel *pchan = static_cast<const bPoseChannel *>(ptr.data);
|
||||
ensure_operation_node(
|
||||
id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, nullptr, prop_identifier);
|
||||
ptr.owner_id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, nullptr, prop_identifier);
|
||||
}
|
||||
else {
|
||||
ensure_operation_node(
|
||||
id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, nullptr, prop_identifier);
|
||||
ptr.owner_id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, nullptr, prop_identifier);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1865,18 +1865,20 @@ void DepsgraphRelationBuilder::build_driver_id_property(ID *id, const char *rna_
|
|||
if (RNA_struct_is_a(ptr.type, &RNA_PoseBone)) {
|
||||
const bPoseChannel *pchan = static_cast<const bPoseChannel *>(ptr.data);
|
||||
id_property_key = OperationKey(
|
||||
id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, prop_identifier);
|
||||
ptr.owner_id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, prop_identifier);
|
||||
/* Create relation from the parameters component so that tagging armature for parameters update
|
||||
* properly propagates updates to all properties on bones and deeper (if needed). */
|
||||
OperationKey parameters_init_key(id, NodeType::PARAMETERS, OperationCode::PARAMETERS_ENTRY);
|
||||
OperationKey parameters_init_key(
|
||||
ptr.owner_id, NodeType::PARAMETERS, OperationCode::PARAMETERS_ENTRY);
|
||||
add_relation(
|
||||
parameters_init_key, id_property_key, "Init -> ID Property", RELATION_CHECK_BEFORE_ADD);
|
||||
}
|
||||
else {
|
||||
id_property_key = OperationKey(
|
||||
id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, prop_identifier);
|
||||
ptr.owner_id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, prop_identifier);
|
||||
}
|
||||
OperationKey parameters_exit_key(id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EXIT);
|
||||
OperationKey parameters_exit_key(
|
||||
ptr.owner_id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EXIT);
|
||||
add_relation(
|
||||
id_property_key, parameters_exit_key, "ID Property -> Done", RELATION_CHECK_BEFORE_ADD);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue