[Bf-blender-cvs] [c94f259fe4c] refactor-mesh-face-generic: Start refactor of MPoly

Hans Goudey noreply at git.blender.org
Sat Jan 28 19:58:21 CET 2023


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. @@



More information about the Bf-blender-cvs mailing list