[Bf-blender-cvs] [28f1e71e2eb] temp-geometry-nodes-fields--fields-jacques: fix default values

Jacques Lucke noreply at git.blender.org
Tue Aug 31 13:22:57 CEST 2021


Commit: 28f1e71e2eb7b2ca6d3cbed43734e6f42261359c
Author: Jacques Lucke
Date:   Tue Aug 31 12:05:11 2021 +0200
Branches: temp-geometry-nodes-fields--fields-jacques
https://developer.blender.org/rB28f1e71e2eb7b2ca6d3cbed43734e6f42261359c

fix default values

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

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

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

diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
index 6e5b5702da6..98006d1eaee 100644
--- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
+++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
@@ -22,6 +22,7 @@
 #include "DEG_depsgraph_query.h"
 
 #include "FN_field.hh"
+#include "FN_field_cpp_type.hh"
 #include "FN_generic_value_map.hh"
 #include "FN_multi_function.hh"
 
@@ -913,7 +914,7 @@ class GeometryNodesEvaluator {
       OutputState &output_state = node_state.outputs[socket->index()];
       output_state.has_been_computed = true;
       void *buffer = allocator.allocate(type->size(), type->alignment());
-      type->copy_construct(type->default_value(), buffer);
+      this->construct_default_value(*type, buffer);
       this->forward_output({node.context(), socket}, {*type, buffer});
     }
   }
@@ -1386,10 +1387,23 @@ class GeometryNodesEvaluator {
     }
     else {
       /* Cannot convert, use default value instead. */
-      to_type.copy_construct(to_type.default_value(), to_value);
+      this->construct_default_value(to_type, to_value);
     }
   }
 
+  void construct_default_value(const CPPType &type, void *r_value)
+  {
+    if (const fn::FieldCPPType *field_cpp_type = dynamic_cast<const fn::FieldCPPType *>(&type)) {
+      const CPPType &base_type = field_cpp_type->field_type();
+      auto constant_fn = std::make_unique<fn::CustomMF_GenericConstant>(base_type,
+                                                                        base_type.default_value());
+      auto field_fn = std::make_shared<fn::FieldFunction>(std::move(constant_fn));
+      new (r_value) GField(std::move(field_fn), 0);
+      return;
+    }
+    type.copy_construct(type.default_value(), r_value);
+  }
+
   NodeState &get_node_state(const DNode node)
   {
     return *node_states_.lookup_key_as(node).state;



More information about the Bf-blender-cvs mailing list