diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h index 44895652d8a..61c9937f3a0 100644 --- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h +++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h @@ -53,6 +53,7 @@ void BKE_mesh_legacy_edge_crease_to_layers(struct Mesh *mesh); * Copy bevel weights from separate layers into vertices and edges. */ void BKE_mesh_legacy_bevel_weight_from_layers(struct Mesh *mesh); +void BKE_mesh_bevel_weight_layers_from_future(struct Mesh *mesh); /** * Copy bevel weights from vertices and edges to separate layers. */ diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc index 2da4be71ddc..4f12ebd4d09 100644 --- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc +++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc @@ -1384,6 +1384,42 @@ void BKE_mesh_legacy_bevel_weight_from_layers(Mesh *mesh) } } +void BKE_mesh_bevel_weight_layers_from_future(Mesh *mesh) +{ + using namespace blender; + using namespace blender::bke; + if (const std::optional meta_data = mesh->attributes().lookup_meta_data( + "bevel_weight_vert")) + { + if (meta_data->domain == ATTR_DOMAIN_POINT && meta_data->data_type == CD_PROP_FLOAT) { + if (const void *data = CustomData_get_layer_named( + &mesh->vdata, CD_PROP_FLOAT, "bevel_weight_vert")) + { + if (void *new_data = CustomData_add_layer( + &mesh->vdata, CD_BWEIGHT, CD_CONSTRUCT, mesh->totvert)) { + memcpy(new_data, data, sizeof(float) * mesh->totvert); + CustomData_free_layer_named(&mesh->vdata, "bevel_weight_vert", mesh->totvert); + } + } + } + } + if (const std::optional meta_data = mesh->attributes().lookup_meta_data( + "bevel_weight_edge")) + { + if (meta_data->domain == ATTR_DOMAIN_EDGE && meta_data->data_type == CD_PROP_FLOAT) { + if (const void *data = CustomData_get_layer_named( + &mesh->edata, CD_PROP_FLOAT, "bevel_weight_edge")) + { + if (void *new_data = CustomData_add_layer( + &mesh->edata, CD_BWEIGHT, CD_CONSTRUCT, mesh->totedge)) { + memcpy(new_data, data, sizeof(float) * mesh->totedge); + CustomData_free_layer_named(&mesh->edata, "bevel_weight_edge", mesh->totedge); + } + } + } + } +} + void BKE_mesh_legacy_bevel_weight_to_layers(Mesh *mesh) { using namespace blender; diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index 1fc1e0146ff..b0ffea6c411 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -42,6 +42,7 @@ static void version_mesh_legacy_to_struct_of_array_format(Mesh &mesh) BKE_mesh_legacy_convert_loops_to_corners(&mesh); BKE_mesh_legacy_convert_polys_to_offsets(&mesh); BKE_mesh_legacy_convert_edges_to_generic(&mesh); + BKE_mesh_bevel_weight_layers_from_future(&mesh); } static void version_motion_tracking_legacy_camera_object(MovieClip &movieclip)