Fix: crash when adding bake item to already baked node

This was caused by the introduction of the generic `SocketValueVariant` type.
Now it's not enough to simply default-construct the value anymore, but it has
to be constructed with the correct type.
This commit is contained in:
Jacques Lucke
2024-01-19 11:19:22 +01:00
parent 796aa0be59
commit ef741bc6ff

View File

@@ -11,15 +11,6 @@
namespace blender::bke::bake {
static const CPPType &get_socket_cpp_type(const eNodeSocketDatatype socket_type)
{
const char *socket_idname = nodeStaticSocketType(socket_type, 0);
const bNodeSocketType *typeinfo = nodeSocketTypeFind(socket_idname);
BLI_assert(typeinfo);
BLI_assert(typeinfo->geometry_nodes_cpp_type);
return *typeinfo->geometry_nodes_cpp_type;
}
Array<std::unique_ptr<BakeItem>> move_socket_values_to_bake_items(const Span<void *> socket_values,
const BakeSocketConfig &config)
{
@@ -201,6 +192,14 @@ static void rename_attributes(const Span<GeometrySet *> geometries,
}
}
static void default_initialize_socket_value(const eNodeSocketDatatype socket_type, void *r_value)
{
const char *socket_idname = nodeStaticSocketType(socket_type, 0);
const bNodeSocketType *typeinfo = nodeSocketTypeFind(socket_idname);
typeinfo->geometry_nodes_cpp_type->copy_construct(typeinfo->geometry_nodes_default_cpp_value,
r_value);
}
void move_bake_items_to_socket_values(
const Span<BakeItem *> bake_items,
const BakeSocketConfig &config,
@@ -214,11 +213,10 @@ void move_bake_items_to_socket_values(
for (const int i : bake_items.index_range()) {
const eNodeSocketDatatype socket_type = config.types[i];
const CPPType &type = get_socket_cpp_type(socket_type);
BakeItem *bake_item = bake_items[i];
void *r_socket_value = r_socket_values[i];
if (bake_item == nullptr) {
type.value_initialize(r_socket_value);
default_initialize_socket_value(socket_type, r_socket_value);
continue;
}
if (!copy_bake_item_to_socket_value(
@@ -228,7 +226,7 @@ void move_bake_items_to_socket_values(
attribute_map,
r_socket_value))
{
type.value_initialize(r_socket_value);
default_initialize_socket_value(socket_type, r_socket_value);
continue;
}
if (socket_type == SOCK_GEOMETRY) {
@@ -253,11 +251,10 @@ void copy_bake_items_to_socket_values(
for (const int i : bake_items.index_range()) {
const eNodeSocketDatatype socket_type = config.types[i];
const CPPType &type = get_socket_cpp_type(socket_type);
const BakeItem *bake_item = bake_items[i];
void *r_socket_value = r_socket_values[i];
if (bake_item == nullptr) {
type.value_initialize(r_socket_value);
default_initialize_socket_value(socket_type, r_socket_value);
continue;
}
if (!copy_bake_item_to_socket_value(
@@ -267,7 +264,7 @@ void copy_bake_items_to_socket_values(
attribute_map,
r_socket_value))
{
type.value_initialize(r_socket_value);
default_initialize_socket_value(socket_type, r_socket_value);
continue;
}
if (socket_type == SOCK_GEOMETRY) {