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:
authorSybren A. Stüvel <sybren@blender.org>2020-03-09 18:05:06 +0300
committerSybren A. Stüvel <sybren@blender.org>2020-03-09 18:05:33 +0300
commitdcb93126876879d969a30a7865700abd072066f8 (patch)
tree19c4132612f4aa0ab34adc88ccec9c48bd4f2418 /source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
parent93f636957346f33e7a69b0b4caf0ac48a0a9bf42 (diff)
Depsgraph: fix crash caused by removing too many NO-OP nodes
Unused no-op operation nodes are not bound to a callback function, and have no outgoing relations. Incoming relations of such nodes are removed since ff60dd8b18ed00902e5bdfd36882072db7af8735. However, this was done too broadly, causing too many relations to be lost and indirectly linked objects to be unevaluated. This commit introduces a `DEPSOP_FLAG_FAKE_USER` flag for operation nodes, which indicates they are not to be removed, even when they appear to be unused. Reviewed By: sergey Differential Revision: https://developer.blender.org/D7074
Diffstat (limited to 'source/blender/depsgraph/intern/builder/deg_builder_nodes.cc')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index b976875508c..687ee492c3b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -624,7 +624,9 @@ void DepsgraphNodeBuilder::build_object(int base_index,
is_parent_collection_visible_ = is_visible;
build_collection(nullptr, object->instance_collection);
is_parent_collection_visible_ = is_current_parent_collection_visible;
- add_operation_node(&object->id, NodeType::DUPLI, OperationCode::DUPLI);
+ OperationNode *op_node = add_operation_node(
+ &object->id, NodeType::DUPLI, OperationCode::DUPLI);
+ op_node->flag |= OperationFlag::DEPSOP_FLAG_PINNED;
}
/* Synchronization back to original object. */
add_operation_node(&object->id,