Differential D15658 Diff 54636 source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
| Show First 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| static void extract_edituv_tris_iter_looptri_mesh(const MeshRenderData *mr, | static void extract_edituv_tris_iter_looptri_mesh(const MeshRenderData *mr, | ||||
| const MLoopTri *mlt, | const MLoopTri *mlt, | ||||
| const int UNUSED(elt_index), | const int UNUSED(elt_index), | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| const MPoly *mp = &mr->mpoly[mlt->poly]; | const BMFace *efa = bm_original_face_get(mr, mlt->poly); | ||||
| edituv_tri_add(data, | const bool mp_hidden = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) : true; | ||||
| (mp->flag & ME_HIDE) != 0, | const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false; | ||||
| (mp->flag & ME_FACE_SEL) != 0, | |||||
| mlt->tri[0], | edituv_tri_add(data, mp_hidden, mp_select, mlt->tri[0], mlt->tri[1], mlt->tri[2]); | ||||
| mlt->tri[1], | |||||
| mlt->tri[2]); | |||||
| } | } | ||||
| static void extract_edituv_tris_finish(const MeshRenderData *UNUSED(mr), | static void extract_edituv_tris_finish(const MeshRenderData *UNUSED(mr), | ||||
| MeshBatchCache *UNUSED(cache), | MeshBatchCache *UNUSED(cache), | ||||
| void *buf, | void *buf, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| Show All 35 Lines | edituv_tri_add(data, | ||||
| BM_elem_flag_test(coarse_quad, BM_ELEM_HIDDEN) != 0, | BM_elem_flag_test(coarse_quad, BM_ELEM_HIDDEN) != 0, | ||||
| BM_elem_flag_test(coarse_quad, BM_ELEM_SELECT) != 0, | BM_elem_flag_test(coarse_quad, BM_ELEM_SELECT) != 0, | ||||
| loop_idx, | loop_idx, | ||||
| loop_idx + 2, | loop_idx + 2, | ||||
| loop_idx + 3); | loop_idx + 3); | ||||
| } | } | ||||
| static void extract_edituv_tris_iter_subdiv_mesh(const DRWSubdivCache *UNUSED(subdiv_cache), | static void extract_edituv_tris_iter_subdiv_mesh(const DRWSubdivCache *UNUSED(subdiv_cache), | ||||
| const MeshRenderData *UNUSED(mr), | const MeshRenderData *mr, | ||||
| void *_data, | void *_data, | ||||
| uint subdiv_quad_index, | uint subdiv_quad_index, | ||||
| const MPoly *coarse_quad) | const MPoly *coarse_quad) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| const uint loop_idx = subdiv_quad_index * 4; | const uint loop_idx = subdiv_quad_index * 4; | ||||
| edituv_tri_add(data, | const BMFace *efa = bm_original_face_get(mr, coarse_quad - mr->mpoly); | ||||
| (coarse_quad->flag & ME_HIDE) != 0, | const bool mp_hidden = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) : true; | ||||
| (coarse_quad->flag & ME_FACE_SEL) != 0, | const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false; | ||||
| loop_idx, | |||||
| loop_idx + 1, | |||||
| loop_idx + 2); | |||||
| edituv_tri_add(data, | edituv_tri_add(data, mp_hidden, mp_select, loop_idx, loop_idx + 1, loop_idx + 2); | ||||
| (coarse_quad->flag & ME_HIDE) != 0, | edituv_tri_add(data, mp_hidden, mp_select, loop_idx, loop_idx + 2, loop_idx + 3); | ||||
| (coarse_quad->flag & ME_FACE_SEL) != 0, | |||||
| loop_idx, | |||||
| loop_idx + 2, | |||||
| loop_idx + 3); | |||||
| } | } | ||||
| static void extract_edituv_tris_finish_subdiv(const struct DRWSubdivCache *UNUSED(subdiv_cache), | static void extract_edituv_tris_finish_subdiv(const struct DRWSubdivCache *UNUSED(subdiv_cache), | ||||
| const MeshRenderData *UNUSED(mr), | const MeshRenderData *UNUSED(mr), | ||||
| MeshBatchCache *UNUSED(cache), | MeshBatchCache *UNUSED(cache), | ||||
| void *buf, | void *buf, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 60 Lines • ▼ Show 20 Lines | edituv_edge_add(data, | ||||
| BM_elem_flag_test_bool(f, BM_ELEM_SELECT), | BM_elem_flag_test_bool(f, BM_ELEM_SELECT), | ||||
| l_index, | l_index, | ||||
| BM_elem_index_get(l_iter->next)); | BM_elem_index_get(l_iter->next)); | ||||
| } while ((l_iter = l_iter->next) != l_first); | } while ((l_iter = l_iter->next) != l_first); | ||||
| } | } | ||||
| static void extract_edituv_lines_iter_poly_mesh(const MeshRenderData *mr, | static void extract_edituv_lines_iter_poly_mesh(const MeshRenderData *mr, | ||||
| const MPoly *mp, | const MPoly *mp, | ||||
| const int UNUSED(mp_index), | const int mp_index, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| const MLoop *mloop = mr->mloop; | const MLoop *mloop = mr->mloop; | ||||
| const int ml_index_end = mp->loopstart + mp->totloop; | const int ml_index_end = mp->loopstart + mp->totloop; | ||||
| const BMFace *efa = bm_original_face_get(mr, mp_index); | |||||
| const bool mp_hidden = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) : true; | |||||
| const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false; | |||||
| 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]; | const MLoop *ml = &mloop[ml_index]; | ||||
| const int ml_index_last = mp->totloop + mp->loopstart - 1; | const int ml_index_last = mp->totloop + mp->loopstart - 1; | ||||
| const int ml_index_next = (ml_index == ml_index_last) ? mp->loopstart : (ml_index + 1); | const int ml_index_next = (ml_index == ml_index_last) ? mp->loopstart : (ml_index + 1); | ||||
| const bool real_edge = (mr->e_origindex == nullptr || | const bool real_edge = (mr->e_origindex == nullptr || | ||||
| mr->e_origindex[ml->e] != ORIGINDEX_NONE); | mr->e_origindex[ml->e] != ORIGINDEX_NONE); | ||||
| edituv_edge_add(data, | edituv_edge_add(data, mp_hidden || !real_edge, mp_select, ml_index, ml_index_next); | ||||
| (mp->flag & ME_HIDE) != 0 || !real_edge, | |||||
| (mp->flag & ME_FACE_SEL) != 0, | |||||
| ml_index, | |||||
| ml_index_next); | |||||
| } | } | ||||
| } | } | ||||
| static void extract_edituv_lines_finish(const MeshRenderData *UNUSED(mr), | static void extract_edituv_lines_finish(const MeshRenderData *UNUSED(mr), | ||||
| MeshBatchCache *UNUSED(cache), | MeshBatchCache *UNUSED(cache), | ||||
| void *buf, | void *buf, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| Show All 18 Lines | static void extract_edituv_lines_iter_subdiv_bm(const DRWSubdivCache *subdiv_cache, | ||||
| const MeshRenderData *mr, | const MeshRenderData *mr, | ||||
| void *_data, | void *_data, | ||||
| uint subdiv_quad_index, | uint subdiv_quad_index, | ||||
| const BMFace *coarse_poly) | const BMFace *coarse_poly) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| int *subdiv_loop_edge_index = (int *)GPU_vertbuf_get_data(subdiv_cache->edges_orig_index); | int *subdiv_loop_edge_index = (int *)GPU_vertbuf_get_data(subdiv_cache->edges_orig_index); | ||||
| const bool mp_hidden = BM_elem_flag_test_bool(coarse_poly, BM_ELEM_HIDDEN); | |||||
| const bool mp_select = BM_elem_flag_test_bool(coarse_poly, BM_ELEM_SELECT); | |||||
| uint start_loop_idx = subdiv_quad_index * 4; | uint start_loop_idx = subdiv_quad_index * 4; | ||||
| uint end_loop_idx = (subdiv_quad_index + 1) * 4; | uint end_loop_idx = (subdiv_quad_index + 1) * 4; | ||||
| for (uint loop_idx = start_loop_idx; loop_idx < end_loop_idx; loop_idx++) { | for (uint loop_idx = start_loop_idx; loop_idx < end_loop_idx; loop_idx++) { | ||||
| const int edge_origindex = subdiv_loop_edge_index[loop_idx]; | const int edge_origindex = subdiv_loop_edge_index[loop_idx]; | ||||
| const bool real_edge = (edge_origindex != -1 && | const bool real_edge = (edge_origindex != -1 && | ||||
| (mr->e_origindex == nullptr || | (mr->e_origindex == nullptr || | ||||
| mr->e_origindex[edge_origindex] != ORIGINDEX_NONE)); | mr->e_origindex[edge_origindex] != ORIGINDEX_NONE)); | ||||
| edituv_edge_add(data, | edituv_edge_add(data, | ||||
| BM_elem_flag_test_bool(coarse_poly, BM_ELEM_HIDDEN) != 0 || !real_edge, | mp_hidden || !real_edge, | ||||
| BM_elem_flag_test_bool(coarse_poly, BM_ELEM_SELECT) != 0, | mp_select, | ||||
| loop_idx, | loop_idx, | ||||
| (loop_idx + 1 == end_loop_idx) ? start_loop_idx : (loop_idx + 1)); | (loop_idx + 1 == end_loop_idx) ? start_loop_idx : (loop_idx + 1)); | ||||
| } | } | ||||
| } | } | ||||
| static void extract_edituv_lines_iter_subdiv_mesh(const DRWSubdivCache *subdiv_cache, | static void extract_edituv_lines_iter_subdiv_mesh(const DRWSubdivCache *subdiv_cache, | ||||
| const MeshRenderData *mr, | const MeshRenderData *mr, | ||||
| void *_data, | void *_data, | ||||
| uint subdiv_quad_index, | uint subdiv_quad_index, | ||||
| const MPoly *coarse_poly) | const MPoly *coarse_poly) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| int *subdiv_loop_edge_index = (int *)GPU_vertbuf_get_data(subdiv_cache->edges_orig_index); | int *subdiv_loop_edge_index = (int *)GPU_vertbuf_get_data(subdiv_cache->edges_orig_index); | ||||
| const BMFace *efa = bm_original_face_get(mr, coarse_poly - mr->mpoly); | |||||
| const bool mp_hidden = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) : true; | |||||
| const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false; | |||||
| uint start_loop_idx = subdiv_quad_index * 4; | uint start_loop_idx = subdiv_quad_index * 4; | ||||
| uint end_loop_idx = (subdiv_quad_index + 1) * 4; | uint end_loop_idx = (subdiv_quad_index + 1) * 4; | ||||
| for (uint loop_idx = start_loop_idx; loop_idx < end_loop_idx; loop_idx++) { | for (uint loop_idx = start_loop_idx; loop_idx < end_loop_idx; loop_idx++) { | ||||
| const int edge_origindex = subdiv_loop_edge_index[loop_idx]; | const int edge_origindex = subdiv_loop_edge_index[loop_idx]; | ||||
| const bool real_edge = (edge_origindex != -1 && | const bool real_edge = (edge_origindex != -1 && | ||||
| (mr->e_origindex == nullptr || | (mr->e_origindex == nullptr || | ||||
| mr->e_origindex[edge_origindex] != ORIGINDEX_NONE)); | mr->e_origindex[edge_origindex] != ORIGINDEX_NONE)); | ||||
| edituv_edge_add(data, | edituv_edge_add(data, | ||||
| (coarse_poly->flag & ME_HIDE) != 0 || !real_edge, | mp_hidden || !real_edge, | ||||
| (coarse_poly->flag & ME_FACE_SEL) != 0, | mp_select, | ||||
| loop_idx, | loop_idx, | ||||
| (loop_idx + 1 == end_loop_idx) ? start_loop_idx : (loop_idx + 1)); | (loop_idx + 1 == end_loop_idx) ? start_loop_idx : (loop_idx + 1)); | ||||
| } | } | ||||
| } | } | ||||
| static void extract_edituv_lines_finish_subdiv(const struct DRWSubdivCache *UNUSED(subdiv_cache), | static void extract_edituv_lines_finish_subdiv(const struct DRWSubdivCache *UNUSED(subdiv_cache), | ||||
| const MeshRenderData *UNUSED(mr), | const MeshRenderData *UNUSED(mr), | ||||
| MeshBatchCache *UNUSED(cache), | MeshBatchCache *UNUSED(cache), | ||||
| ▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | do { | ||||
| edituv_point_add( | edituv_point_add( | ||||
| data, BM_elem_flag_test(f, BM_ELEM_HIDDEN), BM_elem_flag_test(f, BM_ELEM_SELECT), l_index); | data, BM_elem_flag_test(f, BM_ELEM_HIDDEN), BM_elem_flag_test(f, BM_ELEM_SELECT), l_index); | ||||
| } while ((l_iter = l_iter->next) != l_first); | } while ((l_iter = l_iter->next) != l_first); | ||||
| } | } | ||||
| static void extract_edituv_points_iter_poly_mesh(const MeshRenderData *mr, | static void extract_edituv_points_iter_poly_mesh(const MeshRenderData *mr, | ||||
| const MPoly *mp, | const MPoly *mp, | ||||
| const int UNUSED(mp_index), | const int mp_index, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| const BMFace *efa = bm_original_face_get(mr, mp_index); | |||||
| const bool mp_hidden = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) : true; | |||||
| const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false; | |||||
| const MLoop *mloop = mr->mloop; | 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]; | const MLoop *ml = &mloop[ml_index]; | ||||
| const bool real_vert = !mr->v_origindex || mr->v_origindex[ml->v] != ORIGINDEX_NONE; | const bool real_vert = !mr->v_origindex || mr->v_origindex[ml->v] != ORIGINDEX_NONE; | ||||
| edituv_point_add( | edituv_point_add(data, mp_hidden || !real_vert, mp_select, ml_index); | ||||
| data, ((mp->flag & ME_HIDE) != 0) || !real_vert, (mp->flag & ME_FACE_SEL) != 0, ml_index); | |||||
| } | } | ||||
| } | } | ||||
| static void extract_edituv_points_finish(const MeshRenderData *UNUSED(mr), | static void extract_edituv_points_finish(const MeshRenderData *UNUSED(mr), | ||||
| MeshBatchCache *UNUSED(cache), | MeshBatchCache *UNUSED(cache), | ||||
| void *buf, | void *buf, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| Show All 38 Lines | static void extract_edituv_points_iter_subdiv_mesh(const DRWSubdivCache *subdiv_cache, | ||||
| const MeshRenderData *mr, | const MeshRenderData *mr, | ||||
| void *_data, | void *_data, | ||||
| uint subdiv_quad_index, | uint subdiv_quad_index, | ||||
| const MPoly *coarse_quad) | const MPoly *coarse_quad) | ||||
| { | { | ||||
| MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| int *subdiv_loop_vert_index = (int *)GPU_vertbuf_get_data(subdiv_cache->verts_orig_index); | int *subdiv_loop_vert_index = (int *)GPU_vertbuf_get_data(subdiv_cache->verts_orig_index); | ||||
| const BMFace *efa = bm_original_face_get(mr, coarse_quad - mr->mpoly); | |||||
| const bool mp_hidden = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) : true; | |||||
| const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false; | |||||
| uint start_loop_idx = subdiv_quad_index * 4; | uint start_loop_idx = subdiv_quad_index * 4; | ||||
| uint end_loop_idx = (subdiv_quad_index + 1) * 4; | uint end_loop_idx = (subdiv_quad_index + 1) * 4; | ||||
| for (uint i = start_loop_idx; i < end_loop_idx; i++) { | for (uint i = start_loop_idx; i < end_loop_idx; i++) { | ||||
| const int vert_origindex = subdiv_loop_vert_index[i]; | const int vert_origindex = subdiv_loop_vert_index[i]; | ||||
| const bool real_vert = !mr->v_origindex || (vert_origindex != -1 && | const bool real_vert = !mr->v_origindex || (vert_origindex != -1 && | ||||
| mr->v_origindex[vert_origindex] != ORIGINDEX_NONE); | mr->v_origindex[vert_origindex] != ORIGINDEX_NONE); | ||||
| edituv_point_add(data, | edituv_point_add(data, mp_hidden || !real_vert, mp_select, i); | ||||
| ((coarse_quad->flag & ME_HIDE) != 0) || !real_vert, | |||||
| (coarse_quad->flag & ME_FACE_SEL) != 0, | |||||
| i); | |||||
| } | } | ||||
| } | } | ||||
| static void extract_edituv_points_finish_subdiv(const struct DRWSubdivCache *UNUSED(subdiv_cache), | static void extract_edituv_points_finish_subdiv(const struct DRWSubdivCache *UNUSED(subdiv_cache), | ||||
| const MeshRenderData *UNUSED(mr), | const MeshRenderData *UNUSED(mr), | ||||
| MeshBatchCache *UNUSED(cache), | MeshBatchCache *UNUSED(cache), | ||||
| void *buf, | void *buf, | ||||
| void *_data) | void *_data) | ||||
| ▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| static void extract_edituv_fdots_iter_poly_mesh(const MeshRenderData *mr, | static void extract_edituv_fdots_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_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data); | ||||
| const BMFace *efa = bm_original_face_get(mr, mp_index); | |||||
| const bool mp_hidden = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) : true; | |||||
| const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false; | |||||
| if (mr->use_subsurf_fdots) { | if (mr->use_subsurf_fdots) { | ||||
| const BLI_bitmap *facedot_tags = mr->me->runtime.subsurf_face_dot_tags; | const BLI_bitmap *facedot_tags = mr->me->runtime.subsurf_face_dot_tags; | ||||
| const MLoop *mloop = mr->mloop; | 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]; | const MLoop *ml = &mloop[ml_index]; | ||||
| const bool real_fdot = !mr->p_origindex || (mr->p_origindex[mp_index] != ORIGINDEX_NONE); | const bool real_fdot = !mr->p_origindex || (mr->p_origindex[mp_index] != ORIGINDEX_NONE); | ||||
| const bool subd_fdot = BLI_BITMAP_TEST(facedot_tags, ml->v); | const bool subd_fdot = BLI_BITMAP_TEST(facedot_tags, ml->v); | ||||
| edituv_facedot_add(data, | edituv_facedot_add(data, mp_hidden || !real_fdot || !subd_fdot, mp_select, mp_index); | ||||
| ((mp->flag & ME_HIDE) != 0) || !real_fdot || !subd_fdot, | |||||
| (mp->flag & ME_FACE_SEL) != 0, | |||||
| mp_index); | |||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| const bool real_fdot = !mr->p_origindex || (mr->p_origindex[mp_index] != ORIGINDEX_NONE); | const bool real_fdot = !mr->p_origindex || (mr->p_origindex[mp_index] != ORIGINDEX_NONE); | ||||
| edituv_facedot_add( | edituv_facedot_add(data, mp_hidden || !real_fdot, mp_select, mp_index); | ||||
| data, ((mp->flag & ME_HIDE) != 0) || !real_fdot, (mp->flag & ME_FACE_SEL) != 0, mp_index); | |||||
| } | } | ||||
| } | } | ||||
| static void extract_edituv_fdots_finish(const MeshRenderData *UNUSED(mr), | static void extract_edituv_fdots_finish(const MeshRenderData *UNUSED(mr), | ||||
| MeshBatchCache *UNUSED(cache), | MeshBatchCache *UNUSED(cache), | ||||
| void *buf, | void *buf, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| Show All 27 Lines | |||||