[Bf-blender-cvs] [66a66a86988] refactor-mesh-remove-pointers: Fix geometry nodes tests

Hans Goudey noreply at git.blender.org
Sun Jul 31 22:32:53 CEST 2022


Commit: 66a66a86988dc9930276ef4d5d01434e3c9cf12d
Author: Hans Goudey
Date:   Sun Jul 31 15:32:45 2022 -0500
Branches: refactor-mesh-remove-pointers
https://developer.blender.org/rB66a66a86988dc9930276ef4d5d01434e3c9cf12d

Fix geometry nodes tests

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

M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_boolean_convert.cc
M	source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc

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

diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index edf16adeb2f..082786269ce 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -279,8 +279,14 @@ static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
   Mesh *mesh = (Mesh *)id;
   BLO_read_pointer_array(reader, (void **)&mesh->mat);
 
+  /* Deprecated pointers to custom data layers are read here for backward compatibility
+   * with files where these were owning pointers rather than a view into custom data. */
+  BLO_read_data_address(reader, &mesh->mvert);
+  BLO_read_data_address(reader, &mesh->medge);
+  BLO_read_data_address(reader, &mesh->mface);
+  BLO_read_data_address(reader, &mesh->mtface);
+  BLO_read_data_address(reader, &mesh->dvert);
   BLO_read_data_address(reader, &mesh->tface);
-  /* Read mcol for compatibility with old files. */
   BLO_read_data_address(reader, &mesh->mcol);
 
   BLO_read_data_address(reader, &mesh->mselect);
@@ -291,8 +297,7 @@ 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. */
-  // TODO: Reenable.
-  // BKE_defvert_blend_read(reader, mesh->totvert, mesh->dvert);
+  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);
diff --git a/source/blender/blenkernel/intern/mesh_boolean_convert.cc b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
index 31e2c66e53a..7878d6d3835 100644
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@ -187,16 +187,17 @@ const MVert *MeshesToIMeshInfo::input_mvert_for_orig_index(int orig_index,
   int orig_mesh_index = input_mesh_for_imesh_vert(orig_index);
   BLI_assert(0 <= orig_mesh_index && orig_mesh_index < meshes.size());
   const Mesh *me = meshes[orig_mesh_index];
+  const Span<MVert> vertices = bke::mesh_vertices(*me);
   int index_in_mesh = orig_index - mesh_vert_offset[orig_mesh_index];
   BLI_assert(0 <= index_in_mesh && index_in_mesh < me->totvert);
-  const Span<MVert> vertices = bke::mesh_vertices(*me);
+  const MVert *mv = &vertices[index_in_mesh];
   if (r_orig_mesh) {
     *r_orig_mesh = me;
   }
   if (r_index_in_orig_mesh) {
     *r_index_in_orig_mesh = index_in_mesh;
   }
-  return &vertices[index_in_mesh];
+  return mv;
 }
 
 /* Similarly for edges. */
@@ -486,7 +487,7 @@ static int fill_orig_loops(const Face *f,
   if (f->size() != orig_mplen) {
     return 0;
   }
-  BLI_assert(r_orig_loops.size() == orig_loops.size());
+  BLI_assert(r_orig_loops.size() == orig_mplen);
   /* We'll look for the case where the first vertex in f has an original vertex
    * that is the same as one in orig_me (after correcting for offset in mim meshes).
    * Then see that loop and any subsequent ones have the same start and end vertex.
@@ -506,7 +507,7 @@ static int fill_orig_loops(const Face *f,
   BLI_assert(0 <= first_orig_v_in_orig_me && first_orig_v_in_orig_me < orig_me->totvert);
   /* Assume all vertices in an mpoly are unique. */
   int offset = -1;
-  for (const int i : orig_loops.index_range()) {
+  for (int i = 0; i < orig_mplen; ++i) {
     int loop_i = i + orig_mp->loopstart;
     if (orig_loops[loop_i].v == first_orig_v_in_orig_me) {
       offset = i;
@@ -558,13 +559,14 @@ static void get_poly2d_cos(const Mesh *me,
 {
   const Span<MVert> vertices = bke::mesh_vertices(*me);
   const Span<MLoop> loops = bke::mesh_loops(*me);
+  const Span<MLoop> poly_loops = loops.slice(mp->loopstart, mp->totloop);
 
   /* Project coordinates to 2d in cos_2d, using normal as projection axis. */
   float axis_dominant[3];
   BKE_mesh_calc_poly_normal(mp, &loops[mp->loopstart], vertices.data(), axis_dominant);
   axis_dominant_v3_to_m3(r_axis_mat, axis_dominant);
-  for (const int i : loops.index_range()) {
-    float3 co = vertices[loops[i].v].co;
+  for (const int i : poly_loops.index_range()) {
+    float3 co = vertices[poly_loops[i].v].co;
     co = trans_mat * co;
     mul_v2_m3v3(cos_2d[i], r_axis_mat, co);
   }
diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
index b616d53c36b..6a9ca0a4b11 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
@@ -441,9 +441,9 @@ static void extrude_mesh_edges(MeshComponent &component,
               new_poly_range.size(),
               new_loop_range.size());
 
-  MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(mesh).slice(new_vert_range);
-  MutableSpan<MEdge> connect_edges = bke::mesh_edges_for_write(mesh).slice(connect_edge_range);
-  MutableSpan<MEdge> duplicate_edges = bke::mesh_edges_for_write(mesh).slice(duplicate_edge_range);
+  MutableSpan<MEdge> edges = bke::mesh_edges_for_write(mesh);
+  MutableSpan<MEdge> connect_edges = edges.slice(connect_edge_range);
+  MutableSpan<MEdge> duplicate_edges = edges.slice(duplicate_edge_range);
   MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(mesh);
   MutableSpan<MPoly> new_polys = polys.slice(new_poly_range);
   MutableSpan<MLoop> loops = bke::mesh_loops_for_write(mesh);
@@ -454,7 +454,7 @@ static void extrude_mesh_edges(MeshComponent &component,
   }
 
   for (const int i : duplicate_edges.index_range()) {
-    const MEdge &orig_edge = orig_edges[edge_selection[i]];
+    const MEdge &orig_edge = edges[edge_selection[i]];
     const int i_new_vert_1 = new_vert_indices.index_of(orig_edge.v1);
     const int i_new_vert_2 = new_vert_indices.index_of(orig_edge.v2);
     duplicate_edges[i] = new_edge(new_vert_range[i_new_vert_1], new_vert_range[i_new_vert_2]);
@@ -609,6 +609,7 @@ static void extrude_mesh_edges(MeshComponent &component,
     return true;
   });
 
+  MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(mesh).slice(new_vert_range);
   if (edge_offsets.is_single()) {
     const float3 offset = edge_offsets.get_internal_single();
     threading::parallel_for(new_verts.index_range(), 1024, [&](const IndexRange range) {



More information about the Bf-blender-cvs mailing list