[Bf-blender-cvs] [4a52e2b3e02] refactor-mesh-corners-generic: Remove MLoop use in mesh primitive nodes

Hans Goudey noreply at git.blender.org
Tue Dec 6 21:31:05 CET 2022


Commit: 4a52e2b3e023b853b3e58aa82e5641cce94766bc
Author: Hans Goudey
Date:   Tue Dec 6 14:30:56 2022 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB4a52e2b3e023b853b3e58aa82e5641cce94766bc

Remove MLoop use in mesh primitive nodes

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

M	source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
M	source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
index dfad8824694..49b684bfcfc 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
@@ -369,7 +369,8 @@ static void calculate_cone_edges(const ConeConfig &config, MutableSpan<MEdge> ed
 }
 
 static void calculate_cone_faces(const ConeConfig &config,
-                                 MutableSpan<MLoop> loops,
+                                 MutableSpan<int> corner_verts,
+                                 MutableSpan<int> corner_edges,
                                  MutableSpan<MPoly> polys)
 {
   int rings_poly_start;
@@ -388,14 +389,15 @@ static void calculate_cone_faces(const ConeConfig &config,
       poly.loopstart = loop_start;
       poly.totloop = 3;
 
-      loops[loop_start + 0].v = config.first_ring_verts_start + i;
-      loops[loop_start + 0].e = config.first_ring_edges_start + i;
+      corner_verts[loop_start + 0] = config.first_ring_verts_start + i;
+      corner_edges[loop_start + 0] = config.first_ring_edges_start + i;
 
-      loops[loop_start + 1].v = config.first_ring_verts_start + ((i + 1) % config.circle_segments);
-      loops[loop_start + 1].e = top_fan_edges_start + ((i + 1) % config.circle_segments);
+      corner_verts[loop_start + 1] = config.first_ring_verts_start +
+                                     ((i + 1) % config.circle_segments);
+      corner_edges[loop_start + 1] = top_fan_edges_start + ((i + 1) % config.circle_segments);
 
-      loops[loop_start + 2].v = top_center_vert;
-      loops[loop_start + 2].e = top_fan_edges_start + i;
+      corner_verts[loop_start + 2] = top_center_vert;
+      corner_edges[loop_start + 2] = top_fan_edges_start + i;
     }
   }
   else if (config.fill_type == GEO_NODE_MESH_CIRCLE_FILL_NGON) {
@@ -407,8 +409,8 @@ static void calculate_cone_faces(const ConeConfig &config,
     poly.loopstart = 0;
     poly.totloop = config.circle_segments;
     for (const int i : IndexRange(config.circle_segments)) {
-      loops[i].v = i;
-      loops[i].e = i;
+      corner_verts[i] = i;
+      corner_edges[i] = i;
     }
   }
 
@@ -430,17 +432,17 @@ static void calculate_cone_faces(const ConeConfig &config,
       poly.loopstart = loop_start;
       poly.totloop = 4;
 
-      loops[loop_start + 0].v = this_ring_vert_start + j;
-      loops[loop_start + 0].e = ring_connections_start + j;
+      corner_verts[loop_start + 0] = this_ring_vert_start + j;
+      corner_edges[loop_start + 0] = ring_connections_start + j;
 
-      loops[loop_start + 1].v = next_ring_vert_start + j;
-      loops[loop_start + 1].e = next_ring_edges_start + j;
+      corner_verts[loop_start + 1] = next_ring_vert_start + j;
+      corner_edges[loop_start + 1] = next_ring_edges_start + j;
 
-      loops[loop_start + 2].v = next_ring_vert_start + ((j + 1) % config.circle_segments);
-      loops[loop_start + 2].e = ring_connections_start + ((j + 1) % config.circle_segments);
+      corner_verts[loop_start + 2] = next_ring_vert_start + ((j + 1) % config.circle_segments);
+      corner_edges[loop_start + 2] = ring_connections_start + ((j + 1) % config.circle_segments);
 
-      loops[loop_start + 3].v = this_ring_vert_start + ((j + 1) % config.circle_segments);
-      loops[loop_start + 3].e = this_ring_edges_start + j;
+      corner_verts[loop_start + 3] = this_ring_vert_start + ((j + 1) % config.circle_segments);
+      corner_edges[loop_start + 3] = this_ring_edges_start + j;
     }
   }
 
@@ -456,14 +458,16 @@ static void calculate_cone_faces(const ConeConfig &config,
       poly.loopstart = loop_start;
       poly.totloop = 3;
 
-      loops[loop_start + 0].v = config.last_ring_verts_start + i;
-      loops[loop_start + 0].e = config.last_fan_edges_start + i;
+      corner_verts[loop_start + 0] = config.last_ring_verts_start + i;
+      corner_edges[loop_start + 0] = config.last_fan_edges_start + i;
 
-      loops[loop_start + 1].v = config.last_vert;
-      loops[loop_start + 1].e = config.last_fan_edges_start + (i + 1) % config.circle_segments;
+      corner_verts[loop_start + 1] = config.last_vert;
+      corner_edges[loop_start + 1] = config.last_fan_edges_start +
+                                     (i + 1) % config.circle_segments;
 
-      loops[loop_start + 2].v = config.last_ring_verts_start + (i + 1) % config.circle_segments;
-      loops[loop_start + 2].e = config.last_ring_edges_start + i;
+      corner_verts[loop_start + 2] = config.last_ring_verts_start +
+                                     (i + 1) % config.circle_segments;
+      corner_edges[loop_start + 2] = config.last_ring_edges_start + i;
     }
   }
   else if (config.fill_type == GEO_NODE_MESH_CIRCLE_FILL_NGON) {
@@ -474,8 +478,8 @@ static void calculate_cone_faces(const ConeConfig &config,
 
     for (const int i : IndexRange(config.circle_segments)) {
       /* Go backwards to reverse surface normal. */
-      loops[bottom_loop_start + i].v = config.last_vert - i;
-      loops[bottom_loop_start + i].e = config.last_edge - ((i + 1) % config.circle_segments);
+      corner_verts[bottom_loop_start + i] = config.last_vert - i;
+      corner_edges[bottom_loop_start + i] = config.last_edge - ((i + 1) % config.circle_segments);
     }
   }
 }
