[Bf-blender-cvs] [7d3f3c6fd76] temp-geometry-nodes-evaluator-refactor: fixes
Jacques Lucke
noreply at git.blender.org
Wed Aug 31 16:08:08 CEST 2022
Commit: 7d3f3c6fd762ee14b6ac526b657cfff0d3ed0cff
Author: Jacques Lucke
Date: Wed Aug 31 13:02:54 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB7d3f3c6fd762ee14b6ac526b657cfff0d3ed0cff
fixes
===================================================================
M source/blender/modifiers/intern/MOD_nodes.cc
M source/blender/nodes/NOD_geometry_exec.hh
M source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
M source/blender/nodes/NOD_multi_function.hh
M source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
M source/blender/nodes/intern/node_geometry_exec.cc
M source/blender/nodes/intern/node_multi_function.cc
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index ef5808c2477..909b2c7b0f8 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -767,7 +767,7 @@ static void initialize_group_input(NodesModifierData &nmd,
const bNodeSocket &socket,
void *r_value)
{
- const bNodeSocketType &socket_type = *socket.typeinfo();
+ const bNodeSocketType &socket_type = *socket.typeinfo;
const eNodeSocketDatatype socket_data_type = static_cast<eNodeSocketDatatype>(socket.type);
if (nmd.settings.properties == nullptr) {
socket_type.get_geometry_nodes_cpp_value(socket, r_value);
@@ -776,11 +776,11 @@ static void initialize_group_input(NodesModifierData &nmd,
const IDProperty *property = IDP_GetPropertyFromGroup(nmd.settings.properties,
socket.identifier);
if (property == nullptr) {
- socket_type.get_geometry_nodes_cpp_value(bsocket, r_value);
+ socket_type.get_geometry_nodes_cpp_value(socket, r_value);
return;
}
- if (!id_property_type_matches_socket(bsocket, *property)) {
- socket_type.get_geometry_nodes_cpp_value(bsocket, r_value);
+ if (!id_property_type_matches_socket(socket, *property)) {
+ socket_type.get_geometry_nodes_cpp_value(socket, r_value);
return;
}
@@ -1144,7 +1144,7 @@ static GeometrySet compute_geometry(const bNodeTree &tree_ref,
const CPPType *type = interface_socket->typeinfo->geometry_nodes_cpp_type;
BLI_assert(type != nullptr); /* Todo */
void *value = allocator.allocate(type->size(), type->alignment());
- initialize_group_input(*nmd, *interface_socket, input_index, value);
+ initialize_group_input(*nmd, *interface_socket, value);
param_inputs[input_index] = {type, value};
inputs_to_destruct.append({type, value});
}
@@ -1288,7 +1288,7 @@ static void modifyGeometry(ModifierData *md,
use_orig_index_polys = CustomData_has_layer(&mesh.pdata, CD_ORIGINDEX);
}
- geometry_set = compute_geometry(tree_ref, output_node, std::move(geometry_set), nmd, ctx);
+ geometry_set = compute_geometry(tree, 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_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh
index 382a8c74cde..7f8b0a276ae 100644
--- a/source/blender/nodes/NOD_geometry_exec.hh
+++ b/source/blender/nodes/NOD_geometry_exec.hh
@@ -45,10 +45,13 @@ using geo_eval_log::NodeWarningType;
class GeoNodeExecParams {
private:
- GeoNodeExecParamsProvider *provider_;
+ const bNode &node_;
+ lf::Params ¶ms_;
+ const lf::Context &lf_context_;
public:
- GeoNodeExecParams(GeoNodeExecParamsProvider &provider) : provider_(&provider)
+ GeoNodeExecParams(const bNode &node, lf::Params ¶ms, const lf::Context &lf_context)
+ : node_(node), params_(params), lf_context_(lf_context)
{
}
@@ -138,10 +141,10 @@ class GeoNodeExecParams {
this->check_output_geometry_set(value);
}
const int index = this->get_output_index(identifier);
- const bNodeSocket *socket = node_.output_by_identifier(identifier).bsocket();
+ const bNodeSocket &socket = node_.output_by_identifier(identifier);
geo_eval_log::GeoTreeLogger &logger = this->get_local_tree_logger();
- logger.log_value(*node_.bnode(), *socket, {&value});
+ logger.log_value(node_, socket, {&value});
params_.set_output(index, std::forward<T>(value));
}
}
@@ -254,11 +257,11 @@ class GeoNodeExecParams {
int get_input_index(const StringRef identifier) const
{
int counter = 0;
- for (const InputSocketRef *socket : node_.inputs()) {
+ for (const bNodeSocket *socket : node_.input_sockets()) {
if (!socket->is_available()) {
continue;
}
- if (socket->identifier() == identifier) {
+ if (socket->identifier == identifier) {
return counter;
}
counter++;
@@ -270,11 +273,11 @@ class GeoNodeExecParams {
int get_output_index(const StringRef identifier) const
{
int counter = 0;
- for (const OutputSocketRef *socket : node_.outputs()) {
+ for (const bNodeSocket *socket : node_.output_sockets()) {
if (!socket->is_available()) {
continue;
}
- if (socket->identifier() == identifier) {
+ if (socket->identifier == identifier) {
return counter;
}
counter++;
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 ca4018df554..a3d6e3f21f7 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
@@ -6,7 +6,6 @@
#include "NOD_geometry_nodes_log.hh"
#include "NOD_multi_function.hh"
-#include "NOD_node_tree_ref.hh"
#include "BLI_context_stack.hh"
@@ -81,7 +80,7 @@ struct GeoNodesLFUserData : public lf::UserData {
};
struct GeometryNodeLazyFunctionMapping {
- Map<const SocketRef *, lf::Socket *> dummy_socket_map;
+ Map<const bNodeSocket *, lf::Socket *> dummy_socket_map;
Vector<lf::OutputSocket *> group_input_sockets;
};
@@ -90,7 +89,6 @@ struct GeometryNodesLazyFunctionResources {
Vector<std::unique_ptr<LazyFunction>> functions;
Vector<GMutablePointer> values_to_destruct;
Vector<std::unique_ptr<NodeMultiFunctions>> node_multi_functions;
- Vector<std::unique_ptr<NodeTreeRef>> sub_tree_refs;
~GeometryNodesLazyFunctionResources()
{
@@ -100,7 +98,7 @@ struct GeometryNodesLazyFunctionResources {
}
};
-void geometry_nodes_to_lazy_function_graph(const NodeTreeRef &tree,
+void geometry_nodes_to_lazy_function_graph(const bNodeTree &tree,
LazyFunctionGraph &graph,
GeometryNodesLazyFunctionResources &resources,
GeometryNodeLazyFunctionMapping &mapping);
diff --git a/source/blender/nodes/NOD_multi_function.hh b/source/blender/nodes/NOD_multi_function.hh
index a113e7a00ed..676bf03927e 100644
--- a/source/blender/nodes/NOD_multi_function.hh
+++ b/source/blender/nodes/NOD_multi_function.hh
@@ -6,8 +6,6 @@
#include "DNA_node_types.h"
-#include "NOD_node_tree_ref.hh"
-
namespace blender::nodes {
using namespace fn::multi_function_types;
@@ -60,9 +58,9 @@ class NodeMultiFunctions {
Map<const bNode *, Item> map_;
public:
- NodeMultiFunctions(const NodeTreeRef &tree);
+ NodeMultiFunctions(const bNodeTree &tree);
- const Item &try_get(const NodeRef &node) const;
+ const Item &try_get(const bNode &node) const;
};
/* -------------------------------------------------------------------- */
@@ -107,10 +105,10 @@ inline void NodeMultiFunctionBuilder::construct_and_set_matching_fn(Args &&...ar
/** \name #NodeMultiFunctions Inline Methods
* \{ */
-inline const NodeMultiFunctions::Item &NodeMultiFunctions::try_get(const NodeRef &node) const
+inline const NodeMultiFunctions::Item &NodeMultiFunctions::try_get(const bNode &node) const
{
static Item empty_item;
- const Item *item = map_.lookup_ptr(node.bnode());
+ const Item *item = map_.lookup_ptr(&node);
if (item == nullptr) {
return empty_item;
}
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 aaeaa7eb2bd..36f4007f794 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
@@ -34,9 +34,9 @@ static const CPPType *get_socket_cpp_type(const bNodeSocketType &typeinfo)
return type;
}
-static const CPPType *get_socket_cpp_type(const SocketRef &socket)
+static const CPPType *get_socket_cpp_type(const bNodeSocket &socket)
{
- return get_socket_cpp_type(*socket.bsocket()->typeinfo);
+ return get_socket_cpp_type(*socket.typeinfo);
}
static const CPPType *get_vector_type(const CPPType &type)
@@ -50,18 +50,18 @@ static const CPPType *get_vector_type(const CPPType &type)
return nullptr;
}
-static void lazy_function_interface_from_node(const NodeRef &node,
- Vector<const InputSocketRef *> &r_used_inputs,
- Vector<const OutputSocketRef *> &r_used_outputs,
+static void lazy_function_interface_from_node(const bNode &node,
+ Vector<const bNodeSocket *> &r_used_inputs,
+ Vector<const bNodeSocket *> &r_used_outputs,
Vector<lf::Input> &r_inputs,
Vector<lf::Output> &r_outputs)
{
const bool is_muted = node.is_muted();
- const bool supports_lazyness = node.bnode()->typeinfo->geometry_node_execute_supports_laziness ||
- node.bnode()->type == NODE_GROUP;
+ const bool supports_lazyness = node.typeinfo->geometry_node_execute_supports_laziness ||
+ node.is_group();
const lf::ValueUsage input_usage = supports_lazyness ? lf::ValueUsage::Maybe :
lf::ValueUsage::Used;
- for (const InputSocketRef *socket : node.inputs()) {
+ for (const bNodeSocket *socket : node.input_sockets()) {
if (!socket->is_available()) {
continue;
}
@@ -69,14 +69,14 @@ static void lazy_function_interface_from_node(const NodeRef &node,
if (type == nullptr) {
continue;
}
- if (socket->is_multi_input_socket() && !is_muted) {
+ if (socket->is_multi_input() && !is_muted) {
type = get_vector_type(*type);
}
/* TODO: Name may not be static. */
- r_inputs.append({socket->identifier().c_str(), *type, input_usage});
+ r_inputs.append({socket->identifier, *type, input_usage});
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list