[Bf-blender-cvs] [e4139476bf7] temp-nodes-group-declarations: Merge branch 'master' into temp-nodes-group-declarations

Hans Goudey noreply at git.blender.org
Tue Dec 20 21:52:48 CET 2022


Commit: e4139476bf7a5b702b60fedb23e2f5075d70ce9e
Author: Hans Goudey
Date:   Tue Dec 20 14:50:24 2022 -0600
Branches: temp-nodes-group-declarations
https://developer.blender.org/rBe4139476bf7a5b702b60fedb23e2f5075d70ce9e

Merge branch 'master' into temp-nodes-group-declarations

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



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

diff --cc source/blender/blenkernel/intern/node_tree_field_inferencing.cc
index 2ca30286cd5,5c527e29131..879dafd9d7d
--- a/source/blender/blenkernel/intern/node_tree_field_inferencing.cc
+++ b/source/blender/blenkernel/intern/node_tree_field_inferencing.cc
@@@ -486,30 -496,43 +496,47 @@@ static void update_socket_shapes(const 
    }
  }
  
+ static void prepare_inferencing_interfaces(
+     const Span<const bNode *> nodes,
+     MutableSpan<const FieldInferencingInterface *> interface_by_node,
+     ResourceScope &scope)
+ {
+   for (const int i : nodes.index_range()) {
+     interface_by_node[i] = &get_node_field_inferencing_interface(*nodes[i], scope);
+   }
+ }
+ 
 -bool update_field_inferencing(const bNodeTree &tree)
 +void calculate_field_interface(const bNodeTree &tree, FieldInferencingInterface &r_interface)
  {
    tree.ensure_topology_cache();
  
+   const Span<const bNode *> nodes = tree.all_nodes();
+   ResourceScope scope;
+   Array<const FieldInferencingInterface *> interface_by_node(nodes.size());
+   prepare_inferencing_interfaces(nodes, interface_by_node, scope);
+ 
+   /* Create new inferencing interface for this node group. */
 -  std::unique_ptr<FieldInferencingInterface> new_inferencing_interface =
 -      std::make_unique<FieldInferencingInterface>();
 -  new_inferencing_interface->inputs.resize(BLI_listbase_count(&tree.inputs),
 -                                           InputSocketFieldType::IsSupported);
 -  new_inferencing_interface->outputs.resize(BLI_listbase_count(&tree.outputs),
 -                                            OutputFieldDependency::ForDataSource());
 +  r_interface.inputs.resize(BLI_listbase_count(&tree.inputs), InputSocketFieldType::IsSupported);
 +  r_interface.outputs.resize(BLI_listbase_count(&tree.outputs),
 +                             OutputFieldDependency::ForDataSource());
  
    /* Keep track of the state of all sockets. The index into this array is #SocketRef::id(). */
    Array<SocketFieldState> field_state_by_socket_id(tree.all_sockets().size());
  
-   propagate_data_requirements_from_right_to_left(tree, field_state_by_socket_id);
+   propagate_data_requirements_from_right_to_left(
+       tree, interface_by_node, field_state_by_socket_id);
 -  determine_group_input_states(tree, *new_inferencing_interface, field_state_by_socket_id);
 +  determine_group_input_states(tree, r_interface, field_state_by_socket_id);
-   propagate_field_status_from_left_to_right(tree, field_state_by_socket_id);
-   determine_group_output_states(tree, r_interface, field_state_by_socket_id);
+   propagate_field_status_from_left_to_right(tree, interface_by_node, field_state_by_socket_id);
 -  determine_group_output_states(
 -      tree, *new_inferencing_interface, interface_by_node, field_state_by_socket_id);
++  determine_group_output_states(tree, r_interface, interface_by_node, field_state_by_socket_id);
    update_socket_shapes(tree, field_state_by_socket_id);
 +}
 +
 +bool update_field_inferencing(const bNodeTree &tree)
 +{
 +  /* Create new inferencing interface for this node group. */
 +  std::unique_ptr<FieldInferencingInterface> new_inferencing_interface =
 +      std::make_unique<FieldInferencingInterface>();
 +  calculate_field_interface(tree, *new_inferencing_interface);
  
    /* Update the previous group interface. */
    const bool group_interface_changed = !tree.runtime->field_inferencing_interface ||



More information about the Bf-blender-cvs mailing list