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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs