124 for (const int face : range) {
125 EditLoopData face_value = {};
126 if (const BMFace *bm_face = bm_original_face_get(mr, face)) {
127 mesh_render_data_face_flag(mr, bm_face, uv_offsets_none, face_value);
129 for (const int corner : faces[face]) {
130 EditLoopData &value = corners_data[corner];
132 if (const BMVert *bm_vert = bm_original_vert_get(mr, corner_verts[corner])) {
133 mesh_render_data_vert_flag(mr, bm_vert, value);
135 if (const BMEdge *bm_edge = bm_original_edge_get(mr, corner_edges[corner])) {
136 mesh_render_data_edge_flag(mr, bm_edge, value);
143 const Span<int> loose_edges = mr.loose_edges;
145 for (const int i : range) {
146 EditLoopData &value_1 = loose_edge_data[i * 2 + 0];
147 EditLoopData &value_2 = loose_edge_data[i * 2 + 1];
148 if (const BMEdge *bm_edge = bm_original_edge_get(mr, loose_edges[i])) {
150 mesh_render_data_edge_flag(mr, bm_edge, value_1);
154 value_2 = value_1 = {};
156 const int2 edge = edges[loose_edges[i]];
157 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[0])) {
158 mesh_render_data_vert_flag(mr, bm_vert, value_1);
160 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[1])) {
161 mesh_render_data_vert_flag(mr, bm_vert, value_2);
166 const Span<int> loose_verts = mr.loose_verts;
168 for (const int i : range) {
169 loose_vert_data[i] = {};
170 if (const BMVert *eve = bm_original_vert_get(mr, loose_verts[i])) {
171 mesh_render_data_vert_flag(mr, eve, loose_vert_data[i]);
187 for (const int face_index : range) {
188 const BMFace &face = *BM_face_at_index(&const_cast<BMesh &>(bm), face_index);
189 EditLoopData face_value = {};
190 mesh_render_data_face_flag(mr, &face, uv_offsets_none, face_value);
191 const BMLoop *loop = BM_FACE_FIRST_LOOP(&face);
192 for ([[maybe_unused]] const int i : IndexRange(face.len)) {
193 const int index = BM_elem_index_get(loop);
194 EditLoopData &value = corners_data[index];
196 mesh_render_data_edge_flag(mr, loop->e, value);
197 mesh_render_data_vert_flag(mr, loop->v, value);
203 const Span<int> loose_edges = mr.loose_edges;
205 for (const int i : range) {
206 EditLoopData &value_1 = loose_edge_data[i * 2 + 0];
207 EditLoopData &value_2 = loose_edge_data[i * 2 + 1];
208 const BMEdge &edge = *BM_edge_at_index(&const_cast<BMesh &>(bm), loose_edges[i]);
210 mesh_render_data_edge_flag(mr, &edge, value_1);
212 mesh_render_data_vert_flag(mr, edge.v1, value_1);
213 mesh_render_data_vert_flag(mr, edge.v2, value_2);
217 const Span<int> loose_verts = mr.loose_verts;
219 for (const int i : range) {
220 loose_vert_data[i] = {};
221 const BMVert &vert = *BM_vert_at_index(&const_cast<BMesh &>(bm), loose_verts[i]);
222 mesh_render_data_vert_flag(mr, &vert, loose_vert_data[i]);
256 MutableSpan loose_edge_data = vbo_data.
slice(corners_num, loose_edges_num * verts_per_edge);
260 for (const int subdiv_quad : range) {
261 const int coarse_face = subdiv_loop_face_index[subdiv_quad * 4];
263 EditLoopData face_value = {};
264 if (const BMFace *bm_face = bm_original_face_get(mr, coarse_face)) {
265 mesh_render_data_face_flag(mr, bm_face, uv_offsets_none, face_value);
267 for (const int subdiv_corner : IndexRange(subdiv_quad * 4, 4)) {
268 EditLoopData &value = corners_data[subdiv_corner];
271 const int vert_origindex = subdiv_loop_vert_index[subdiv_corner];
272 if (vert_origindex != -1) {
273 if (const BMVert *bm_vert = bm_original_vert_get(mr, vert_origindex)) {
274 mesh_render_data_vert_flag(mr, bm_vert, value);
278 const int edge_origindex = subdiv_loop_edge_index[subdiv_corner];
279 if (edge_origindex != -1) {
280 if (const BMEdge *bm_edge = BM_edge_at_index(mr.bm, edge_origindex)) {
281 mesh_render_data_edge_flag(mr, bm_edge, value);
289 const Span<int> loose_edges = mr.loose_edges;
291 for (const int i : range) {
292 MutableSpan<EditLoopData> data = loose_edge_data.slice(i * verts_per_edge, verts_per_edge);
293 if (const BMEdge *edge = bm_original_edge_get(mr, loose_edges[i])) {
294 EditLoopData value{};
295 mesh_render_data_edge_flag(mr, edge, value);
301 const int2 edge = edges[loose_edges[i]];
302 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[0])) {
303 mesh_render_data_vert_flag(mr, bm_vert, data.first());
305 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[1])) {
306 mesh_render_data_vert_flag(mr, bm_vert, data.last());
311 const Span<int> loose_verts = mr.loose_verts;
313 for (const int i : range) {
314 loose_vert_data[i] = {};
315 if (const BMVert *eve = bm_original_vert_get(mr, loose_verts[i])) {
316 mesh_render_data_vert_flag(mr, eve, loose_vert_data[i]);
335 MutableSpan loose_edge_data = vbo_data.
slice(corners_num, loose_edges_num * verts_per_edge);
340 for (const int subdiv_quad : range) {
341 const int coarse_face = subdiv_loop_face_index[subdiv_quad * 4];
342 const BMFace *bm_face = BM_face_at_index(&bm, coarse_face);
344 EditLoopData face_value = {};
345 mesh_render_data_face_flag(mr, bm_face, uv_offsets_none, face_value);
347 for (const int subdiv_corner : IndexRange(subdiv_quad * 4, 4)) {
348 EditLoopData &value = corners_data[subdiv_corner];
351 const int vert_origindex = subdiv_loop_vert_index[subdiv_corner];
352 if (vert_origindex != -1) {
353 const BMVert *bm_vert = BM_vert_at_index(mr.bm, vert_origindex);
354 mesh_render_data_vert_flag(mr, bm_vert, value);
357 const int edge_origindex = subdiv_loop_edge_index[subdiv_corner];
358 if (edge_origindex != -1) {
359 const BMEdge *bm_edge = BM_edge_at_index(mr.bm, edge_origindex);
360 mesh_render_data_edge_flag(mr, bm_edge, value);
366 const Span<int> loose_edges = mr.loose_edges;
368 for (const int i : range) {
369 MutableSpan<EditLoopData> data = loose_edge_data.slice(i * verts_per_edge, verts_per_edge);
370 const BMEdge *edge = BM_edge_at_index(&bm, loose_edges[i]);
371 EditLoopData value{};
372 mesh_render_data_edge_flag(mr, edge, value);
374 mesh_render_data_vert_flag(mr, edge->v1, data.first());
375 mesh_render_data_vert_flag(mr, edge->v2, data.last());
379 const Span<int> loose_verts = mr.loose_verts;
381 for (const int i : range) {
382 loose_vert_data[i] = {};
383 const BMVert *vert = BM_vert_at_index(&bm, loose_verts[i]);
384 mesh_render_data_vert_flag(mr, vert, loose_vert_data[i]);
static void extract_edit_data(const OffsetIndices< int > points_by_curve, const IndexMask &curve_selection, const VArray< bool > &selection_attr, const bool mark_active, const uint32_t fill_value, MutableSpan< uint32_t > data)