Geometry Nodes: make evaluation and logging system aware of zones #109029

Closed
Jacques Lucke wants to merge 93 commits from JacquesLucke/blender:zone-evaluation into main

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

View File

@ -1688,14 +1688,14 @@ struct GeometryNodesLazyFunctionGraphBuilder {
zone_info.lf_graph = &lf_graph_info_->scope.construct<lf::Graph>();
lf::Node *lf_zone_input_node = nullptr;
lf::Node *lf_main_input_usage_node = nullptr;
if (zone.input_node != nullptr) {
lf_zone_input_node = &this->build_simulation_zone_input_node(zone, zone_info);
lf_main_input_usage_node = &this->build_simulation_zone_input_usage_node(zone, zone_info);
}
lf::Node &lf_border_link_input_node = this->build_zone_border_links_input_node(zone,
zone_info);
lf::Node &lf_zone_output_node = this->build_simulation_zone_output_node(zone, zone_info);
lf::Node &lf_main_input_usage_node = this->build_simulation_zone_input_usage_node(zone,
zone_info);
lf::Node &lf_main_output_usage_node = this->build_simulation_zone_output_usage_node(zone,
zone_info);
lf::Node &lf_border_link_usage_node = this->build_border_link_input_usage_node(zone,
@ -1706,8 +1706,10 @@ struct GeometryNodesLazyFunctionGraphBuilder {
lf::Node &lf_node = zone_info.lf_graph->add_function(*lazy_function);
lf_graph_info_->functions.append(std::move(lazy_function));
for (const int i : lf_main_input_usage_node.inputs().index_range()) {
zone_info.lf_graph->add_link(lf_node.output(0), lf_main_input_usage_node.input(i));
if (lf_main_input_usage_node) {
for (const int i : lf_main_input_usage_node->inputs().index_range()) {
zone_info.lf_graph->add_link(lf_node.output(0), lf_main_input_usage_node->input(i));
}
}
return lf_node;
}();
@ -1908,9 +1910,11 @@ struct GeometryNodesLazyFunctionGraphBuilder {
lf_zone_outputs.extend(lf_zone_output_node.inputs());
zone_info.main_output_indices = lf_zone_outputs.index_range();
lf_zone_outputs.extend(lf_main_input_usage_node.inputs());
zone_info.main_input_usage_indices = lf_zone_outputs.index_range().take_back(
lf_main_input_usage_node.inputs().size());
if (lf_main_input_usage_node) {
lf_zone_outputs.extend(lf_main_input_usage_node->inputs());
zone_info.main_input_usage_indices = lf_zone_outputs.index_range().take_back(
lf_main_input_usage_node->inputs().size());
}
lf_zone_outputs.extend(lf_border_link_usage_node.inputs());
zone_info.border_link_input_usage_indices = lf_zone_outputs.index_range().take_back(