[Bf-blender-cvs] [7172a11018d] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

Hans Goudey noreply at git.blender.org
Fri Jan 20 20:01:32 CET 2023


Commit: 7172a11018d17886b0a715a0f5641903867f755e
Author: Hans Goudey
Date:   Fri Jan 20 12:49:31 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB7172a11018d17886b0a715a0f5641903867f755e

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

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



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

diff --cc source/blender/blenkernel/intern/multires_reshape_apply_base.cc
index f4add2491bf,d491f30a1ad..8f7ca2142b4
--- a/source/blender/blenkernel/intern/multires_reshape_apply_base.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_apply_base.cc
@@@ -119,13 -120,15 +118,14 @@@ void multires_reshape_apply_base_refit_
        /* Set up poly, loops, and coords in order to call BKE_mesh_calc_poly_normal(). */
        fake_poly.totloop = p->totloop;
        fake_poly.loopstart = 0;
-       int *poly_verts = MEM_malloc_arrayN(p->totloop, sizeof(int), __func__);
-       fake_co = MEM_malloc_arrayN(p->totloop, sizeof(float[3]), "fake_co");
 -      MLoop *fake_loops = static_cast<MLoop *>(
 -          MEM_malloc_arrayN(p->totloop, sizeof(MLoop), __func__));
