[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