Cleanup: use simple data member instead of callback
This really doesn't have to be a callback currently, since it is always the same `CPPType` for a socket type.
This commit is contained in:
parent
c850189adf
commit
31864a40ba
|
@ -121,12 +121,11 @@ class MFDataType;
|
|||
} // namespace fn
|
||||
} // namespace blender
|
||||
|
||||
using CPPTypeHandle = blender::fn::CPPType;
|
||||
using NodeMultiFunctionBuildFunction = void (*)(blender::nodes::NodeMultiFunctionBuilder &builder);
|
||||
using NodeGeometryExecFunction = void (*)(blender::nodes::GeoNodeExecParams params);
|
||||
using NodeDeclareFunction = void (*)(blender::nodes::NodeDeclarationBuilder &builder);
|
||||
using SocketGetCPPTypeFunction = const blender::fn::CPPType *(*)();
|
||||
using SocketGetCPPValueFunction = void (*)(const struct bNodeSocket &socket, void *r_value);
|
||||
using SocketGetGeometryNodesCPPTypeFunction = const blender::fn::CPPType *(*)();
|
||||
using SocketGetGeometryNodesCPPValueFunction = void (*)(const struct bNodeSocket &socket,
|
||||
void *r_value);
|
||||
|
||||
|
@ -138,6 +137,7 @@ typedef void *SocketGetCPPTypeFunction;
|
|||
typedef void *SocketGetGeometryNodesCPPTypeFunction;
|
||||
typedef void *SocketGetGeometryNodesCPPValueFunction;
|
||||
typedef void *SocketGetCPPValueFunction;
|
||||
typedef struct CPPTypeHandle CPPTypeHandle;
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -197,11 +197,11 @@ typedef struct bNodeSocketType {
|
|||
void (*free_self)(struct bNodeSocketType *stype);
|
||||
|
||||
/* Return the CPPType of this socket. */
|
||||
SocketGetCPPTypeFunction get_base_cpp_type;
|
||||
const CPPTypeHandle *base_cpp_type;
|
||||
/* Get the value of this socket in a generic way. */
|
||||
SocketGetCPPValueFunction get_base_cpp_value;
|
||||
/* Get geometry nodes cpp type. */
|
||||
SocketGetGeometryNodesCPPTypeFunction get_geometry_nodes_cpp_type;
|
||||
const CPPTypeHandle *geometry_nodes_cpp_type;
|
||||
/* Get geometry nodes cpp value. */
|
||||
SocketGetGeometryNodesCPPValueFunction get_geometry_nodes_cpp_value;
|
||||
} bNodeSocketType;
|
||||
|
|
|
@ -739,7 +739,7 @@ static void initialize_group_input(NodesModifierData &nmd,
|
|||
if (use_attribute) {
|
||||
const StringRef attribute_name{IDP_String(property_attribute_name)};
|
||||
auto attribute_input = std::make_shared<blender::bke::AttributeFieldInput>(
|
||||
attribute_name, *socket_type.get_base_cpp_type());
|
||||
attribute_name, *socket_type.base_cpp_type);
|
||||
new (r_value) blender::fn::GField(std::move(attribute_input), 0);
|
||||
}
|
||||
else {
|
||||
|
@ -963,7 +963,7 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree,
|
|||
|
||||
/* Initialize remaining group inputs. */
|
||||
for (const OutputSocketRef *socket : remaining_input_sockets) {
|
||||
const CPPType &cpp_type = *socket->typeinfo()->get_geometry_nodes_cpp_type();
|
||||
const CPPType &cpp_type = *socket->typeinfo()->geometry_nodes_cpp_type;
|
||||
void *value_in = allocator.allocate(cpp_type.size(), cpp_type.alignment());
|
||||
initialize_group_input(*nmd, *socket, value_in);
|
||||
group_inputs.add_new({root_context, socket}, {cpp_type, value_in});
|
||||
|
|
|
@ -309,10 +309,10 @@ class LockedNode : NonCopyable, NonMovable {
|
|||
static const CPPType *get_socket_cpp_type(const SocketRef &socket)
|
||||
{
|
||||
const bNodeSocketType *typeinfo = socket.typeinfo();
|
||||
if (typeinfo->get_geometry_nodes_cpp_type == nullptr) {
|
||||
if (typeinfo->geometry_nodes_cpp_type == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
const CPPType *type = typeinfo->get_geometry_nodes_cpp_type();
|
||||
const CPPType *type = typeinfo->geometry_nodes_cpp_type;
|
||||
if (type == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -1466,7 +1466,6 @@ class GeometryNodesEvaluator {
|
|||
from_type.copy_construct(from_value, to_value);
|
||||
return;
|
||||
}
|
||||
|
||||
const FieldCPPType *from_field_type = dynamic_cast<const FieldCPPType *>(&from_type);
|
||||
const FieldCPPType *to_field_type = dynamic_cast<const FieldCPPType *>(&to_type);
|
||||
|
||||
|
|
|
@ -288,7 +288,7 @@ void GeoNodeExecParams::check_input_access(StringRef identifier,
|
|||
BLI_assert_unreachable();
|
||||
}
|
||||
else if (requested_type != nullptr) {
|
||||
const CPPType &expected_type = *found_socket->typeinfo->get_geometry_nodes_cpp_type();
|
||||
const CPPType &expected_type = *found_socket->typeinfo->geometry_nodes_cpp_type;
|
||||
if (*requested_type != expected_type) {
|
||||
std::cout << "The requested type '" << requested_type->name() << "' is incorrect. Expected '"
|
||||
<< expected_type.name() << "'.\n";
|
||||
|
@ -328,7 +328,7 @@ void GeoNodeExecParams::check_output_access(StringRef identifier, const CPPType
|
|||
BLI_assert_unreachable();
|
||||
}
|
||||
else {
|
||||
const CPPType &expected_type = *found_socket->typeinfo->get_geometry_nodes_cpp_type();
|
||||
const CPPType &expected_type = *found_socket->typeinfo->geometry_nodes_cpp_type;
|
||||
if (value_type != expected_type) {
|
||||
std::cout << "The value type '" << value_type.name() << "' is incorrect. Expected '"
|
||||
<< expected_type.name() << "'.\n";
|
||||
|
|
|
@ -697,13 +697,11 @@ static bNodeSocketType *make_socket_type_virtual()
|
|||
static bNodeSocketType *make_socket_type_bool()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_BOOLEAN, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<bool>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<bool>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(bool *)r_value = ((bNodeSocketValueBoolean *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = []() {
|
||||
return &blender::fn::CPPType::get<blender::fn::Field<bool>>();
|
||||
};
|
||||
socktype->geometry_nodes_cpp_type = &blender::fn::CPPType::get<blender::fn::Field<bool>>();
|
||||
socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
bool value;
|
||||
socket.typeinfo->get_base_cpp_value(socket, &value);
|
||||
|
@ -715,13 +713,11 @@ static bNodeSocketType *make_socket_type_bool()
|
|||
static bNodeSocketType *make_socket_type_float(PropertySubType subtype)
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_FLOAT, subtype);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<float>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<float>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(float *)r_value = ((bNodeSocketValueFloat *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = []() {
|
||||
return &blender::fn::CPPType::get<blender::fn::Field<float>>();
|
||||
};
|
||||
socktype->geometry_nodes_cpp_type = &blender::fn::CPPType::get<blender::fn::Field<float>>();
|
||||
socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
float value;
|
||||
socket.typeinfo->get_base_cpp_value(socket, &value);
|
||||
|
@ -733,13 +729,11 @@ static bNodeSocketType *make_socket_type_float(PropertySubType subtype)
|
|||
static bNodeSocketType *make_socket_type_int(PropertySubType subtype)
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_INT, subtype);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<int>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<int>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(int *)r_value = ((bNodeSocketValueInt *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = []() {
|
||||
return &blender::fn::CPPType::get<blender::fn::Field<int>>();
|
||||
};
|
||||
socktype->geometry_nodes_cpp_type = &blender::fn::CPPType::get<blender::fn::Field<int>>();
|
||||
socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
int value;
|
||||
socket.typeinfo->get_base_cpp_value(socket, &value);
|
||||
|
@ -751,13 +745,12 @@ static bNodeSocketType *make_socket_type_int(PropertySubType subtype)
|
|||
static bNodeSocketType *make_socket_type_vector(PropertySubType subtype)
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_VECTOR, subtype);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<blender::float3>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<blender::float3>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(blender::float3 *)r_value = ((bNodeSocketValueVector *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = []() {
|
||||
return &blender::fn::CPPType::get<blender::fn::Field<blender::float3>>();
|
||||
};
|
||||
socktype->geometry_nodes_cpp_type =
|
||||
&blender::fn::CPPType::get<blender::fn::Field<blender::float3>>();
|
||||
socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
blender::float3 value;
|
||||
socket.typeinfo->get_base_cpp_value(socket, &value);
|
||||
|
@ -769,15 +762,12 @@ static bNodeSocketType *make_socket_type_vector(PropertySubType subtype)
|
|||
static bNodeSocketType *make_socket_type_rgba()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_RGBA, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() {
|
||||
return &blender::fn::CPPType::get<blender::ColorGeometry4f>();
|
||||
};
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<blender::ColorGeometry4f>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(blender::ColorGeometry4f *)r_value = ((bNodeSocketValueRGBA *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = []() {
|
||||
return &blender::fn::CPPType::get<blender::fn::Field<blender::ColorGeometry4f>>();
|
||||
};
|
||||
socktype->geometry_nodes_cpp_type =
|
||||
&blender::fn::CPPType::get<blender::fn::Field<blender::ColorGeometry4f>>();
|
||||
socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
blender::ColorGeometry4f value;
|
||||
socket.typeinfo->get_base_cpp_value(socket, &value);
|
||||
|
@ -790,13 +780,12 @@ static bNodeSocketType *make_socket_type_rgba()
|
|||
static bNodeSocketType *make_socket_type_string()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_STRING, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<std::string>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<std::string>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
new (r_value) std::string(((bNodeSocketValueString *)socket.default_value)->value);
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = []() {
|
||||
return &blender::fn::CPPType::get<blender::fn::Field<std::string>>();
|
||||
};
|
||||
socktype->geometry_nodes_cpp_type =
|
||||
&blender::fn::CPPType::get<blender::fn::Field<std::string>>();
|
||||
socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
std::string value;
|
||||
value.~basic_string();
|
||||
|
@ -815,11 +804,11 @@ MAKE_CPP_TYPE(Material, Material *, CPPTypeFlags::BasicType)
|
|||
static bNodeSocketType *make_socket_type_object()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_OBJECT, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<Object *>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<Object *>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(Object **)r_value = ((bNodeSocketValueObject *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = socktype->get_base_cpp_type;
|
||||
socktype->geometry_nodes_cpp_type = socktype->base_cpp_type;
|
||||
socktype->get_geometry_nodes_cpp_value = socktype->get_base_cpp_value;
|
||||
return socktype;
|
||||
}
|
||||
|
@ -827,11 +816,11 @@ static bNodeSocketType *make_socket_type_object()
|
|||
static bNodeSocketType *make_socket_type_geometry()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_GEOMETRY, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<GeometrySet>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<GeometrySet>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &UNUSED(socket), void *r_value) {
|
||||
new (r_value) GeometrySet();
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = socktype->get_base_cpp_type;
|
||||
socktype->geometry_nodes_cpp_type = socktype->base_cpp_type;
|
||||
socktype->get_geometry_nodes_cpp_value = socktype->get_base_cpp_value;
|
||||
return socktype;
|
||||
}
|
||||
|
@ -839,11 +828,11 @@ static bNodeSocketType *make_socket_type_geometry()
|
|||
static bNodeSocketType *make_socket_type_collection()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_COLLECTION, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<Collection *>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<Collection *>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(Collection **)r_value = ((bNodeSocketValueCollection *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = socktype->get_base_cpp_type;
|
||||
socktype->geometry_nodes_cpp_type = socktype->base_cpp_type;
|
||||
socktype->get_geometry_nodes_cpp_value = socktype->get_base_cpp_value;
|
||||
return socktype;
|
||||
}
|
||||
|
@ -851,11 +840,11 @@ static bNodeSocketType *make_socket_type_collection()
|
|||
static bNodeSocketType *make_socket_type_texture()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_TEXTURE, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<Tex *>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<Tex *>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(Tex **)r_value = ((bNodeSocketValueTexture *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = socktype->get_base_cpp_type;
|
||||
socktype->geometry_nodes_cpp_type = socktype->base_cpp_type;
|
||||
socktype->get_geometry_nodes_cpp_value = socktype->get_base_cpp_value;
|
||||
return socktype;
|
||||
}
|
||||
|
@ -863,11 +852,11 @@ static bNodeSocketType *make_socket_type_texture()
|
|||
static bNodeSocketType *make_socket_type_image()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_IMAGE, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<Image *>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<Image *>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(Image **)r_value = ((bNodeSocketValueImage *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = socktype->get_base_cpp_type;
|
||||
socktype->geometry_nodes_cpp_type = socktype->base_cpp_type;
|
||||
socktype->get_geometry_nodes_cpp_value = socktype->get_base_cpp_value;
|
||||
return socktype;
|
||||
}
|
||||
|
@ -875,11 +864,11 @@ static bNodeSocketType *make_socket_type_image()
|
|||
static bNodeSocketType *make_socket_type_material()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_MATERIAL, PROP_NONE);
|
||||
socktype->get_base_cpp_type = []() { return &blender::fn::CPPType::get<Material *>(); };
|
||||
socktype->base_cpp_type = &blender::fn::CPPType::get<Material *>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(Material **)r_value = ((bNodeSocketValueMaterial *)socket.default_value)->value;
|
||||
};
|
||||
socktype->get_geometry_nodes_cpp_type = socktype->get_base_cpp_type;
|
||||
socktype->geometry_nodes_cpp_type = socktype->base_cpp_type;
|
||||
socktype->get_geometry_nodes_cpp_value = socktype->get_base_cpp_value;
|
||||
return socktype;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue