[Bf-blender-cvs] [1f4aa3c40f1] refactor-mesh-face-generic: 83 remaining uses of MPoly

Hans Goudey noreply at git.blender.org
Sun Feb 5 04:59:05 CET 2023


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



More information about the Bf-blender-cvs mailing list