++      int *poly_verts = static_cast<int *>(MEM_malloc_arrayN(p->totloop, sizeof(int), __func__));
+       float(*fake_co)[3] = static_cast<float(*)[3]>(
+           MEM_malloc_arrayN(p->totloop, sizeof(float[3]), __func__));
  
        for (int k = 0; k < p->totloop; k++) {
 -        const int vndx = reshape_context->base_loops[p->loopstart + k].v;
 +        const int vndx = reshape_context->base_corner_verts[p->loopstart + k];
  
 -        fake_loops[k].v = k;
 +        poly_verts[k] = k;
  
          if (vndx == i) {
            copy_v3_v3(fake_co[k], center);
diff --cc source/blender/blenkernel/intern/multires_reshape_subdivide.cc
index 2b72103a31c,c65b78cb160..d502466e4d1
--- a/source/blender/blenkernel/intern/multires_reshape_subdivide.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_subdivide.cc
@@@ -30,9 -30,10 +30,10 @@@ static void multires_subdivide_create_o
  {
    const float(*positions)[3] = BKE_mesh_vert_positions(mesh);
    const MPoly *polys = BKE_mesh_polys(mesh);
 -  const MLoop *loops = BKE_mesh_loops(mesh);
 +  const int *corner_verts = BKE_mesh_corner_verts(mesh);
  
-   MDisps *mdisps = CustomData_get_layer_for_write(&mesh->ldata, CD_MDISPS, mesh->totloop);
+   MDisps *mdisps = static_cast<MDisps *>(
+       CustomData_get_layer_for_write(&mesh->ldata, CD_MDISPS, mesh->totloop));
    const int totpoly = mesh->totpoly;
    for (int p = 0; p < totpoly; p++) {
      const MPoly *poly = &polys[p];
diff --cc source/blender/blenkernel/intern/multires_reshape_util.cc
index ce5bed1cecf,aa0fcbb7147..460446f52bf
--- a/source/blender/blenkernel/intern/multires_reshape_util.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_util.cc
@@@ -157,10 -158,9 +158,10 @@@ bool multires_reshape_context_create_fr
    reshape_context->base_positions = BKE_mesh_vert_positions(base_mesh);
    reshape_context->base_edges = BKE_mesh_edges(base_mesh);
    reshape_context->base_polys = BKE_mesh_polys(base_mesh);
 -  reshape_context->base_loops = BKE_mesh_loops(base_mesh);
 +  reshape_context->base_corner_verts = BKE_mesh_corner_verts(base_mesh);
 +  reshape_context->base_corner_edges = BKE_mesh_corner_edges(base_mesh);
  
-   reshape_context->subdiv = multires_reshape_create_subdiv(NULL, object, mmd);
+   reshape_context->subdiv = multires_reshape_create_subdiv(nullptr, object, mmd);
    reshape_context->need_free_subdiv = true;
  
    reshape_context->reshape.level = multires_get_level(
diff --cc source/blender/blenkernel/intern/pbvh_pixels.cc
index 39301d43eea,b1d635f566e..14a169c84ee
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@@ -366,7 -366,11 +366,11 @@@ static void update_pixels(PBVH *pbvh, M
    const VArraySpan<float2> uv_map = attributes.lookup<float2>(active_uv_name, ATTR_DOMAIN_CORNER);
  
    uv_islands::MeshData mesh_data(
-       {pbvh->looptri, pbvh->totprim}, {pbvh->corner_verts, mesh->totloop}, pbvh->totvert, uv_map);
+       {pbvh->looptri, pbvh->totprim},
 -      {pbvh->mloop, mesh->totloop},
++      {pbvh->corner_verts, mesh->totloop},
+       pbvh->totvert,
+       uv_map,
+       {static_cast<blender::float3 *>(static_cast<void *>(pbvh->vert_positions)), pbvh->totvert});
    uv_islands::UVIslands islands(mesh_data);
  
    uv_islands::UVIslandsMask uv_masks;
diff --cc source/blender/blenkernel/intern/pbvh_uv_islands.cc
index 7374631c2ff,16091b32917..bf40bdbd475
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.cc
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.cc
@@@ -208,13 -208,15 +208,15 @@@ static void mesh_data_init(MeshData &me
  }
  
  MeshData::MeshData(const Span<MLoopTri> looptris,
 -                   const Span<MLoop> loops,
 +                   const Span<int> corner_verts,
                     const int verts_num,
-                    const Span<float2> uv_map)
+                    const Span<float2> uv_map,
+                    const Span<float3> vertex_positions)
      : looptris(looptris),
        verts_num(verts_num),
 -      loops(loops),
 +      corner_verts(corner_verts),
        uv_map(uv_map),
+       vertex_positions(vertex_positions),
        vert_to_edge_map(verts_num),
        edge_to_primitive_map(0),
        primitive_to_edge_map(looptris.size())
diff --cc source/blender/blenkernel/intern/pbvh_uv_islands.hh
index 5cebac81abe,c1a0a4da5d8..91181a78c3f
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.hh
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.hh
@@@ -120,8 -120,9 +120,9 @@@ struct MeshData 
   public:
    const Span<MLoopTri> looptris;
    const int64_t verts_num;
 -  const Span<MLoop> loops;
 +  const Span<int> corner_verts;
    const Span<float2> uv_map;
+   const Span<float3> vertex_positions;
  
    VertToEdgeMap vert_to_edge_map;
  
@@@ -140,9 -141,10 +141,10 @@@
  
   public:
    explicit MeshData(Span<MLoopTri> looptris,
 -                    Span<MLoop> loops,
 +                    const Span<int> corner_verts,
                      const int verts_num,
-                     const Span<float2> uv_map);
+                     const Span<float2> uv_map,
+                     const Span<float3> vertex_positions);
  };
  
  struct UVVertex {
diff --cc source/blender/blenkernel/intern/subdiv_converter_mesh.cc
index 4b57d5ab64b,05fa391dcaa..6da760b1c17
--- a/source/blender/blenkernel/intern/subdiv_converter_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_converter_mesh.cc
@@@ -132,11 -133,12 +134,11 @@@ static void get_face_vertices(const Ope
                                int manifold_face_index,
                                int *manifold_face_vertices)
  {
-   ConverterStorage *storage = converter->user_data;
+   ConverterStorage *storage = static_cast<ConverterStorage *>(converter->user_data);
    const MPoly *poly = &storage->polys[manifold_face_index];
 -  const MLoop *mloop = storage->loops;
 -  for (int corner = 0; corner < poly->totloop; corner++) {
 -    manifold_face_vertices[corner] =
 -        storage->manifold_vertex_index[mloop[poly->loopstart + corner].v];
 +  for (int i = 0; i < poly->totloop; i++) {
 +    const int vert = storage->corner_verts[poly->loopstart + i];
 +    manifold_face_vertices[i] = storage->manifold_vertex_index[vert];
    }
  }
  
@@@ -397,10 -403,11 +402,12 @@@ static void init_user_data(OpenSubdiv_C
    user_data->vert_positions = BKE_mesh_vert_positions(mesh);
    user_data->edges = BKE_mesh_edges(mesh);
    user_data->polys = BKE_mesh_polys(mesh);
 -  user_data->loops = BKE_mesh_loops(mesh);
 +  user_data->corner_verts = BKE_mesh_corner_verts(mesh);
 +  user_data->corner_edges = BKE_mesh_corner_edges(mesh);
-   user_data->cd_vertex_crease = CustomData_get_layer(&mesh->vdata, CD_CREASE);
-   user_data->cd_edge_crease = CustomData_get_layer(&mesh->edata, CD_CREASE);
+   user_data->cd_vertex_crease = static_cast<const float *>(
+       CustomData_get_layer(&mesh->vdata, CD_CREASE));
+   user_data->cd_edge_crease = static_cast<const float *>(
+       CustomData_get_layer(&mesh->edata, CD_CREASE));
    user_data->loop_uv_indices = NULL;
    initialize_manifold_indices(user_data);
    converter->user_data = user_data;
diff --cc source/blender/blenkernel/intern/subsurf_ccg.cc
index 12e8a3e1963,a7342bb93b0..3ddec496020
--- a/source/blender/blenkernel/intern/subsurf_ccg.cc
+++ b/source/blender/blenkernel/intern/subsurf_ccg.cc
@@@ -49,13 -43,9 +43,9 @@@
  #include "BKE_scene.h"
  #include "BKE_subsurf.h"
  
- #ifndef USE_DYNSIZE
- #  include "BLI_array.h"
- #endif
- 
  #include "CCGSubSurf.h"
  
 -/* assumes MLoop's are laid out 4 for each poly, in order */
 +/* assumes corners are laid out 4 for each poly, in order */
  #define USE_LOOP_LAYOUT_FAST
  
  static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
@@@ -240,7 -231,7 +231,7 @@@ static int getFaceIndex
  }
  
  static void get_face_uv_map_vert(
-     UvVertMap *vmap, struct MPoly *mpoly, int *poly_verts, int fi, CCGVertHDL *fverts)
 -    UvVertMap *vmap, MPoly *mpoly, MLoop *ml, int fi, CCGVertHDL *fverts)
++    UvVertMap *vmap, MPoly *mpoly, int *poly_verts, int fi, CCGVertHDL *fverts)
  {
    UvMapVert *v, *nv;
    int j, nverts = mpoly[fi].totloop;
@@@ -285,7 -273,7 +273,7 @@@ static int ss_sync_from_uv(CCGSubSurf *
     * Also, initially intention is to treat merged vertices from mirror modifier as seams.
     * This fixes a very old regression (2.49 was correct here) */
    vmap = BKE_mesh_uv_vert_map_create(
-       mpoly, NULL, NULL, corner_verts, mloopuv, totface, totvert, limit, false, true);
 -      mpoly, nullptr, nullptr, mloop, mloopuv, totface, totvert, limit, false, true);
++      mpoly, nullptr, nullptr, corner_verts, mloopuv, totface, totvert, limit, false, true);
    if (!vmap) {
      return 0;
    }
@@@ -328,15 -316,11 +316,10 @@@
      int j, j_next;
      CCGFace *origf = ccgSubSurf_getFace(origss, POINTER_FROM_INT(i));
      /* uint *fv = &mp->v1; */
 -    MLoop *ml = mloop + mp->loopstart;
  
- #ifdef USE_DYNSIZE
-     CCGVertHDL fverts[nverts];
- #else
-     BLI_array_clear(fverts);
-     BLI_array_grow_items(fverts, nverts);
- #endif
+     fverts.reinitialize(nverts);
  
-     get_face_uv_map_vert(vmap, mpoly, &corner_verts[mp->loopstart], i, fverts);
 -    get_face_uv_map_vert(vmap, mpoly, ml, i, fverts.data());
++    get_face_uv_map_vert(vmap, mpoly, &corner_verts[mp->loopstart], i, fverts.data());
  
      for (j = 0, j_next = nverts - 1; j < nverts; j_next = j++) {
        uint v0 = POINTER_AS_UINT(fverts[j

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list