[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