WIP: Closures and deferred evaluation for geometry nodes #107842

Draft
Lukas Tönne wants to merge 35 commits from LukasTonne/blender:geometry-nodes-closures into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
1 changed files with 4 additions and 36 deletions
Showing only changes of commit 419fb98fd2 - Show all commits

View File

@ -1815,43 +1815,11 @@ struct GeometryNodesLazyFunctionGraphBuilder {
if (group_btree == nullptr) {
return;
}
const GeometryNodesLazyFunctionGraphInfo *group_lf_graph_info =
ensure_geometry_nodes_lazy_function_graph(*group_btree);
if (group_lf_graph_info == nullptr) {
return;
}
/* Tree graph is needed by the bind node. */
ensure_geometry_nodes_lazy_function_graph(*group_btree);
//auto lazy_function = std::make_unique<LazyFunctionForGroupNode>(bnode, *group_lf_graph_info);
//lf::FunctionNode &lf_node = lf_graph_->add_function(*lazy_function);
//for (const int i : bnode.input_sockets().index_range()) {
// const bNodeSocket &bsocket = bnode.input_socket(i);
// BLI_assert(!bsocket.is_multi_input());
// lf::InputSocket &lf_socket = lf_node.input(i);
// input_socket_map_.add(&bsocket, &lf_socket);
// mapping_->bsockets_by_lf_socket_map.add(&lf_socket, &bsocket);
//}
//for (const int i : bnode.output_sockets().index_range()) {
// const bNodeSocket &bsocket = bnode.output_socket(i);
// lf::OutputSocket &lf_socket = lf_node.output(i);
// output_socket_map_.add_new(&bsocket, &lf_socket);
// mapping_->bsockets_by_lf_socket_map.add(&lf_socket, &bsocket);
//}
//mapping_->group_node_map.add(&bnode, &lf_node);
//lf_graph_info_->num_inline_nodes_approximate +=
// group_lf_graph_info->num_inline_nodes_approximate;
//static const bool static_false = false;
//for (const int i : lazy_function->lf_input_for_output_bsocket_usage_.values()) {
// lf_node.input(i).set_default_value(&static_false);
// socket_usage_inputs_.add(&lf_node.input(i));
//}
///* Keep track of attribute set inputs that need to be populated later. */
//for (const auto [output_index, lf_input_index] :
// lazy_function->lf_input_for_attribute_propagation_to_output_.items()) {
// attribute_set_propagation_map_.add(&bnode.output_socket(output_index),
// &lf_node.input(lf_input_index));
//}
//lf_graph_info_->functions.append(std::move(lazy_function));
/* Continue as regular node. */
handle_geometry_node(bnode);
}
void handle_undefined_node(const bNode &bnode)