Differential D16893 Diff 59975 source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
| Show First 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| static void extract_edituv_data_iter_poly_mesh(const MeshRenderData *mr, | static void extract_edituv_data_iter_poly_mesh(const MeshRenderData *mr, | ||||
| const MPoly *mp, | const MPoly *mp, | ||||
| const int mp_index, | const int mp_index, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| MeshExtract_EditUVData_Data *data = static_cast<MeshExtract_EditUVData_Data *>(_data); | MeshExtract_EditUVData_Data *data = static_cast<MeshExtract_EditUVData_Data *>(_data); | ||||
| const MLoop *mloop = mr->mloop; | |||||
| const int ml_index_end = mp->loopstart + mp->totloop; | const int ml_index_end = mp->loopstart + mp->totloop; | ||||
| for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) { | for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) { | ||||
| const MLoop *ml = &mloop[ml_index]; | |||||
| EditLoopData *eldata = &data->vbo_data[ml_index]; | EditLoopData *eldata = &data->vbo_data[ml_index]; | ||||
| memset(eldata, 0x0, sizeof(*eldata)); | memset(eldata, 0x0, sizeof(*eldata)); | ||||
| BMFace *efa = bm_original_face_get(mr, mp_index); | BMFace *efa = bm_original_face_get(mr, mp_index); | ||||
| if (efa) { | if (efa) { | ||||
| BMEdge *eed = bm_original_edge_get(mr, ml->e); | BMVert *eve = bm_original_vert_get(mr, mr->corner_verts[ml_index]); | ||||
| BMVert *eve = bm_original_vert_get(mr, ml->v); | BMEdge *eed = bm_original_edge_get(mr, mr->corner_edges[ml_index]); | ||||
| if (eed && eve) { | if (eed && eve) { | ||||
| /* Loop on an edge endpoint. */ | /* Loop on an edge endpoint. */ | ||||
| BMLoop *l = BM_face_edge_share_loop(efa, eed); | BMLoop *l = BM_face_edge_share_loop(efa, eed); | ||||
| mesh_render_data_loop_flag(mr, l, data->offsets, eldata); | mesh_render_data_loop_flag(mr, l, data->offsets, eldata); | ||||
| mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata); | mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata); | ||||
| } | } | ||||
| else { | else { | ||||
| if (eed == nullptr) { | if (eed == nullptr) { | ||||
| /* Find if the loop's vert is not part of an edit edge. | /* Find if the loop's vert is not part of an edit edge. | ||||
| * For this, we check if the previous loop was on an edge. */ | * For this, we check if the previous loop was on an edge. */ | ||||
| const int ml_index_last = mp->loopstart + mp->totloop - 1; | const int ml_index_last = mp->loopstart + mp->totloop - 1; | ||||
| const int l_prev = (ml_index == mp->loopstart) ? ml_index_last : (ml_index - 1); | const int l_prev = (ml_index == mp->loopstart) ? ml_index_last : (ml_index - 1); | ||||
| const MLoop *ml_prev = &mr->mloop[l_prev]; | eed = bm_original_edge_get(mr, mr->corner_edges[l_prev]); | ||||
| eed = bm_original_edge_get(mr, ml_prev->e); | |||||
| } | } | ||||
| if (eed) { | if (eed) { | ||||
| /* Mapped points on an edge between two edit verts. */ | /* Mapped points on an edge between two edit verts. */ | ||||
| BMLoop *l = BM_face_edge_share_loop(efa, eed); | BMLoop *l = BM_face_edge_share_loop(efa, eed); | ||||
| mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata); | mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 91 Lines • Show Last 20 Lines | |||||