[Bf-blender-cvs] [dab3a076598] temp-geometry-nodes-fields-prototype: cleanup
Jacques Lucke
noreply at git.blender.org
Fri Jul 30 13:56:50 CEST 2021
Commit: dab3a076598db5ec64c4d738f30e3887ea873ad4
Author: Jacques Lucke
Date: Fri Jul 30 12:02:05 2021 +0200
Branches: temp-geometry-nodes-fields-prototype
https://developer.blender.org/rBdab3a076598db5ec64c4d738f30e3887ea873ad4
cleanup
===================================================================
M source/blender/blenkernel/BKE_node.h
M source/blender/modifiers/intern/MOD_nodes_evaluator.cc
M source/blender/nodes/intern/node_socket.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 5950da9f8b7..5d2a1df76bc 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -125,6 +125,9 @@ using NodeExpandInMFNetworkFunction = void (*)(blender::nodes::NodeMFNetworkBuil
using NodeGeometryExecFunction = void (*)(blender::nodes::GeoNodeExecParams params);
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);
using SocketExpandInMFNetworkFunction = void (*)(blender::nodes::SocketMFNetworkBuilder &builder);
#else
@@ -132,6 +135,8 @@ typedef void *NodeExpandInMFNetworkFunction;
typedef void *SocketExpandInMFNetworkFunction;
typedef void *NodeGeometryExecFunction;
typedef void *SocketGetCPPTypeFunction;
+typedef void *SocketGetGeometryNodesCPPTypeFunction;
+typedef void *SocketGetGeometryNodesCPPValueFunction;
typedef void *SocketGetCPPValueFunction;
#endif
@@ -197,6 +202,10 @@ typedef struct bNodeSocketType {
SocketGetCPPTypeFunction get_cpp_type;
/* Get the value of this socket in a generic way. */
SocketGetCPPValueFunction get_cpp_value;
+ /* Get geometry nodes cpp type. */
+ SocketGetGeometryNodesCPPTypeFunction get_geometry_nodes_cpp_type;
+ /* Get geometry nodes cpp value. */
+ SocketGetGeometryNodesCPPValueFunction get_geometry_nodes_cpp_value;
} bNodeSocketType;
typedef void *(*NodeInitExecFunction)(struct bNodeExecContext *context,
diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
index 8fe45963209..38f0188eeb9 100644
--- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
+++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
@@ -302,7 +302,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,21 +314,6 @@ static const CPPType *get_socket_cpp_type(const SocketRef &socket)
if (!type->has_special_member_functions()) {
return nullptr;
}
- if (type->is<float>()) {
- return &CPPType::get<bke::FieldRef<float>>();
- }
- if (type->is<int>()) {
- return &CPPType::get<bke::FieldRef<int>>();
- }
- if (type->is<bool>()) {
- return &CPPType::get<bke::FieldRef<bool>>();
- }
- if (type->is<float3>()) {
- return &CPPType::get<bke::FieldRef<float3>>();
- }
- if (type->is<ColorGeometry4f>()) {
- return &CPPType::get<bke::FieldRef<ColorGeometry4f>>();
- }
return type;
}
@@ -335,48 +324,8 @@ static const CPPType *get_socket_cpp_type(const DSocket socket)
static void get_socket_value(const SocketRef &socket, void *r_value)
{
- switch (socket.typeinfo()->type) {
- case SOCK_FLOAT: {
- float value;
- socket.typeinfo()->get_cpp_value(*socket.bsocket(), &value);
- new (r_value) bke::FieldRef<float>(FieldPtr{new bke::ConstantField<float>(value)});
- return;
- }
- case SOCK_INT: {
- int value;
- socket.typeinfo()->get_cpp_value(*socket.bsocket(), &value);
- new (r_value) bke::FieldRef<int>(FieldPtr{new bke::ConstantField<int>(value)});
- return;
- }
- case SOCK_BOOLEAN: {
- bool value;
- socket.typeinfo()->get_cpp_value(*socket.bsocket(), &value);
- new (r_value) bke::FieldRef<bool>(FieldPtr{new bke::ConstantField<bool>(value)});
- return;
- }
- case SOCK_RGBA: {
- ColorGeometry4f value;
- socket.typeinfo()->get_cpp_value(*socket.bsocket(), &value);
- new (r_value)
- bke::FieldRef<ColorGeometry4f>(FieldPtr{new bke::ConstantField<ColorGeometry4f>(value)});
- return;
- }
- case SOCK_VECTOR: {
- if (socket.is_input() && (socket.bsocket()->flag & SOCK_HIDE_VALUE)) {
- new (r_value) bke::FieldRef<float3>(
- FieldPtr{new bke::PersistentAttributeField("position", CPPType::get<float3>())});
- }
- else {
- float3 value;
- socket.typeinfo()->get_cpp_value(*socket.bsocket(), &value);
- new (r_value) bke::FieldRef<float3>(FieldPtr{new bke::ConstantField<float3>(value)});
- }
- return;
- }
- default:
- blender::nodes::socket_cpp_value_get(*socket.bsocket(), r_value);
- return;
- }
+ const bNodeSocketType *typeinfo = socket.typeinfo();
+ typeinfo->get_geometry_nodes_cpp_value(*socket.bsocket(), r_value);
}
static bool node_supports_laziness(const DNode node)
diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc
index 8fdad0bb242..f0b0cd79fec 100644
--- a/source/blender/nodes/intern/node_socket.cc
+++ b/source/blender/nodes/intern/node_socket.cc
@@ -32,6 +32,7 @@
#include "BLI_string.h"
#include "BLI_utildefines.h"
+#include "BKE_field.hh"
#include "BKE_geometry_set.hh"
#include "BKE_lib_id.h"
#include "BKE_node.h"
@@ -611,6 +612,15 @@ static bNodeSocketType *make_socket_type_bool()
socktype->get_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::bke::FieldRef<bool>>();
+ };
+ socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
+ bool value;
+ socket.typeinfo->get_cpp_value(socket, &value);
+ new (r_value) blender::bke::FieldRef<bool>(
+ blender::bke::FieldPtr{new blender::bke::ConstantField<bool>(value)});
+ };
return socktype;
}
@@ -621,6 +631,15 @@ static bNodeSocketType *make_socket_type_float(PropertySubType subtype)
socktype->get_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::bke::FieldRef<float>>();
+ };
+ socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
+ float value;
+ socket.typeinfo->get_cpp_value(socket, &value);
+ new (r_value) blender::bke::FieldRef<float>(
+ blender::bke::FieldPtr{new blender::bke::ConstantField<float>(value)});
+ };
return socktype;
}
@@ -631,6 +650,15 @@ static bNodeSocketType *make_socket_type_int(PropertySubType subtype)
socktype->get_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::bke::FieldRef<int>>();
+ };
+ socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
+ int value;
+ socket.typeinfo->get_cpp_value(socket, &value);
+ new (r_value) blender::bke::FieldRef<int>(
+ blender::bke::FieldPtr{new blender::bke::ConstantField<int>(value)});
+ };
return socktype;
}
@@ -641,6 +669,22 @@ static bNodeSocketType *make_socket_type_vector(PropertySubType subtype)
socktype->get_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::bke::FieldRef<blender::float3>>();
+ };
+ socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
+ if (socket.in_out == SOCK_IN && (socket.flag & SOCK_HIDE_VALUE)) {
+ new (r_value) blender::bke::FieldRef<blender::float3>(
+ blender::bke::FieldPtr{new blender::bke::PersistentAttributeField(
+ "position", blender::fn::CPPType::get<blender::float3>())});
+ }
+ else {
+ blender::float3 value;
+ socket.typeinfo->get_cpp_value(socket, &value);
+ new (r_value) blender::bke::FieldRef<blender::float3>(
+ blender::bke::FieldPtr{new blender::bke::ConstantField<blender::float3>(value)});
+ }
+ };
return socktype;
}
@@ -651,6 +695,15 @@ static bNodeSocketType *make_socket_type_rgba()
socktype->get_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::bke::FieldRef<blender::ColorGeometry4f>>();
+ };
+ socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
+ blender::ColorGeometry4f value;
+ socket.typeinfo->get_cpp_value(socket, &value);
+ new (r_value) blender::bke::FieldRef<blender::ColorGeometry4f>(
+ blender::bke::FieldPtr{new blender::bke::ConstantField<blender::ColorGeometry4f>(value)});
+ };
return socktype;
}
@@ -661,6 +714,8 @@ static bNodeSocketType *make_socket_type_string()
socktype->get_cpp_value = [](const bNodeSocket &socket, void *r_value) {
new (r_value) std::string(((bNodeSocketValueString *)socket.default_value)->value);
};
+ socktype->get_geometry_nodes_cpp_type = socktype->get_cpp_type;
+ socktype->get_geometry_nodes_cpp_value = socktype->get_cpp_value;
return socktype;
}
@@ -676,6 +731,8 @@ static bNodeSocketType *make_socket_type_object()
socktype->get_cpp_value = [](const bNodeSocket &socket, void *r_value) {
*(Object **)r_value = ((bNodeSocketValueObject *)socket.default_value)->value;
};
+ socktype->get_geometry_nodes_cpp_type = socktype->get_cpp_type;
+ socktype->get_geometry_nodes_cpp_value = socktype->get_cpp_value;
return socktype;
}
@@ -686,6
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list