124 for (const int face : range) {
125 for (const int corner : faces[face]) {
126 EditLoopData &value = corners_data[corner];
128 if (const BMFace *bm_face = bm_original_face_get(mr, face)) {
129 mesh_render_data_face_flag(mr, bm_face, {-1, -1, -1, -1}, value);
131 if (const BMVert *bm_vert = bm_original_vert_get(mr, corner_verts[corner])) {
132 mesh_render_data_vert_flag(mr, bm_vert, value);
134 if (const BMEdge *bm_edge = bm_original_edge_get(mr, corner_edges[corner])) {
135 mesh_render_data_edge_flag(mr, bm_edge, value);
142 const Span<int> loose_edges = mr.loose_edges;
144 for (const int i : range) {
145 EditLoopData &value_1 = loose_edge_data[i * 2 + 0];
146 EditLoopData &value_2 = loose_edge_data[i * 2 + 1];
147 if (const BMEdge *bm_edge = bm_original_edge_get(mr, loose_edges[i])) {
149 mesh_render_data_edge_flag(mr, bm_edge, value_1);
153 value_2 = value_1 = {};
155 const int2 edge = edges[loose_edges[i]];
156 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[0])) {
157 mesh_render_data_vert_flag(mr, bm_vert, value_1);
159 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[1])) {
160 mesh_render_data_vert_flag(mr, bm_vert, value_2);
165 const Span<int> loose_verts = mr.loose_verts;
166 threading::parallel_for(loose_verts.index_range(), 2048, [&](
const IndexRange range) {
167 for (const int i : range) {
168 loose_vert_data[i] = {};
169 if (const BMVert *eve = bm_original_vert_get(mr, loose_verts[i])) {
170 mesh_render_data_vert_flag(mr, eve, loose_vert_data[i]);
185 for (const int face_index : range) {
186 const BMFace &face = *BM_face_at_index(&const_cast<BMesh &>(bm), face_index);
187 const BMLoop *loop = BM_FACE_FIRST_LOOP(&face);
188 for ([[maybe_unused]] const int i : IndexRange(face.len)) {
189 const int index = BM_elem_index_get(loop);
190 EditLoopData &value = corners_data[index];
192 mesh_render_data_face_flag(mr, &face, {-1, -1, -1, -1}, corners_data[index]);
193 mesh_render_data_edge_flag(mr, loop->e, corners_data[index]);
194 mesh_render_data_vert_flag(mr, loop->v, corners_data[index]);
200 const Span<int> loose_edges = mr.loose_edges;
201 threading::parallel_for(loose_edges.index_range(), 2048, [&](
const IndexRange range) {
202 for (const int i : range) {
203 EditLoopData &value_1 = loose_edge_data[i * 2 + 0];
204 EditLoopData &value_2 = loose_edge_data[i * 2 + 1];
205 const BMEdge &edge = *BM_edge_at_index(&const_cast<BMesh &>(bm), loose_edges[i]);
207 mesh_render_data_edge_flag(mr, &edge, value_1);
209 mesh_render_data_vert_flag(mr, edge.v1, value_1);
210 mesh_render_data_vert_flag(mr, edge.v2, value_2);
214 const Span<int> loose_verts = mr.loose_verts;
215 threading::parallel_for(loose_verts.index_range(), 2048, [&](
const IndexRange range) {
216 for (const int i : range) {
217 loose_vert_data[i] = {};
218 const BMVert &vert = *BM_vert_at_index(&const_cast<BMesh &>(bm), loose_verts[i]);
219 mesh_render_data_vert_flag(mr, &vert, loose_vert_data[i]);
251 MutableSpan loose_edge_data = vbo_data.
slice(corners_num, loose_edges_num * verts_per_edge);
255 for (const int subdiv_quad : range) {
256 const int coarse_face = subdiv_loop_face_index[subdiv_quad * 4];
257 for (const int subdiv_corner : IndexRange(subdiv_quad * 4, 4)) {
258 EditLoopData &value = corners_data[subdiv_corner];
261 if (const BMFace *bm_face = bm_original_face_get(mr, coarse_face)) {
262 mesh_render_data_face_flag(mr, bm_face, {-1, -1, -1, -1}, value);
265 const int vert_origindex = subdiv_loop_vert_index[subdiv_corner];
266 if (vert_origindex != -1) {
267 if (const BMVert *bm_vert = bm_original_vert_get(mr, vert_origindex)) {
268 mesh_render_data_vert_flag(mr, bm_vert, value);
272 const int edge_origindex = subdiv_loop_edge_index[subdiv_corner];
273 if (edge_origindex != -1) {
274 if (const BMEdge *bm_edge = BM_edge_at_index(mr.bm, edge_origindex)) {
275 mesh_render_data_edge_flag(mr, bm_edge, value);
283 const Span<int> loose_edges = mr.loose_edges;
285 for (const int i : range) {
286 MutableSpan<EditLoopData> data = loose_edge_data.slice(i * verts_per_edge, verts_per_edge);
287 if (const BMEdge *edge = bm_original_edge_get(mr, loose_edges[i])) {
288 EditLoopData value{};
289 mesh_render_data_edge_flag(mr, edge, value);
295 const int2 edge = edges[loose_edges[i]];
296 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[0])) {
297 mesh_render_data_vert_flag(mr, bm_vert, data.first());
299 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[1])) {
300 mesh_render_data_vert_flag(mr, bm_vert, data.last());
305 const Span<int> loose_verts = mr.loose_verts;
306 threading::parallel_for(loose_verts.index_range(), 2048, [&](
const IndexRange range) {
307 for (const int i : range) {
308 loose_vert_data[i] = {};
309 if (const BMVert *eve = bm_original_vert_get(mr, loose_verts[i])) {
310 mesh_render_data_vert_flag(mr, eve, loose_vert_data[i]);
328 MutableSpan loose_edge_data = vbo_data.
slice(corners_num, loose_edges_num * verts_per_edge);
333 for (const int subdiv_quad : range) {
334 const int coarse_face = subdiv_loop_face_index[subdiv_quad * 4];
335 const BMFace *bm_face = BM_face_at_index(&bm, coarse_face);
336 for (const int subdiv_corner : IndexRange(subdiv_quad * 4, 4)) {
337 EditLoopData &value = corners_data[subdiv_corner];
340 mesh_render_data_face_flag(mr, bm_face, {-1, -1, -1, -1}, value);
342 const int vert_origindex = subdiv_loop_vert_index[subdiv_corner];
343 if (vert_origindex != -1) {
344 const BMVert *bm_vert = BM_vert_at_index(mr.bm, vert_origindex);
345 mesh_render_data_vert_flag(mr, bm_vert, value);
348 const int edge_origindex = subdiv_loop_edge_index[subdiv_corner];
349 if (edge_origindex != -1) {
350 const BMEdge *bm_edge = BM_edge_at_index(mr.bm, edge_origindex);
351 mesh_render_data_edge_flag(mr, bm_edge, value);
357 const Span<int> loose_edges = mr.loose_edges;
359 for (const int i : range) {
360 MutableSpan<EditLoopData> data = loose_edge_data.slice(i * verts_per_edge, verts_per_edge);
361 const BMEdge *edge = BM_edge_at_index(&bm, loose_edges[i]);
362 EditLoopData value{};
363 mesh_render_data_edge_flag(mr, edge, value);
365 mesh_render_data_vert_flag(mr, edge->v1, data.first());
366 mesh_render_data_vert_flag(mr, edge->v2, data.last());
370 const Span<int> loose_verts = mr.loose_verts;
371 threading::parallel_for(loose_verts.index_range(), 2048, [&](
const IndexRange range) {
372 for (const int i : range) {
373 loose_vert_data[i] = {};
374 const BMVert *vert = BM_vert_at_index(&bm, loose_verts[i]);
375 mesh_render_data_vert_flag(mr, vert, loose_vert_data[i]);