[Bf-blender-cvs] [c51550c6eb3] refactor-mesh-corners-generic: Fix compile errors, use attributes to store topology, all MLoop removed

Hans Goudey noreply at git.blender.org
Wed Dec 7 00:17:57 CET 2022


Commit: c51550c6eb3eaee78f5e0e6c84ec8a37630d943b
Author: Hans Goudey
Date:   Tue Dec 6 17:17:46 2022 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rBc51550c6eb3eaee78f5e0e6c84ec8a37630d943b

Fix compile errors, use attributes to store topology, all MLoop removed

===================================================================

M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/BKE_mesh_legacy_convert.h
M	source/blender/blenkernel/intern/DerivedMesh.cc
M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/customdata.cc
M	source/blender/blenkernel/intern/mball_tessellate.cc
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_boolean_convert.cc
M	source/blender/blenkernel/intern/mesh_evaluate.cc
M	source/blender/blenkernel/intern/mesh_legacy_convert.cc
M	source/blender/blenkernel/intern/mesh_merge.c
M	source/blender/blenloader/intern/versioning_400.cc
M	source/blender/bmesh/intern/bmesh_mesh_convert.cc
M	source/blender/editors/mesh/mesh_data.cc
M	source/blender/editors/mesh/meshtools.cc
M	source/blender/editors/sculpt_paint/sculpt_dyntopo.c
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M	source/blender/io/collada/MeshImporter.cpp
M	source/blender/io/stl/importer/stl_import_mesh.cc
M	source/blender/makesdna/DNA_customdata_types.h

===================================================================

diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 62dd6cb6d1c..cf8c27d4c3f 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -1047,20 +1047,24 @@ BLI_INLINE MPoly *BKE_mesh_polys_for_write(Mesh *mesh)
 
 BLI_INLINE const int *BKE_mesh_corner_verts(const Mesh *mesh)
 {
-  return (const int *)NULL;
+  return (const float(*)[3])CustomData_get_layer_named(
+      &mesh->ldata, CD_PROP_INT32, ".corner_vert");
 }
 BLI_INLINE int *BKE_mesh_corner_verts_for_write(Mesh *mesh)
 {
-  return (int *)NULL;
+  return (float(*)[3])CustomData_duplicate_referenced_layer_named(
+      &mesh->ldata, CD_PROP_INT32, ".corner_vert", mesh->totloop);
 }
 
 BLI_INLINE const int *BKE_mesh_corner_edges(const Mesh *mesh)
 {
-  return (const int *)NULL;
+  return (const float(*)[3])CustomData_get_layer_named(
+      &mesh->ldata, CD_PROP_INT32, ".corner_edge");
 }
 BLI_INLINE int *BKE_mesh_corner_edges_for_write(Mesh *mesh)
 {
-  return (int *)NULL;
+  return (float(*)[3])CustomData_duplicate_referenced_layer_named(
+      &mesh->ldata, CD_PROP_INT32, ".corner_edge", mesh->totloop);
 }
 
 BLI_INLINE const MDeformVert *BKE_mesh_deform_verts(const Mesh *mesh)
@@ -1116,20 +1120,20 @@ inline blender::MutableSpan<MPoly> Mesh::polys_for_write()
 
 inline blender::Span<int> Mesh::corner_verts() const
 {
-  return {};
+  return {BKE_mesh_corner_verts(this), mesh->totloop};
 }
 inline blender::MutableSpan<int> Mesh::corner_verts_for_write()
 {
-  return {};
+  return {BKE_mesh_corner_verts_for_write(this), mesh->totloop};
 }
 
 inline blender::Span<int> Mesh::corner_edges() const
 {
-  return {};
+  return {BKE_mesh_corner_edges(this), mesh->totloop};
 }
 inline blender::MutableSpan<int> Mesh::corner_edges_for_write()
 {
-  return {};
+  return {BKE_mesh_corner_edges_for_write(this), mesh->totloop};
 }
 
 inline blender::Span<MDeformVert> Mesh::deform_verts() const
diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index 97234ccd139..d33eba07767 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -96,6 +96,13 @@ struct MVert *BKE_mesh_legacy_convert_positions_to_verts(
 
 void BKE_mesh_legacy_convert_verts_to_positions(Mesh *mesh);
 
+struct MLoop *BKE_mesh_legacy_convert_corners_to_loops(
+    Mesh *mesh,
+    blender::ResourceScope &temp_arrays_for_convert,
+    blender::Vector<CustomDataLayer, 16> &loop_layers_to_write);
+
+void BKE_mesh_legacy_convert_loops_to_corners(Mesh *mesh);
+
 #endif
 
 /**
diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc
index a779c0b5f07..8a089c708e5 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -123,12 +123,16 @@ static MEdge *dm_getEdgeArray(DerivedMesh *dm)
 
 static int *dm_getCornerVertArray(DerivedMesh *dm)
 {
-  int *corner_verts = (int *)CustomData_get_layer(&dm->loopData, CD_MLOOP);
+  int *corner_verts = (int *)CustomData_get_layer_named(
+      &dm->loopData, CD_PROP_INT32, ".corner_vert");
 
   if (!corner_verts) {
-    corner_verts = (int *)CustomData_add_layer(
-        &dm->loopData, CD_MLOOP, CD_SET_DEFAULT, nullptr, dm->getNumLoops(dm));
-    CustomData_set_layer_flag(&dm->loopData, CD_MLOOP, CD_FLAG_TEMPORARY);
+    corner_verts = (int *)CustomData_add_layer_named(&dm->loopData,
+                                                     CD_PROP_INT32,
+                                                     CD_SET_DEFAULT,
+                                                     nullptr,
+                                                     dm->getNumLoops(dm),
+                                                     ".corner_vert");
     dm->copyCornerVertArray(dm, corner_verts);
   }
 
@@ -137,12 +141,16 @@ static int *dm_getCornerVertArray(DerivedMesh *dm)
 
 static int *dm_getCornerEdgeArray(DerivedMesh *dm)
 {
-  int *corner_edges = (int *)CustomData_get_layer(&dm->loopData, CD_MLOOP);
+  int *corner_edges = (int *)CustomData_get_layer_named(
+      &dm->loopData, CD_PROP_INT32, ".corner_edge");
 
   if (!corner_edges) {
-    corner_edges = (int *)CustomData_add_layer(
-        &dm->loopData, CD_MLOOP, CD_SET_DEFAULT, nullptr, dm->getNumLoops(dm));
-    CustomData_set_layer_flag(&dm->loopData, CD_MLOOP, CD_FLAG_TEMPORARY);
+    corner_edges = (int *)CustomData_add_layer_named(&dm->loopData,
+                                                     CD_PROP_INT32,
+                                                     CD_SET_DEFAULT,
+                                                     nullptr,
+                                                     dm->getNumLoops(dm),
+                                                     ".corner_edge");
     dm->copyCornerEdgeArray(dm, corner_edges);
   }
 
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 0d57d117d8d..58bcd0c4c0b 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -234,8 +234,8 @@ static DerivedMesh *cdDM_from_mesh_ex(Mesh *mesh,
    * or dirty normals. */
   cddm->vert_normals = BKE_mesh_vertex_normals_ensure(mesh);
   cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE);
-  cddm->corner_verts = CustomData_get_layer(&dm->loopData, CD_MLOOP);
-  cddm->corner_edges = CustomData_get_layer(&dm->loopData, CD_MLOOP);
+  cddm->corner_verts = CustomData_get_layer_named(&dm->loopData, CD_PROP_INT32, ".corner_vert");
+  cddm->corner_edges = CustomData_get_layer_named(&dm->loopData, CD_PROP_INT32, ".corner_vert");
   cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY);
 #if 0
   cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc
index beb54ef64a7..cca4a126e11 100644
--- a/source/blender/blenkernel/intern/customdata.cc
+++ b/source/blender/blenkernel/intern/customdata.cc
@@ -2110,14 +2110,14 @@ const CustomData_MeshMasks CD_MASK_BAREMESH = {
     /* emask */ CD_MASK_MEDGE,
     /* fmask */ 0,
     /* pmask */ CD_MASK_MPOLY | CD_MASK_FACEMAP,
-    /* lmask */ CD_MASK_MLOOP,
+    /* lmask */ CD_MASK_PROP_INT32,
 };
 const CustomData_MeshMasks CD_MASK_BAREMESH_ORIGINDEX = {
     /* vmask */ CD_MASK_PROP_FLOAT3 | CD_MASK_ORIGINDEX,
     /* emask */ CD_MASK_MEDGE | CD_MASK_ORIGINDEX,
     /* fmask */ 0,
     /* pmask */ CD_MASK_MPOLY | CD_MASK_FACEMAP | CD_MASK_ORIGINDEX,
-    /* lmask */ CD_MASK_MLOOP,
+    /* lmask */ CD_MASK_PROP_INT32,
 };
 const CustomData_MeshMasks CD_MASK_MESH = {
     /* vmask */ (CD_MASK_PROP_FLOAT3 | CD_MASK_MDEFORMVERT | CD_MASK_MVERT_SKIN |
@@ -2128,8 +2128,8 @@ const CustomData_MeshMasks CD_MASK_MESH = {
     /* pmask */
     (CD_MASK_MPOLY | CD_MASK_FACEMAP | CD_MASK_FREESTYLE_FACE | CD_MASK_PROP_ALL),
     /* lmask */
-    (CD_MASK_MLOOP | CD_MASK_MDISPS | CD_MASK_MLOOPUV | CD_MASK_CUSTOMLOOPNORMAL |
-     CD_MASK_GRID_PAINT_MASK | CD_MASK_PROP_ALL),
+    (CD_MASK_MDISPS | CD_MASK_MLOOPUV | CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_GRID_PAINT_MASK |
+     CD_MASK_PROP_ALL),
 };
 const CustomData_MeshMasks CD_MASK_DERIVEDMESH = {
     /* vmask */ (CD_MASK_ORIGINDEX | CD_MASK_MDEFORMVERT | CD_MASK_SHAPEKEY | CD_MASK_MVERT_SKIN |
@@ -2172,7 +2172,7 @@ const CustomData_MeshMasks CD_MASK_EVERYTHING = {
     (CD_MASK_MPOLY | CD_MASK_BM_ELEM_PYPTR | CD_MASK_ORIGINDEX | CD_MASK_FACEMAP |
      CD_MASK_FREESTYLE_FACE | CD_MASK_PROP_ALL),
     /* lmask */
-    (CD_MASK_MLOOP | CD_MASK_BM_ELEM_PYPTR | CD_MASK_MDISPS | CD_MASK_NORMAL | CD_MASK_MLOOPUV |
+    (CD_MASK_BM_ELEM_PYPTR | CD_MASK_MDISPS | CD_MASK_NORMAL | CD_MASK_MLOOPUV |
      CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_MLOOPTANGENT | CD_MASK_PREVIEW_MLOOPCOL |
      CD_MASK_ORIGSPACE_MLOOP | CD_MASK_GRID_PAINT_MASK | CD_MASK_PROP_ALL),
 };
@@ -2380,7 +2380,9 @@ static bool attribute_stored_in_bmesh_flag(const StringRef name)
               ".select_vert",
               ".select_edge",
               ".select_poly",
-              "material_index");
+              "material_index"
+              ".corner_vert",
+              ".corner_edge");
 }
 
 CustomData CustomData_shallow_copy_remove_non_bmesh_attributes(const CustomData *src,
diff --git a/source/blender/blenkernel/intern/mball_tessellate.cc b/source/blender/blenkernel/intern/mball_tessellate.cc
index 40df2d63c56..b8c9cc1eb7b 100644
--- a/source/blender/blenkernel/intern/mball_tessellate.cc
+++ b/source/blender/blenkernel/intern/mball_tessellate.cc
@@ -1470,8 +1470,8 @@ Mesh *BKE_mball_polygonize(Depsgraph *depsgraph, Scene *scene, Object *ob)
   mesh->totpoly = int(process.curindex);
   MPoly *mpoly = static_cast<MPoly *>(
       CustomData_add_layer(&mesh->pdata, CD_MPOLY, CD_CONSTRUCT, nullptr, mesh->totpoly));
-  int *corner_verts = static_cast<int *>(
-      CustomData_add_layer(&mesh->ldata, CD_MLOOP, CD_CONSTRUCT, nullptr, mesh->totpoly * 4));
+  int *corner_verts = static_cast<int *>(CustomData_add_layer_named(
+      &mesh->ldata, CD_PROP_INT32, CD_CONSTRUCT, nullptr, mesh->totpoly * 4, ".corner_vert"));
 
   int loop_offset = 0;
   for (int i = 0; i < mesh->totpoly; i++) {
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 015ef4820b0..ffed9d4b4c8 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -892,8 +892,13 @@ static void mesh_ensure_cdlayers_primary(Mesh *mesh, bool do_tessface)
   if (!CustomData_get_layer(&mesh->edata, CD_MEDGE)) {
     CustomData_add_layer(&mesh->edata, CD_MEDGE, CD_SET_DEFAULT, nullptr, mesh->totedge);
   }
-  if (!CustomData_get_layer(&mesh->ldata, CD_MLOOP)) {
-    CustomData_add_layer(&mesh->ldata, CD_MLOOP, CD_SET_DEFAULT, nullptr, mesh->totloop);
+  if (!CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, ".corner_vert")) {
+    CustomData_add_layer_named(
+        &mesh->ldata, CD_PROP_INT32, CD_SET_DEFAULT, nullptr, mesh->totloop, ".corner_vert");
+  }
+  if (!CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list