diff --git a/source/blender/blenkernel/BKE_node.hh b/source/blender/blenkernel/BKE_node.hh index 20956ab8fd4..629cdae9934 100644 --- a/source/blender/blenkernel/BKE_node.hh +++ b/source/blender/blenkernel/BKE_node.hh @@ -205,8 +205,6 @@ struct bNodeSocketType { const blender::CPPType *base_cpp_type = nullptr; /* Get the value of this socket in a generic way. */ SocketGetCPPValueFunction get_base_cpp_value = nullptr; - /* Get geometry nodes cpp type. */ - const blender::CPPType *geometry_nodes_cpp_type = nullptr; /* Get geometry nodes cpp value. */ SocketGetGeometryNodesCPPValueFunction get_geometry_nodes_cpp_value = nullptr; /* Default value for this socket type. */ diff --git a/source/blender/nodes/NOD_geometry_nodes_bundle.hh b/source/blender/nodes/NOD_geometry_nodes_bundle.hh index 322d89ab296..5069ae79300 100644 --- a/source/blender/nodes/NOD_geometry_nodes_bundle.hh +++ b/source/blender/nodes/NOD_geometry_nodes_bundle.hh @@ -45,8 +45,7 @@ struct BundleItemValue { }; /** - * A bundle is a map containing keys and their corresponding values. Values are stored as the type - * they have in Geometry Nodes (#bNodeSocketType::geometry_nodes_cpp_type). + * A bundle is a map containing keys and their corresponding values. * * The API also supports working with paths in nested bundles like `root/child/data`. */ diff --git a/source/blender/nodes/intern/geometry_nodes_lazy_function.cc b/source/blender/nodes/intern/geometry_nodes_lazy_function.cc index 90c94e21537..1f683ed7111 100644 --- a/source/blender/nodes/intern/geometry_nodes_lazy_function.cc +++ b/source/blender/nodes/intern/geometry_nodes_lazy_function.cc @@ -72,21 +72,6 @@ using bke::node_tree_reference_lifetimes::ReferenceLifetimesInfo; using bke::node_tree_reference_lifetimes::ReferenceSetInfo; using bke::node_tree_reference_lifetimes::ReferenceSetType; -static const CPPType *get_socket_cpp_type(const bke::bNodeSocketType &typeinfo) -{ - const CPPType *type = typeinfo.geometry_nodes_cpp_type; - if (type == nullptr) { - return nullptr; - } - BLI_assert(type->has_special_member_functions); - return type; -} - -static const CPPType *get_socket_cpp_type(const bNodeSocket &socket) -{ - return get_socket_cpp_type(*socket.typeinfo); -} - /** * Checks which sockets of the node are available and creates corresponding inputs/outputs on the * lazy-function. @@ -102,13 +87,16 @@ static void lazy_function_interface_from_node(const bNode &node, if (!socket->is_available()) { continue; } - const CPPType *type = get_socket_cpp_type(*socket); - if (type == nullptr) { + if (!socket->typeinfo->geometry_nodes_default_value) { continue; } + const CPPType *type; if (socket->is_multi_input() && !is_muted) { type = &CPPType::get>(); } + else { + type = &CPPType::get(); + } r_lf_index_by_bsocket[socket->index_in_tree()] = r_inputs.append_and_get_index_as( socket->name, *type, input_usage); } @@ -116,12 +104,11 @@ static void lazy_function_interface_from_node(const bNode &node, if (!socket->is_available()) { continue; } - const CPPType *type = get_socket_cpp_type(*socket); - if (type == nullptr) { + if (!socket->typeinfo->geometry_nodes_default_value) { continue; } r_lf_index_by_bsocket[socket->index_in_tree()] = r_outputs.append_and_get_index_as( - socket->name, *type); + socket->name, CPPType::get()); } } @@ -352,11 +339,11 @@ class LazyFunctionForMultiInput : public LazyFunction { */ class LazyFunctionForRerouteNode : public LazyFunction { public: - LazyFunctionForRerouteNode(const CPPType &type) + LazyFunctionForRerouteNode() { debug_name_ = "Reroute"; - inputs_.append({"Input", type}); - outputs_.append({"Output", type}); + inputs_.append({"Input", CPPType::get()}); + outputs_.append({"Output", CPPType::get()}); } void execute_impl(lf::Params ¶ms, const lf::Context & /*context*/) const override @@ -613,11 +600,11 @@ const LazyFunction *build_implicit_conversion_lazy_function(const bke::bNodeSock const bke::bNodeSocketType &to_type, ResourceScope &scope) { - if (!from_type.geometry_nodes_cpp_type || !to_type.geometry_nodes_cpp_type) { + if (!from_type.geometry_nodes_default_value || !to_type.geometry_nodes_default_value) { return nullptr; } if (from_type.type == to_type.type) { - return &scope.construct(*from_type.geometry_nodes_cpp_type); + return &scope.construct(); } const bke::DataTypeConversions &conversions = bke::get_implicit_type_conversions(); const CPPType &from_base_type = *from_type.base_cpp_type; @@ -979,14 +966,13 @@ class LazyFunctionForGizmoNode : public LazyFunction { if (link->fromnode->is_dangling_reroute()) { continue; } - inputs_.append_and_get_index_as(gizmo_socket.identifier, - *gizmo_socket.typeinfo->geometry_nodes_cpp_type, - lf::ValueUsage::Maybe); + inputs_.append_and_get_index_as( + gizmo_socket.identifier, CPPType::get(), lf::ValueUsage::Maybe); gizmo_links.append(link); } for (const bNodeSocket *socket : bnode.input_sockets().drop_front(1)) { r_lf_index_by_bsocket[socket->index_in_tree()] = inputs_.append_and_get_index_as( - socket->identifier, *socket->typeinfo->geometry_nodes_cpp_type, lf::ValueUsage::Maybe); + socket->identifier, CPPType::get(), lf::ValueUsage::Maybe); } r_lf_index_by_bsocket[bnode.output_socket(0).index_in_tree()] = outputs_.append_and_get_index_as("Transform", CPPType::get()); @@ -1647,7 +1633,7 @@ static bool ignore_zone_bsocket(const bNodeSocket &bsocket) if (!bsocket.is_available()) { return true; } - if (!bsocket.typeinfo->geometry_nodes_cpp_type) { + if (!bsocket.typeinfo->geometry_nodes_default_value) { /* These are typically extend sockets. */ return true; } @@ -1666,25 +1652,22 @@ void initialize_zone_wrapper(const bNodeTreeZone &zone, continue; } zone_info.indices.inputs.main.append(r_inputs.append_and_get_index_as( - socket->name, *socket->typeinfo->geometry_nodes_cpp_type, lf::ValueUsage::Maybe)); + socket->name, CPPType::get(), lf::ValueUsage::Maybe)); } for (const bNodeLink *link : zone.border_links) { - zone_info.indices.inputs.border_links.append( - r_inputs.append_and_get_index_as(link->fromsock->name, - *link->tosock->typeinfo->geometry_nodes_cpp_type, - lf::ValueUsage::Maybe)); + zone_info.indices.inputs.border_links.append(r_inputs.append_and_get_index_as( + link->fromsock->name, CPPType::get(), lf::ValueUsage::Maybe)); } for (const bNodeSocket *socket : zone.output_node()->output_sockets()) { if (ignore_zone_bsocket(*socket)) { continue; } - const CPPType *cpp_type = socket->typeinfo->geometry_nodes_cpp_type; zone_info.indices.inputs.output_usages.append( r_inputs.append_and_get_index_as("Usage", CPPType::get(), lf::ValueUsage::Maybe)); zone_info.indices.outputs.main.append( - r_outputs.append_and_get_index_as(socket->name, *cpp_type)); + r_outputs.append_and_get_index_as(socket->name, CPPType::get())); } for ([[maybe_unused]] const bNodeSocket *socket : zone.input_node()->input_sockets()) { @@ -2068,7 +2051,7 @@ struct GeometryNodesLazyFunctionBuilder { if (zone.input_node() != nullptr) { for (const bNodeSocket *bsocket : zone.input_node()->input_sockets().drop_back(1)) { zone_info.indices.inputs.main.append(lf_zone_inputs.append_and_get_index( - &lf_graph.add_input(*bsocket->typeinfo->geometry_nodes_cpp_type, bsocket->name))); + &lf_graph.add_input(CPPType::get(), bsocket->name))); zone_info.indices.outputs.input_usages.append(lf_zone_outputs.append_and_get_index( &lf_graph.add_output(CPPType::get(), "Usage: " + StringRef(bsocket->name)))); } @@ -2081,7 +2064,7 @@ struct GeometryNodesLazyFunctionBuilder { for (const bNodeSocket *bsocket : zone.output_node()->output_sockets().drop_back(1)) { zone_info.indices.outputs.main.append(lf_zone_outputs.append_and_get_index( - &lf_graph.add_output(*bsocket->typeinfo->geometry_nodes_cpp_type, bsocket->name))); + &lf_graph.add_output(CPPType::get(), bsocket->name))); zone_info.indices.inputs.output_usages.append(lf_zone_inputs.append_and_get_index( &lf_graph.add_input(CPPType::get(), "Usage: " + StringRef(bsocket->name)))); } @@ -2239,8 +2222,8 @@ struct GeometryNodesLazyFunctionBuilder { if (ignore_zone_bsocket(*bsocket)) { continue; } - lf::GraphInputSocket &lf_input = lf_body_graph.add_input( - *bsocket->typeinfo->geometry_nodes_cpp_type, bsocket->name); + lf::GraphInputSocket &lf_input = lf_body_graph.add_input(CPPType::get(), + bsocket->name); lf::GraphOutputSocket &lf_input_usage = lf_body_graph.add_output( CPPType::get(), "Usage: " + StringRef(bsocket->name)); body_fn.indices.inputs.main.append(lf_body_inputs.append_and_get_index(&lf_input)); @@ -2259,7 +2242,7 @@ struct GeometryNodesLazyFunctionBuilder { continue; } lf::GraphOutputSocket &lf_output = lf_body_graph.add_output( - *bsocket->typeinfo->geometry_nodes_cpp_type, bsocket->name); + CPPType::get(), bsocket->name); lf::GraphInputSocket &lf_output_usage = lf_body_graph.add_input( CPPType::get(), "Usage: " + StringRef(bsocket->name)); graph_params.lf_inputs_by_bsocket.add(bsocket, &lf_output); @@ -2344,7 +2327,7 @@ struct GeometryNodesLazyFunctionBuilder { { for (const bNodeLink *border_link : zone.border_links) { r_indices.append(r_lf_graph_inputs.append_and_get_index( - &lf_graph.add_input(*border_link->tosock->typeinfo->geometry_nodes_cpp_type, + &lf_graph.add_input(CPPType::get(), StringRef("Link from ") + border_link->fromsock->name))); } } @@ -2829,9 +2812,8 @@ struct GeometryNodesLazyFunctionBuilder { { const Span interface_inputs = btree_.interface_inputs(); for (const bNodeTreeInterfaceSocket *interface_input : interface_inputs) { - const bke::bNodeSocketType *typeinfo = interface_input->socket_typeinfo(); lf::GraphInputSocket &lf_socket = lf_graph.add_input( - *typeinfo->geometry_nodes_cpp_type, interface_input->name ? interface_input->name : ""); + CPPType::get(), interface_input->name ? interface_input->name : ""); group_input_sockets_.append(&lf_socket); } } @@ -2844,14 +2826,10 @@ struct GeometryNodesLazyFunctionBuilder { { for (const bNodeTreeInterfaceSocket *interface_output : btree_.interface_outputs()) { const bke::bNodeSocketType *typeinfo = interface_output->socket_typeinfo(); - const CPPType &type = *typeinfo->geometry_nodes_cpp_type; lf::GraphOutputSocket &lf_socket = lf_graph.add_output( - type, interface_output->name ? interface_output->name : ""); - const void *default_value = typeinfo->geometry_nodes_default_value; - if (default_value == nullptr) { - default_value = type.default_value(); - } - lf_socket.set_default_value(default_value); + CPPType::get(), + interface_output->name ? interface_output->name : ""); + lf_socket.set_default_value(typeinfo->geometry_nodes_default_value); standard_group_output_sockets_.append(&lf_socket); } } @@ -3002,12 +2980,11 @@ struct GeometryNodesLazyFunctionBuilder { { const bNodeSocket &input_bsocket = bnode.input_socket(0); const bNodeSocket &output_bsocket = bnode.output_socket(0); - const CPPType *type = get_socket_cpp_type(input_bsocket); - if (type == nullptr) { + if (!input_bsocket.typeinfo->geometry_nodes_default_value) { return; } - auto &lazy_function = scope_.construct(*type); + auto &lazy_function = scope_.construct(); lf::Node &lf_node = graph_params.lf_graph.add_function(lazy_function); lf::InputSocket &lf_input = lf_node.input(0); @@ -3042,10 +3019,8 @@ struct GeometryNodesLazyFunctionBuilder { for (const int i : btree_.interface_outputs().index_range()) { const bNodeTreeInterfaceSocket &interface_output = *btree_.interface_outputs()[i]; const bNodeSocket &bsocket = bnode.input_socket(i); - const bke::bNodeSocketType *typeinfo = interface_output.socket_typeinfo(); - const CPPType &type = *typeinfo->geometry_nodes_cpp_type; lf::GraphOutputSocket &lf_socket = graph_params.lf_graph.add_output( - type, interface_output.name ? interface_output.name : ""); + CPPType::get(), interface_output.name ? interface_output.name : ""); lf_graph_outputs.append(&lf_socket); graph_params.lf_inputs_by_bsocket.add(&bsocket, &lf_socket); mapping_->bsockets_by_lf_socket_map.add(&lf_socket, &bsocket); @@ -3757,10 +3732,10 @@ struct GeometryNodesLazyFunctionBuilder { const Vector types_with_links = this->group_link_targets_by_type(from_bsocket); for (const TypeWithLinks &type_with_links : types_with_links) { - if (type_with_links.typeinfo == nullptr) { + if (!type_with_links.typeinfo) { continue; } - if (type_with_links.typeinfo->geometry_nodes_cpp_type == nullptr) { + if (!type_with_links.typeinfo->geometry_nodes_default_value) { continue; } const bke::bNodeSocketType &to_typeinfo = *type_with_links.typeinfo; @@ -4211,13 +4186,13 @@ const GeometryNodesLazyFunctionGraphInfo *ensure_geometry_nodes_lazy_function_gr } for (const bNodeTreeInterfaceSocket *interface_bsocket : btree.interface_inputs()) { const bke::bNodeSocketType *typeinfo = interface_bsocket->socket_typeinfo(); - if (!typeinfo || !typeinfo->geometry_nodes_cpp_type) { + if (!typeinfo || !typeinfo->geometry_nodes_default_value) { return nullptr; } } for (const bNodeTreeInterfaceSocket *interface_bsocket : btree.interface_outputs()) { const bke::bNodeSocketType *typeinfo = interface_bsocket->socket_typeinfo(); - if (!typeinfo || !typeinfo->geometry_nodes_cpp_type) { + if (!typeinfo || !typeinfo->geometry_nodes_default_value) { return nullptr; } } diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc index e6500b4f830..1064cc3b4aa 100644 --- a/source/blender/nodes/intern/node_socket.cc +++ b/source/blender/nodes/intern/node_socket.cc @@ -968,7 +968,6 @@ static bke::bNodeSocketType *make_socket_type_bool() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(bool *)r_value = ((bNodeSocketValueBoolean *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { const bool value = ((bNodeSocketValueBoolean *)socket_value)->value; return SocketValueVariant(value); @@ -987,7 +986,6 @@ static bke::bNodeSocketType *make_socket_type_rotation() const math::EulerXYZ euler(float3(typed_value.value_euler)); *static_cast(r_value) = math::to_quaternion(euler); }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { const auto &typed_value = *(bNodeSocketValueRotation *)socket_value; const math::EulerXYZ euler(float3(typed_value.value_euler)); @@ -1006,7 +1004,6 @@ static bke::bNodeSocketType *make_socket_type_matrix() socktype->get_base_cpp_value = [](const void * /*socket_value*/, void *r_value) { *static_cast(r_value) = float4x4::identity(); }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void * /*socket_value*/) { return SocketValueVariant(float4x4::identity()); }; @@ -1022,7 +1019,6 @@ static bke::bNodeSocketType *make_socket_type_bundle() socktype->get_base_cpp_value = [](const void * /*socket_value*/, void *r_value) { new (r_value) nodes::BundlePtr(); }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void * /*socket_value*/) { return SocketValueVariant::From(nodes::BundlePtr()); }; @@ -1038,7 +1034,6 @@ static bke::bNodeSocketType *make_socket_type_closure() socktype->get_base_cpp_value = [](const void * /*socket_value*/, void *r_value) { new (r_value) nodes::ClosurePtr(); }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void * /*socket_value*/) { return SocketValueVariant::From(nodes::ClosurePtr()); }; @@ -1054,7 +1049,6 @@ static bke::bNodeSocketType *make_socket_type_float(PropertySubType subtype) socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(float *)r_value = ((bNodeSocketValueFloat *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { const float value = ((bNodeSocketValueFloat *)socket_value)->value; return SocketValueVariant(value); @@ -1071,7 +1065,6 @@ static bke::bNodeSocketType *make_socket_type_int(PropertySubType subtype) socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(int *)r_value = ((bNodeSocketValueInt *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { const int value = ((bNodeSocketValueInt *)socket_value)->value; return SocketValueVariant(value); @@ -1088,7 +1081,6 @@ static bke::bNodeSocketType *make_socket_type_vector(PropertySubType subtype, co socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(blender::float3 *)r_value = ((bNodeSocketValueVector *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { const blender::float3 value = ((bNodeSocketValueVector *)socket_value)->value; return SocketValueVariant(value); @@ -1105,7 +1097,6 @@ static bke::bNodeSocketType *make_socket_type_rgba() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(blender::ColorGeometry4f *)r_value = ((bNodeSocketValueRGBA *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { const blender::ColorGeometry4f value = ((bNodeSocketValueRGBA *)socket_value)->value; return SocketValueVariant(value); @@ -1122,7 +1113,6 @@ static bke::bNodeSocketType *make_socket_type_string(PropertySubType subtype) socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { new (r_value) std::string(((bNodeSocketValueString *)socket_value)->value); }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { std::string value = ((bNodeSocketValueString *)socket_value)->value; return SocketValueVariant(value); @@ -1139,7 +1129,6 @@ static bke::bNodeSocketType *make_socket_type_menu() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(int *)r_value = ((bNodeSocketValueMenu *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { const int value = ((bNodeSocketValueMenu *)socket_value)->value; return SocketValueVariant(value); @@ -1156,7 +1145,6 @@ static bke::bNodeSocketType *make_socket_type_object() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(Object **)r_value = ((bNodeSocketValueObject *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { Object *object = static_cast(socket_value)->value; return SocketValueVariant::From(object); @@ -1174,7 +1162,6 @@ static bke::bNodeSocketType *make_socket_type_geometry() socktype->get_base_cpp_value = [](const void * /*socket_value*/, void *r_value) { new (r_value) blender::bke::GeometrySet(); }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void * /*socket_value*/) { return SocketValueVariant::From(bke::GeometrySet()); }; @@ -1190,7 +1177,6 @@ static bke::bNodeSocketType *make_socket_type_collection() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(Collection **)r_value = ((bNodeSocketValueCollection *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { Collection *collection = static_cast(socket_value)->value; return SocketValueVariant::From(collection); @@ -1208,7 +1194,6 @@ static bke::bNodeSocketType *make_socket_type_texture() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(Tex **)r_value = ((bNodeSocketValueTexture *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { Tex *texture = static_cast(socket_value)->value; return SocketValueVariant::From(texture); @@ -1225,7 +1210,6 @@ static bke::bNodeSocketType *make_socket_type_image() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(Image **)r_value = ((bNodeSocketValueImage *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { Image *image = static_cast(socket_value)->value; return SocketValueVariant::From(image); @@ -1243,7 +1227,6 @@ static bke::bNodeSocketType *make_socket_type_material() socktype->get_base_cpp_value = [](const void *socket_value, void *r_value) { *(Material **)r_value = ((bNodeSocketValueMaterial *)socket_value)->value; }; - socktype->geometry_nodes_cpp_type = &blender::CPPType::get(); socktype->get_geometry_nodes_cpp_value = [](const void *socket_value) { Material *material = static_cast(socket_value)->value; return SocketValueVariant::From(material);