Mesh: Replace MLoop struct with generic attributes #104424

Merged
Hans Goudey merged 261 commits from refactor-mesh-corners-generic into main 2023-03-20 15:55:25 +01:00
5 changed files with 10 additions and 11 deletions
Showing only changes of commit f4f4987578 - Show all commits

View File

@ -235,7 +235,7 @@ static DerivedMesh *cdDM_from_mesh_ex(Mesh *mesh,
cddm->vert_normals = BKE_mesh_vertex_normals_ensure(mesh);
cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE);
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->corner_edges = CustomData_get_layer_named(&dm->loopData, CD_PROP_INT32, ".corner_edge");
cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY);
#if 0
cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);

View File

@ -92,8 +92,7 @@ static void set_coarse_positions(Subdiv *subdiv,
for (int poly_index = 0; poly_index < mesh->totpoly; poly_index++) {
const MPoly *poly = &mpoly[poly_index];
for (int i = 0; i < poly->totloop; i++) {
const int corner = poly->loopstart + i;
BLI_BITMAP_ENABLE(vertex_used_map, corner_verts[corner]);
BLI_BITMAP_ENABLE(vertex_used_map, corner_verts[poly->loopstart + i]);
}
}
/* Use a temporary buffer so we do not upload vertices one at a time to the GPU. */

View File

@ -431,7 +431,7 @@ static void subdiv_foreach_edge_vertices_regular_do(SubdivForeachTaskContext *ct
const int ptex_face_index = ctx->face_ptex_offset[coarse_poly_index];
for (int corner = 0; corner < coarse_poly->totloop; corner++) {
const int coarse_vert_index = ctx->coarse_corner_verts[coarse_poly->loopstart + corner];
const int coarse_edge_index = ctx->coarse_corner_verts[coarse_poly->loopstart + corner];
const int coarse_edge_index = ctx->coarse_corner_edges[coarse_poly->loopstart + corner];
if (check_usage &&
BLI_BITMAP_TEST_AND_SET_ATOMIC(ctx->coarse_edges_used_map, coarse_edge_index)) {
continue;
@ -494,7 +494,7 @@ static void subdiv_foreach_edge_vertices_special_do(SubdivForeachTaskContext *ct
int ptex_face_index = ptex_face_start_index;
for (int corner = 0; corner < coarse_poly->totloop; corner++, ptex_face_index++) {
const int coarse_vert_index = ctx->coarse_corner_verts[coarse_poly->loopstart + corner];
const int coarse_edge_index = ctx->coarse_corner_verts[coarse_poly->loopstart + corner];
const int coarse_edge_index = ctx->coarse_corner_edges[coarse_poly->loopstart + corner];
if (check_usage &&
BLI_BITMAP_TEST_AND_SET_ATOMIC(ctx->coarse_edges_used_map, coarse_edge_index)) {
continue;
@ -793,7 +793,7 @@ static void subdiv_foreach_edges_all_patches_regular(SubdivForeachTaskContext *c
/* Connect inner part of patch to boundary. */
for (int corner = 0; corner < coarse_poly->totloop; corner++) {
const int coarse_vert_index = ctx->coarse_corner_verts[coarse_poly->loopstart + corner];
const int coarse_edge_index = ctx->coarse_corner_verts[coarse_poly->loopstart + corner];
const int coarse_edge_index = ctx->coarse_corner_edges[coarse_poly->loopstart + corner];
const MEdge *coarse_edge = &ctx->coarse_edges[coarse_edge_index];
const int start_edge_vertex = ctx->vertices_edge_offset +
coarse_edge_index * num_subdiv_vertices_per_coarse_edge;
@ -901,11 +901,11 @@ static void subdiv_foreach_edges_all_patches_special(SubdivForeachTaskContext *c
}
}
/* Connect inner path of patch to boundary. */
int prev_corner_index = coarse_poly->totloop - 1;
int prev_corner = coarse_poly->totloop - 1;
for (int corner = 0; corner < coarse_poly->totloop; corner++) {
const int vert_i = ctx->coarse_corner_verts[coarse_poly->loopstart + corner];
const int edge_i = ctx->coarse_corner_edges[coarse_poly->loopstart + corner];
const int prev_edge_i = ctx->coarse_corner_edges[coarse_poly->loopstart + prev_corner_index];
const int prev_edge_i = ctx->coarse_corner_edges[coarse_poly->loopstart + prev_corner];
{
const MEdge *coarse_edge = &ctx->coarse_edges[edge_i];
const int start_edge_vertex = ctx->vertices_edge_offset +
@ -940,7 +940,7 @@ static void subdiv_foreach_edges_all_patches_special(SubdivForeachTaskContext *c
ctx->foreach_context, tls, ORIGINDEX_NONE, subdiv_edge_index, false, v1, v2);
}
}
prev_corner_index = corner;
prev_corner = corner;
}
}

View File

@ -1719,7 +1719,7 @@ static void nearest2d_data_init_mesh(const Mesh *mesh,
r_nearest2d->vert_normals = BKE_mesh_vertex_normals_ensure(mesh);
r_nearest2d->edge = mesh->edges().data();
r_nearest2d->corner_verts = mesh->corner_verts().data();
r_nearest2d->corner_verts = mesh->corner_edges().data();
r_nearest2d->corner_edges = mesh->corner_edges().data();
r_nearest2d->looptri = BKE_mesh_runtime_looptri_ensure(mesh);
r_nearest2d->is_persp = is_persp;

View File

@ -561,7 +561,7 @@ static void duplicate_faces(GeometrySet &geometry_set,
new_polys[poly_index].loopstart = loop_index;
for (const int i_loops : IndexRange(source.totloop)) {
const int src_corner_i = source.loopstart + i_loops;
corner_mapping[loop_index] = source.loopstart + i_loops;
corner_mapping[loop_index] = src_corner_i;
vert_mapping[loop_index] = corner_verts[src_corner_i];
new_edges[loop_index] = edges[corner_edges[src_corner_i]];
edge_mapping[loop_index] = corner_edges[src_corner_i];