Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
| Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| Mesh *create_line_mesh(const float3 start, const float3 delta, const int count) | Mesh *create_line_mesh(const float3 start, const float3 delta, const int count) | ||||
| { | { | ||||
| if (count < 1) { | if (count < 1) { | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| Mesh *mesh = BKE_mesh_new_nomain(count, count - 1, 0, 0, 0); | Mesh *mesh = BKE_mesh_new_nomain(count, count - 1, 0, 0, 0); | ||||
| BKE_id_material_eval_ensure_default_slot(&mesh->id); | BKE_id_material_eval_ensure_default_slot(&mesh->id); | ||||
| MutableSpan<MVert> verts = mesh->verts_for_write(); | MutableSpan<float3> positions = mesh->vert_positions_for_write(); | ||||
| MutableSpan<MEdge> edges = mesh->edges_for_write(); | MutableSpan<MEdge> edges = mesh->edges_for_write(); | ||||
| threading::parallel_invoke( | threading::parallel_invoke( | ||||
| 1024 < count, | 1024 < count, | ||||
| [&]() { | [&]() { | ||||
| threading::parallel_for(verts.index_range(), 4096, [&](IndexRange range) { | threading::parallel_for(positions.index_range(), 4096, [&](IndexRange range) { | ||||
| for (const int i : range) { | for (const int i : range) { | ||||
| copy_v3_v3(verts[i].co, start + delta * i); | positions[i] = start + delta * i; | ||||
| } | } | ||||
| }); | }); | ||||
| }, | }, | ||||
| [&]() { | [&]() { | ||||
| threading::parallel_for(edges.index_range(), 4096, [&](IndexRange range) { | threading::parallel_for(edges.index_range(), 4096, [&](IndexRange range) { | ||||
| for (const int i : range) { | for (const int i : range) { | ||||
| edges[i].v1 = i; | edges[i].v1 = i; | ||||
| edges[i].v2 = i + 1; | edges[i].v2 = i + 1; | ||||
| Show All 26 Lines | |||||