40 for (const int face_index : range) {
41 const BMFace &face = *BM_face_at_index(&const_cast<BMesh &>(bm), face_index);
42 const BMLoop *loop = BM_FACE_FIRST_LOOP(&face);
43 for ([[maybe_unused]] const int i : IndexRange(face.len)) {
44 const int index = BM_elem_index_get(loop);
45 corners_data[index] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, loop->v));
51 const Span<int> loose_edges = mr.loose_edges;
53 for (const int i : range) {
54 const BMEdge &edge = *BM_edge_at_index(&const_cast<BMesh &>(bm), loose_edges[i]);
55 loose_edge_data[i * 2 + 0] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, edge.v1));
56 loose_edge_data[i * 2 + 1] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, edge.v2));
60 const Span<int> loose_verts = mr.loose_verts;
61 threading::parallel_for(loose_verts.index_range(), 2048, [&](
const IndexRange range) {
62 for (const int i : range) {
63 const BMVert &vert = *BM_vert_at_index(&const_cast<BMesh &>(bm), loose_verts[i]);
64 loose_vert_data[i] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, &vert));