[Bf-blender-cvs] [0aeb1f0c5bb] refactor-mesh-position-generic: Start converting mesh positions to a generic attribute

Hans Goudey noreply at git.blender.org
Mon Sep 12 00:36:12 CEST 2022


Commit: 0aeb1f0c5bb95be426d96a5ad9924610d909899d
Author: Hans Goudey
Date:   Sun Sep 11 17:36:06 2022 -0500
Branches: refactor-mesh-position-generic
https://developer.blender.org/rB0aeb1f0c5bb95be426d96a5ad9924610d909899d

Start converting mesh positions to a generic attribute

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

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_collision.h
M	source/blender/blenkernel/BKE_key.h
M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/BKE_mesh_fair.h
M	source/blender/blenkernel/BKE_mesh_mapping.h
M	source/blender/blenkernel/BKE_mesh_remap.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_particle.h
M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/BKE_subdiv.h
M	source/blender/blenkernel/BKE_subdiv_mesh.h
M	source/blender/blenkernel/BKE_volume_to_mesh.hh
M	source/blender/blenkernel/intern/DerivedMesh.cc
M	source/blender/blenkernel/intern/attribute_access_intern.hh
M	source/blender/blenkernel/intern/bvhutils.cc
M	source/blender/blenkernel/intern/cloth.c
M	source/blender/blenkernel/intern/collision.c
M	source/blender/blenkernel/intern/constraint.c
M	source/blender/blenkernel/intern/crazyspace.cc
M	source/blender/blenkernel/intern/curve_to_mesh_convert.cc
M	source/blender/blenkernel/intern/customdata.cc
M	source/blender/blenkernel/intern/data_transfer.c
M	source/blender/blenkernel/intern/dynamicpaint.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.c
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_boolean_convert.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.c
M	source/blender/blenkernel/intern/mesh_legacy_convert.cc
M	source/blender/blenkernel/intern/mesh_mapping.c
M	source/blender/blenkernel/intern/mesh_merge.c
M	source/blender/blenkernel/intern/mesh_mirror.c
M	source/blender/blenkernel/intern/mesh_normals.cc
M	source/blender/blenkernel/intern/mesh_remap.c
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/mesh_validate.cc
M	source/blender/blenkernel/intern/mesh_wrapper.cc
M	source/blender/blenkernel/intern/multires.c
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_subdivide.c
M	source/blender/blenkernel/intern/multires_reshape_util.c
M	source/blender/blenkernel/intern/object.cc
M	source/blender/blenkernel/intern/object_dupli.cc
M	source/blender/blenkernel/intern/paint.cc
M	source/blender/blenkernel/intern/particle.c
M	source/blender/blenkernel/intern/particle_distribute.c
M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/pbvh_intern.h
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/blenkernel/intern/shrinkwrap.c
M	source/blender/blenkernel/intern/softbody.c
M	source/blender/blenkernel/intern/subdiv_converter_mesh.c
M	source/blender/blenkernel/intern/subdiv_eval.c
M	source/blender/blenkernel/intern/subdiv_mesh.cc
M	source/blender/blenkernel/intern/volume_to_mesh.cc
M	source/blender/blenloader/intern/versioning_250.c
M	source/blender/blenloader/intern/versioning_290.c
M	source/blender/bmesh/intern/bmesh_mesh_convert.cc
M	source/blender/bmesh/intern/bmesh_mesh_convert.h
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/mesh_extractors/extract_mesh.hh
M	source/blender/editors/armature/armature_skinning.c
M	source/blender/editors/armature/meshlaplacian.c
M	source/blender/editors/curves/intern/curves_ops.cc
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/mesh/editface.cc
M	source/blender/editors/mesh/mesh_data.cc
M	source/blender/editors/mesh/mesh_mirror.c
M	source/blender/editors/mesh/meshtools.cc
M	source/blender/editors/object/object_bake_api.c
M	source/blender/editors/object/object_modifier.cc
M	source/blender/editors/object/object_remesh.cc
M	source/blender/editors/object/object_vgroup.cc
M	source/blender/editors/physics/particle_edit.c
M	source/blender/editors/physics/particle_object.c
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_hide.c
M	source/blender/editors/sculpt_paint/paint_image_proj.c
M	source/blender/editors/sculpt_paint/paint_mask.c
M	source/blender/editors/sculpt_paint/paint_utils.c
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_cloth.c
M	source/blender/editors/sculpt_paint/sculpt_face_set.c
M	source/blender/editors/sculpt_paint/sculpt_geodesic.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h
M	source/blender/editors/sculpt_paint/sculpt_paint_image.cc
M	source/blender/editors/sculpt_paint/sculpt_undo.c
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/editors/space_view3d/view3d_iterators.c
M	source/blender/editors/space_view3d/view3d_select.cc
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/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_curve_convert.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.c
M	source/blender/gpu/GPU_buffers.h
M	source/blender/gpu/intern/gpu_buffers.c
M	source/blender/gpu/intern/gpu_shader_builder_stubs.cc
M	source/blender/io/alembic/exporter/abc_writer_hair.cc
M	source/blender/io/alembic/exporter/abc_writer_mesh.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/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/io/wavefront_obj/tests/obj_importer_tests.cc
M	source/blender/makesdna/DNA_mesh_types.h
M	source/blender/makesdna/DNA_meshdata_types.h
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/intern/rna_mesh.c
M	source/blender/makesrna/intern/rna_particle.c
M	source/blender/modifiers/intern/MOD_array.c
M	source/blender/modifiers/intern/MOD_boolean.cc
M	source/blender/modifiers/intern/MOD_build.c
M	source/blender/modifiers/intern/MOD_collision.c
M	source/blender/modifiers/intern/MOD_datatransfer.c
M	source/blender/modifiers/intern/MOD_displace.c
M	source/blender/modifiers/intern/MOD_explode.c
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.c
M	source/blender/modifiers/intern/MOD_ocean.c
M	source/blender/modifiers/intern/MOD_particleinstance.c
M	source/blender/modifiers/intern/MOD_remesh.c
M	source/blender/modifiers/intern/MOD_screw.c
M	source/blender/modifiers/intern/MOD_skin.c
M	source/blender/modifiers/intern/MOD_solidify_extrude.c
M	source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
M	source/blender/modifiers/intern/MOD_surface.c
M	source/blender/modifiers/intern/MOD_surfacedeform.c
M	source/blender/modifiers/intern/MOD_util.c
M	source/blender/modifiers/intern/MOD_weighted_normal.c
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_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_extrude_mesh.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_vertices.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_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_line.cc
M	source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
M	source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_position.cc
M	source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.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 1d1eadebc39..74cbaeff925 100644
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@ -681,7 +681,7 @@ static void attr_create_pointiness(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, b
   if (num_verts == 0) {
     return;
   }
-  const MVert *verts = static_cast<const MVert *>(b_mesh.vertices[0].ptr.data);
+  const float(*positions)[3] = static_cast<const float(*)[3]>(b_mesh.vertices[0].ptr.data);
 
   /* STEP 1: Find out duplicated vertices and point duplicates to a single
    *         original vertex.
@@ -767,10 +767,8 @@ static void attr_create_pointiness(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, b
       continue;
     }
     visited_edges.insert(v0, v1);
-    const MVert &b_vert_0 = verts[v0];
-    const MVert &b_vert_1 = verts[v1];
-    float3 co0 = make_float3(b_vert_0.co[0], b_vert_0.co[1], b_vert_0.co[2]);
-    float3 co1 = make_float3(b_vert_1.co[0], b_vert_1.co[1], b_vert_1.co[2]);
+    float3 co0 = make_float3(positions[v0][0], positions[v0][1], positions[v0][2]);
+    float3 co1 = make_float3(positions[v1][0], positions[v1][1], positions[v1][2]);
     float3 edge = normalize(co1 - co0);
     edge_accum[v0] += edge;
     edge_accum[v1] += -edge;
@@ -921,7 +919,7 @@ static void create_mesh(Scene *scene,
     return;
   }
 
-  const MVert *verts = static_cast<const MVert *>(b_mesh.vertices[0].ptr.data);
+  const float(*positions)[3] = static_cast<const float(*)[3]>(b_mesh.vertices[0].ptr.data);
 
   if (!subdivision) {
     numtris = numfaces;
@@ -944,8 +942,7 @@ static void create_mesh(Scene *scene,
 
   /* create vertex coordinates and normals */
   for (int i = 0; i < numverts; i++) {
-    const MVert &b_vert = verts[i];
-    mesh->add_vertex(make_float3(b_vert.co[0], b_vert.co[1], b_vert.co[2]));
+    mesh->add_vertex(make_float3(positions[i][0], positions[i][1], positions[i][2]));
   }
 
   AttributeSet &attributes = (subdivision) ? mesh->subd_attributes : mesh->attributes;
@@ -1253,14 +1250,13 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
     float3 *mP = attr_mP->data_float3() + motion_step * numverts;
     float3 *mN = (attr_mN) ? attr_mN->data_float3() + motion_step * numverts : NULL;
 
-    const MVert *verts = static_cast<const MVert *>(b_mesh.vertices[0].ptr.data);
+    const float(*positions)[3] = static_cast<const float(*)[3]>((b_mesh.vertices[0].ptr.data);
 
     /* NOTE: We don't copy more that existing amount of vertices to prevent
      * possible memory corruption.
      */
     for (int i = 0; i < std::min<size_t>(b_verts_num, numverts); i++) {
-      const MVert &b_vert = verts[i];
-      mP[i] = make_float3(b_vert.co[0], b_vert.co[1], b_vert.co[2]);
+      mP[i] = make_float3(positions[i][0], positions[i][1], positions[i][2]);
     }
     if (mN) {
       const float(*b_vert_normals)[3] = static_cast<const float(*)[3]>(
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 4274ca97fd1..ceadd036a2a 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -61,7 +61,6 @@ struct CustomData_MeshMasks;
 struct Depsgraph;
 struct MEdge;
 struct MFace;
-struct MVert;
 struct Mesh;
 struct ModifierData;
 struct Object;
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index d22abd235df..564d4a284e2 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -20,7 +20,6 @@ extern "C" {
 
 struct BMEditMesh;
 struct MFace;
-struct MVert;
 struct Mesh;
 struct PointCloud;
 
@@ -54,7 +53,7 @@ typedef struct BVHTreeFromMesh {
   BVHTree_RayCastCallback raycast_callback;
 
   /* Vertex array, so that callbacks have instant access to data. */
-  const struct MVert *vert;
+  const float (*positions)[3];
   const float (*vert_normals)[3];
   const struct MEdge *edge;
   const struct MFace *face;
@@ -117,7 +116,7 @@ BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
  * (else will be computed from mask).
  */
 BVHTree *bvhtree_from_mesh_verts_ex(struct BVHTreeFromMesh *data,
-                                    const struct MVert *vert,
+                                    const float (*positions)[3],
                                     int verts_num,
                                     const BLI_bitmap *verts_mask,
                                     int verts_num_active,
@@ -148,7 +147,7 @@ BVHTree *bvhtree_from_editmesh_edges_ex(BVHTreeFromEditMesh *data,
  * (else will be computed from mask).
  */
 BVHTree *bvhtree_from_mesh_edges_ex(struct BVHTreeFromMesh *data,
-                                    const struct MVert *vert,
+                                    const float (*positions)[3],
                                     const struct MEdge *edge,
                                     int edges_num,
                                     const BLI_bitmap *edges_mask,
@@ -175,7 +174,7 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
  * Builds a BVH-tree where nodes are the looptri faces of the given mesh.
  */
 BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data,
-                                      const struct MVert *vert,
+                                      const float (*positions)[3],
                                       const struct MLoop *mloop,
                                       const struct MLoopTri *looptri,
                                       int looptri_num,
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index b93babaaefa..eaf8392fe66 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -14,7 +14,6 @@ struct BVHTree;
 struct Collection;
 struct CollisionModifierData;
 struct Depsgraph;
-struct MVert;
 struct MVertTri;
 struct Object;
 
@@ -87,13 +86,13 @@ typedef struct FaceCollPair {
 // used in modifier.c from collision.c
 /////////////////////////////////////////////////
 
-struct BVHTree *bvhtree_build_from_mvert(const struct MVert *mvert,
+struct BVHTree *bvhtree_build_from_mvert(const float (*positions)[3],
                                          const struct MVertTri *tri,
                                          int tri_num,
                                          float epsilon);
 void bvhtree_update_from_mvert(struct BVHTree *bvhtree,
-                               const struct MVert *mvert,
-                               const struct MVert *mvert_moving,
+                               const float (*positions)[3],
+                               const float (*positions_moving)[3],
                                const struct MVertTri *tri,
                                int tri_num,
                                bool moving);
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index 45a72e8d7a3..5c867041f47 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -13,7 +13,6 @@ struct Lattice;
 struct ListBase;
 struct Main;
 struct Mesh;
-struct MVert;
 struct Object;
 
 /* Kernel prototypes */
@@ -132,7 +131,7 @@ void BKE_keyblock_update_from_mesh(const struct Mesh *me, struct KeyBlock *kb);
 void BKE_keyblock_convert_from_mesh(const struct Mesh *me,
                                     const struct Key *key,
                                     struct KeyBlock *kb);
-void BKE_keyblock_convert_to_mesh(const struct KeyBlock *kb, struct MVert *mvert, int totvert);
+void BKE_keyblock_convert_to_mesh(const struct KeyBlock *kb, float (*positions)[3], int totvert);
 
 /**
  * Computes normals (vertices, polygons and/or loops ones) of given mesh for given shape key.
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index c1f4d9733aa..e15fade91c8 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -38,7 +38,6 @@ struct MLoop;
 struct MLoopTri;
 struct MLoopUV;
 struct MPoly;
-struct MVert;
 struct Main;
 struct MemArena;
 struct Mesh;
@@ -338,7 +337,7 @@ void BKE_mesh_vert_coords_apply(struct Mesh *mesh, const float (*vert_coords)[3]
  */
 void BKE_mesh_recalc_looptri(const struct MLoop *mloop,
                              const struct MPoly *mpoly,
-                             const struct MVert *mvert,
+                             const float (*positions)[3],
                              int totloop,
                              int totpoly,
                              struct MLoopTri *mlooptri);
@@ -352,7 +351,7 @@ void BKE_mesh_recalc_looptri(const struct MLoop *mloop,
  */
 void BKE_mesh_recalc_looptri_with_normals(const struct MLoop *mloop,
                                           const struct MPoly *mpoly,
-                                          const struct MVert *mvert,
+                                          const float (*positions)[3],
                                           int totloop,
                                           int totpoly,
                                           struct MLoopTri *mlooptri,
@@ -454,7 +453,7 @@ bool BKE_mesh_poly_normals_are_dirty(const struct Mesh *mesh);
  * \note Usually #BKE_mesh_poly_normals_ensure is the preferred way to access face normals,
  * since they may already be calculated and cached on the mesh.
  */
-void BKE_mesh_calc_normals_poly(const struct MVert *mvert,
+void BKE_mesh_calc_normals_poly(const float (*positions)[3],
                                 int mvert_len,
                                 const struct MLoop *mloop,
                                 int mloop_len,
@@ -468,7 +467,7 @@ void BKE_mesh_calc_normals_poly(const struct MVert *mvert,
  * \note Usually #BKE_mesh_vertex_normals_ensure is the preferred way to access vertex normals,
  * since they may already be calculated and cached on the mesh.
  */
-void BKE_mesh_calc_normals_poly_and_vertex(const struct MVert *mvert,
+void BKE_mesh_calc_normals_poly_and_vertex(const float (*positions)[3],
                                            int mvert_len,
                                            const struct MLoop 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list