Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-09-27 22:04:18 +0300
committerHans Goudey <h.goudey@me.com>2022-09-27 22:50:07 +0300
commitaa58f58e46c39750fd0bcc695ff2f70007de380c (patch)
treec1c702f0d1a89d60228422d2c9639c6df38a2b32
parent2f0c40c7a27066755f29b2fb3960052ba4587b1f (diff)
Fix: Assert in legacy mesh conversion
When setting the old face set custom data type, do it in the "layers to write" vector instead of the mesh's poly custom data layers, which weren't "prepared" yet. Otherwise this could make the mesh's custom data typemap invalid.
-rw-r--r--source/blender/blenkernel/BKE_mesh_legacy_convert.h12
-rw-r--r--source/blender/blenkernel/intern/mesh.cc2
-rw-r--r--source/blender/blenkernel/intern/mesh_legacy_convert.cc5
3 files changed, 15 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index d3e582ff197..92182f8045b 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -10,6 +10,11 @@
#include "BLI_utildefines.h"
#ifdef __cplusplus
+# include "BLI_span.hh"
+# include "DNA_customdata_types.h"
+#endif
+
+#ifdef __cplusplus
extern "C" {
#endif
@@ -17,10 +22,13 @@ struct CustomData;
struct Mesh;
struct MFace;
+#ifdef __cplusplus
+
/**
* Move face sets to the legacy type from a generic type.
*/
-void BKE_mesh_legacy_face_set_from_generic(struct Mesh *mesh);
+void BKE_mesh_legacy_face_set_from_generic(
+ Mesh *mesh, blender::MutableSpan<CustomDataLayer> poly_layers_to_write);
/**
* Copy face sets to the generic data type from the legacy type.
*/
@@ -74,6 +82,8 @@ void BKE_mesh_legacy_convert_material_indices_to_mpoly(struct Mesh *mesh);
*/
void BKE_mesh_legacy_convert_mpoly_to_material_indices(struct Mesh *mesh);
+#endif
+
/**
* Recreate #MFace Tessellation.
*
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index dfd023b548b..4d98efde5f9 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -252,7 +252,7 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address
BKE_mesh_legacy_convert_selection_layers_to_flags(mesh);
BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh);
BKE_mesh_legacy_bevel_weight_from_layers(mesh);
- BKE_mesh_legacy_face_set_from_generic(mesh);
+ BKE_mesh_legacy_face_set_from_generic(mesh, poly_layers);
BKE_mesh_legacy_edge_crease_from_layers(mesh);
/* When converting to the old mesh format, don't save redundant attributes. */
names_to_skip.add_multiple_new({".hide_vert",
diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
index b68117b7eb2..df3057d9592 100644
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@ -922,10 +922,11 @@ void BKE_mesh_add_mface_layers(CustomData *fdata, CustomData *ldata, int total)
/** \name Face Set Conversion
* \{ */
-void BKE_mesh_legacy_face_set_from_generic(Mesh *mesh)
+void BKE_mesh_legacy_face_set_from_generic(Mesh *mesh,
+ blender::MutableSpan<CustomDataLayer> poly_layers)
{
using namespace blender;
- for (CustomDataLayer &layer : MutableSpan(mesh->pdata.layers, mesh->pdata.totlayer)) {
+ for (CustomDataLayer &layer : poly_layers) {
if (StringRef(layer.name) == ".sculpt_face_set") {
layer.type = CD_SCULPT_FACE_SETS;
}