[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