Commit: c94f259fe4c33da6b69cca59880317c1b67ecbba Author: Hans Goudey Date: Sat Jan 28 12:57:50 2023 -0600 Branches: refactor-mesh-face-generic https://developer.blender.org/rBc94f259fe4c33da6b69cca59880317c1b67ecbba
Start refactor of MPoly TODO: - multires_reshape.h to C++ - `MeshRenderData` nontrivial - BKE_mesh_tangent.h to C++ - Remove `ps_tri_index_to_mpoly` - Remove `BKE_mesh_polys_flip` - All sculpt and pbvh files to C++ (SculptSession) (PBVH) =================================================================== M source/blender/blenkernel/BKE_DerivedMesh.h M source/blender/blenkernel/BKE_deform.h M source/blender/blenkernel/BKE_mesh.h M source/blender/blenkernel/BKE_mesh_mapping.h M source/blender/blenkernel/BKE_mesh_remap.h M source/blender/blenkernel/BKE_mesh_tangent.h M source/blender/blenkernel/BKE_multires.h M source/blender/blenkernel/BKE_paint.h M source/blender/blenkernel/BKE_particle.h M source/blender/blenkernel/BKE_pbvh.h M source/blender/blenkernel/BKE_shrinkwrap.h M source/blender/blenkernel/BKE_subdiv_ccg.h M source/blender/blenkernel/BKE_volume_to_mesh.hh M source/blender/blenkernel/intern/DerivedMesh.cc M source/blender/blenkernel/intern/bvhutils.cc M source/blender/blenkernel/intern/cdderivedmesh.cc M source/blender/blenkernel/intern/cloth.cc M source/blender/blenkernel/intern/crazyspace.cc M source/blender/blenkernel/intern/curve_to_mesh_convert.cc M source/blender/blenkernel/intern/data_transfer.cc M source/blender/blenkernel/intern/deform.cc M source/blender/blenkernel/intern/dynamicpaint.cc M source/blender/blenkernel/intern/fluid.cc M source/blender/blenkernel/intern/geometry_component_mesh.cc M source/blender/blenkernel/intern/gpencil_geom.cc M source/blender/blenkernel/intern/key.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_calc_edges.cc M source/blender/blenkernel/intern/mesh_convert.cc M source/blender/blenkernel/intern/mesh_evaluate.cc M source/blender/blenkernel/intern/mesh_fair.cc M source/blender/blenkernel/intern/mesh_iterators.cc M source/blender/blenkernel/intern/mesh_legacy_convert.cc M source/blender/blenkernel/intern/mesh_mapping.cc M source/blender/blenkernel/intern/mesh_merge.c M source/blender/blenkernel/intern/mesh_merge_customdata.cc M source/blender/blenkernel/intern/mesh_mirror.cc M source/blender/blenkernel/intern/mesh_normals.cc M source/blender/blenkernel/intern/mesh_remap.cc M source/blender/blenkernel/intern/mesh_remesh_voxel.cc M source/blender/blenkernel/intern/mesh_runtime.cc M source/blender/blenkernel/intern/mesh_tangent.cc M source/blender/blenkernel/intern/mesh_tessellate.cc M source/blender/blenkernel/intern/mesh_validate.cc M source/blender/blenkernel/intern/multires.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_unsubdivide.cc M source/blender/blenkernel/intern/object_dupli.cc M source/blender/blenkernel/intern/paint.cc M source/blender/blenkernel/intern/pbvh.c M source/blender/blenkernel/intern/pbvh_colors.cc M source/blender/blenkernel/intern/pbvh_intern.h M source/blender/blenkernel/intern/shrinkwrap.cc M source/blender/blenkernel/intern/softbody.c M source/blender/blenkernel/intern/subdiv_ccg_mask.cc M source/blender/blenkernel/intern/subdiv_converter_mesh.cc M source/blender/blenkernel/intern/subdiv_displacement_multires.cc M source/blender/blenkernel/intern/subdiv_eval.cc M source/blender/blenkernel/intern/subdiv_foreach.cc M source/blender/blenkernel/intern/subdiv_mesh.cc M source/blender/blenkernel/intern/volume_to_mesh.cc M source/blender/blenlib/BLI_offset_indices.hh M source/blender/blenloader/intern/versioning_290.cc M source/blender/bmesh/intern/bmesh_mesh_convert.cc M source/blender/draw/DRW_pbvh.h M source/blender/draw/intern/draw_cache_extract_mesh.cc M source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc M source/blender/draw/intern/draw_cache_impl_subdivision.cc M source/blender/draw/intern/draw_pbvh.cc M source/blender/draw/intern/mesh_extractors/extract_mesh.hh M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_orco.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_select_idx.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc M source/blender/editors/armature/meshlaplacian.cc M source/blender/editors/mesh/editface.cc M source/blender/editors/mesh/mesh_data.cc M source/blender/editors/mesh/meshtools.cc M source/blender/editors/object/object_bake_api.cc M source/blender/editors/object/object_vgroup.cc M source/blender/editors/sculpt_paint/paint_image_proj.cc M source/blender/editors/sculpt_paint/paint_mask.cc M source/blender/editors/sculpt_paint/paint_vertex.cc M source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc M source/blender/editors/sculpt_paint/sculpt.cc M source/blender/editors/sculpt_paint/sculpt_expand.cc M source/blender/editors/sculpt_paint/sculpt_face_set.cc M source/blender/editors/sculpt_paint/sculpt_geodesic.cc M source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc M source/blender/editors/space_view3d/drawobject.cc M source/blender/editors/transform/transform_snap_object.cc M source/blender/editors/uvedit/uvedit_unwrap_ops.cc M source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp M source/blender/geometry/intern/mesh_merge_by_distance.cc M source/blender/geometry/intern/mesh_primitive_cuboid.cc M source/blender/geometry/intern/mesh_split_edges.cc M source/blender/geometry/intern/realize_instances.cc M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc M source/blender/gpu/intern/gpu_shader_builder_stubs.cc M source/blender/io/alembic/exporter/abc_writer_mesh.cc M source/blender/io/alembic/intern/abc_customdata.cc M source/blender/io/alembic/intern/abc_customdata.h M source/blender/io/alembic/intern/abc_reader_mesh.cc M source/blender/io/collada/GeometryExporter.cpp M source/blender/io/collada/MeshImporter.cpp M source/blender/io/collada/MeshImporter.h M source/blender/io/stl/importer/stl_import_mesh.cc M source/blender/io/usd/intern/usd_reader_mesh.cc M source/blender/io/usd/intern/usd_writer_mesh.cc M source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc M source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh M source/blender/io/wavefront_obj/importer/obj_import_mesh.cc M source/blender/makesdna/DNA_mesh_types.h M source/blender/makesdna/DNA_meshdata_types.h M source/blender/makesrna/intern/rna_mesh.c M source/blender/makesrna/intern/rna_mesh_api.c M source/blender/makesrna/intern/rna_particle.c M source/blender/modifiers/intern/MOD_array.cc M source/blender/modifiers/intern/MOD_build.cc M source/blender/modifiers/intern/MOD_correctivesmooth.cc M source/blender/modifiers/intern/MOD_explode.cc M source/blender/modifiers/intern/MOD_laplaciansmooth.cc M source/blender/modifiers/intern/MOD_mask.cc M source/blender/modifiers/intern/MOD_meshcache.c M source/blender/modifiers/intern/MOD_meshsequencecache.cc M source/blender/modifiers/intern/MOD_normal_edit.cc M source/blender/modifiers/intern/MOD_ocean.cc M source/blender/modifiers/intern/MOD_particleinstance.cc M source/blender/modifiers/intern/MOD_remesh.cc M source/blender/modifiers/intern/MOD_screw.cc M source/blender/modifiers/intern/MOD_solidify_extrude.cc M source/blender/modifiers/intern/MOD_solidify_nonmanifold.cc M source/blender/modifiers/intern/MOD_surfacedeform.cc M source/blender/modifiers/intern/MOD_util.cc M source/blender/modifiers/intern/MOD_uvproject.cc M source/blender/modifiers/intern/MOD_uvwarp.cc M source/blender/modifiers/intern/MOD_weighted_normal.cc M source/blender/nodes/geometry/nodes/node_geo_blur_attribute.cc M source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc M source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc M source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc M source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc M source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc M source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc M source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc M source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc M source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_area.cc M source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc M source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_neighbors.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_face_group_boundaries.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_corner.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_topology_face_of_corner.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_topology_offset_corner_in_face.cc M source/blender/nodes/geometry/nodes/node_geo_sample_nearest.cc M source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc M source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc M source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc M source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc M source/blender/render/intern/bake.cc M source/blender/render/intern/multires_bake.cc M source/blender/render/intern/texture_margin.cc =================================================================== diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index d63c8c89682..7daf65375e3 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -68,10 +68,10 @@ struct Scene; /* * NOTE: all #MFace interfaces now officially operate on tessellated data. - * Also, the #MFace orig-index layer indexes #MPoly, not #MFace. + * Also, the #MFace orig-index layer indexes polys, not #MFace. */ -/* keep in sync with MFace/MPoly types */ +/* keep in sync with MFace type */ typedef struct DMFlagMat { short mat_nr; bool sharp; @@ -131,7 +131,7 @@ struct DerivedMesh { struct MEdge *(*getEdgeArray)(DerivedMesh *dm); int *(*getCornerVertArray)(DerivedMesh *dm); int *(*getCornerEdgeArray)(DerivedMesh *dm); - struct MPoly *(*getPolyArray)(DerivedMesh *dm); + int *(*getPolyArray)(DerivedMesh *dm); /** Copy all verts/edges/faces from the derived mesh into * *{vert/edge/face}_r (must point to a buffer large enough) @@ -140,7 +140,7 @@ struct DerivedMesh { void (*copyEdgeArray)(DerivedMesh *dm, struct MEdge *r_edge); void (*copyCornerVertArray)(DerivedMesh *dm, int *r_corner_verts); void (*copyCornerEdgeArray)(DerivedMesh *dm, int *r_corner_edges); - void (*copyPolyArray)(DerivedMesh *dm, struct MPoly *r_poly); + void (*copyPolyArray)(DerivedMesh *dm, int *r_poly); /** Return a pointer to the entire array of vert/edge/face custom data * from the derived mesh (this gives a pointer to the actual data, not diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h index 595a33d4220..16ea8aefc6f 100644 --- a/source/blender/blenkernel/BKE_deform.h +++ b/source/blender/blenkernel/BKE_deform.h @@ -18,7 +18,6 @@ struct ID; struct ListBase; struct MDeformVert; struct MEdge; -struct MPoly; struct Object; struct bDeformGroup; @@ -278,7 +277,7 @@ void BKE_defvert_extract_vgroup_to_polyweights(const struct MDeformVert *dvert, int verts_num, const int *corner_verts, int loops_num, - const struct MPoly *polys, + const int *poly_offsets, int polys_num, bool invert_vgroup, float *r_weights); diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 0611cc46aa6..4c5bd8eac23 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -35,7 +35,6 @@ struct MDisps; struct MEdge; struct MFace; struct MLoopTri; -struct MPoly; struct Main; struct MemArena; struct Mesh; @@ -105,20 +104,22 @@ void BKE_mesh_ensure_default_orig_index_customdata(struct Mesh *mesh); */ void BKE_mesh_ensure_default_orig_index_customdata_no_check(struct Mesh *mesh); +#ifdef __cplusplus + /** * Find the index of the loop in 'poly' which references vertex, * returns -1 if not found */ -int poly_find_loop_from_vert(const struct MPoly *poly, const int *poly_verts, int vert); +int poly_find_loop_from_vert(const blender::Span<int> poly_verts, int vert); + /** * Fill \a r_adj with the loop indices in \a poly adjacent to the * vertex. Returns the index of the loop matching vertex, or -1 if the * vertex is not in \a poly */ -int poly_get_adj_loops_from_vert(const struct MPoly *poly, - const int *corner_verts, - int vert, - int r_adj[2]); +int poly_get_adj_loops_from_vert(const blender::Span<int> poly_verts, int vert, int r_adj[2]); + +#endif /** * Return the index of the edge vert that is not equal to \a v. If @@ -324,7 +325,7 @@ void BKE_mesh_vert_coords_apply(struct Mesh *mesh, const float (*vert_coords)[3] * Calculate tessellation into #MLoopTri which exist only for this purpose. */ void BKE_mesh_recalc_looptri(const int *corner_verts, - const struct MPoly *mpoly, + const int *poly_offsets, const float (*vert_positions)[3], int totloop, int totpoly, @@ -338,7 +339,7 @@ void BKE_mesh_recalc_looptri(const int *corner_verts, * to be calculated which aren't needed for tessellation. */ void BKE_mesh_recalc_looptri_with_normals(const int *corner_verts, - const struct MPoly *mpoly, + const int *poly_offsets, const float (*vert_positions)[3], int totloop, int totpoly, @@ -419,8 +420,9 @@ bool BKE_mesh_vertex_normals_are_dirty(const struct Mesh *mesh); */ bool BKE_mesh_poly_normals_are_dirty(const struct Mesh *mesh); -void BKE_mesh_calc_poly_normal(const struct MPoly *mpoly, - const int *poly_verts, +#ifdef __cplusplus + +void BKE_mesh_calc_poly_normal(Span<int> poly_verts, const float (*vert_positions)[3], float r_no[3]); @@ -434,8 +436,7 @@ void BKE_mesh_calc_normals_poly(const float (*vert_positions)[3], int mvert_len, const int *corner_verts, int mloop_len, - const struct MPoly *mpoly, - int mpoly_len, + blender::OffsetIndices<int> polys, float (*r_poly_normals)[3]); /** @@ -448,11 +449,12 @@ void BKE_mesh_calc_normals_poly_and_vertex(const float (*vert_positions)[3], int mvert_len, const int *corner_verts, int mloop_len, - const struct MPoly *mpoly, - int mpoly_len, + blender::OffsetIndices<int> polys, float (*r_poly_normals)[3], float (*r_vert_normals)[3]); +#endif + /** * Calculate vertex and face normals, storing the result in custom data layers on the mesh. * @@ -467,6 +469,8 @@ void BKE_mesh_calc_normals(struct Mesh *me); */ void BKE_mesh_ensure_normals_for_display(struct Mesh *mesh); +#ifdef __cplusplus + /** * Define sharp edges as needed to mimic 'autosmooth' from angle threshold. * @@ -479,13 +483,14 @@ void BKE_edges_sharp_from_angle_set(int numEdges, const int *corner_verts, const int *corner_edges, int corners_num, - const struct MPoly *mpolys, + blender::OffsetIndices<int> polys, const float (*poly_normals)[3], const bool *sharp_faces, - int numPolys, float split_angle, bool *sharp_edges); +#endif + /** * References a contiguous loop-fan with normal offset vars. */ @@ -591,6 +596,8 @@ void BKE_lnor_space_custom_normal_to_data(const MLoopNorSpace *lnor_space, /* Medium-level custom normals functions. */ +#ifdef __cplusplus + /** * Compute split normals, i.e. vertex normals associated with each poly (hence 'loop normals'). * Useful to materialize sharp edges (or non-smooth faces) without actually modifying the geometry @@ -610,9 +617,8 @@ void BKE_mesh_normals_loop_split(const float (*vert_positions)[3], const int *corner_edges, float (*r_loop_normals)[3], int numLoops, - const struct MPoly *mpolys, + blender::OffsetIndices<int> polys, const float (*poly_normals)[3], - int numPolys, bool use_split_normals, float split_angle, const bool *sharp_edges, @@ -630,10 +636,9 @@ void BKE_mesh_normals_loop_custom_set(const float (*vert_positions)[3], const int *corner_edges, float (*r_custom_loop_normals)[3], int numLoops, - const struct MPoly *mpolys, + blender::OffsetIndices<int> polys, const float (*poly_normals)[3], const bool *sharp_faces, - int numPolys, bool *sharp_edges, short (*r_clnors_data)[2]); void BKE_mesh_normals_loop_custom_from_verts_set(const float (*vert_positions)[3], @@ -645,13 +650,14 @@ void BKE_mesh_normals_loop_custom_from_verts_set(const float (*vert_positions)[3 const int *corner_verts, const int *corner_edges, int corners_num, - const struct MPoly *mpolys, + blender::OffsetIndices<int> polys, const float (*poly_normals)[3], const bool *sharp_faces, - @@ 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