[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