[Bf-blender-cvs] [7b71ab3fe0d] temp-geometry-nodes-evaluator-refactor: progress
Jacques Lucke
noreply at git.blender.org
Tue Sep 6 20:09:57 CEST 2022
Commit: 7b71ab3fe0d3a1a4c61dce66936a59a8bfb5b445
Author: Jacques Lucke
Date: Tue Sep 6 20:06:44 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB7b71ab3fe0d3a1a4c61dce66936a59a8bfb5b445
progress
===================================================================
M source/blender/modifiers/intern/MOD_nodes.cc
M source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
M source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 60e82d67855..b562f47d0a9 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -1137,9 +1137,11 @@ static GeometrySet compute_geometry(const bNodeTree &btree,
Array<bool> param_set_outputs(graph_outputs.size(), false);
blender::nodes::GeometryNodesLazyFunctionLogger lf_logger(lf_graph_info);
+ blender::nodes::GeometryNodesLazyFunctionSideEffectProvider lf_side_effect_provider(
+ lf_graph_info);
lf::GraphExecutor graph_executor{
- lf_graph_info.graph, graph_inputs, graph_outputs, &lf_logger, nullptr};
+ lf_graph_info.graph, graph_inputs, graph_outputs, &lf_logger, &lf_side_effect_provider};
blender::nodes::GeoNodesModifierData geo_nodes_modifier_data;
geo_nodes_modifier_data.depsgraph = ctx->depsgraph;
diff --git a/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh b/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
index dfd978c7ff4..2e7b08fbad6 100644
--- a/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
@@ -118,6 +118,22 @@ class GeometryNodesLazyFunctionLogger : public fn::lazy_function::GraphExecutor:
GPointer value) const override;
};
+class GeometryNodesLazyFunctionSideEffectProvider
+ : public fn::lazy_function::GraphExecutor::SideEffectProvider {
+ private:
+ const GeometryNodesLazyFunctionGraphInfo &lf_graph_info_;
+
+ public:
+ GeometryNodesLazyFunctionSideEffectProvider(
+ const GeometryNodesLazyFunctionGraphInfo &lf_graph_info)
+ : lf_graph_info_(lf_graph_info)
+ {
+ }
+
+ Vector<const lf::FunctionNode *> get_nodes_with_side_effects(
+ const lf::Context &context) const override;
+};
+
const GeometryNodesLazyFunctionGraphInfo &ensure_geometry_nodes_lazy_function_graph(
const bNodeTree &btree);
diff --git a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
index c99499d9c2f..3162fb1066f 100644
--- a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
+++ b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
@@ -457,6 +457,7 @@ class LazyFunctionForGroupNode : public LazyFunction {
private:
const bNode &group_node_;
std::optional<GeometryNodesLazyFunctionLogger> lf_logger_;
+ std::optional<GeometryNodesLazyFunctionSideEffectProvider> lf_side_effect_provider_;
std::optional<lf::GraphExecutor> graph_executor_;
public:
@@ -495,11 +496,12 @@ class LazyFunctionForGroupNode : public LazyFunction {
// std::cout << lf_graph_info.graph.to_dot() << "\n";
lf_logger_.emplace(lf_graph_info);
+ lf_side_effect_provider_.emplace(lf_graph_info);
graph_executor_.emplace(lf_graph_info.graph,
std::move(graph_inputs),
std::move(graph_outputs),
&*lf_logger_,
- nullptr);
+ &*lf_side_effect_provider_);
}
void execute_impl(lf::Params ¶ms, const lf::Context &context) const override
@@ -1135,4 +1137,26 @@ void GeometryNodesLazyFunctionLogger::log_socket_value(const fn::lazy_function::
}
}
+Vector<const lf::FunctionNode *> GeometryNodesLazyFunctionSideEffectProvider::
+ get_nodes_with_side_effects(const lf::Context &context) const
+{
+ GeoNodesLFUserData *user_data = dynamic_cast<GeoNodesLFUserData *>(context.user_data);
+ BLI_assert(user_data != nullptr);
+ const GeoNodesModifierData &modifier_data = *user_data->modifier_data;
+
+ Vector<const lf::FunctionNode *> side_effect_nodes;
+
+ /* TODO: Get nodes from context. */
+ for (const lf::Node *node : lf_graph_info_.graph.nodes()) {
+ if (node->is_function()) {
+ const lf::FunctionNode &function_node = *static_cast<const lf::FunctionNode *>(node);
+ if (dynamic_cast<const LazyFunctionForViewerNode *>(&function_node.function())) {
+ side_effect_nodes.append(&function_node);
+ }
+ }
+ }
+
+ return side_effect_nodes;
+}
+
} // namespace blender::nodes
More information about the Bf-blender-cvs
mailing list