Commit: 91a57c9cc29333196b8b4c47605d864265ec7739 Author: Jacques Lucke Date: Thu Sep 8 13:18:30 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB91a57c9cc29333196b8b4c47605d864265ec7739
cleanup =================================================================== M source/blender/functions/FN_lazy_function.hh M source/blender/functions/intern/lazy_function.cc M source/blender/functions/tests/FN_lazy_function_test.cc 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/functions/FN_lazy_function.hh b/source/blender/functions/FN_lazy_function.hh index 3a332df34ce..8ec914e5dd5 100644 --- a/source/blender/functions/FN_lazy_function.hh +++ b/source/blender/functions/FN_lazy_function.hh @@ -116,7 +116,7 @@ struct Output { class LazyFunction { protected: - const char *static_name_ = "Unnamed Function"; + const char *debug_name_ = "Unnamed Function"; Vector<Input> inputs_; Vector<Output> outputs_; diff --git a/source/blender/functions/intern/lazy_function.cc b/source/blender/functions/intern/lazy_function.cc index 7de733d5a35..6d0dab40a3c 100644 --- a/source/blender/functions/intern/lazy_function.cc +++ b/source/blender/functions/intern/lazy_function.cc @@ -12,7 +12,7 @@ namespace blender::fn::lazy_function { std::string LazyFunction::name() const { - return static_name_; + return debug_name_; } std::string LazyFunction::input_name(int index) const diff --git a/source/blender/functions/tests/FN_lazy_function_test.cc b/source/blender/functions/tests/FN_lazy_function_test.cc index c8e0809b334..fcea334fcba 100644 --- a/source/blender/functions/tests/FN_lazy_function_test.cc +++ b/source/blender/functions/tests/FN_lazy_function_test.cc @@ -15,7 +15,7 @@ class AddLazyFunction : public LazyFunction { public: AddLazyFunction() { - static_name_ = "Add"; + debug_name_ = "Add"; inputs_.append({"A", CPPType::get<int>()}); inputs_.append({"B", CPPType::get<int>()}); outputs_.append({"Result", CPPType::get<int>()}); @@ -37,7 +37,7 @@ class StoreValueFunction : public LazyFunction { public: StoreValueFunction(int *dst1, int *dst2) : dst1_(dst1), dst2_(dst2) { - static_name_ = "Store Value"; + debug_name_ = "Store Value"; inputs_.append({"A", CPPType::get<int>()}); inputs_.append({"B", CPPType::get<int>(), ValueUsage::Maybe}); } diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 8396aff1156..6a51b566a37 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -845,12 +845,12 @@ static Vector<SpaceSpreadsheet *> find_spreadsheet_editors(Main *bmain) static const lf::FunctionNode &find_viewer_lf_node(const bNode &viewer_bnode) { return *blender::nodes::ensure_geometry_nodes_lazy_function_graph(viewer_bnode.owner_tree()) - .mapping.viewer_node_map.lookup(&viewer_bnode); + ->mapping.viewer_node_map.lookup(&viewer_bnode); } static const lf::FunctionNode &find_group_lf_node(const bNode &group_bnode) { return *blender::nodes::ensure_geometry_nodes_lazy_function_graph(group_bnode.owner_tree()) - .mapping.group_node_map.lookup(&group_bnode); + ->mapping.group_node_map.lookup(&group_bnode); } static void find_side_effect_nodes_for_spreadsheet( @@ -1118,15 +1118,14 @@ static void store_output_attributes(GeometrySet &geometry, /** * Evaluate a node group to compute the output geometry. */ -static GeometrySet compute_geometry(const bNodeTree &btree, - const bNode &output_node, - GeometrySet input_geometry_set, - NodesModifierData *nmd, - const ModifierEvalContext *ctx) +static GeometrySet compute_geometry( + const bNodeTree &btree, + const blender::nodes::GeometryNodesLazyFunctionGraphInfo &lf_graph_info, + const bNode &output_node, + GeometrySet input_geometry_set, + NodesModifierData *nmd, + const ModifierEvalContext *ctx) { - - const blender::nodes::GeometryNodesLazyFunctionGraphInfo &lf_graph_info = - blender::nodes::ensure_geometry_nodes_lazy_function_graph(btree); const blender::nodes::GeometryNodeLazyFunctionMapping &mapping = lf_graph_info.mapping; Vector<const lf::OutputSocket *> graph_inputs; @@ -1284,13 +1283,6 @@ static void modifyGeometry(ModifierData *md, tree.ensure_topology_cache(); check_property_socket_sync(ctx->object, md); - /* Todo: Check for link cycles recursively. */ - if (tree.has_link_cycle()) { - BKE_modifier_set_error(ctx->object, md, "Node group has cycles"); - geometry_set.clear(); - return; - } - const bNode *output_node = tree.group_output_node(); if (output_node == nullptr) { BKE_modifier_set_error(ctx->object, md, "Node group must have a group output node"); @@ -1312,6 +1304,14 @@ static void modifyGeometry(ModifierData *md, return; } + const blender::nodes::GeometryNodesLazyFunctionGraphInfo *lf_graph_info = + blender::nodes::ensure_geometry_nodes_lazy_function_graph(tree); + if (lf_graph_info == nullptr) { + BKE_modifier_set_error(ctx->object, md, "Cannot evaluate node group"); + geometry_set.clear(); + return; + } + bool use_orig_index_verts = false; bool use_orig_index_edges = false; bool use_orig_index_polys = false; @@ -1322,7 +1322,8 @@ static void modifyGeometry(ModifierData *md, use_orig_index_polys = CustomData_has_layer(&mesh.pdata, CD_ORIGINDEX); } - geometry_set = compute_geometry(tree, *output_node, std::move(geometry_set), nmd, ctx); + geometry_set = compute_geometry( + tree, *lf_graph_info, *output_node, std::move(geometry_set), nmd, ctx); if (geometry_set.has_mesh()) { /* Add #CD_ORIGINDEX layers if they don't exist already. This is required because the 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 8b05d56e596..a81d8689a69 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 @@ -85,7 +85,7 @@ class GeometryNodesLazyFunctionSideEffectProvider const lf::Context &context) const override; }; -const GeometryNodesLazyFunctionGraphInfo &ensure_geometry_nodes_lazy_function_graph( +const GeometryNodesLazyFunctionGraphInfo *ensure_geometry_nodes_lazy_function_graph( const bNodeTree &btree); } // namespace blender::nodes 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 2c7c5cc932f..1f8dadc22de 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 @@ -73,7 +73,6 @@ static void lazy_function_interface_from_node(const bNode &node, if (socket->is_multi_input() && !is_muted) { type = get_vector_type(*type); } - /* TODO: Name may not be static. */ r_inputs.append({socket->identifier, *type, input_usage}); r_used_inputs.append(socket); } @@ -103,7 +102,7 @@ class LazyFunctionForGeometryNode : public LazyFunction { Vector<const bNodeSocket *> &r_used_outputs) : node_(node) { - static_name_ = node.name; + debug_name_ = node.name; lazy_function_interface_from_node(node, r_used_inputs, r_used_outputs, inputs_, outputs_); } @@ -137,7 +136,7 @@ class LazyFunctionForMultiInput : public LazyFunction { public: LazyFunctionForMultiInput(const bNodeSocket &socket) { - static_name_ = "Multi Input"; + debug_name_ = "Multi Input"; base_type_ = get_socket_cpp_type(socket); BLI_assert(base_type_ != nullptr); BLI_assert(socket.is_multi_input()); @@ -178,7 +177,7 @@ class LazyFunctionForRerouteNode : public LazyFunction { public: LazyFunctionForRerouteNode(const CPPType &type) { - static_name_ = "Reroute"; + debug_name_ = "Reroute"; inputs_.append({"Input", type}); outputs_.append({"Output", type}); } @@ -272,7 +271,7 @@ class LazyFunctionForMutedNode : public LazyFunction { Vector<const bNodeSocket *> &r_used_inputs, Vector<const bNodeSocket *> &r_used_outputs) { - static_name_ = "Muted"; + debug_name_ = "Muted"; lazy_function_interface_from_node(node, r_used_inputs, r_used_outputs, inputs_, outputs_); for (lf::Input &fn_input : inputs_) { fn_input.usage = lf::ValueUsage::Maybe; @@ -354,7 +353,7 @@ class LazyFunctionForMultiFunctionConversion : public LazyFunction { Vector<const bNodeSocket *> &&target_sockets) : fn_(fn), from_type_(from), to_type_(to), target_sockets_(std::move(target_sockets)) { - static_name_ = "Convert"; + debug_name_ = "Convert"; inputs_.append({"From", from}); outputs_.append({"To", to}); } @@ -389,7 +388,7 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction { : node_(node), fn_item_(std::move(fn_item)) { BLI_assert(fn_item_.fn != nullptr); - static_name_ = node.name; + debug_name_ = node.name; lazy_function_interface_from_node(node, r_used_inputs, r_used_outputs, inputs_, outputs_); for (const lf::Input &fn_input : inputs_) { input_types_.append(dynamic_cast<const ValueOrFieldCPPType *>(fn_input.type)); @@ -426,7 +425,7 @@ class LazyFunctionForComplexInput : public LazyFunction { LazyFunctionForComplexInput(const CPPType &type, std::function<void(void *)> init_fn) : init_fn_(std::move(init_fn)) { - static_name_ = "Input"; + debug_name_ = "Input"; outputs_.append({"Output", type}); } @@ -447,7 +446,7 @@ class LazyFunctionForViewerNode : public LazyFunction { LazyFunctionForViewerNode(const bNode &bnode, Vector<const bNodeSocket *> &r_used_inputs) : bnode_(bnode) { - static_name_ = "Viewer"; + debug_name_ = "Viewer"; Vector<const bNodeSocket *> dummy_used_outputs; lazy_function_interface_from_node(bnode, r_used_inputs, dummy_used_outputs, inputs_, outputs_); if (!r_used_inputs[1]->is_directly_linked()) { @@ -488,19 +487,17 @@ class LazyFunctionForGroupNode : public LazyFunction { public: LazyFunctionForGroupNode(const bNode &group_node, + const GeometryNodesLazyFunctionGraphInfo &lf_graph_info, Vector<const bNodeSocket *> &r_used_inputs, @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs