diff --git a/source/blender/blenkernel/BKE_mesh.hh b/source/blender/blenkernel/BKE_mesh.hh index e7ac48ccf55..2fc951541bb 100644 --- a/source/blender/blenkernel/BKE_mesh.hh +++ b/source/blender/blenkernel/BKE_mesh.hh @@ -311,6 +311,8 @@ void mesh_calc_edges(Mesh &mesh, bool keep_existing_edges, bool select_new_edges void mesh_flip_faces(Mesh &mesh, const IndexMask &selection); +void mesh_ensure_required_data_layers(Mesh &mesh); + /** Set mesh vertex normals to known-correct values, avoiding future lazy computation. */ void mesh_vert_normals_assign(Mesh &mesh, Span vert_normals); diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc index adf9ab92654..c264feb9845 100644 --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@ -477,7 +477,7 @@ void mesh_ensure_default_color_attribute_on_add(Mesh &mesh, mesh.default_color_attribute = BLI_strdupn(id.name().data(), id.name().size()); } -static void mesh_ensure_cdlayers_primary(Mesh &mesh) +void mesh_ensure_required_data_layers(Mesh &mesh) { MutableAttributeAccessor attributes = mesh.attributes_for_write(); AttributeInitConstruct attribute_init; @@ -548,8 +548,6 @@ void BKE_mesh_clear_geometry_and_metadata(Mesh *mesh) BKE_mesh_runtime_clear_cache(mesh); mesh_clear_geometry(*mesh); clear_attribute_names(*mesh); - - blender::bke::mesh_ensure_cdlayers_primary(*mesh); } static void mesh_tessface_clear_intern(Mesh *mesh, int free_customdata) @@ -698,7 +696,7 @@ Mesh *BKE_mesh_new_nomain(const int verts_num, mesh->faces_num = faces_num; mesh->corners_num = corners_num; - blender::bke::mesh_ensure_cdlayers_primary(*mesh); + blender::bke::mesh_ensure_required_data_layers(*mesh); BKE_mesh_face_offsets_ensure_alloc(mesh); return mesh; @@ -800,7 +798,7 @@ Mesh *BKE_mesh_new_nomain_from_template_ex(const Mesh *me_src, /* The destination mesh should at least have valid primary CD layers, * even in cases where the source mesh does not. */ - blender::bke::mesh_ensure_cdlayers_primary(*me_dst); + blender::bke::mesh_ensure_required_data_layers(*me_dst); BKE_mesh_face_offsets_ensure_alloc(me_dst); if (do_tessface && !CustomData_get_layer(&me_dst->fdata_legacy, CD_MFACE)) { CustomData_add_layer(&me_dst->fdata_legacy, CD_MFACE, CD_SET_DEFAULT, me_dst->totface_legacy); diff --git a/source/blender/makesrna/intern/rna_mesh_api.cc b/source/blender/makesrna/intern/rna_mesh_api.cc index 11e748a635b..5f7b1f7a75a 100644 --- a/source/blender/makesrna/intern/rna_mesh_api.cc +++ b/source/blender/makesrna/intern/rna_mesh_api.cc @@ -201,6 +201,8 @@ static void rna_Mesh_clear_geometry(Mesh *mesh) BKE_mesh_clear_geometry_and_metadata(mesh); BKE_animdata_free(&mesh->id, false); + blender::bke::mesh_ensure_required_data_layers(*mesh); + DEG_id_tag_update(&mesh->id, ID_RECALC_GEOMETRY_ALL_MODES); WM_main_add_notifier(NC_GEOM | ND_DATA, mesh); }