[Bf-blender-cvs] [4a7951fede1] master: Cleanup: Separate each extractor into specific compile units

Germano Cavalcante noreply at git.blender.org
Thu Jul 1 16:15:06 CEST 2021


Commit: 4a7951fede101264efa1c085c66b84d47096ca50
Author: Germano Cavalcante
Date:   Wed Jun 30 15:16:29 2021 -0300
Branches: master
https://developer.blender.org/rB4a7951fede101264efa1c085c66b84d47096ca50

Cleanup: Separate each extractor into specific compile units

Makes code cleaner and easier to find.

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
M	source/blender/draw/intern/draw_cache_extract_mesh_private.h
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_nor.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_orco.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_select_idx.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_skin_roots.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
A	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 4f68c3fdc7e..1227f4db8e4 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -61,6 +61,26 @@ set(SRC
   intern/mesh_extractors/extract_mesh_ibo_lines.cc
   intern/mesh_extractors/extract_mesh_ibo_points.cc
   intern/mesh_extractors/extract_mesh_ibo_tris.cc
+  intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc
+  intern/mesh_extractors/extract_mesh_vbo_edit_data.cc
+  intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
+  intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc
+  intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc
+  intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc
+  intern/mesh_extractors/extract_mesh_vbo_fdots_nor.cc
+  intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc
+  intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc
+  intern/mesh_extractors/extract_mesh_vbo_lnor.cc
+  intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc
+  intern/mesh_extractors/extract_mesh_vbo_orco.cc
+  intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
+  intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc
+  intern/mesh_extractors/extract_mesh_vbo_select_idx.cc
+  intern/mesh_extractors/extract_mesh_vbo_skin_roots.cc
+  intern/mesh_extractors/extract_mesh_vbo_tan.cc
+  intern/mesh_extractors/extract_mesh_vbo_uv.cc
+  intern/mesh_extractors/extract_mesh_vbo_vcol.cc
+  intern/mesh_extractors/extract_mesh_vbo_weights.cc
   intern/draw_cache_impl_curve.cc
   intern/draw_cache_impl_displist.c
   intern/draw_cache_impl_gpencil.c
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 42cd571b089..e813f006351 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
@@ -25,29 +25,10 @@
 
 #include "MEM_guardedalloc.h"
 
-#include "atomic_ops.h"
-
 #include "DNA_object_types.h"
 
-#include "BLI_edgehash.h"
-#include "BLI_jitter_2d.h"
-#include "BLI_kdopbvh.h"
-#include "BLI_string.h"
-
-#include "BKE_bvhutils.h"
-#include "BKE_deform.h"
-#include "BKE_editmesh.h"
-#include "BKE_editmesh_bvh.h"
-#include "BKE_editmesh_cache.h"
-#include "BKE_editmesh_tangent.h"
-#include "BKE_mesh.h"
-#include "BKE_mesh_tangent.h"
-#include "BKE_paint.h"
-
 #include "ED_uvedit.h"
 
-#include "GPU_capabilities.h"
-
 #include "draw_cache_extract_mesh_private.h"
 #include "draw_cache_impl.h"
 
@@ -120,3569 +101,68 @@ const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor,
 /** \} */
 
 /* ---------------------------------------------------------------------- */
-/** \name Extract Position and Vertex Normal
- * \{ */
-
-typedef struct PosNorLoop {
-  float pos[3];
-  GPUPackedNormal nor;
-} PosNorLoop;
-
-typedef struct MeshExtract_PosNor_Data {
-  PosNorLoop *vbo_data;
-  GPUNormal *normals;
-} MeshExtract_PosNor_Data;
-
-static void extract_pos_nor_init(const MeshRenderData *mr,
-                                 struct MeshBatchCache *UNUSED(cache),
-                                 void *buf,
-                                 void *tls_data)
-{
-  GPUVertBuf *vbo = buf;
-  static GPUVertFormat format = {0};
-  if (format.attr_len == 0) {
-    /* WARNING Adjust #PosNorLoop struct accordingly. */
-    GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
-    GPU_vertformat_attr_add(&format, "nor", GPU_COMP_I10, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
-    GPU_vertformat_alias_add(&format, "vnor");
-  }
-  GPU_vertbuf_init_with_format(vbo, &format);
-  GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
-
-  /* Pack normals per vert, reduce amount of computation. */
-  MeshExtract_PosNor_Data *data = tls_data;
-  data->vbo_data = (PosNorLoop *)GPU_vertbuf_get_data(vbo);
-  data->normals = MEM_mallocN(sizeof(GPUNormal) * mr->vert_len, __func__);
-
-  /* Quicker than doing it for each loop. */
-  if (mr->extract_type == MR_EXTRACT_BMESH) {
-    BMIter iter;
-    BMVert *eve;
-    int v;
-    BM_ITER_MESH_INDEX (eve, &iter, mr->bm, BM_VERTS_OF_MESH, v) {
-      data->normals[v].low = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, eve));
-    }
-  }
-  else {
-    const MVert *mv = mr->mvert;
-    for (int v = 0; v < mr->vert_len; v++, mv++) {
-      data->normals[v].low = GPU_normal_convert_i10_s3(mv->no);
-    }
-  }
-}
-
-static void extract_pos_nor_iter_poly_bm(const MeshRenderData *mr,
-                                         const BMFace *f,
-                                         const int UNUSED(f_index),
-                                         void *_data)
-{
-  MeshExtract_PosNor_Data *data = _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);
-    PosNorLoop *vert = &data->vbo_data[l_index];
-    copy_v3_v3(vert->pos, bm_vert_co_get(mr, l_iter->v));
-    vert->nor = data->normals[BM_elem_index_get(l_iter->v)].low;
-    vert->nor.w = BM_elem_flag_test(f, BM_ELEM_HIDDEN) ? -1 : 0;
-  } while ((l_iter = l_iter->next) != l_first);
-}
-
-static void extract_pos_nor_iter_poly_mesh(const MeshRenderData *mr,
-                                           const MPoly *mp,
-                                           const int UNUSED(mp_index),
-                                           void *_data)
-{
-  MeshExtract_PosNor_Data *data = _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];
-
-    PosNorLoop *vert = &data->vbo_data[ml_index];
-    const MVert *mv = &mr->mvert[ml->v];
-    copy_v3_v3(vert->pos, mv->co);
-    vert->nor = data->normals[ml->v].low;
-    /* Flag for paint mode overlay. */
-    if (mp->flag & ME_HIDE || mv->flag & ME_HIDE ||
-        ((mr->extract_type == MR_EXTRACT_MAPPED) && (mr->v_origindex) &&
-         (mr->v_origindex[ml->v] == ORIGINDEX_NONE))) {
-      vert->nor.w = -1;
-    }
-    else if (mv->flag & SELECT) {
-      vert->nor.w = 1;
-    }
-    else {
-      vert->nor.w = 0;
-    }
-  }
-}
-
-static void extract_pos_nor_iter_ledge_bm(const MeshRenderData *mr,
-                                          const BMEdge *eed,
-                                          const int ledge_index,
-                                          void *_data)
-{
-  MeshExtract_PosNor_Data *data = _data;
-
-  int l_index = mr->loop_len + ledge_index * 2;
-  PosNorLoop *vert = &data->vbo_data[l_index];
-  copy_v3_v3(vert[0].pos, bm_vert_co_get(mr, eed->v1));
-  copy_v3_v3(vert[1].pos, bm_vert_co_get(mr, eed->v2));
-  vert[0].nor = data->normals[BM_elem_index_get(eed->v1)].low;
-  vert[1].nor = data->normals[BM_elem_index_get(eed->v2)].low;
-}
-
-static void extract_pos_nor_iter_ledge_mesh(const MeshRenderData *mr,
-                                            const MEdge *med,
-                                            const int ledge_index,
-                                            void *_data)
-{
-  MeshExtract_PosNor_Data *data = _data;
-  const int ml_index = mr->loop_len + ledge_index * 2;
-  PosNorLoop *vert = &data->vbo_data[ml_index];
-  copy_v3_v3(vert[0].pos, mr->mvert[med->v1].co);
-  copy_v3_v3(vert[1].pos, mr->mvert[med->v2].co);
-  vert[0].nor = data->normals[med->v1].low;
-  vert[1].nor = data->normals[med->v2].low;
-}
-
-static void extract_pos_nor_iter_lvert_bm(const MeshRenderData *mr,
-                                          const BMVert *eve,
-                                          const int lvert_index,
-                                          void *_data)
-{
-  MeshExtract_PosNor_Data *data = _data;
-  const int offset = mr->loop_len + (mr->edge_loose_len * 2);
-
-  const int l_index = offset + lvert_index;
-  PosNorLoop *vert = &data->vbo_data[l_index];
-  copy_v3_v3(vert->pos, bm_vert_co_get(mr, eve));
-  vert->nor = data->normals[BM_elem_index_get(eve)].low;
-}
-
-static void extract_pos_nor_iter_lvert_mesh(const MeshRenderData *mr,
-                                            const MVert *mv,
-                                            const int lvert_index,
-                                            void *_data)
-{
-  MeshExtract_PosNor_Data *data = _data;
-  const int offset = mr->loop_len + (mr->edge_loose_len * 2);
-
-  const int ml_index = offset + lvert_index;
-  const int v_index = mr->lverts[lvert_index];
-  PosNorLoop *vert = &data->vbo_data[ml_index];
-  copy_v3_v3(vert->pos, mv->co);
-  vert->nor = data->normals[v_index].low;
-}
-
-static void extract_pos_nor_finish(const MeshRenderData *UNUSED(mr),
-                                   struct MeshBatchCache *UNUSED(cache),
-                                   void *UNUSED(buf),
-                                   void *_data)
-{
-  MeshExtract_PosNor_Data *data = _data;
-  MEM_freeN(data->normals);
-}
-
-const MeshExtract extract_pos_nor = {
-    .init = extract_pos_nor_init,
-    .iter_poly_bm = extract_pos_nor_iter_poly_bm,
-    .iter_poly_mesh = extract_pos_nor_iter_poly_mesh,
-    .iter_ledge_bm = extract_pos_nor_iter_ledge_bm,
-    .iter_ledge_mesh = extract_pos_nor_iter_ledge_mesh,
-    .iter_lvert_bm = extract_pos_nor_iter_lvert_bm,
-    .iter_lvert_mesh = extract_pos_nor_iter_lvert_mesh,
-    .finish = extract_pos_nor_finish,
-    .data_type = 0,
-    .data_size = sizeof(MeshExtract_PosNor_Data),
-    .use_threading = true,
-    .mesh_buffer_offset = offsetof(MeshBufferCache, vbo.pos_nor),
-};
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-/** \name Extract Position and High Quality Vertex Normal
- * \{ */
-
-typedef struct PosNorHQLoop {
-  float pos[3];
-  short nor[4];
-} PosNorHQLoop;
-
-typedef struct MeshExtract_PosNorHQ_Data {
-  PosNorHQLoop *vbo_data;
-  GPUNormal *normals;
-} MeshExtract_PosNorHQ_Data;
-
-static void extract_pos_nor_hq_init(const MeshRenderData *mr,
-                                    struct MeshBatchCache *UNUSED(cache),
-                                    void *buf,
-                                    void *tls_data)
-{
-  GPUVertBu

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list