[Bf-blender-cvs] [af71f0814dd] refactor-mesh-remove-pointers: Progress

Hans Goudey noreply at git.blender.org
Sat Jul 23 06:37:15 CEST 2022


Commit: af71f0814ddfc3c1b08b92a46579215b054b5e45
Author: Hans Goudey
Date:   Fri Jul 22 23:37:08 2022 -0500
Branches: refactor-mesh-remove-pointers
https://developer.blender.org/rBaf71f0814ddfc3c1b08b92a46579215b054b5e45

Progress

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

M	source/blender/blenkernel/BKE_bvhutils.h
M	source/blender/blenkernel/intern/bvhutils.cc
M	source/blender/blenkernel/intern/cloth.c
M	source/blender/blenkernel/intern/data_transfer.c
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenloader/intern/versioning_250.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/versioning_defaults.c
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/object/object_bake.c
M	source/blender/editors/object/object_vgroup.c
M	source/blender/editors/physics/particle_edit.c
M	source/blender/editors/sculpt_paint/curves_sculpt_add.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_slide.cc
M	source/blender/editors/space_view3d/view3d_iterators.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/geometry/intern/add_curves_on_mesh.cc
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M	source/blender/io/collada/MeshImporter.cpp
M	source/blender/io/usd/intern/usd_reader_mesh.cc
M	source/blender/makesdna/DNA_mesh_types.h
M	source/blender/makesrna/intern/rna_mesh.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_correctivesmooth.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_meshcache.c
M	source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc
M	source/blender/nodes/geometry/nodes/node_geo_material_selection.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_volume_to_mesh.cc

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

diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index d22abd235df..705a44dc3c3 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -57,8 +57,9 @@ typedef struct BVHTreeFromMesh {
   const struct MVert *vert;
   const float (*vert_normals)[3];
   const struct MEdge *edge;
-  const struct MFace *face;
+  const struct MPoly *polygons;
   const struct MLoop *loop;
+  const struct MFace *face;
   const struct MLoopTri *looptri;
 
   /* Private data */
diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index e802a5f08c0..e70fd8bd577 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -587,8 +587,9 @@ static void bvhtree_from_mesh_setup_data(BVHTree *tree,
 
   r_data->vert = vert;
   r_data->edge = edge;
-  r_data->face = face;
+  r_data->polygons = polygons;
   r_data->loop = loop;
+  r_data->face = face;
   r_data->looptri = looptri;
   r_data->vert_normals = vert_normals;
 
@@ -1259,7 +1260,7 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
                                vertices.data(),
                                edges.data(),
                                polygons.data(),
-                               mesh->mface,
+                               (const MFace *)CustomData_get_layer(&mesh->fdata, CD_MFACE),
                                loops.data(),
                                looptri,
                                BKE_mesh_vertex_normals_ensure(mesh),
@@ -1307,12 +1308,18 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
 
     case BVHTREE_FROM_FACES:
       BLI_assert(!(mesh->totface == 0 && mesh->totpoly != 0));
-      const MFace *mfaces = (const MFace *)CustomData_get_layer(&mesh->fdata, CD_MFACE);
       data->tree = bvhtree_from_mesh_faces_create_tree(
-          0.0f, tree_type, 6, vertices.data(), mfaces, mesh->totface, nullptr, -1);
+          0.0f,
+          tree_type,
+          6,
+          vertices.data(),
+          (const MFace *)CustomData_get_layer(&mesh->fdata, CD_MFACE),
+          mesh->totface,
+          nullptr,
+          -1);
       break;
 
-    case BVHTREE_FROM_LOOPTRI_NO_HIDDEN:
+    case BVHTREE_FROM_LOOPTRI_NO_HIDDEN: {
       blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*mesh);
       mask = looptri_no_hidden_map_get(
           polygons.data(),
@@ -1320,49 +1327,50 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
           looptri_len,
           &mask_bits_act_len);
       ATTR_FALLTHROUGH;
+    }
+    case BVHTREE_FROM_LOOPTRI:
+      data->tree = bvhtree_from_mesh_looptri_create_tree(0.0f,
+                                                         tree_type,
+                                                         6,
+                                                         vertices.data(),
+                                                         loops.data(),
+                                                         looptri,
+                                                         looptri_len,
+                                                         mask,
+                                                         mask_bits_act_len);
+      break;
+    case BVHTREE_FROM_EM_VERTS:
+    case BVHTREE_FROM_EM_EDGES:
+    case BVHTREE_FROM_EM_LOOPTRI:
+    case BVHTREE_MAX_ITEM:
+      BLI_assert(false);
+      break;
   }
