[Bf-blender-cvs] [8e2dae3f8d0] refactor-mesh-corners-generic: Merge branch 'refactor-mesh-position-generic' into refactor-mesh-corners-generic
Hans Goudey
noreply at git.blender.org
Wed Dec 14 00:17:07 CET 2022
Commit: 8e2dae3f8d0c363431778b94a2bc4e2bee65f39a
Author: Hans Goudey
Date: Tue Dec 13 17:11:13 2022 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB8e2dae3f8d0c363431778b94a2bc4e2bee65f39a
Merge branch 'refactor-mesh-position-generic' into refactor-mesh-corners-generic
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/mesh.cc
index 6a9f4b05027,3d5e2f69cb2..20db130fc4f
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -512,12 -516,8 +515,14 @@@ static int customdata_compare
}
/* At this point `l1` and `l2` have the same name and type, so they should be compared. */
+ found_corresponding_layer = true;
+
+ if (StringRef(l1->name) == ".corner_edge") {
+ /* TODO(Hans): This attribute wasn't tested before loops were refactored into separate
+ * corner edges and corner verts arrays. Remove after updating tests. */
+ continue;
+ }
+
switch (l1->type) {
/* We're order-agnostic for edges here. */
case CD_MEDGE: {
diff --cc source/blender/blenkernel/intern/multires.cc
index 1f48f247726,8a12684530d..292edf53293
--- a/source/blender/blenkernel/intern/multires.cc
+++ b/source/blender/blenkernel/intern/multires.cc
@@@ -1595,7 -1618,7 +1617,7 @@@ int mdisp_rot_face_to_crn
float mindist = FLT_MAX;
for (i = 0; i < mpoly->totloop; i++) {
- float len = len_v3v3(nullptr, positions[corner_verts[mpoly->loopstart + i]].co);
- float len = len_v3v3(nullptr, positions[mloop[mpoly->loopstart + i].v]);
++ float len = len_v3v3(nullptr, positions[corner_verts[mpoly->loopstart + i]]);
if (len < mindist) {
mindist = len;
minS = i;
diff --cc source/blender/blenkernel/intern/pbvh_pixels.cc
index d6757afcbef,e21103c9f19..a1c1a88e398
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@@ -361,8 -361,10 +361,10 @@@ static void update_pixels(PBVH *pbvh, M
return;
}
- uv_islands::MeshData mesh_data(
- pbvh->looptri, pbvh->totprim, pbvh->totvert, pbvh->corner_verts, ldata_uv);
+ uv_islands::MeshData mesh_data({pbvh->looptri, pbvh->totprim},
- {pbvh->mloop, mesh->totloop},
++ {pbvh->corner_verts, mesh->totloop},
+ pbvh->totvert,
+ {ldata_uv, mesh->totloop});
uv_islands::UVIslands islands(mesh_data);
uv_islands::UVIslandsMask uv_masks;
diff --cc source/blender/blenkernel/intern/pbvh_uv_islands.cc
index c62d7f2586d,21645e50e7e..b4cf67b8eb3
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.cc
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.cc
@@@ -125,14 -125,14 +125,14 @@@ static void mesh_data_init_primitives(M
static void mesh_data_init_edges(MeshData &mesh_data)
{
- mesh_data.edges.reserve(mesh_data.looptri_len * 2);
- EdgeHash *eh = BLI_edgehash_new_ex(__func__, mesh_data.looptri_len * 3);
- for (int64_t i = 0; i < mesh_data.looptri_len; i++) {
- const MLoopTri &tri = mesh_data.looptri[i];
+ mesh_data.edges.reserve(mesh_data.looptris.size() * 2);
+ EdgeHash *eh = BLI_edgehash_new_ex(__func__, mesh_data.looptris.size() * 3);
+ for (int64_t i = 0; i < mesh_data.looptris.size(); i++) {
+ const MLoopTri &tri = mesh_data.looptris[i];
MeshPrimitive &primitive = mesh_data.primitives[i];
for (int j = 0; j < 3; j++) {
- int v1 = mesh_data.loops[tri.tri[j]].v;
- int v2 = mesh_data.loops[tri.tri[(j + 1) % 3]].v;
+ int v1 = mesh_data.corner_verts[tri.tri[j]];
+ int v2 = mesh_data.corner_verts[tri.tri[(j + 1) % 3]];
void **edge_index_ptr;
int64_t edge_index;
@@@ -215,16 -215,11 +215,11 @@@ static void mesh_data_init(MeshData &me
mesh_data_init_primitive_uv_island_ids(mesh_data);
}
- MeshData::MeshData(const MLoopTri *looptri,
- const int64_t looptri_len,
- const int64_t vert_len,
- const int *corner_verts,
- const MLoopUV *mloopuv)
- : looptri(looptri),
- looptri_len(looptri_len),
- vert_len(vert_len),
- corner_verts(corner_verts),
- mloopuv(mloopuv)
+ MeshData::MeshData(const Span<MLoopTri> looptris,
- const Span<MLoop> loops,
++ const Span<int> corner_verts,
+ const int verts_num,
+ const Span<MLoopUV> mloopuv)
- : looptris(looptris), verts_num(verts_num), loops(loops), mloopuv(mloopuv)
++ : looptris(looptris), verts_num(verts_num), corner_verts(corner_verts), mloopuv(mloopuv)
{
mesh_data_init(*this);
}
diff --cc source/blender/blenkernel/intern/pbvh_uv_islands.hh
index c086f79371c,4d81f5da00c..5d893f87d47
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.hh
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.hh
@@@ -92,11 -92,10 +92,10 @@@ struct MeshPrimitive
*/
struct MeshData {
public:
- const MLoopTri *looptri;
- const int64_t looptri_len;
- const int64_t vert_len;
- const int *corner_verts;
- const MLoopUV *mloopuv;
+ const Span<MLoopTri> looptris;
+ const int64_t verts_num;
- const Span<MLoop> loops;
++ const Span<int> corner_verts;
+ const Span<MLoopUV> mloopuv;
Vector<MeshPrimitive> primitives;
Vector<MeshEdge> edges;
@@@ -105,11 -104,10 +104,10 @@@
int64_t uv_island_len;
public:
- explicit MeshData(const MLoopTri *looptri,
- const int64_t looptri_len,
- const int64_t vert_len,
- const int *corner_verts,
- const MLoopUV *mloopuv);
+ explicit MeshData(const Span<MLoopTri> looptris,
- const Span<MLoop> loops,
++ const Span<int> corner_verts,
+ const int verts_num,
+ const Span<MLoopUV> mloopuv);
};
struct UVVertex {
diff --cc source/blender/makesdna/DNA_meshdata_types.h
index 3057bfb30c0,7c1abc80525..982ab6d1f8d
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@@ -461,18 -447,31 +434,46 @@@ enum
/** \name Deprecated Structs
* \{ */
++#ifdef DNA_DEPRECATED_ALLOW
++
+ /**
+ * Deprecated mesh vertex data structure. Now stored with generic attributes.
+ */
-#ifdef DNA_DEPRECATED_ALLOW
++
+ typedef struct MVert {
+ float co_legacy[3];
+ /**
+ * Deprecated flag for storing hide status and selection, which are now stored in separate
+ * generic attributes. Kept for file read and write.
+ */
+ char flag_legacy;
+ /**
+ * Deprecated bevel weight storage, now located in #CD_BWEIGHT, except for file read and write.
+ */
+ char bweight_legacy;
+ char _pad[2];
+ } MVert;
+
+ /** #MVert.flag */
+ enum {
+ /** Deprecated selection status. Now stored in ".select_vert" attribute. */
+ /* SELECT = (1 << 0), */
+ /** Deprecated hide status. Now stored in ".hide_vert" attribute. */
+ ME_HIDE = (1 << 4),
+ };
++
+/**
+ * Mesh Face Corners.
+ * Deprecated storage for the vertex of a face corner and the following edge.
+ * Replaced by the "corner_verts" and "corner_edges" arrays.
+ */
- #ifdef DNA_DEPRECATED_ALLOW
+typedef struct MLoop {
+ /** Vertex index. */
+ unsigned int v;
+ /** Edge index into an #MEdge array. */
+ unsigned int e;
+} MLoop;
++
#endif
/**
diff --cc source/blender/modifiers/intern/MOD_screw.cc
index 7e928fb1446,071fc84c9bf..576637b425e
--- a/source/blender/modifiers/intern/MOD_screw.cc
+++ b/source/blender/modifiers/intern/MOD_screw.cc
@@@ -389,16 -389,15 +389,16 @@@ static Mesh *modifyMesh(ModifierData *m
float(*positions_new)[3] = BKE_mesh_positions_for_write(result);
MEdge *medge_new = BKE_mesh_edges_for_write(result);
MPoly *mpoly_new = BKE_mesh_polys_for_write(result);
- MLoop *mloop_new = BKE_mesh_loops_for_write(result);
+ int *corner_verts_new = BKE_mesh_corner_verts_for_write(result);
+ int *corner_edges_new = BKE_mesh_corner_edges_for_write(result);
if (!CustomData_has_layer(&result->pdata, CD_ORIGINDEX)) {
- CustomData_add_layer(&result->pdata, CD_ORIGINDEX, CD_SET_DEFAULT, NULL, (int)maxPolys);
+ CustomData_add_layer(&result->pdata, CD_ORIGINDEX, CD_SET_DEFAULT, nullptr, int(maxPolys));
}
- int *origindex = CustomData_get_layer(&result->pdata, CD_ORIGINDEX);
+ int *origindex = static_cast<int *>(CustomData_get_layer(&result->pdata, CD_ORIGINDEX));
- CustomData_copy_data(&mesh->vdata, &result->vdata, 0, 0, (int)totvert);
+ CustomData_copy_data(&mesh->vdata, &result->vdata, 0, 0, int(totvert));
if (mloopuv_layers_tot) {
const float zero_co[3] = {0};
@@@ -447,19 -449,18 +450,18 @@@
memset(vert_loop_map, 0xff, sizeof(*vert_loop_map) * totvert);
for (i = 0, mp_orig = mpoly_orig; i < totpoly; i++, mp_orig++) {
- uint loopstart = (uint)mp_orig->loopstart;
- uint loopend = loopstart + (uint)mp_orig->totloop;
+ uint loopstart = uint(mp_orig->loopstart);
+ uint loopend = loopstart + uint(mp_orig->totloop);
- const MLoop *ml_orig = &mloop_orig[loopstart];
-- uint k;
- for (k = loopstart; k < loopend; k++) {
- const uint vert_i = (uint)corner_verts_orig[loopstart + k];
- const uint edge_i = (uint)corner_edges_orig[loopstart + k];
- for (k = loopstart; k < loopend; k++, ml_orig++) {
- edge_poly_map[ml_orig->e] = i;
- vert_loop_map[ml_orig->v] = k;
++ for (uint k = loopstart; k < loopend; k++) {
++ const uint vert_i = uint(corner_verts_orig[k]);
++ const uint edge_i = uint(corner_edges_orig[k]);
+ edge_poly_map[edge_i] = i;
+ vert_loop_map[vert_i] = k;
/* also order edges based on faces */
- if (medge_new[ml_orig->e].v1 != ml_orig->v) {
- SWAP(uint, medge_new[ml_orig->e].v1, medge_new[ml_orig->e].v2);
+ if (medge_new[edge_i].v1 != vert_i) {
+ SWAP(uint, medge_new[edge_i].v1, medge_new[edge_i].v2);
}
}
}
@@@ -824,7 -826,7 +827,7 @@@
}
mp_new = mpoly_new;
- int dst_corner_i = 0;
- ml_new = mloop_new;
++ int new_loop_index = 0;
med_new_firstloop = medge_new;
/* more of an offset in this case */
@@@ -886,21 -888,23 +889,22 @@@
/* Loop-Custom-Data */
if (has_mloop_orig) {
- int l_index = int(ml_new -
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list