@@ -693,11 +697,11 @@ Mesh *create_cylinder_or_cone_mesh(const float radius_top,
   MutableSpan<float3> positions = mesh->positions_for_write();
   MutableSpan<MEdge> edges = mesh->edges_for_write();
   MutableSpan<MPoly> polys = mesh->polys_for_write();
-  MutableSpan<MLoop> loops = mesh->loops_for_write();
 
   calculate_cone_verts(config, positions);
   calculate_cone_edges(config, edges);
-  calculate_cone_faces(config, loops, polys);
+  calculate_cone_faces(
+      config, mesh->corner_verts_for_write(), mesh->corner_edges_for_write(), polys);
   calculate_cone_uvs(mesh, config);
   calculate_selection_outputs(config, attribute_outputs, mesh->attributes_for_write());
 
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
index f61e34a27ab..2127ff6c9fb 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
@@ -195,14 +195,14 @@ BLI_NOINLINE static void calculate_sphere_corners(MutableSpan<int> corner_verts,
     const int loop_start = segment * 3;
     const int segment_next = segment_next_or_first(segment);
 
-    loops[loop_start + 0].v = 0;
-    loops[loop_start + 0].e = segment;
+    corner_verts[loop_start + 0] = 0;
+    corner_edges[loop_start + 0] = segment;
 
-    loops[loop_start + 1].v = first_vert_ring_start + segment;
-    loops[loop_start + 1].e = segments + segment;
+    corner_verts[loop_start + 1] = first_vert_ring_start + segment;
+    corner_edges[loop_start + 1] = segments + segment;
 
-    loops[loop_start + 2].v = first_vert_ring_start + segment_next;
-    loops[loop_start + 2].e = segment_next;
+    corner_verts[loop_start + 2] = first_vert_ring_start + segment_next;
+    corner_edges[loop_start + 2] = segment_next;
   }
 
   const int rings_vert_start = 1;
@@ -221,17 +221,17 @@ BLI_NOINLINE static void calculate_sphere_corners(MutableSpan<int> corner_verts,
       const int loop_start = ring_loop_start + segment * 4;
       const int segment_next = segment_next_or_first(segment);
 
-      loops[loop_start + 0].v = ring_vert_start + segment;
-      loops[loop_start + 0].e = ring_vertical_edge_start + segment;
+      corner_verts[loop_start + 0] = ring_vert_start + segment;
+      corner_edges[loop_start + 0] = ring_vertical_edge_start + segment;
 
-      loops[loop_start + 1].v = next_ring_vert_start + segment;
-      loops[loop_start + 1].e = next_ring_edge_start + segment;
+      corner_verts[loop_start + 1] = next_ring_vert_start + segment;
+      corner_edges[loop_start + 1] = next_ring_edge_start + segment;
 
-      loops[loop_start + 2].v = next_ring_vert_start + segment_next;
-      loops[loop_start + 2].e = ring_vertical_edge_start + segment_next;
+      corner_verts[loop_start + 2] = next_ring_vert_start + segment_next;
+      corner_edges[loop_start + 2] = ring_vertical_edge_start + segment_next;
 
-      loops[loop_start + 3].v = ring_vert_start + segment_next;
-      loops[loop_start + 3].e = ring_edge_start + segment;
+      corner_verts[loop_start + 3] = ring_vert_start + segment_next;
+      corner_edges[loop_start + 3] = ring_edge_start + segment;
     }
   }
 
@@ -245,14 +245,14 @@ BLI_NOINLINE static void calculate_sphere_corners(MutableSpan<int> corner_verts,
     const int loop_start = bottom_loop_start + segment * 3;
     const int segment_next = segment_next_or_first(segment);
 
-    loops[loop_start + 0].v = last_vert_index;
-    loops[loop_start + 0].e = bottom_edge_fan_start + segment_next;
+    corner_verts[loop_start + 0] = last_vert_index;
+    corner_edges[loop_start + 0] = bottom_edge_fan_start + segment_next;
 
-    loops[loop_start + 1].v = last_vert_ring_start + segment_next;
-    loops[loop_start + 1].e = last_edge_ring_start + segment;
+    corner_verts[loop_start + 1] = last_vert_ring_start + segment_next;
+    corner_edges[loop_start + 1] = last_edge_ring_start + segment;
 
-    loops[loop_start + 2].v = last_vert_ring_start + segment;
-    loops[loop_start + 2].e = bottom_edge_fan_start + segment;
+    corner_verts[loop_start + 2] = last_vert_ring_start + segment;
+    corner_edges[loop_start + 2] = bottom_edge_fan_start + segment;
   }
 }
 
@@ -313,7 +313,8 @@ static Mesh *create_uv_sphere_mesh(const float radius, const int segments, const
   MutableSpan<float3> positions = mesh->positions_for_write();
   MutableSpan<MEdge> edges = mesh->edges_for_write();
   MutableSpan<MPoly> polys = mesh->polys_for_write();
-  MutableSpan<MLoop> loops = mesh->loops_for_write();
+  MutableSpan<int> corner_verts = mesh->corner_verts_for_write();
+  MutableSpan<int> corner_edges = mesh->corner_edges_for_write();
 
   threading::parallel_invoke(
       1024 < segments * rings,
@@ -325,7 +326,7 @@ sta

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list