diff options
author | Jacques Lucke <jacques@blender.org> | 2021-08-02 11:34:50 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-08-02 11:34:50 +0300 |
commit | de91cdd930614d5396ca4691b37cc0502481ead7 (patch) | |
tree | 9259a0b5976ff6f3441a56d20dd4fd7599d6dc53 /source/blender/modifiers | |
parent | 48722e8971133dbe14ecc6825a2451637df77eab (diff) |
Cleanup: separate base and geometry nodes specific socket cpp type
This simplifies changing how geometry nodes handles different socket types
without affecting other systems.
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r-- | source/blender/modifiers/intern/MOD_nodes.cc | 8 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_nodes_evaluator.cc | 15 |
2 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 5fa11ffdd10..3853b345c14 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -721,17 +721,17 @@ static void initialize_group_input(NodesModifierData &nmd, return; } if (nmd.settings.properties == nullptr) { - blender::nodes::socket_cpp_value_get(socket, r_value); + socket.typeinfo->get_geometry_nodes_cpp_value(socket, r_value); return; } const IDProperty *property = IDP_GetPropertyFromGroup(nmd.settings.properties, socket.identifier); if (property == nullptr) { - blender::nodes::socket_cpp_value_get(socket, r_value); + socket.typeinfo->get_geometry_nodes_cpp_value(socket, r_value); return; } if (!property_type->is_correct_type(*property)) { - blender::nodes::socket_cpp_value_get(socket, r_value); + socket.typeinfo->get_geometry_nodes_cpp_value(socket, r_value); return; } property_type->init_cpp_value(*property, r_value); @@ -883,7 +883,7 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree, /* Initialize remaining group inputs. */ for (const OutputSocketRef *socket : remaining_input_sockets) { - const CPPType &cpp_type = *blender::nodes::socket_cpp_type_get(*socket->typeinfo()); + const CPPType &cpp_type = *socket->typeinfo()->get_geometry_nodes_cpp_type(); void *value_in = allocator.allocate(cpp_type.size(), cpp_type.alignment()); initialize_group_input(*nmd, *socket->bsocket(), cpp_type, value_in); group_inputs.add_new({root_context, socket}, {cpp_type, value_in}); diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc index e652eb8353d..2157092d639 100644 --- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc +++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc @@ -294,7 +294,11 @@ class LockedNode : NonCopyable, NonMovable { static const CPPType *get_socket_cpp_type(const SocketRef &socket) { - const CPPType *type = nodes::socket_cpp_type_get(*socket.typeinfo()); + const bNodeSocketType *typeinfo = socket.typeinfo(); + if (typeinfo->get_geometry_nodes_cpp_type == nullptr) { + return nullptr; + } + const CPPType *type = typeinfo->get_geometry_nodes_cpp_type(); if (type == nullptr) { return nullptr; } @@ -310,6 +314,12 @@ static const CPPType *get_socket_cpp_type(const DSocket socket) return get_socket_cpp_type(*socket.socket_ref()); } +static void get_socket_value(const SocketRef &socket, void *r_value) +{ + const bNodeSocketType *typeinfo = socket.typeinfo(); + typeinfo->get_geometry_nodes_cpp_value(*socket.bsocket(), r_value); +} + static bool node_supports_laziness(const DNode node) { return node->typeinfo()->geometry_node_execute_supports_laziness; @@ -1363,10 +1373,9 @@ class GeometryNodesEvaluator { { LinearAllocator<> &allocator = local_allocators_.local(); - bNodeSocket *bsocket = socket->bsocket(); const CPPType &type = *get_socket_cpp_type(socket); void *buffer = allocator.allocate(type.size(), type.alignment()); - blender::nodes::socket_cpp_value_get(*bsocket, buffer); + get_socket_value(*socket.socket_ref(), buffer); if (type == required_type) { return {type, buffer}; |