Differential D14365 Diff 59272 source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc
| Show All 11 Lines | |||||
| namespace blender::draw { | namespace blender::draw { | ||||
| /* ---------------------------------------------------------------------- */ | /* ---------------------------------------------------------------------- */ | ||||
| /** \name Extract Face-dots Edit UV flag | /** \name Extract Face-dots Edit UV flag | ||||
| * \{ */ | * \{ */ | ||||
| struct MeshExtract_EditUVFdotData_Data { | struct MeshExtract_EditUVFdotData_Data { | ||||
| EditLoopData *vbo_data; | EditLoopData *vbo_data; | ||||
| int cd_ofs; | BMUVOffsets offsets; | ||||
| }; | }; | ||||
| static void extract_fdots_edituv_data_init(const MeshRenderData *mr, | static void extract_fdots_edituv_data_init(const MeshRenderData *mr, | ||||
| MeshBatchCache * /*cache*/, | MeshBatchCache * /*cache*/, | ||||
| void *buf, | void *buf, | ||||
| void *tls_data) | void *tls_data) | ||||
| { | { | ||||
| GPUVertBuf *vbo = static_cast<GPUVertBuf *>(buf); | GPUVertBuf *vbo = static_cast<GPUVertBuf *>(buf); | ||||
| static GPUVertFormat format = {0}; | static GPUVertFormat format = {0}; | ||||
| if (format.attr_len == 0) { | if (format.attr_len == 0) { | ||||
| GPU_vertformat_attr_add(&format, "flag", GPU_COMP_U8, 4, GPU_FETCH_INT); | GPU_vertformat_attr_add(&format, "flag", GPU_COMP_U8, 4, GPU_FETCH_INT); | ||||
| } | } | ||||
| GPU_vertbuf_init_with_format(vbo, &format); | GPU_vertbuf_init_with_format(vbo, &format); | ||||
| GPU_vertbuf_data_alloc(vbo, mr->poly_len); | GPU_vertbuf_data_alloc(vbo, mr->poly_len); | ||||
| MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(tls_data); | MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(tls_data); | ||||
| data->vbo_data = (EditLoopData *)GPU_vertbuf_get_data(vbo); | data->vbo_data = (EditLoopData *)GPU_vertbuf_get_data(vbo); | ||||
| data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV); | data->offsets = BM_uv_map_get_offsets(mr->bm); | ||||
| } | } | ||||
| static void extract_fdots_edituv_data_iter_poly_bm(const MeshRenderData *mr, | static void extract_fdots_edituv_data_iter_poly_bm(const MeshRenderData *mr, | ||||
| const BMFace *f, | const BMFace *f, | ||||
| const int /*f_index*/, | const int /*f_index*/, | ||||
| void *_data) | void *_data) | ||||
| { | { | ||||
| MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(_data); | MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(_data); | ||||
| EditLoopData *eldata = &data->vbo_data[BM_elem_index_get(f)]; | EditLoopData *eldata = &data->vbo_data[BM_elem_index_get(f)]; | ||||
| memset(eldata, 0x0, sizeof(*eldata)); | memset(eldata, 0x0, sizeof(*eldata)); | ||||
| mesh_render_data_face_flag(mr, f, data->cd_ofs, eldata); | mesh_render_data_face_flag(mr, f, data->offsets, eldata); | ||||
| } | } | ||||
| static void extract_fdots_edituv_data_iter_poly_mesh(const MeshRenderData *mr, | static void extract_fdots_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_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(_data); | MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(_data); | ||||
| EditLoopData *eldata = &data->vbo_data[mp_index]; | EditLoopData *eldata = &data->vbo_data[mp_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) { | ||||
| mesh_render_data_face_flag(mr, efa, data->cd_ofs, eldata); | mesh_render_data_face_flag(mr, efa, data->offsets, eldata); | ||||
| } | } | ||||
| } | } | ||||
| constexpr MeshExtract create_extractor_fdots_edituv_data() | constexpr MeshExtract create_extractor_fdots_edituv_data() | ||||
| { | { | ||||
| MeshExtract extractor = {nullptr}; | MeshExtract extractor = {nullptr}; | ||||
| extractor.init = extract_fdots_edituv_data_init; | extractor.init = extract_fdots_edituv_data_init; | ||||
| extractor.iter_poly_bm = extract_fdots_edituv_data_iter_poly_bm; | extractor.iter_poly_bm = extract_fdots_edituv_data_iter_poly_bm; | ||||
| Show All 13 Lines | |||||