[Bf-blender-cvs] [9726bb4e51d] refactor-mesh-corners-generic: Initial progress splitting MLoop in two arrays

Hans Goudey noreply at git.blender.org
Sun Nov 27 21:09:49 CET 2022


Commit: 9726bb4e51d73398d66649de7f157f003fe2d6dc
Author: Hans Goudey
Date:   Sun Nov 27 14:09:27 2022 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB9726bb4e51d73398d66649de7f157f003fe2d6dc

Initial progress splitting MLoop in two arrays

About halfway through removing all uses of `MLoop`. See T102359

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

M	intern/cycles/blender/mesh.cpp
M	source/blender/blenkernel/BKE_DerivedMesh.h
M	source/blender/blenkernel/BKE_bvhutils.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_runtime.h
M	source/blender/blenkernel/BKE_mesh_sample.hh
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_pbvh.h
M	source/blender/blenkernel/BKE_subdiv_ccg.h
M	source/blender/blenkernel/BKE_volume_to_mesh.hh
M	source/blender/blenkernel/intern/bvhutils.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.c
M	source/blender/blenkernel/intern/deform.c
M	source/blender/blenkernel/intern/effect.c
M	source/blender/blenkernel/intern/fluid.c
M	source/blender/blenkernel/intern/geometry_component_mesh.cc
M	source/blender/blenkernel/intern/gpencil_geom.cc
M	source/blender/blenkernel/intern/key.c
M	source/blender/blenkernel/intern/mball_tessellate.cc
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_calc_edges.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_mapping.cc
M	source/blender/blenkernel/intern/mesh_mirror.c
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_sample.cc
M	source/blender/blenkernel/intern/mesh_tangent.cc
M	source/blender/blenkernel/intern/mesh_tessellate.cc
M	source/blender/blenkernel/intern/multires.cc
M	source/blender/blenkernel/intern/multires_reshape.h
M	source/blender/blenkernel/intern/multires_reshape_apply_base.c
M	source/blender/blenkernel/intern/multires_reshape_smooth.c
M	source/blender/blenkernel/intern/multires_reshape_subdivide.c
M	source/blender/blenkernel/intern/multires_unsubdivide.c
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.cc
M	source/blender/blenkernel/intern/pbvh_intern.h
M	source/blender/blenkernel/intern/pbvh_pixels.cc
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/blenkernel/intern/shrinkwrap.cc
M	source/blender/blenkernel/intern/softbody.c
M	source/blender/blenkernel/intern/subdiv_ccg.cc
M	source/blender/blenkernel/intern/subdiv_converter_mesh.c
M	source/blender/blenkernel/intern/subdiv_eval.c
M	source/blender/blenkernel/intern/subdiv_foreach.c
M	source/blender/blenkernel/intern/subdiv_mesh.cc
M	source/blender/blenkernel/intern/subsurf_ccg.c
M	source/blender/blenkernel/intern/volume_to_mesh.cc
M	source/blender/bmesh/intern/bmesh_mesh_convert.cc
M	source/blender/draw/DRW_pbvh.h
M	source/blender/draw/intern/draw_pbvh.cc
M	source/blender/editors/curves/intern/curves_ops.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_remesh.cc
M	source/blender/editors/object/object_vgroup.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_add.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_slide.cc
M	source/blender/editors/sculpt_paint/paint_image_proj.cc
M	source/blender/editors/sculpt_paint/paint_mask.c
M	source/blender/editors/sculpt_paint/paint_utils.c
M	source/blender/editors/sculpt_paint/paint_vertex.cc
M	source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
M	source/blender/editors/sculpt_paint/sculpt.cc
M	source/blender/editors/sculpt_paint/sculpt_expand.c
M	source/blender/editors/sculpt_paint/sculpt_face_set.cc
M	source/blender/editors/sculpt_paint/sculpt_geodesic.c
M	source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/editors/transform/transform_snap_object.cc
M	source/blender/editors/uvedit/uvedit_unwrap_ops.c
M	source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M	source/blender/geometry/intern/add_curves_on_mesh.cc
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_to_volume.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/importer/obj_import_mesh.cc
M	source/blender/makesdna/DNA_mesh_types.h
M	source/blender/makesdna/DNA_meshdata_types.h
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/nodes/geometry/nodes/node_geo_curve_fill.cc
M	source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc
M	source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
M	source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.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_edge_split.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_edge_neighbors.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_input_mesh_vertex_neighbors.cc
M	source/blender/nodes/geometry/nodes/node_geo_mesh_face_set_boundaries.cc
M	source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
M	source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
M	source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_vertex.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_vertex_of_corner.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/python/mathutils/mathutils_bvhtree.c
M	source/blender/render/intern/bake.c
M	source/blender/render/intern/multires_bake.c
M	source/blender/render/intern/texture_margin.cc
M	source/blender/render/intern/texture_pointdensity.c

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

