[Bf-blender-cvs] [8e2dae3f8d0] refactor-mesh-corners-generic: Merge branch 'refactor-mesh-position-generic' into refactor-mesh-corners-generic

Hans Goudey noreply at git.blender.org
Wed Dec 14 00:17:07 CET 2022


Commit: 8e2dae3f8d0c363431778b94a2bc4e2bee65f39a
Author: Hans Goudey
Date:   Tue Dec 13 17:11:13 2022 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB8e2dae3f8d0c363431778b94a2bc4e2bee65f39a

Merge branch 'refactor-mesh-position-generic' into refactor-mesh-corners-generic

===================================================================



===================================================================

diff --cc source/blender/blenkernel/intern/mesh.cc
index 6a9f4b05027,3d5e2f69cb2..20db130fc4f
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -512,12 -516,8 +515,14 @@@ static int customdata_compare
        }
        /* At this point `l1` and `l2` have the same name and type, so they should be compared. */
  
+       found_corresponding_layer = true;
+ 
 +      if (StringRef(l1->name) == ".corner_edge") {
 +        /* TODO(Hans): This attribute wasn't tested before loops were refactored into separate
 +         * corner edges and corner verts arrays. Remove after updating tests. */
 +        continue;
 +      }
 +
        switch (l1->type) {
          /* We're order-agnostic for edges here. */
          case CD_MEDGE: {
diff --cc source/blender/blenkernel/intern/multires.cc
index 1f48f247726,8a12684530d..292edf53293
--- a/source/blender/blenkernel/intern/multires.cc
+++ b/source/blender/blenkernel/intern/multires.cc
@@@ -1595,7 -1618,7 +1617,7 @@@ int mdisp_rot_face_to_crn
      float mindist = FLT_MAX;
  
      for (i = 0; i < mpoly->totloop; i++) {
-       float len = len_v3v3(nullptr, positions[corner_verts[mpoly->loopstart + i]].co);
 -      float len = len_v3v3(nullptr, positions[mloop[mpoly->loopstart + i].v]);
++      float len = len_v3v3(nullptr, positions[corner_verts[mpoly->loopstart + i]]);
        if (len < mindist) {
          mindist = len;
          minS = i;
diff --cc source/blender/blenkernel/intern/pbvh_pixels.cc
index d6757afcbef,e21103c9f19..a1c1a88e398
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@@ -361,8 -361,10 +361,10 @@@ static void update_pixels(PBVH *pbvh, M
      return;
    }
  
-   uv_islands::MeshData mesh_data(
-       pbvh->looptri, pbvh->totprim, pbvh->totvert, pbvh->corner_verts, ldata_uv);
+   uv_islands::MeshData mesh_data({pbvh->looptri, pbvh->totprim},
 -                                 {pbvh->mloop, mesh->totloop},
++                                 {pbvh->corner_verts, mesh->totloop},
+                                  pbvh->totvert,
+                                  {ldata_uv, mesh->totloop});
    uv_islands::UVIslands islands(mesh_data);
  
    uv_islands::UVIslandsMask uv_masks;
diff --cc source/blender/blenkernel/intern/pbvh_uv_islands.cc
index c62d7f2586d,21645e50e7e..b4cf67b8eb3
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.cc
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.cc
@@@ -125,14 -125,14 +125,14 @@@ static void mesh_data_init_primitives(M
  
  static void mesh_data_init_edges(MeshData &mesh_data)
  {
-   mesh_data.edges.reserve(mesh_data.looptri_len * 2);
-   EdgeHash *eh = BLI_edgehash_new_ex(__func__, mesh_data.looptri_len * 3);
-   for (int64_t i = 0; i < mesh_data.looptri_len; i++) {
-     const MLoopTri &tri = mesh_data.looptri[i];
+   mesh_data.edges.reserve(mesh_data.looptris.size() * 2);
+   EdgeHash *eh = BLI_edgehash_new_ex(__func__, mesh_data.looptris.size() * 3);
+   for (int64_t i = 0; i < mesh_data.looptris.size(); i++) {
+     const MLoopTri &tri = mesh_data.looptris[i];
      MeshPrimitive &primitive = mesh_data.primitives[i];
      for (int j = 0; j < 3; j++) {
 -      int v1 = mesh_data.loops[tri.tri[j]].v;
 -      int v2 = mesh_data.loops[tri.tri[(j + 1) % 3]].v;
 +      int v1 = mesh_data.corner_verts[tri.tri[j]];
 +      int v2 = mesh_data.corner_verts[tri.tri[(j + 1) % 3]];
  
        void **edge_index_ptr;
        int64_t edge_index;
@@@ -215,16 -215,11 +215,11 @@@ static void mesh_data_init(MeshData &me
    mesh_data_init_primitive_uv_island_ids(mesh_data);
  }
  
- MeshData::MeshData(const MLoopTri *looptri,
-                    const int64_t looptri_len,
-                    const int64_t vert_len,
-                    const int *corner_verts,
-                    const MLoopUV *mloopuv)
-     : looptri(looptri),
-       looptri_len(looptri_len),
-       vert_len(vert_len),
-       corner_verts(corner_verts),
-       mloopuv(mloopuv)
+ MeshData::MeshData(const Span<MLoopTri> looptris,
 -                   const Span<MLoop> loops,
++                   const Span<int> corner_verts,
+                    const int verts_num,
+                    const Span<MLoopUV> mloopuv)
 -    : looptris(looptris), verts_num(verts_num), loops(loops), mloopuv(mloopuv)
++    : looptris(looptris), verts_num(verts_num), corner_verts(corner_verts), mloopuv(mloopuv)
  {
    mesh_data_init(*this);
  }
diff --cc source/blender/blenkernel/intern/pbvh_uv_islands.hh
index c086f79371c,4d81f5da00c..5d893f87d47
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.hh
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.hh
@@@ -92,11 -92,10 +92,10 @@@ struct MeshPrimitive 
   */
  struct MeshData {
   public:
-   const MLoopTri *looptri;
-   const int64_t looptri_len;
-   const int64_t vert_len;
-   const int *corner_verts;
-   const MLoopUV *mloopuv;
+   const Span<MLoopTri> looptris;
+   const int64_t verts_num;
 -  const Span<MLoop> loops;
++  const Span<int> corner_verts;
+   const Span<MLoopUV> mloopuv;
  
    Vector<MeshPrimitive> primitives;
    Vector<MeshEdge> edges;
@@@ -105,11 -104,10 +104,10 @@@
    int64_t uv_island_len;
  
   public:
-   explicit MeshData(const MLoopTri *looptri,
-                     const int64_t looptri_len,
-                     const int64_t vert_len,
-                     const int *corner_verts,
-                     const MLoopUV *mloopuv);
+   explicit MeshData(const Span<MLoopTri> looptris,
 -                    const Span<MLoop> loops,
++                    const Span<int> corner_verts,
+                     const int verts_num,
+                     const Span<MLoopUV> mloopuv);
  };
  
  struct UVVertex {
diff --cc source/blender/makesdna/DNA_meshdata_types.h
index 3057bfb30c0,7c1abc80525..982ab6d1f8d
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@@ -461,18 -447,31 +434,46 @@@ enum 
  /** \name Deprecated Structs
   * \{ */
  
++#ifdef DNA_DEPRECATED_ALLOW
++
+ /**
+  * Deprecated mesh vertex data structure. Now stored with generic attributes.
+  */
 -#ifdef DNA_DEPRECATED_ALLOW
++
+ typedef struct MVert {
+   float co_legacy[3];
+   /**
+    * Deprecated flag for storing hide status and selection, which are now stored in separate
+    * generic attributes. Kept for file read and write.
+    */
+   char flag_legacy;
+   /**
+    * Deprecated bevel weight storage, now located in #CD_BWEIGHT, except for file read and write.
+    */
+   char bweight_legacy;
+   char _pad[2];
+ } MVert;
+ 
+ /** #MVert.flag */
+ enum {
+   /** Deprecated selection status. Now stored in ".select_vert" attribute. */
+   /*  SELECT = (1 << 0), */
+   /** Deprecated hide status. Now stored in ".hide_vert" attribute. */
+   ME_HIDE = (1 << 4),
+ };
++
 +/**
 + * Mesh Face Corners.
 + * Deprecated storage for the vertex of a face corner and the following edge.
 + * Replaced by the "corner_verts" and "corner_edges" arrays.
 + */
- #ifdef DNA_DEPRECATED_ALLOW
 +typedef struct MLoop {
 +  /** Vertex index. */
 +  unsigned int v;
 +  /** Edge index into an #MEdge array. */
 +  unsigned int e;
 +} MLoop;
++
  #endif
  
  /**
diff --cc source/blender/modifiers/intern/MOD_screw.cc
index 7e928fb1446,071fc84c9bf..576637b425e
--- a/source/blender/modifiers/intern/MOD_screw.cc
+++ b/source/blender/modifiers/intern/MOD_screw.cc
@@@ -389,16 -389,15 +389,16 @@@ static Mesh *modifyMesh(ModifierData *m
    float(*positions_new)[3] = BKE_mesh_positions_for_write(result);
    MEdge *medge_new = BKE_mesh_edges_for_write(result);
    MPoly *mpoly_new = BKE_mesh_polys_for_write(result);
 -  MLoop *mloop_new = BKE_mesh_loops_for_write(result);
 +  int *corner_verts_new = BKE_mesh_corner_verts_for_write(result);
 +  int *corner_edges_new = BKE_mesh_corner_edges_for_write(result);
  
    if (!CustomData_has_layer(&result->pdata, CD_ORIGINDEX)) {
-     CustomData_add_layer(&result->pdata, CD_ORIGINDEX, CD_SET_DEFAULT, NULL, (int)maxPolys);
+     CustomData_add_layer(&result->pdata, CD_ORIGINDEX, CD_SET_DEFAULT, nullptr, int(maxPolys));
    }
  
-   int *origindex = CustomData_get_layer(&result->pdata, CD_ORIGINDEX);
+   int *origindex = static_cast<int *>(CustomData_get_layer(&result->pdata, CD_ORIGINDEX));
  
-   CustomData_copy_data(&mesh->vdata, &result->vdata, 0, 0, (int)totvert);
+   CustomData_copy_data(&mesh->vdata, &result->vdata, 0, 0, int(totvert));
  
    if (mloopuv_layers_tot) {
      const float zero_co[3] = {0};
@@@ -447,19 -449,18 +450,18 @@@
      memset(vert_loop_map, 0xff, sizeof(*vert_loop_map) * totvert);
  
      for (i = 0, mp_orig = mpoly_orig; i < totpoly; i++, mp_orig++) {
-       uint loopstart = (uint)mp_orig->loopstart;
-       uint loopend = loopstart + (uint)mp_orig->totloop;
+       uint loopstart = uint(mp_orig->loopstart);
+       uint loopend = loopstart + uint(mp_orig->totloop);
  
 -      const MLoop *ml_orig = &mloop_orig[loopstart];
--      uint k;
-       for (k = loopstart; k < loopend; k++) {
-         const uint vert_i = (uint)corner_verts_orig[loopstart + k];
-         const uint edge_i = (uint)corner_edges_orig[loopstart + k];
 -      for (k = loopstart; k < loopend; k++, ml_orig++) {
 -        edge_poly_map[ml_orig->e] = i;
 -        vert_loop_map[ml_orig->v] = k;
++      for (uint k = loopstart; k < loopend; k++) {
++        const uint vert_i = uint(corner_verts_orig[k]);
++        const uint edge_i = uint(corner_edges_orig[k]);
 +        edge_poly_map[edge_i] = i;
 +        vert_loop_map[vert_i] = k;
  
          /* also order edges based on faces */
 -        if (medge_new[ml_orig->e].v1 != ml_orig->v) {
 -          SWAP(uint, medge_new[ml_orig->e].v1, medge_new[ml_orig->e].v2);
 +        if (medge_new[edge_i].v1 != vert_i) {
 +          SWAP(uint, medge_new[edge_i].v1, medge_new[edge_i].v2);
          }
        }
      }
@@@ -824,7 -826,7 +827,7 @@@
    }
  
    mp_new = mpoly_new;
-   int dst_corner_i = 0;
 -  ml_new = mloop_new;
++  int new_loop_index = 0;
    med_new_firstloop = medge_new;
  
    /* more of an offset in this case */
@@@ -886,21 -888,23 +889,22 @@@
  
        /* Loop-Custom-Data */
        if (has_mloop_orig) {
 -        int l_index = int(ml_new - 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list