Mesh: Move edge UV seams to a generic attribute
As part of #95966, move the `ME_SEAM` flag on mesh edges to a generic boolean attribute, called `.uv_seam`. This is the last bit of extra information stored in mesh edges. After this is committed we can switch to a different type for them and have a 1/3 improvement in memory consumption. It is also now possible to see that a mesh has no UV seams in constant time, and like other similar refactors, interacting with only the UV seams can be done with less memory. The attribute name starts with a `.` to signify that the attribute, like face sets, isn't meant to be used in arbitrary procedural situations (with geometry nodes for example). That gives us more freedom to change things in the future. Pull Request #104728
This commit is contained in:
@@ -999,8 +999,8 @@ void BKE_mesh_loop_islands_add(MeshIslandStore *island_store,
|
||||
sizeof(*innrcut->indices) * size_t(num_innercut_items));
|
||||
}
|
||||
|
||||
static bool mesh_calc_islands_loop_poly_uv(const MEdge *edges,
|
||||
const int totedge,
|
||||
static bool mesh_calc_islands_loop_poly_uv(const int totedge,
|
||||
const bool *uv_seams,
|
||||
const MPoly *polys,
|
||||
const int totpoly,
|
||||
const MLoop *loops,
|
||||
@@ -1085,7 +1085,7 @@ static bool mesh_calc_islands_loop_poly_uv(const MEdge *edges,
|
||||
}
|
||||
|
||||
/* Edge is UV boundary if tagged as seam. */
|
||||
return (edges[edge_index].flag & ME_SEAM) != 0;
|
||||
return uv_seams && uv_seams[edge_index];
|
||||
};
|
||||
|
||||
poly_edge_loop_islands_calc(totedge,
|
||||
@@ -1185,21 +1185,23 @@ bool BKE_mesh_calc_islands_loop_poly_edgeseam(const float (*vert_positions)[3],
|
||||
const int totvert,
|
||||
const MEdge *edges,
|
||||
const int totedge,
|
||||
const bool *uv_seams,
|
||||
const MPoly *polys,
|
||||
const int totpoly,
|
||||
const MLoop *loops,
|
||||
const int totloop,
|
||||
MeshIslandStore *r_island_store)
|
||||
{
|
||||
UNUSED_VARS(vert_positions, totvert);
|
||||
UNUSED_VARS(vert_positions, totvert, edges);
|
||||
return mesh_calc_islands_loop_poly_uv(
|
||||
edges, totedge, polys, totpoly, loops, totloop, nullptr, r_island_store);
|
||||
totedge, uv_seams, polys, totpoly, loops, totloop, nullptr, r_island_store);
|
||||
}
|
||||
|
||||
bool BKE_mesh_calc_islands_loop_poly_uvmap(float (*vert_positions)[3],
|
||||
const int totvert,
|
||||
MEdge *edges,
|
||||
const int totedge,
|
||||
const bool *uv_seams,
|
||||
MPoly *polys,
|
||||
const int totpoly,
|
||||
MLoop *loops,
|
||||
@@ -1207,10 +1209,10 @@ bool BKE_mesh_calc_islands_loop_poly_uvmap(float (*vert_positions)[3],
|
||||
const float (*luvs)[2],
|
||||
MeshIslandStore *r_island_store)
|
||||
{
|
||||
UNUSED_VARS(vert_positions, totvert);
|
||||
UNUSED_VARS(vert_positions, totvert, edges);
|
||||
BLI_assert(luvs != nullptr);
|
||||
return mesh_calc_islands_loop_poly_uv(
|
||||
edges, totedge, polys, totpoly, loops, totloop, luvs, r_island_store);
|
||||
totedge, uv_seams, polys, totpoly, loops, totloop, luvs, r_island_store);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
Reference in New Issue
Block a user