-  case BVHTREE_FROM_LOOPTRI:
-    data->tree = bvhtree_from_mesh_looptri_create_tree(0.0f,
-                                                       tree_type,
-                                                       6,
-                                                       vertices.data(),
-                                                       loops.data(),
-                                                       looptri,
-                                                       looptri_len,
-                                                       mask,
-                                                       mask_bits_act_len);
-    break;
-  case BVHTREE_FROM_EM_VERTS:
-  case BVHTREE_FROM_EM_EDGES:
-  case BVHTREE_FROM_EM_LOOPTRI:
-  case BVHTREE_MAX_ITEM:
-    BLI_assert(false);
-    break;
-}
 
-if (mask != nullptr) {
-  MEM_freeN(mask);
-}
+  if (mask != nullptr) {
+    MEM_freeN(mask);
+  }
 
-bvhtree_balance(data->tree, lock_started);
+  bvhtree_balance(data->tree, lock_started);
 
-/* Save on cache for later use */
-// printf("BVHTree built and saved on cache\n");
-BLI_assert(data->cached == false);
-data->cached = true;
-bvhcache_insert(*bvh_cache_p, data->tree, bvh_cache_type);
-bvhcache_unlock(*bvh_cache_p, lock_started);
+  /* Save on cache for later use */
+  // printf("BVHTree built and saved on cache\n");
+  BLI_assert(data->cached == false);
+  data->cached = true;
+  bvhcache_insert(*bvh_cache_p, data->tree, bvh_cache_type);
+  bvhcache_unlock(*bvh_cache_p, lock_started);
 
 #ifdef DEBUG
