[Bf-blender-cvs] [dad5c3991c9] temp-geometry-nodes-fields-prototype: cleanup

Jacques Lucke noreply at git.blender.org
Fri Jul 30 13:56:50 CEST 2021


Commit: dad5c3991c91e6195d7156d053de09e8fa4038c9
Author: Jacques Lucke
Date:   Fri Jul 30 12:23:19 2021 +0200
Branches: temp-geometry-nodes-fields-prototype
https://developer.blender.org/rBdad5c3991c91e6195d7156d053de09e8fa4038c9

cleanup

===================================================================

M	source/blender/blenkernel/BKE_node.h
M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/NOD_geometry_exec.hh
M	source/blender/nodes/NOD_type_callbacks.hh
M	source/blender/nodes/intern/node_geometry_exec.cc
M	source/blender/nodes/intern/node_socket.cc
M	source/blender/nodes/intern/type_callbacks.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 5d2a1df76bc..acbbd110219 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -199,9 +199,9 @@ typedef struct bNodeSocketType {
   /* Expands the socket into a multi-function node that outputs the socket value. */
   SocketExpandInMFNetworkFunction expand_in_mf_network;
   /* Return the CPPType of this socket. */
-  SocketGetCPPTypeFunction get_cpp_type;
+  SocketGetCPPTypeFunction get_base_cpp_type;
   /* Get the value of this socket in a generic way. */
-  SocketGetCPPValueFunction get_cpp_value;
+  SocketGetCPPValueFunction get_base_cpp_value;
   /* Get geometry nodes cpp type. */
   SocketGetGeometryNodesCPPTypeFunction get_geometry_nodes_cpp_type;
   /* Get geometry nodes cpp value. */
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/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh
index 46513075f48..779d8ed59bf 100644
--- a/source/blender/nodes/NOD_geometry_exec.hh
+++ b/source/blender/nodes/NOD_geometry_exec.hh
@@ -144,13 +144,13 @@ class GeoNodeExecParams {
    */
   template<typename T> T extract_input(StringRef identifier)
   {
-#ifdef DEBUG
-    this->check_input_access(identifier, &CPPType::get<T>());
-#endif
-    GMutablePointer gvalue = this->extract_input(identifier);
     if constexpr (std::is_same_v<T, int> || std::is_same_v<T, float> ||
                   std::is_same_v<T, float3> || std::is_same_v<T, ColorGeometry4f> ||
                   std::is_same_v<T, bool>) {
+#ifdef DEBUGm
+      this->check_input_access(identifier, &CPPType::get<bke::FieldRef<T>>());
+#endif
+      GMutablePointer gvalue = this->extract_input(identifier);
       BLI_assert(gvalue.is_type<bke::FieldRef<T>>());
       bke::FieldRef<T> field = gvalue.relocate_out<bke::FieldRef<T>>();
       bke::FieldInputs inputs = field->prepare_inputs();
@@ -160,6 +160,10 @@ class GeoNodeExecParams {
       return value;
     }
     else {
+#ifdef DEBUG
+      this->check_input_access(identifier, &CPPType::get<T>());
+#endif
+      GMutablePointer gvalue = this->extract_input(identifier);
       return gvalue.relocate_out<T>();
     }
   }
@@ -184,13 +188,13 @@ class GeoNodeExecParams {
    */
   template<typename T> T get_input(StringRef identifier) const
   {
-#ifdef DEBUG
-    this->check_input_access(identifier, &CPPType::get<T>());
-#endif
     GPointer gvalue = provider_->get_input(identifier);
     if constexpr (std::is_same_v<T, int> || std::is_same_v<T, float> ||
                   std::is_same_v<T, float3> || std::is_same_v<T, ColorGeometry4f> ||
                   std::is_same_v<T, bool>) {
+#ifdef DEBUG
+      this->check_input_access(identifier, &CPPType::get<bke::FieldRef<T>>());
+#endif
       BLI_assert(gvalue.is_type<bke::FieldRef<T>>());
       bke::FieldRef<T> field = *gvalue.get<bke::FieldRef<T>>();
       bke::FieldInputs inputs = field->prepare_inputs();
@@ -200,6 +204,9 @@ class GeoNodeExecParams {
       return value;
     }
     else {
+#ifdef DEBUG
+      this->check_input_access(identifier, &CPPType::get<T>());
+#endif
       BLI_assert(gvalue.is_type<T>());
       return *(const T *)gvalue.get();
     }
@@ -208,7 +215,7 @@ class GeoNodeExecParams {
   template<typename T> bke::FieldRef<T> get_input_field(StringRef identifier) const
   {
 #ifdef DEBUG
-    this->check_input_access(identifier, &CPPType::get<T>());
+    this->check_input_access(identifier, &CPPType::get<bke::FieldRef<T>>());
 #endif
     GPointer gvalue = provider_->get_input(identifier);
     BLI_assert(gvalue.is_type<bke::FieldRef<T>>());
diff --git a/source/blender/nodes/NOD_type_callbacks.hh b/source/blender/nodes/NOD_type_callbacks.hh
index d1a4bd3ad7a..2be78f929db 100644
--- a/source/blender/nodes/NOD_type_callbacks.hh
+++ b/source/blender/nodes/NOD_type_callbacks.hh
@@ -27,10 +27,8 @@ namespace blender::nodes {
 using fn::CPPType;
 using fn::MFDataType;
 
-const CPPType *socket_cpp_type_get(const bNodeSocketType &stype);
 std::optional<MFDataType> socket_mf_type_get(const bNodeSocketType &stype);
 bool socket_is_mf_data_socket(const bNodeSocketType &stype);
-bool socket_cpp_value_get(const bNodeSocket &socket, void *r_value);
 void socket_expand_in_mf_network(SocketMFNetworkBuilder &builder);
 
 }  // namespace blender::nodes
diff --git a/source/blender/nodes/intern/node_geometry_exec.cc b/source/blender/nodes/intern/node_geometry_exec.cc
index bd2b47d0e56..ffa20579acc 100644
--- a/source/blender/nodes/intern/node_geometry_exec.cc
+++ b/source/blender/nodes/intern/node_geometry_exec.cc
@@ -218,13 +218,12 @@ void GeoNodeExecParams::check_input_access(StringRef identifier,
     BLI_assert_unreachable();
   }
   else if (requested_type != nullptr) {
-    // const CPPType &expected_type = *socket_cpp_type_get(*found_socket->typeinfo);
-    // if (*requested_type != expected_type) {
-    //   std::cout << "The requested type '" << requested_type->name() << "' is incorrect. Expected
-    //   '"
-    //             << expected_type.name() << "'.\n";
-    //   BLI_assert_unreachable();
-    // }
+    const CPPType &expected_type = *found_socket->typeinfo->get_geometry_nodes_cpp_type();
+    if (*requested_type != expected_type) {
+      std::cout << "The requested type '" << requested_type->name() << "' is incorrect. Expected '"
+                << expected_type.name() << "'.\n";
+      BLI_assert_unreachable();
+    }
   }
 }
 
@@ -259,12 +258,12 @@ void GeoNodeExecParams::check_output_access(StringRef identifier, const CPPType
     BLI_assert_unreachable();
   }
   else {
-    // const CPPType &expected_type = *socket_cpp_type_get(*found_socket->typeinfo);
-    // if (value_type != expected_type) {
-    //   std::cout << "The value type '" << value_type.name() << "' is incorrect. Expected '"
-    //             << expected_type.name() << "'.\n";
-    //   BLI_assert_unreachable();
-    // }
+    const CPPType &expected_type = *found_socket->typeinfo->get_geometry_nodes_cpp_type();
+    if (value_type != expected_type) {
+      std::cout << "The value type '" << value_type.name() << "' is incorrect. Expected '"
+                << expected_type.name() << "'.\n";
+      BLI_assert_unreachable();
+    }
   }
 }
 
diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc
index f0b0cd79fec..2202ef2b64a 100644
--- a/source/blender/nodes/intern/node_socket.cc
+++ b/source/blender/nodes/intern/node_socket.cc
@@ -608,8 +608,8 @@ static bNodeSocketType *make_socket_type_virtual()
 static bNodeSocketType *make_socket_type_bool()
 {
   bNodeSocketType *socktype = make_standard_socket_type(SOCK_BOOLEAN, PROP_NONE);
-  socktype->get_cpp_type = []() { return &blender::fn::CPPType::get<bool>(); };
-  socktype->get_cpp_value = [](const bNodeSocket &socket, void *r_value) {
+  socktype->get_base_cpp_type = []() { return &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 = []() {
@@ -617,7 +617,7 @@ static bNodeSocketType *make_socket_type_bool()
   };
   socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
     bool value;
-    socket.typeinfo->get_cpp_value(socket, &value);
+    socket.typeinfo->get_base_cpp_value(socket, &value);
     new (r_value) blender::bke::FieldRef<bool>(
         blender::bke::FieldPtr{new blender::bke::ConstantField<bool>(value)});
   };
@@ -627,8 +627,8 @@ 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_cpp_type = []() { return &blender::fn::CPPType::get<float>(); };
-  socktype->get_cpp_value = [](const bNodeSocket &socket, void *r_value) {
+  socktype->get_base_cpp_type = []() { return &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 = []() {
@@ -636,7 +636,7 @@ static bNodeSocketType *make_socket_type_float(PropertySubType subtype)
   };
   socktype->get_geometry_nodes_cpp_value = [](const bNodeSocket &socket, void *r_value) {
     float value;
-    socket.typeinfo->get_cpp_value(sock

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list