diff --git a/intern/cycles/blender/mesh.cpp b/intern/cycles/blender/mesh.cpp
index fa4ddc24f56..bf387f9ad5e 100644
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@ -866,10 +866,10 @@ static void attr_create_random_per_island(Scene *scene,
   else {
     if (polys_num != 0) {
       const MPoly *polys = static_cast<const MPoly *>(b_mesh.polygons[0].ptr.data);
-      const MLoop *loops = static_cast<const MLoop *>(b_mesh.loops[0].ptr.data);
+      const int *corner_verts = b_mesh.corner_verts[0].ptr.data;
       for (int i = 0; i < polys_num; i++) {
         const MPoly &b_poly = polys[i];
-        const MLoop &b_loop = loops[b_poly.loopstart];
+        const int vert = corner_verts[b_poly.loopstart];
         data[i] = hash_uint_to_float(vertices_sets.find(b_loop.v));
       }
     }
@@ -1014,7 +1014,7 @@ static void create_mesh(Scene *scene,
   else {
     vector<int> vi;
 
-    const MLoop *loops = static_cast<const MLoop *>(b_mesh.loops[0].ptr.data);
+    const int *corner_verts = b_mesh.corner_verts[0].ptr.data;
 
     for (int i = 0; i < numfaces; i++) {
       const MPoly &b_poly = polys[i];
@@ -1025,8 +1025,7 @@ static void create_mesh(Scene *scene,
       vi.resize(n);
       for (int i = 0; i < n; i++) {
         /* NOTE: Autosmooth is already taken care about. */
-
-        vi[i] = loops[b_poly.loopstart + i].v;
+        vi[i] = corner_verts[b_poly.loopstart + i];
       }
 
       /* create subd faces */
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 967f9ea240c..75b51552bb6 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -129,7 +129,8 @@ struct DerivedMesh {
    */
   float *(*getVertArray)(DerivedMesh *dm);
   struct MEdge *(*getEdgeArray)(DerivedMesh *dm);
-  struct MLoop *(*getLoopArray)(DerivedMesh *dm);
+  int *(*getCornerVertArray)(DerivedMesh *dm);
+  int *(*getCornerEdgeArray)(DerivedMesh *dm);
   struct MPoly *(*getPolyArray)(DerivedMesh *dm);
 
   /** Copy all verts/edges/faces from the derived mesh into
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index 320eb698b20..087f1cf1b10 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -61,7 +61,7 @@ typedef struct BVHTreeFromMesh {
   const float (*positions)[3];
   const struct MEdge *edge;
   const struct MFace *face;
-  const struct MLoop *loop;
+  const int *corner_verts;
   const struct MLoopTri *looptri;
 
   /* Private data */
@@ -181,7 +181,7 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
  */
 BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data,
                                       const float (*positions)[3],
-                                      const struct MLoop *mloop,
+                                      const int *corner_verts,
                                       const struct MLoopTri *looptri,
                                       int looptri_num,
                                       const blender::BitVector<> &mask,
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index 4023d6829d4..e0c2f82af28 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 MLoop;
 struct MPoly;
 struct Object;
 struct bDeformGroup;
@@ -265,14 +264,14 @@ void BKE_defvert_extract_vgroup_to_edgeweights(const struct MDeformVert *dvert,
 void BKE_defvert_extract_vgroup_to_loopweights(const struct MDeformVert *dvert,
                                                int defgroup,
                                                int verts_num,
-                                               const struct MLoop *loops,
+                                               const int *corner_verts,
                                                int loops_num,
                                                bool invert_vgroup,
                                                float *r_weights);
 void BKE_defvert_extract_vgroup_to_polyweights(const struct MDeformVert *dvert,
                                                int defgroup,
                                                int verts_num,
-                                               const struct MLoop *loops,
+                                               const int *corner_verts,
                                                int loops_num,
                                                const struct MPoly *polys,
                                                int polys_num,
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 934847ae925..be9ab95a02d 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -34,7 +34,6 @@ struct MDeformVert;
 struct MDisps;
 struct MEdge;
 struct MFace;
-struct MLoop;
 struct MLoopTri;
 struct MLoopUV;
 struct MPoly;
@@ -112,14 +111,14 @@ void BKE_mesh_ensure_default_orig_index_customdata_no_check(struct Mesh *mesh);
  * 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 struct MLoop *loopstart, int vert);
+int poly_find_loop_from_vert(const struct MPoly *poly, const int *poly_corner_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 struct MLoop *mloop,
+                                 const int *corner_verts,
                                  int vert,
                                  int r_adj[2]);
 
@@ -342,7 +341,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 struct MLoop *mloop,
+void BKE_mesh_recalc_looptri(const int *corner_verts,
                              const struct MPoly *mpoly,
                              const float (*positions)[3],
                              int totloop,
@@ -356,7 +355,7 @@ void BKE_mesh_recalc_looptri(const struct MLoop *mloop,
  * to calculate normals just to use this function as it will cause the normals for triangles
  * to be calculated which aren't needed for tessellation.
  */
-void BKE_mesh_recalc_looptri_with_normals(const struct MLoop *mloop,
+void BKE_mesh_recalc_looptri_with_normals(const int *corner_verts,
                                           const struct MPoly *mpoly,
                                           const float (*positions)[3],
                                           int totloop,
@@ -439,7 +438,7 @@ 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 struct MLoop *loopstart,
+                               const int *poly_corner_verts,
                                const float (*positions)[3],
                                float r_no[3]);
 
@@ -451,7 +450,7 @@ void BKE_mesh_calc_poly_normal(const struct MPoly *mpoly,
  */
 void BKE_mesh_calc_normals_poly(const float (*positions)[3],
                                 int mvert_len,
-                                const struct MLoop *mloop,
+                                const int *corner_verts,
                                 int mloop_len,
                                 const struct MPoly *mpoly,
                                 int mpoly_len,
@@ -465,7 +464,7 @@ void BKE_mesh_calc_normals_poly(const float (*positions)[3],
  */
 void BKE_mesh_calc_normals_poly_and_vertex(const float (*positions)[3],
                                            int mvert_len,
-                                           const struct MLoop *mloop,
+                                           const int *corner_verts,
                                            int mloop_len,
                                            const struct MPoly *mpoly,
                                            int mpoly_len,
@@ -496,8 +495,9 @@ void BKE_edges_sharp_from_angle_set(const float (*positions)[3],
                                     int numVerts,
                                     struct MEdge *medges,
                                     int numEdges,
-                                    const struct MLoop *mloops,
-                                    int numLoops,
+                                    const int *corner_verts,
+                                    const int *corner_edges,
+                                    int corners_num,
                                     const struct MPoly *mpolys,
                                     const float (*polynors)[3],
                                     int numPolys,
@@ -620,9 +620,10 @@ void BKE_mesh_normals_loop_split(const float (*positions)[3],
                                  int numVerts,
                                  const struct MEdge *medges,
                                  int numEdges,
-                                 const struct MLoop *mloops,
+                                 const int *corner_verts,
+                                 const int *corner_edges,
                                  float (*r_loopnors)[3],
-                                 int numLoops,
+                                 int corners_num,
                                  const struct MPoly *mpolys,
                                  const float (*polynors)[3],
                                  int numPolys,
@@ -637,9 +638,10 @@ void BKE_mesh_normals_loop_custom_set(const float (*positions)[3],
                                       int numVerts,
                                       struct MEdge *medges,
                                       int numEdges,
-                                      const struct MLoop *mloops,
+       

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list