[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