[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