[Bf-blender-cvs] [e5c65709a26] blender-v3.2-release: Fix T98379: Wrong evaluation when deactivating/activating collections

Sergey Sharybin noreply at git.blender.org
Fri May 27 12:16:25 CEST 2022


Commit: e5c65709a264fcd07170d6f1287c73d601a3add4
Author: Sergey Sharybin
Date:   Fri May 27 12:09:14 2022 +0200
Branches: blender-v3.2-release
https://developer.blender.org/rBe5c65709a264fcd07170d6f1287c73d601a3add4

Fix T98379: Wrong evaluation when deactivating/activating collections

This is a regression caused by a230445caec6.

The internal cause of the issue was that the synchronization component
was no longer tagged as visible (and hence not evaluated) as it not
connected to any directly visible IDs.

Changed the logic in a way that if any component of an ID is evaluated
the synchronization component will be evaluated as well.

The naming of the flag in the component node is a bit confusing, but
for the simplicity of the change for the upcoming release left it
unchanged.

===================================================================

M	source/blender/depsgraph/intern/builder/deg_builder.cc

===================================================================

diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc b/source/blender/depsgraph/intern/builder/deg_builder.cc
index 8ee94ab0a34..56117a00b73 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder.cc
@@ -136,8 +136,22 @@ void deg_graph_build_flush_visibility(Depsgraph *graph)
   for (IDNode *id_node : graph->id_nodes) {
     for (ComponentNode *comp_node : id_node->components.values()) {
       comp_node->affects_directly_visible |= id_node->is_directly_visible;
+
+      /* Enforce "visibility" of the syncronization component.
+       *
+       * This component is never connected to other ID nodes, and hence can not be handled in the
+       * same way as other components needed for evaluation. It is only needed for proper
+       * evaluation of the ID node it belongs to.
+       *
+       * The design is such that the synchronization is supposed to happen whenever any part of the
+       * ID changed/evaluated. Here we mark the component as "visible" so that genetic recalc flag
+       * flushing and scheduling will handle the component in a generic manner. */
+      if (comp_node->type == NodeType::SYNCHRONIZATION) {
+        comp_node->affects_directly_visible = true;
+      }
     }
   }
+
   for (OperationNode *op_node : graph->operations) {
     op_node->custom_flags = 0;
     op_node->num_links_pending = 0;
@@ -151,6 +165,7 @@ void deg_graph_build_flush_visibility(Depsgraph *graph)
       op_node->custom_flags |= DEG_NODE_VISITED;
     }
   }
+
   while (!BLI_stack_is_empty(stack)) {
     OperationNode *op_node;
     BLI_stack_pop(stack, &op_node);



More information about the Bf-blender-cvs mailing list