[Bf-blender-cvs] [65b892fa882] temp-derived-node-tree-refactor: convert types from unlinked sockets

Jacques Lucke noreply at git.blender.org
Thu Mar 4 15:42:39 CET 2021


Commit: 65b892fa882e5fab8b085aac111292cbf3c18f1c
Author: Jacques Lucke
Date:   Thu Mar 4 15:42:29 2021 +0100
Branches: temp-derived-node-tree-refactor
https://developer.blender.org/rB65b892fa882e5fab8b085aac111292cbf3c18f1c

convert types from unlinked sockets

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

M	source/blender/modifiers/intern/MOD_nodes.cc

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

diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 920cb37eddc..a762bde41de 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -306,9 +306,11 @@ class GeometryNodesEvaluator {
     socket_to_compute.foreach_origin_socket(
         [&](XXXSocket socket) { from_sockets.append(socket); });
 
+    const CPPType &type = *blender::nodes::socket_cpp_type_get(*socket_to_compute->typeinfo());
+
     if (from_sockets.is_empty()) {
       /* The input is not connected, use the value from the socket itself. */
-      return {get_unlinked_input_value(socket_to_compute)};
+      return {get_unlinked_input_value(socket_to_compute, type)};
     }
 
     /* Multi-input sockets contain a vector of inputs. */
@@ -330,9 +332,8 @@ class GeometryNodesEvaluator {
           }
         }
         else {
-          /* This is an unlinked group input. */
           XXXInputSocket from_input_socket{from_socket};
-          GMutablePointer value = get_unlinked_input_value(from_input_socket);
+          GMutablePointer value = get_unlinked_input_value(from_input_socket, type);
           values.append(value);
         }
       }
@@ -355,9 +356,8 @@ class GeometryNodesEvaluator {
       return {value_by_input_.pop(key)};
     }
 
-    /* This is an unlinked group input. */
     const XXXInputSocket from_input_socket{from_socket};
-    return {get_unlinked_input_value(from_input_socket)};
+    return {get_unlinked_input_value(from_input_socket, type)};
   }
 
   void compute_output_and_forward(const XXXOutputSocket socket_to_compute)
@@ -592,7 +592,8 @@ class GeometryNodesEvaluator {
     value_by_input_.add_new(key, value);
   }
 
-  GMutablePointer get_unlinked_input_value(const XXXInputSocket &socket)
+  GMutablePointer get_unlinked_input_value(const XXXInputSocket &socket,
+                                           const CPPType &required_type)
   {
     bNodeSocket *bsocket = socket->bsocket();
     const CPPType &type = *blender::nodes::socket_cpp_type_get(*socket->typeinfo());
@@ -612,7 +613,19 @@ class GeometryNodesEvaluator {
       blender::nodes::socket_cpp_value_get(*bsocket, buffer);
     }
 
-    return {type, buffer};
+    if (type == required_type) {
+      return {type, buffer};
+    }
+    if (conversions_.is_convertible(type, required_type)) {
+      void *converted_buffer = allocator_.allocate(required_type.size(),
+                                                   required_type.alignment());
+      conversions_.convert(type, required_type, buffer, converted_buffer);
+      type.destruct(buffer);
+      return {required_type, converted_buffer};
+    }
+    void *default_buffer = allocator_.allocate(required_type.size(), required_type.alignment());
+    type.copy_to_uninitialized(type.default_value(), default_buffer);
+    return {required_type, default_buffer};
   }
 };



More information about the Bf-blender-cvs mailing list