-if (data->tree != nullptr) {
-  if (BLI_bvhtree_get_tree_type(data->tree) != tree_type) {
-    printf(
-        "tree_type %d obtained instead of %d\n", BLI_bvhtree_get_tree_type(data->tree), tree_type);
+  if (data->tree != nullptr) {
+    if (BLI_bvhtree_get_tree_type(data->tree) != tree_type) {
+      printf("tree_type %d obtained instead of %d\n",
+             BLI_bvhtree_get_tree_type(data->tree),
+             tree_type);
+    }
   }
-}
 #endif
 
-return data->tree;
+  return data->tree;
 }
 
 BVHTree *BKE_bvhtree_from_editmesh_get(BVHTreeFromEditMesh *data,
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index 5268df7b4e8..ef3d71cdacf 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -97,7 +97,7 @@ static BVHTree *bvhtree_build_from_cloth(ClothModifierData *clmd, float epsilon)
     }
   }
   else {
-    MEdge *edges = cloth->edges;
+    const MEdge *edges = cloth->edges;
 
     for (int i = 0; i < cloth->primitive_num; i++) {
       float co[2][3];
@@ -177,7 +177,7 @@ void bvhtree_update_from_cloth(ClothModifierData *clmd, bool moving, bool self)
   }
   else {
     if (verts) {
-      MEdge *edges = cloth->edges;
+      const MEdge *edges = cloth->edges;
 
       for (i = 0; i < cloth->primitive_num; i++) {
         float co[2][3];
diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c
index a6aae4e84bf..b73f9de170f 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -322,11 +322,11 @@ static void data_transfer_dtdata_type_postprocess(Object *UNUSED(ob_src),
     /* Bake edited destination loop normals into custom normals again. */
     const MVert *verts_dst = BKE_mesh_vertices(me_dst);
     const int num_verts_dst = me_dst->totvert;
-    const MEdge *edges_dst = BKE_mesh_edges(me_dst);
+    MEdge *edges_dst = BKE_mesh_edges_for_write(me_dst);
     const int num_edges_dst = me_dst->totedge;
-    const MPoly *polys_dst = BKE_mesh_polygons(me_dst);
+    MPoly *polys_dst = BKE_mesh_polygons_for_write(me_dst);
     const int num_polys_dst = me_dst->totpoly;
-    const MLoop *loops_dst = BKE_mesh_loops(me_dst);
+    MLoop *loops_dst = BKE_mesh_loops_for_write(me_dst);
     const int num_loops_dst = me_dst->totloop;
     CustomData *ldata_dst = &me_dst->ldata;
 
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 0170039ae59..7ec3b09baf1 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -220,7 +220,8 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address
   Vector<CustomDataLayer, 16> poly_layers;
 
   /* cache only - don't write */
-  mesh->mface = nullptr;
+  // TODO: Reenable. */
+  // mesh->mface = nullptr;
   mesh->totface = 0;
   memset(&mesh->fdata, 0, sizeof(mesh->fdata));
   mesh->runtime = blender::dna::shallow_zero_initialize();
@@ -278,13 +279,10 @@ static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
   Mesh *mesh = (Mesh *)id;
   BLO_read_pointer_array(reader, (void **)&mesh->mat);
 
-  BLO_read_data_address(reader, &mesh->mface);
   BLO_read_data_address(reader, &mesh->tface);
-  BLO_read_data_address(reader, &mesh->mtface);
   /* Read mcol for compatibility with old files. */
   BLO_read_data_address(reader, &mesh->mcol);
 
-  BLO_read_data_address(reader, &mesh->mloopuv);
   BLO_read_data_address(reader, &mesh->mselect);
 
   /* animdata */
@@ -293,7 +291,8 @@ static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
 
   /* Normally BKE_defvert_blend_read should be called in CustomData_blend_read,
    * but for backwards compatibility in do_versions to work we do it here. */
-  BKE_defvert_blend_read(reader, mesh->totvert, mesh->dvert);
+  // TODO: Reenable.
+  // BKE_defvert_blend_read(reader, mesh->totvert, mesh->dvert);
   BLO_read_list(reader, &mesh->vertex_group_names);
 
   CustomData_blend_read(reader, &mesh->vdata, mesh->totvert);
@@ -870,8 +869,6 @@ static void mesh_update_linked_customdata(Mesh *me, const bool do_ensure_tess_cd
 void BKE_mesh_update_customdata_pointers(Mesh *me, const bool do_ensure_tess_cd)
 {
   mesh_update_linked_customdata(me, do_ensure_tess_cd);
-
-  me->mloopuv = (MLoopUV *)CustomData_get_layer(&me->ldata, CD_MLOOPUV);
 }
 
 bool BKE_mesh_has_custom_loop_normals(Mesh *me)
@@ -1635,25 +1632,24 @@ void BKE_mesh_do_versions_cd_flag_init(Mesh *mesh)
     return;
   }
 
-  MVert *mv;
-  MEdge *med;
-  int i;
+  const Span<MVert> vertices = blender::bke::mesh_vertices(*mesh);
+  const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
 
-  for (mv = mesh->mvert, i = 0; i < mesh->totvert; mv++, i++) {
-    if (mv->bweight != 0) {
+  for (const MVert &vert : vertices) {
+    if (vert.bweight != 0) {
       mesh->cd_flag |= ME_CDFLAG_VERT_BWEIGHT;
       break;
     }
   }
 
-  for (med = mesh->medge, i = 0; i < mesh->totedge; med++, i++) {
-    if (med->bweight != 0) {
+  for (const MEdge &edge : edges) {
+    if (edge.bweight != 0) {
       mesh->cd_fla

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list