[Bf-blender-cvs] [340c535dbfa] master: Cleanup: Separate compile unit edituv.

Jeroen Bakker noreply at git.blender.org
Tue Jun 8 13:14:42 CEST 2021


Commit: 340c535dbfa209283529b259e77e8f971f078d16
Author: Jeroen Bakker
Date:   Tue Jun 8 11:56:30 2021 +0200
Branches: master
https://developer.blender.org/rB340c535dbfa209283529b259e77e8f971f078d16

Cleanup: Separate compile unit edituv.

===================================================================

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
A	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc

===================================================================

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 3289a7bd2dd..3938242eb6e 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -54,6 +54,7 @@ set(SRC
   intern/draw_cache_extract_mesh_extractors.c
   intern/draw_cache_extract_mesh_render_data.c
   intern/draw_cache_extract_mesh.cc
+  intern/mesh_extractors/extract_mesh_ibo_edituv.cc
   intern/mesh_extractors/extract_mesh_ibo_fdots.cc
   intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
   intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
index 2bd8c228cff..b79f80866ec 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
@@ -105,336 +105,6 @@ const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor,
 
 /** \} */
 
-/* ---------------------------------------------------------------------- */
-/** \name Extract Edit UV Triangles Indices
- * \{ */
-
-typedef struct MeshExtract_EditUvElem_Data {
-  GPUIndexBufBuilder elb;
-  bool sync_selection;
-} MeshExtract_EditUvElem_Data;
-
-static void *extract_edituv_tris_init(const MeshRenderData *mr,
-                                      struct MeshBatchCache *UNUSED(cache),
-                                      void *UNUSED(ibo))
-{
-  MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
-  GPU_indexbuf_init(&data->elb, GPU_PRIM_TRIS, mr->tri_len, mr->loop_len);
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
-  return data;
-}
-
-BLI_INLINE void edituv_tri_add(
-    MeshExtract_EditUvElem_Data *data, bool hidden, bool selected, int v1, int v2, int v3)
-{
-  if (!hidden && (data->sync_selection || selected)) {
-    GPU_indexbuf_add_tri_verts(&data->elb, v1, v2, v3);
-  }
-}
-
-static void extract_edituv_tris_iter_looptri_bm(const MeshRenderData *UNUSED(mr),
-                                                BMLoop **elt,
-                                                const int UNUSED(elt_index),
-                                                void *data)
-{
-  edituv_tri_add(data,
-                 BM_elem_flag_test(elt[0]->f, BM_ELEM_HIDDEN),
-                 BM_elem_flag_test(elt[0]->f, BM_ELEM_SELECT),
-                 BM_elem_index_get(elt[0]),
-                 BM_elem_index_get(elt[1]),
-                 BM_elem_index_get(elt[2]));
-}
-
-static void extract_edituv_tris_iter_looptri_mesh(const MeshRenderData *mr,
-                                                  const MLoopTri *mlt,
-                                                  const int UNUSED(elt_index),
-                                                  void *data)
-{
-  const MPoly *mp = &mr->mpoly[mlt->poly];
-  edituv_tri_add(data,
-                 (mp->flag & ME_HIDE) != 0,
-                 (mp->flag & ME_FACE_SEL) != 0,
-                 mlt->tri[0],
-                 mlt->tri[1],
-                 mlt->tri[2]);
-}
-
-static void extract_edituv_tris_finish(const MeshRenderData *UNUSED(mr),
-                                       struct MeshBatchCache *UNUSED(cache),
-                                       void *buf,
-                                       void *data)
-{
-  GPUIndexBuf *ibo = buf;
-  MeshExtract_EditUvElem_Data *extract_data = data;
-  GPU_indexbuf_build_in_place(&extract_data->elb, ibo);
-  MEM_freeN(extract_data);
-}
-
-const MeshExtract extract_edituv_tris = {
-    .init = extract_edituv_tris_init,
-    .iter_looptri_bm = extract_edituv_tris_iter_looptri_bm,
-    .iter_looptri_mesh = extract_edituv_tris_iter_looptri_mesh,
-    .finish = extract_edituv_tris_finish,
-    .data_type = 0,
-    .use_threading = false,
-    .mesh_buffer_offset = offsetof(MeshBufferCache, ibo.edituv_tris)};
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-/** \name Extract Edit UV Line Indices around faces
- * \{ */
-
-static void *extract_edituv_lines_init(const MeshRenderData *mr,
-                                       struct MeshBatchCache *UNUSED(cache),
-                                       void *UNUSED(ibo))
-{
-  MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
-  GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES, mr->loop_len, mr->loop_len);
-
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
-  return data;
-}
-
-BLI_INLINE void edituv_edge_add(
-    MeshExtract_EditUvElem_Data *data, bool hidden, bool selected, int v1, int v2)
-{
-  if (!hidden && (data->sync_selection || selected)) {
-    GPU_indexbuf_add_line_verts(&data->elb, v1, v2);
-  }
-}
-
-static void extract_edituv_lines_iter_poly_bm(const MeshRenderData *UNUSED(mr),
-                                              BMFace *f,
-                                              const int UNUSED(f_index),
-                                              void *data)
-{
-  BMLoop *l_iter, *l_first;
-  l_iter = l_first = BM_FACE_FIRST_LOOP(f);
-  do {
-    const int l_index = BM_elem_index_get(l_iter);
-
-    edituv_edge_add(data,
-                    BM_elem_flag_test_bool(f, BM_ELEM_HIDDEN),
-                    BM_elem_flag_test_bool(f, BM_ELEM_SELECT),
-                    l_index,
-                    BM_elem_index_get(l_iter->next));
-  } while ((l_iter = l_iter->next) != l_first);
-}
-
-static void extract_edituv_lines_iter_poly_mesh(const MeshRenderData *mr,
-                                                const MPoly *mp,
-                                                const int UNUSED(mp_index),
-                                                void *data)
-{
-  const MLoop *mloop = mr->mloop;
-  const int ml_index_end = mp->loopstart + mp->totloop;
-  for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) {
-    const MLoop *ml = &mloop[ml_index];
-
-    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 bool real_edge = (mr->e_origindex == NULL || mr->e_origindex[ml->e] != ORIGINDEX_NONE);
-    edituv_edge_add(data,
-                    (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),
-                                        struct MeshBatchCache *UNUSED(cache),
-                                        void *buf,
-                                        void *data)
-{
-  GPUIndexBuf *ibo = buf;
-  MeshExtract_EditUvElem_Data *extract_data = data;
-  GPU_indexbuf_build_in_place(&extract_data->elb, ibo);
-  MEM_freeN(extract_data);
-}
-
-const MeshExtract extract_edituv_lines = {
-    .init = extract_edituv_lines_init,
-    .iter_poly_bm = extract_edituv_lines_iter_poly_bm,
-    .iter_poly_mesh = extract_edituv_lines_iter_poly_mesh,
-    .finish = extract_edituv_lines_finish,
-    .data_type = 0,
-    .use_threading = false,
-    .mesh_buffer_offset = offsetof(MeshBufferCache, ibo.edituv_lines)};
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-/** \name Extract Edit UV Points Indices
- * \{ */
-
-static void *extract_edituv_points_init(const MeshRenderData *mr,
-                                        struct MeshBatchCache *UNUSED(cache),
-                                        void *UNUSED(ibo))
-{
-  MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
-  GPU_indexbuf_init(&data->elb, GPU_PRIM_POINTS, mr->loop_len, mr->loop_len);
-
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
-  return data;
-}
-
-BLI_INLINE void edituv_point_add(MeshExtract_EditUvElem_Data *data,
-                                 bool hidden,
-                                 bool selected,
-                                 int v1)
-{
-  if (!hidden && (data->sync_selection || selected)) {
-    GPU_indexbuf_add_point_vert(&data->elb, v1);
-  }
-}
-
-static void extract_edituv_points_iter_poly_bm(const MeshRenderData *UNUSED(mr),
-                                               BMFace *f,
-                                               const int UNUSED(f_index),
-                                               void *data)
-{
-  BMLoop *l_iter, *l_first;
-  l_iter = l_first = BM_FACE_FIRST_LOOP(f);
-  do {
-    const int l_index = BM_elem_index_get(l_iter);
-
-    edituv_point_add(
-        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);
-}
-
-static void extract_edituv_points_iter_poly_mesh(const MeshRenderData *mr,
-                                                 const MPoly *mp,
-                                                 const int UNUSED(mp_index),
-                                                 void *data)
-{
-  const MLoop *mloop = mr->mloop;
-  const int ml_index_end = mp->loopstart + mp->totloop;
-  for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) {
-    const MLoop *ml = &mloop[ml_index];
-
-    const bool real_vert = (mr->extract_type == MR_EXTRACT_MAPPED && (mr->v_origindex) &&
-                            mr->v_origindex[ml->v] != ORIGINDEX_NONE);
-    edituv_point_add(
-        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),
-                                         struct MeshBatchCache *UNUSED(cache),
-                                         void *buf,
-                                         void *data)
-{
-  GPUIndexBuf *ibo = buf;
-  MeshExtract_EditUvElem_Data *extract_data = data;
-  GPU_indexbuf_build_in_place(&extract_data->elb, ibo);
-  MEM_freeN(extract_data);
-}
-
-const MeshExtract extract_edituv_points = {
-    .init = extract_edituv_points_init,
-    .iter_poly_bm = extract_edituv_points_iter_poly_bm,
-    .iter_poly_mesh = extract_edituv_points_iter_pol

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list