Commit: 1f4aa3c40f19a01464927963a13c32014782b9e7 Author: Hans Goudey Date: Sat Feb 4 22:58:45 2023 -0500 Branches: refactor-mesh-face-generic https://developer.blender.org/rB1f4aa3c40f19a01464927963a13c32014782b9e7
83 remaining uses of MPoly =================================================================== M source/blender/blenkernel/BKE_DerivedMesh.h M source/blender/blenkernel/BKE_mesh.h M source/blender/blenkernel/BKE_multires.h M source/blender/blenkernel/BKE_subdiv_ccg.h M source/blender/blenkernel/intern/DerivedMesh.cc M source/blender/blenkernel/intern/cdderivedmesh.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_mirror.cc M source/blender/blenkernel/intern/mesh_remap.cc M source/blender/blenkernel/intern/mesh_validate.cc M source/blender/blenkernel/intern/mesh_wrapper.cc M source/blender/blenkernel/intern/multires.cc M source/blender/blenkernel/intern/multires_reshape.hh M source/blender/blenkernel/intern/multires_reshape_apply_base.cc M source/blender/blenkernel/intern/multires_reshape_smooth.cc M source/blender/blenkernel/intern/multires_reshape_subdivide.cc M source/blender/blenkernel/intern/multires_reshape_util.cc M source/blender/blenkernel/intern/multires_reshape_vertcos.cc M source/blender/blenkernel/intern/multires_unsubdivide.cc M source/blender/blenkernel/intern/subdiv_ccg.cc M source/blender/blenkernel/intern/subdiv_displacement_multires.cc M source/blender/blenkernel/intern/subdiv_foreach.cc M source/blender/bmesh/intern/bmesh_mesh_convert.cc M source/blender/editors/armature/meshlaplacian.cc M source/blender/editors/mesh/meshtools.cc M source/blender/editors/object/object_bake_api.cc M source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc M source/blender/editors/sculpt_paint/sculpt.cc M source/blender/modifiers/intern/MOD_particleinstance.cc M source/blender/modifiers/intern/MOD_solidify_extrude.cc M source/blender/modifiers/intern/MOD_solidify_nonmanifold.cc M source/blender/render/intern/multires_bake.cc =================================================================== diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 7daf65375e3..418fb6524b6 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -90,6 +90,8 @@ struct DerivedMesh { int needsFree; /* checked on ->release, is set to 0 for cached results */ int deformedOnly; /* set by modifier stack if only deformed from original */ DerivedMeshType type; + /* Owned data. */ + int *poly_offsets; /** * \warning Typical access is done via #getLoopTriArray, #getNumLoopTri. diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 4c5bd8eac23..5eabf3c62fd 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -920,7 +920,7 @@ bool BKE_mesh_validate_arrays(struct Mesh *me, int *corner_verts, int *corner_edges, unsigned int totloop, - const int *poly_offsets, + int *poly_offsets, unsigned int totpoly, struct MDeformVert *dverts, /* assume totvert length */ bool do_verbose, diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index 7a91d9fe5c7..db6d594cd64 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -153,8 +153,7 @@ void old_mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, float /** * Find per-corner coordinate with given per-face UV coord. */ -int mdisp_rot_face_to_crn( - struct MPoly *mpoly, int face_side, float u, float v, float *x, float *y); +int mdisp_rot_face_to_crn(int face_size, int face_side, float u, float v, float *x, float *y); /* Reshaping, define in multires_reshape.cc */ diff --git a/source/blender/blenkernel/BKE_subdiv_ccg.h b/source/blender/blenkernel/BKE_subdiv_ccg.h index ddb9d8e462f..3ad5a0d89be 100644 --- a/source/blender/blenkernel/BKE_subdiv_ccg.h +++ b/source/blender/blenkernel/BKE_subdiv_ccg.h @@ -303,15 +303,20 @@ typedef enum SubdivCCGAdjacencyType { SUBDIV_CCG_ADJACENT_EDGE, } SubdivCCGAdjacencyType; +#ifdef __cplusplus + /* Returns if a grid coordinates is adjacent to a coarse mesh edge, vertex or nothing. If it is * adjacent to an edge, r_v1 and r_v2 will be set to the two vertices of that edge. If it is * adjacent to a vertex, r_v1 and r_v2 will be the index of that vertex. */ -SubdivCCGAdjacencyType BKE_subdiv_ccg_coarse_mesh_adjacency_info_get(const SubdivCCG *subdiv_ccg, - const SubdivCCGCoord *coord, - const int *corner_verts, - const int *poly_offsets, - int *r_v1, - int *r_v2); +SubdivCCGAdjacencyType BKE_subdiv_ccg_coarse_mesh_adjacency_info_get( + const SubdivCCG *subdiv_ccg, + const SubdivCCGCoord *coord, + const int *corner_verts, + const blender::OffsetIndices<int> polys, + int *r_v1, + int *r_v2); + +#endif /* Get array which is indexed by face index and contains index of a first grid of the face. * diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc index 225a1e776e6..5eb2e050637 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.cc +++ b/source/blender/blenkernel/intern/DerivedMesh.cc @@ -160,17 +160,10 @@ static int *dm_getCornerEdgeArray(DerivedMesh *dm) static int *dm_getPolyArray(DerivedMesh *dm) { - MPoly *mpoly = (MPoly *)CustomData_get_layer_for_write( - &dm->polyData, CD_MPOLY, dm->getNumPolys(dm)); - - if (!mpoly) { - mpoly = (MPoly *)CustomData_add_layer( - &dm->polyData, CD_MPOLY, CD_SET_DEFAULT, nullptr, dm->getNumPolys(dm)); - CustomData_set_layer_flag(&dm->polyData, CD_MPOLY, CD_FLAG_TEMPORARY); - dm->copyPolyArray(dm, mpoly); + if (!dm->poly_offsets) { + dm->poly_offsets = MEM_cnew_array<int>(dm->getNumPolys(dm) + 1, __func__); } - - return mpoly; + return dm->poly_offsets; } static int dm_getNumLoopTri(DerivedMesh *dm) diff --git a/source/blender/blenkernel/intern/cdderivedmesh.cc b/source/blender/blenkernel/intern/cdderivedmesh.cc index 9a44c9392ad..2ce8363d1cb 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.cc +++ b/source/blender/blenkernel/intern/cdderivedmesh.cc @@ -237,8 +237,7 @@ static DerivedMesh *cdDM_from_mesh_ex(Mesh *mesh, &dm->loopData, CD_PROP_INT32, ".corner_vert", mesh->totloop)); cddm->corner_edges = static_cast<int *>(CustomData_get_layer_named_for_write( &dm->loopData, CD_PROP_INT32, ".corner_edge", mesh->totloop)); - cddm->mpoly = static_cast<MPoly *>( - CustomData_get_layer_for_write(&dm->polyData, CD_MPOLY, mesh->totpoly)); + cddm->poly_offsets = static_cast<MPoly *>(nullptr) /* TODO. */; #if 0 cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE); #else diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc index 733254495a2..1ff8f918c61 100644 --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@ -268,7 +268,7 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address mesh, temp_arrays_for_legacy_format, vert_layers); mesh->mloop = BKE_mesh_legacy_convert_corners_to_loops( mesh, temp_arrays_for_legacy_format, loop_layers); - mesh->mpoly = BKE_mesh_legacy_convert_offsets_to_polys( + mesh->mpoly = BKE_mesh_legacy_convert_offsets_to_mpolys( mesh, temp_arrays_for_legacy_format, mesh.polys()); BKE_mesh_legacy_convert_hide_layers_to_flags(mesh); BKE_mesh_legacy_convert_selection_layers_to_flags(mesh); @@ -955,6 +955,7 @@ static void mesh_ensure_cdlayers_primary(Mesh *mesh, bool do_tessface) mesh->poly_offsets_data = static_cast<int *>( MEM_malloc_arrayN(mesh->totpoly + 1, sizeof(int), __func__)); } + mesh->poly_offsets_for_write().last() = mesh->totloop; } if (do_tessface && !CustomData_get_layer(&mesh->fdata, CD_MFACE)) { CustomData_add_layer(&mesh->fdata, CD_MFACE, CD_SET_DEFAULT, nullptr, mesh->totface); @@ -1518,8 +1519,8 @@ int poly_get_adj_loops_from_vert(const blender::Span<int> poly_verts, int vert, if (corner != -1) { /* vertex was found */ - r_adj[0] = corner_verts[ME_POLY_LOOP_PREV(poly, corner)]; - r_adj[1] = corner_verts[ME_POLY_LOOP_NEXT(poly, corner)]; + r_adj[0] = poly_verts[mod_i(corner - 1, poly_verts.size())]; + r_adj[1] = poly_verts[mod_i(corner + 1, poly_verts.size())]; } return corner; @@ -1840,7 +1841,7 @@ void BKE_mesh_calc_normals_split_ex(Mesh *mesh, CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, "sharp_face")); const Span<float3> positions = mesh->vert_positions(); const Span<MEdge> edges = mesh->edges(); - const OffsetIndices polys = mesh->polys(); + const blender::OffsetIndices polys = mesh->polys(); BKE_mesh_normals_loop_split(reinterpret_cast<const float(*)[3]>(positions.data()), BKE_mesh_vertex_normals_ensure(mesh), @@ -1853,7 +1854,6 @@ void BKE_mesh_calc_normals_split_ex(Mesh *mesh, mesh->totloop, polys, BKE_mesh_poly_normals_ensure(mesh), - polys.size(), use_split_normals, split_angle, sharp_edges, diff --git a/source/blender/blenkernel/intern/mesh_boolean_convert.cc b/source/blender/blenkernel/intern/mesh_boolean_convert.cc index ad7817e9f8a..32163f8bbfc 100644 --- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc +++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc @@ -98,10 +98,10 @@ class MeshesToIMeshInfo { int input_mesh_for_imesh_vert(int imesh_v) const; int input_mesh_for_imesh_edge(int imesh_e) const; int input_mesh_for_imesh_face(int imesh_f) const; - const MPoly *input_mpoly_for_orig_index(int orig_index, - const Mesh **r_orig_mesh, - int *r_orig_mesh_index, - int *r_index_in_orig_mesh) const; + const IndexRange input_mpoly_for_orig_index(int orig_index, + const Mesh **r_orig_mesh, + int *r_orig_mesh_index, + int *r_index_in_orig_mesh) const; void input_mvert_for_orig_index(int orig_index, const Mesh **r_orig_mesh, int *r_index_in_orig_mesh) const; @@ -137,7 +137,7 @@ int MeshesToIMeshInfo::input_mesh_for_imesh_edge(int imesh_e) const } /* Given an index `imesh_f` in the `IMesh`, return the index of the - * input `Mesh` that contained the `MPoly` that it came from. */ + * input `Mesh` that contained the polygon that it came from. */ int MeshesToIMeshInfo::input_mesh_for_imesh_face(int imesh_f) const { int n = int(mesh_poly_offset.size()); @@ -152,12 +152,12 @@ int MeshesToIMeshInfo::input_mesh_for_imesh_face(int imesh_f) const /* Given an index of an original face in the `IMesh`, find out the input * `Mesh` that it came from and return it in `*r_orig_mesh`, * and also return the index of that `Mesh` in `*r_orig_mesh_index`. - * Finally, return the index of the corresponding `MPoly` in that `Mesh` + * Finally, return the index of the corresponding polygon in that `Mesh` * in `*r_index_in_orig_mesh`. */ -const MPoly *MeshesToIMeshInfo::input_mpoly_for_orig_index(int orig_index, - const Mesh **r_orig_mesh, - @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs