diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 284440933a3..99ee56ba63d 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -4217,6 +4217,16 @@ void CustomData_blend_write_prepare(CustomData &data, } data.totlayer = layers_to_write.size(); data.maxlayer = data.totlayer; + + /* Note: data->layers may be null, this happens when adding + * a legacy MPoly struct to a mesh with no other face attributes. + * This leaves us with no unique ID for DNA to identify the old + * data with when loading the file. + */ + if (!data.layers && layers_to_write.size() > 0) { + /* We just need an address that's unique. */ + data.layers = reinterpret_cast(&data.layers); + } } int CustomData_sizeof(const eCustomDataType type) diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc index c3e7e53c439..22b3a8d652c 100644 --- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc +++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc @@ -1240,7 +1240,7 @@ void BKE_mesh_legacy_sharp_faces_from_flags(Mesh *mesh) using namespace blender; using namespace blender::bke; MutableAttributeAccessor attributes = mesh->attributes_for_write(); - if (attributes.contains("sharp_face")) { + if (attributes.contains("sharp_face") || !CustomData_get_layer(&mesh->pdata, CD_MPOLY)) { return; } const Span polys(static_cast(CustomData_get_layer(&mesh->pdata, CD_MPOLY)),