[Bf-blender-cvs] [91a57c9cc29] temp-geometry-nodes-evaluator-refactor: cleanup
Jacques Lucke
noreply at git.blender.org
Thu Sep 8 17:22:32 CEST 2022
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. @@
More information about the Bf-blender-cvs
mailing list