[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