From 3059853732d7f42c42b9aa45e3f6379302d66eb4 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Mon, 26 Jul 2021 09:54:59 -0300 Subject: Cleanup: Rearrange mesh extraction files In the draw module, it's not easy to identify what its header is, and where the shared functions are. So move `draw_cache_extract_mesh_extractors.c` and `draw_cache_extract_mesh_private.h` to the same folder as the extractors and rename these files to make them more identifiable. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D11991 --- source/blender/draw/CMakeLists.txt | 4 +- .../blender/draw/intern/draw_cache_extract_mesh.cc | 3 +- .../intern/draw_cache_extract_mesh_extractors.c | 168 ----------- .../draw/intern/draw_cache_extract_mesh_private.h | 334 --------------------- .../intern/draw_cache_extract_mesh_render_data.c | 2 +- source/blender/draw/intern/draw_cache_impl_mesh.c | 3 +- .../draw/intern/mesh_extractors/extract_mesh.c | 169 +++++++++++ .../draw/intern/mesh_extractors/extract_mesh.h | 334 +++++++++++++++++++++ .../mesh_extractors/extract_mesh_ibo_edituv.cc | 4 +- .../mesh_extractors/extract_mesh_ibo_fdots.cc | 4 +- .../mesh_extractors/extract_mesh_ibo_lines.cc | 4 +- .../extract_mesh_ibo_lines_adjacency.cc | 4 +- .../extract_mesh_ibo_lines_paint_mask.cc | 4 +- .../mesh_extractors/extract_mesh_ibo_points.cc | 4 +- .../mesh_extractors/extract_mesh_ibo_tris.cc | 4 +- .../mesh_extractors/extract_mesh_vbo_edge_fac.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_edit_data.cc | 3 +- .../extract_mesh_vbo_edituv_data.cc | 3 +- .../extract_mesh_vbo_edituv_stretch_angle.cc | 2 +- .../extract_mesh_vbo_edituv_stretch_area.cc | 2 +- .../extract_mesh_vbo_fdots_edituv_data.cc | 3 +- .../mesh_extractors/extract_mesh_vbo_fdots_nor.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_fdots_pos.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_fdots_uv.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_lnor.cc | 2 +- .../extract_mesh_vbo_mesh_analysis.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_orco.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_pos_nor.cc | 2 +- .../extract_mesh_vbo_sculpt_data.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_select_idx.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_skin_roots.cc | 2 +- .../intern/mesh_extractors/extract_mesh_vbo_tan.cc | 2 +- .../intern/mesh_extractors/extract_mesh_vbo_uv.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_vcol.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_weights.cc | 2 +- source/tools | 2 +- 36 files changed, 548 insertions(+), 542 deletions(-) delete mode 100644 source/blender/draw/intern/draw_cache_extract_mesh_extractors.c delete mode 100644 source/blender/draw/intern/draw_cache_extract_mesh_private.h create mode 100644 source/blender/draw/intern/mesh_extractors/extract_mesh.c create mode 100644 source/blender/draw/intern/mesh_extractors/extract_mesh.h diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index ad154704d2c..930d82fa225 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -52,8 +52,8 @@ set(INC set(SRC intern/draw_cache.c intern/draw_cache_extract_mesh.cc - intern/draw_cache_extract_mesh_extractors.c intern/draw_cache_extract_mesh_render_data.c + intern/mesh_extractors/extract_mesh.c intern/mesh_extractors/extract_mesh_ibo_edituv.cc intern/mesh_extractors/extract_mesh_ibo_fdots.cc intern/mesh_extractors/extract_mesh_ibo_lines.cc @@ -193,7 +193,6 @@ set(SRC intern/DRW_render.h intern/draw_cache.h intern/draw_cache_extract.h - intern/draw_cache_extract_mesh_private.h intern/draw_cache_impl.h intern/draw_cache_inline.h intern/draw_color_management.h @@ -207,6 +206,7 @@ set(SRC intern/draw_manager_text.h intern/draw_shader.h intern/draw_view.h + intern/mesh_extractors/extract_mesh.h intern/smaa_textures.h engines/basic/basic_engine.h engines/eevee/eevee_engine.h diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc b/source/blender/draw/intern/draw_cache_extract_mesh.cc index 8d8bb14d953..1bc2b8a9def 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh.cc +++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc @@ -41,9 +41,10 @@ #include "GPU_capabilities.h" #include "draw_cache_extract.h" -#include "draw_cache_extract_mesh_private.h" #include "draw_cache_inline.h" +#include "mesh_extractors/extract_mesh.h" + // #define DEBUG_TIME #ifdef DEBUG_TIME diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c deleted file mode 100644 index e813f006351..00000000000 --- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2021 by Blender Foundation. - * All rights reserved. - */ - -/** \file - * \ingroup draw - * - * \brief Extraction of Mesh data into VBO to feed to GPU. - */ - -#include "MEM_guardedalloc.h" - -#include "DNA_object_types.h" - -#include "ED_uvedit.h" - -#include "draw_cache_extract_mesh_private.h" -#include "draw_cache_impl.h" - -void *mesh_extract_buffer_get(const MeshExtract *extractor, MeshBufferCache *mbc) -{ - /* NOTE: POINTER_OFFSET on windows platforms casts internally to `void *`, but on GCC/CLANG to - * `MeshBufferCache *`. What shows a different usage versus intent. */ - void **buffer_ptr = (void **)POINTER_OFFSET(mbc, extractor->mesh_buffer_offset); - void *buffer = *buffer_ptr; - BLI_assert(buffer); - return buffer; -} - -eMRIterType mesh_extract_iter_type(const MeshExtract *ext) -{ - eMRIterType type = 0; - SET_FLAG_FROM_TEST(type, (ext->iter_looptri_bm || ext->iter_looptri_mesh), MR_ITER_LOOPTRI); - SET_FLAG_FROM_TEST(type, (ext->iter_poly_bm || ext->iter_poly_mesh), MR_ITER_POLY); - SET_FLAG_FROM_TEST(type, (ext->iter_ledge_bm || ext->iter_ledge_mesh), MR_ITER_LEDGE); - SET_FLAG_FROM_TEST(type, (ext->iter_lvert_bm || ext->iter_lvert_mesh), MR_ITER_LVERT); - return type; -} - -/* ---------------------------------------------------------------------- */ -/** \name Override extractors - * Extractors can be overridden. When overridden a specialized version is used. The next functions - * would check for any needed overrides and usage of the specialized version. - * \{ */ - -static const MeshExtract *mesh_extract_override_hq_normals(const MeshExtract *extractor) -{ - if (extractor == &extract_pos_nor) { - return &extract_pos_nor_hq; - } - if (extractor == &extract_lnor) { - return &extract_lnor_hq; - } - if (extractor == &extract_tan) { - return &extract_tan_hq; - } - if (extractor == &extract_fdots_nor) { - return &extract_fdots_nor_hq; - } - return extractor; -} - -static const MeshExtract *mesh_extract_override_single_material(const MeshExtract *extractor) -{ - if (extractor == &extract_tris) { - return &extract_tris_single_mat; - } - return extractor; -} - -const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor, - const bool do_hq_normals, - const bool do_single_mat) -{ - if (do_hq_normals) { - extractor = mesh_extract_override_hq_normals(extractor); - } - - if (do_single_mat) { - extractor = mesh_extract_override_single_material(extractor); - } - - return extractor; -} - -/** \} */ - -/* ---------------------------------------------------------------------- */ -/** \name Extract Edit Flag Utils - * \{ */ - -void mesh_render_data_face_flag(const MeshRenderData *mr, - const BMFace *efa, - const int cd_ofs, - EditLoopData *eattr) -{ - if (efa == mr->efa_act) { - eattr->v_flag |= VFLAG_FACE_ACTIVE; - } - if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { - eattr->v_flag |= VFLAG_FACE_SELECTED; - } - - if (efa == mr->efa_act_uv) { - eattr->v_flag |= VFLAG_FACE_UV_ACTIVE; - } - if ((cd_ofs != -1) && uvedit_face_select_test_ex(mr->toolsettings, (BMFace *)efa, cd_ofs)) { - eattr->v_flag |= VFLAG_FACE_UV_SELECT; - } - -#ifdef WITH_FREESTYLE - if (mr->freestyle_face_ofs != -1) { - const FreestyleFace *ffa = (const FreestyleFace *)BM_ELEM_CD_GET_VOID_P( - efa, mr->freestyle_face_ofs); - if (ffa->flag & FREESTYLE_FACE_MARK) { - eattr->v_flag |= VFLAG_FACE_FREESTYLE; - } - } -#endif -} - -void mesh_render_data_loop_flag(const MeshRenderData *mr, - BMLoop *l, - const int cd_ofs, - EditLoopData *eattr) -{ - if (cd_ofs == -1) { - return; - } - MLoopUV *luv = (MLoopUV *)BM_ELEM_CD_GET_VOID_P(l, cd_ofs); - if (luv != NULL && (luv->flag & MLOOPUV_PINNED)) { - eattr->v_flag |= VFLAG_VERT_UV_PINNED; - } - if (uvedit_uv_select_test_ex(mr->toolsettings, l, cd_ofs)) { - eattr->v_flag |= VFLAG_VERT_UV_SELECT; - } -} - -void mesh_render_data_loop_edge_flag(const MeshRenderData *mr, - BMLoop *l, - const int cd_ofs, - EditLoopData *eattr) -{ - if (cd_ofs == -1) { - return; - } - if (uvedit_edge_select_test_ex(mr->toolsettings, l, cd_ofs)) { - eattr->v_flag |= VFLAG_EDGE_UV_SELECT; - eattr->v_flag |= VFLAG_VERT_UV_SELECT; - } -} - -/** \} */ diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_private.h b/source/blender/draw/intern/draw_cache_extract_mesh_private.h deleted file mode 100644 index f24ccf1a028..00000000000 --- a/source/blender/draw/intern/draw_cache_extract_mesh_private.h +++ /dev/null @@ -1,334 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2021 by Blender Foundation. - * All rights reserved. - */ - -/** \file - * \ingroup draw - * - * \brief Extraction of Mesh data into VBO to feed to GPU. - */ - -#pragma once - -#include "DNA_mesh_types.h" -#include "DNA_meshdata_types.h" -#include "DNA_object_types.h" -#include "DNA_scene_types.h" - -#include "BKE_customdata.h" -#include "BKE_editmesh.h" - -#include "draw_cache_extract.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MIN_RANGE_LEN 1024 - -/* ---------------------------------------------------------------------- */ -/** \name Mesh Render Data - * \{ */ - -typedef enum eMRExtractType { - MR_EXTRACT_BMESH, - MR_EXTRACT_MAPPED, - MR_EXTRACT_MESH, -} eMRExtractType; - -typedef struct MeshRenderData { - eMRExtractType extract_type; - - int poly_len, edge_len, vert_len, loop_len; - int edge_loose_len; - int vert_loose_len; - int loop_loose_len; - int tri_len; - int mat_len; - - bool use_hide; - bool use_subsurf_fdots; - bool use_final_mesh; - - /** Use for #MeshStatVis calculation which use world-space coords. */ - float obmat[4][4]; - - const ToolSettings *toolsettings; - /** Edit Mesh */ - BMEditMesh *edit_bmesh; - BMesh *bm; - EditMeshData *edit_data; - - /* For deformed edit-mesh data. */ - /* Use for #ME_WRAPPER_TYPE_BMESH. */ - const float (*bm_vert_coords)[3]; - const float (*bm_vert_normals)[3]; - const float (*bm_poly_normals)[3]; - const float (*bm_poly_centers)[3]; - - int *v_origindex, *e_origindex, *p_origindex; - int crease_ofs; - int bweight_ofs; - int freestyle_edge_ofs; - int freestyle_face_ofs; - /** Mesh */ - Mesh *me; - const MVert *mvert; - const MEdge *medge; - const MLoop *mloop; - const MPoly *mpoly; - BMVert *eve_act; - BMEdge *eed_act; - BMFace *efa_act; - BMFace *efa_act_uv; - /* Data created on-demand (usually not for #BMesh based data). */ - MLoopTri *mlooptri; - float (*loop_normals)[3]; - float (*poly_normals)[3]; - int *lverts, *ledges; - - struct { - int *tri_first_index; - int *mat_tri_len; - int visible_tri_len; - } poly_sorted; -} MeshRenderData; - -BLI_INLINE BMFace *bm_original_face_get(const MeshRenderData *mr, int idx) -{ - return ((mr->p_origindex != NULL) && (mr->p_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ? - BM_face_at_index(mr->bm, mr->p_origindex[idx]) : - NULL; -} - -BLI_INLINE BMEdge *bm_original_edge_get(const MeshRenderData *mr, int idx) -{ - return ((mr->e_origindex != NULL) && (mr->e_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ? - BM_edge_at_index(mr->bm, mr->e_origindex[idx]) : - NULL; -} - -BLI_INLINE BMVert *bm_original_vert_get(const MeshRenderData *mr, int idx) -{ - return ((mr->v_origindex != NULL) && (mr->v_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ? - BM_vert_at_index(mr->bm, mr->v_origindex[idx]) : - NULL; -} - -BLI_INLINE const float *bm_vert_co_get(const MeshRenderData *mr, const BMVert *eve) -{ - const float(*vert_coords)[3] = mr->bm_vert_coords; - if (vert_coords != NULL) { - return vert_coords[BM_elem_index_get(eve)]; - } - - UNUSED_VARS(mr); - return eve->co; -} - -BLI_INLINE const float *bm_vert_no_get(const MeshRenderData *mr, const BMVert *eve) -{ - const float(*vert_normals)[3] = mr->bm_vert_normals; - if (vert_normals != NULL) { - return vert_normals[BM_elem_index_get(eve)]; - } - - UNUSED_VARS(mr); - return eve->no; -} - -BLI_INLINE const float *bm_face_no_get(const MeshRenderData *mr, const BMFace *efa) -{ - const float(*poly_normals)[3] = mr->bm_poly_normals; - if (poly_normals != NULL) { - return poly_normals[BM_elem_index_get(efa)]; - } - - UNUSED_VARS(mr); - return efa->no; -} - -/** \} */ - -/* ---------------------------------------------------------------------- */ -/** \name Mesh Elements Extract Struct - * \{ */ -/* TODO(jbakker): move parameters inside a struct. */ -typedef void(ExtractTriBMeshFn)(const MeshRenderData *mr, - BMLoop **elt, - const int elt_index, - void *data); -typedef void(ExtractTriMeshFn)(const MeshRenderData *mr, - const MLoopTri *mlt, - const int elt_index, - void *data); -typedef void(ExtractPolyBMeshFn)(const MeshRenderData *mr, - const BMFace *f, - const int f_index, - void *data); -typedef void(ExtractPolyMeshFn)(const MeshRenderData *mr, - const MPoly *mp, - const int mp_index, - void *data); -typedef void(ExtractLEdgeBMeshFn)(const MeshRenderData *mr, - const BMEdge *eed, - const int ledge_index, - void *data); -typedef void(ExtractLEdgeMeshFn)(const MeshRenderData *mr, - const MEdge *med, - const int ledge_index, - void *data); -typedef void(ExtractLVertBMeshFn)(const MeshRenderData *mr, - const BMVert *eve, - const int lvert_index, - void *data); -typedef void(ExtractLVertMeshFn)(const MeshRenderData *mr, - const MVert *mv, - const int lvert_index, - void *data); -typedef void(ExtractInitFn)(const MeshRenderData *mr, - struct MeshBatchCache *cache, - void *buffer, - void *r_data); -typedef void(ExtractFinishFn)(const MeshRenderData *mr, - struct MeshBatchCache *cache, - void *buffer, - void *data); -typedef void(ExtractTaskReduceFn)(void *userdata, void *task_userdata); - -typedef struct MeshExtract { - /** Executed on main thread and return user data for iteration functions. */ - ExtractInitFn *init; - /** Executed on one (or more if use_threading) worker thread(s). */ - ExtractTriBMeshFn *iter_looptri_bm; - ExtractTriMeshFn *iter_looptri_mesh; - ExtractPolyBMeshFn *iter_poly_bm; - ExtractPolyMeshFn *iter_poly_mesh; - ExtractLEdgeBMeshFn *iter_ledge_bm; - ExtractLEdgeMeshFn *iter_ledge_mesh; - ExtractLVertBMeshFn *iter_lvert_bm; - ExtractLVertMeshFn *iter_lvert_mesh; - /** Executed on one worker thread after all elements iterations. */ - ExtractTaskReduceFn *task_reduce; - ExtractFinishFn *finish; - /** Used to request common data. */ - eMRDataType data_type; - size_t data_size; - /** Used to know if the element callbacks are thread-safe and can be parallelized. */ - bool use_threading; - /** - * Offset in bytes of the buffer inside a MeshBufferCache instance. Points to a vertex or index - * buffer. - */ - size_t mesh_buffer_offset; -} MeshExtract; - -/** \} */ - -/* draw_cache_extract_mesh_render_data.c */ -MeshRenderData *mesh_render_data_create(Mesh *me, - const bool is_editmode, - const bool is_paint_mode, - const bool is_mode_active, - const float obmat[4][4], - const bool do_final, - const bool do_uvedit, - const ToolSettings *ts); -void mesh_render_data_free(MeshRenderData *mr); -void mesh_render_data_update_normals(MeshRenderData *mr, const eMRDataType data_flag); -void mesh_render_data_update_loose_geom(MeshRenderData *mr, - MeshBufferExtractionCache *cache, - const eMRIterType iter_type, - const eMRDataType data_flag); -void mesh_render_data_update_polys_sorted(MeshRenderData *mr, - MeshBufferExtractionCache *cache, - const eMRDataType data_flag); -void mesh_render_data_update_looptris(MeshRenderData *mr, - const eMRIterType iter_type, - const eMRDataType data_flag); - -/* draw_cache_extract_mesh_extractors.c */ -typedef struct EditLoopData { - uchar v_flag; - uchar e_flag; - uchar crease; - uchar bweight; -} EditLoopData; - -void *mesh_extract_buffer_get(const MeshExtract *extractor, MeshBufferCache *mbc); -eMRIterType mesh_extract_iter_type(const MeshExtract *ext); -const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor, - const bool do_hq_normals, - const bool do_single_mat); -void mesh_render_data_face_flag(const MeshRenderData *mr, - const BMFace *efa, - const int cd_ofs, - EditLoopData *eattr); -void mesh_render_data_loop_flag(const MeshRenderData *mr, - BMLoop *l, - const int cd_ofs, - EditLoopData *eattr); -void mesh_render_data_loop_edge_flag(const MeshRenderData *mr, - BMLoop *l, - const int cd_ofs, - EditLoopData *eattr); - -extern const MeshExtract extract_tris; -extern const MeshExtract extract_tris_single_mat; -extern const MeshExtract extract_lines; -extern const MeshExtract extract_lines_with_lines_loose; -extern const MeshExtract extract_lines_loose_only; -extern const MeshExtract extract_points; -extern const MeshExtract extract_fdots; -extern const MeshExtract extract_lines_paint_mask; -extern const MeshExtract extract_lines_adjacency; -extern const MeshExtract extract_edituv_tris; -extern const MeshExtract extract_edituv_lines; -extern const MeshExtract extract_edituv_points; -extern const MeshExtract extract_edituv_fdots; -extern const MeshExtract extract_pos_nor; -extern const MeshExtract extract_pos_nor_hq; -extern const MeshExtract extract_lnor_hq; -extern const MeshExtract extract_lnor; -extern const MeshExtract extract_uv; -extern const MeshExtract extract_tan; -extern const MeshExtract extract_tan_hq; -extern const MeshExtract extract_sculpt_data; -extern const MeshExtract extract_vcol; -extern const MeshExtract extract_orco; -extern const MeshExtract extract_edge_fac; -extern const MeshExtract extract_weights; -extern const MeshExtract extract_edit_data; -extern const MeshExtract extract_edituv_data; -extern const MeshExtract extract_edituv_stretch_area; -extern const MeshExtract extract_edituv_stretch_angle; -extern const MeshExtract extract_mesh_analysis; -extern const MeshExtract extract_fdots_pos; -extern const MeshExtract extract_fdots_nor; -extern const MeshExtract extract_fdots_nor_hq; -extern const MeshExtract extract_fdots_uv; -extern const MeshExtract extract_fdots_edituv_data; -extern const MeshExtract extract_skin_roots; -extern const MeshExtract extract_poly_idx; -extern const MeshExtract extract_edge_idx; -extern const MeshExtract extract_vert_idx; -extern const MeshExtract extract_fdot_idx; - -#ifdef __cplusplus -} -#endif diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c b/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c index 7327a4fc1fd..27fd6ca9134 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c +++ b/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c @@ -38,7 +38,7 @@ #include "ED_mesh.h" -#include "draw_cache_extract_mesh_private.h" +#include "mesh_extractors/extract_mesh.h" /* ---------------------------------------------------------------------- */ /** \name Update Loose Geometry diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 38ecdf7756b..359788545e4 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -67,11 +67,12 @@ #include "ED_uvedit.h" #include "draw_cache_extract.h" -#include "draw_cache_extract_mesh_private.h" #include "draw_cache_inline.h" #include "draw_cache_impl.h" /* own include */ +#include "mesh_extractors/extract_mesh.h" + /* ---------------------------------------------------------------------- */ /** \name Dependencies between buffer and batch * \{ */ diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh.c b/source/blender/draw/intern/mesh_extractors/extract_mesh.c new file mode 100644 index 00000000000..53827dcc7d9 --- /dev/null +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh.c @@ -0,0 +1,169 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2021 by Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup draw + * + * \brief Extraction of Mesh data into VBO to feed to GPU. + */ + +#include "MEM_guardedalloc.h" + +#include "DNA_object_types.h" + +#include "ED_uvedit.h" + +#include "extract_mesh.h" + +#include "draw_cache_impl.h" + +void *mesh_extract_buffer_get(const MeshExtract *extractor, MeshBufferCache *mbc) +{ + /* NOTE: POINTER_OFFSET on windows platforms casts internally to `void *`, but on GCC/CLANG to + * `MeshBufferCache *`. What shows a different usage versus intent. */ + void **buffer_ptr = (void **)POINTER_OFFSET(mbc, extractor->mesh_buffer_offset); + void *buffer = *buffer_ptr; + BLI_assert(buffer); + return buffer; +} + +eMRIterType mesh_extract_iter_type(const MeshExtract *ext) +{ + eMRIterType type = 0; + SET_FLAG_FROM_TEST(type, (ext->iter_looptri_bm || ext->iter_looptri_mesh), MR_ITER_LOOPTRI); + SET_FLAG_FROM_TEST(type, (ext->iter_poly_bm || ext->iter_poly_mesh), MR_ITER_POLY); + SET_FLAG_FROM_TEST(type, (ext->iter_ledge_bm || ext->iter_ledge_mesh), MR_ITER_LEDGE); + SET_FLAG_FROM_TEST(type, (ext->iter_lvert_bm || ext->iter_lvert_mesh), MR_ITER_LVERT); + return type; +} + +/* ---------------------------------------------------------------------- */ +/** \name Override extractors + * Extractors can be overridden. When overridden a specialized version is used. The next functions + * would check for any needed overrides and usage of the specialized version. + * \{ */ + +static const MeshExtract *mesh_extract_override_hq_normals(const MeshExtract *extractor) +{ + if (extractor == &extract_pos_nor) { + return &extract_pos_nor_hq; + } + if (extractor == &extract_lnor) { + return &extract_lnor_hq; + } + if (extractor == &extract_tan) { + return &extract_tan_hq; + } + if (extractor == &extract_fdots_nor) { + return &extract_fdots_nor_hq; + } + return extractor; +} + +static const MeshExtract *mesh_extract_override_single_material(const MeshExtract *extractor) +{ + if (extractor == &extract_tris) { + return &extract_tris_single_mat; + } + return extractor; +} + +const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor, + const bool do_hq_normals, + const bool do_single_mat) +{ + if (do_hq_normals) { + extractor = mesh_extract_override_hq_normals(extractor); + } + + if (do_single_mat) { + extractor = mesh_extract_override_single_material(extractor); + } + + return extractor; +} + +/** \} */ + +/* ---------------------------------------------------------------------- */ +/** \name Extract Edit Flag Utils + * \{ */ + +void mesh_render_data_face_flag(const MeshRenderData *mr, + const BMFace *efa, + const int cd_ofs, + EditLoopData *eattr) +{ + if (efa == mr->efa_act) { + eattr->v_flag |= VFLAG_FACE_ACTIVE; + } + if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { + eattr->v_flag |= VFLAG_FACE_SELECTED; + } + + if (efa == mr->efa_act_uv) { + eattr->v_flag |= VFLAG_FACE_UV_ACTIVE; + } + if ((cd_ofs != -1) && uvedit_face_select_test_ex(mr->toolsettings, (BMFace *)efa, cd_ofs)) { + eattr->v_flag |= VFLAG_FACE_UV_SELECT; + } + +#ifdef WITH_FREESTYLE + if (mr->freestyle_face_ofs != -1) { + const FreestyleFace *ffa = (const FreestyleFace *)BM_ELEM_CD_GET_VOID_P( + efa, mr->freestyle_face_ofs); + if (ffa->flag & FREESTYLE_FACE_MARK) { + eattr->v_flag |= VFLAG_FACE_FREESTYLE; + } + } +#endif +} + +void mesh_render_data_loop_flag(const MeshRenderData *mr, + BMLoop *l, + const int cd_ofs, + EditLoopData *eattr) +{ + if (cd_ofs == -1) { + return; + } + MLoopUV *luv = (MLoopUV *)BM_ELEM_CD_GET_VOID_P(l, cd_ofs); + if (luv != NULL && (luv->flag & MLOOPUV_PINNED)) { + eattr->v_flag |= VFLAG_VERT_UV_PINNED; + } + if (uvedit_uv_select_test_ex(mr->toolsettings, l, cd_ofs)) { + eattr->v_flag |= VFLAG_VERT_UV_SELECT; + } +} + +void mesh_render_data_loop_edge_flag(const MeshRenderData *mr, + BMLoop *l, + const int cd_ofs, + EditLoopData *eattr) +{ + if (cd_ofs == -1) { + return; + } + if (uvedit_edge_select_test_ex(mr->toolsettings, l, cd_ofs)) { + eattr->v_flag |= VFLAG_EDGE_UV_SELECT; + eattr->v_flag |= VFLAG_VERT_UV_SELECT; + } +} + +/** \} */ diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh.h b/source/blender/draw/intern/mesh_extractors/extract_mesh.h new file mode 100644 index 00000000000..f24ccf1a028 --- /dev/null +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh.h @@ -0,0 +1,334 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2021 by Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup draw + * + * \brief Extraction of Mesh data into VBO to feed to GPU. + */ + +#pragma once + +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" + +#include "BKE_customdata.h" +#include "BKE_editmesh.h" + +#include "draw_cache_extract.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MIN_RANGE_LEN 1024 + +/* ---------------------------------------------------------------------- */ +/** \name Mesh Render Data + * \{ */ + +typedef enum eMRExtractType { + MR_EXTRACT_BMESH, + MR_EXTRACT_MAPPED, + MR_EXTRACT_MESH, +} eMRExtractType; + +typedef struct MeshRenderData { + eMRExtractType extract_type; + + int poly_len, edge_len, vert_len, loop_len; + int edge_loose_len; + int vert_loose_len; + int loop_loose_len; + int tri_len; + int mat_len; + + bool use_hide; + bool use_subsurf_fdots; + bool use_final_mesh; + + /** Use for #MeshStatVis calculation which use world-space coords. */ + float obmat[4][4]; + + const ToolSettings *toolsettings; + /** Edit Mesh */ + BMEditMesh *edit_bmesh; + BMesh *bm; + EditMeshData *edit_data; + + /* For deformed edit-mesh data. */ + /* Use for #ME_WRAPPER_TYPE_BMESH. */ + const float (*bm_vert_coords)[3]; + const float (*bm_vert_normals)[3]; + const float (*bm_poly_normals)[3]; + const float (*bm_poly_centers)[3]; + + int *v_origindex, *e_origindex, *p_origindex; + int crease_ofs; + int bweight_ofs; + int freestyle_edge_ofs; + int freestyle_face_ofs; + /** Mesh */ + Mesh *me; + const MVert *mvert; + const MEdge *medge; + const MLoop *mloop; + const MPoly *mpoly; + BMVert *eve_act; + BMEdge *eed_act; + BMFace *efa_act; + BMFace *efa_act_uv; + /* Data created on-demand (usually not for #BMesh based data). */ + MLoopTri *mlooptri; + float (*loop_normals)[3]; + float (*poly_normals)[3]; + int *lverts, *ledges; + + struct { + int *tri_first_index; + int *mat_tri_len; + int visible_tri_len; + } poly_sorted; +} MeshRenderData; + +BLI_INLINE BMFace *bm_original_face_get(const MeshRenderData *mr, int idx) +{ + return ((mr->p_origindex != NULL) && (mr->p_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ? + BM_face_at_index(mr->bm, mr->p_origindex[idx]) : + NULL; +} + +BLI_INLINE BMEdge *bm_original_edge_get(const MeshRenderData *mr, int idx) +{ + return ((mr->e_origindex != NULL) && (mr->e_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ? + BM_edge_at_index(mr->bm, mr->e_origindex[idx]) : + NULL; +} + +BLI_INLINE BMVert *bm_original_vert_get(const MeshRenderData *mr, int idx) +{ + return ((mr->v_origindex != NULL) && (mr->v_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ? + BM_vert_at_index(mr->bm, mr->v_origindex[idx]) : + NULL; +} + +BLI_INLINE const float *bm_vert_co_get(const MeshRenderData *mr, const BMVert *eve) +{ + const float(*vert_coords)[3] = mr->bm_vert_coords; + if (vert_coords != NULL) { + return vert_coords[BM_elem_index_get(eve)]; + } + + UNUSED_VARS(mr); + return eve->co; +} + +BLI_INLINE const float *bm_vert_no_get(const MeshRenderData *mr, const BMVert *eve) +{ + const float(*vert_normals)[3] = mr->bm_vert_normals; + if (vert_normals != NULL) { + return vert_normals[BM_elem_index_get(eve)]; + } + + UNUSED_VARS(mr); + return eve->no; +} + +BLI_INLINE const float *bm_face_no_get(const MeshRenderData *mr, const BMFace *efa) +{ + const float(*poly_normals)[3] = mr->bm_poly_normals; + if (poly_normals != NULL) { + return poly_normals[BM_elem_index_get(efa)]; + } + + UNUSED_VARS(mr); + return efa->no; +} + +/** \} */ + +/* ---------------------------------------------------------------------- */ +/** \name Mesh Elements Extract Struct + * \{ */ +/* TODO(jbakker): move parameters inside a struct. */ +typedef void(ExtractTriBMeshFn)(const MeshRenderData *mr, + BMLoop **elt, + const int elt_index, + void *data); +typedef void(ExtractTriMeshFn)(const MeshRenderData *mr, + const MLoopTri *mlt, + const int elt_index, + void *data); +typedef void(ExtractPolyBMeshFn)(const MeshRenderData *mr, + const BMFace *f, + const int f_index, + void *data); +typedef void(ExtractPolyMeshFn)(const MeshRenderData *mr, + const MPoly *mp, + const int mp_index, + void *data); +typedef void(ExtractLEdgeBMeshFn)(const MeshRenderData *mr, + const BMEdge *eed, + const int ledge_index, + void *data); +typedef void(ExtractLEdgeMeshFn)(const MeshRenderData *mr, + const MEdge *med, + const int ledge_index, + void *data); +typedef void(ExtractLVertBMeshFn)(const MeshRenderData *mr, + const BMVert *eve, + const int lvert_index, + void *data); +typedef void(ExtractLVertMeshFn)(const MeshRenderData *mr, + const MVert *mv, + const int lvert_index, + void *data); +typedef void(ExtractInitFn)(const MeshRenderData *mr, + struct MeshBatchCache *cache, + void *buffer, + void *r_data); +typedef void(ExtractFinishFn)(const MeshRenderData *mr, + struct MeshBatchCache *cache, + void *buffer, + void *data); +typedef void(ExtractTaskReduceFn)(void *userdata, void *task_userdata); + +typedef struct MeshExtract { + /** Executed on main thread and return user data for iteration functions. */ + ExtractInitFn *init; + /** Executed on one (or more if use_threading) worker thread(s). */ + ExtractTriBMeshFn *iter_looptri_bm; + ExtractTriMeshFn *iter_looptri_mesh; + ExtractPolyBMeshFn *iter_poly_bm; + ExtractPolyMeshFn *iter_poly_mesh; + ExtractLEdgeBMeshFn *iter_ledge_bm; + ExtractLEdgeMeshFn *iter_ledge_mesh; + ExtractLVertBMeshFn *iter_lvert_bm; + ExtractLVertMeshFn *iter_lvert_mesh; + /** Executed on one worker thread after all elements iterations. */ + ExtractTaskReduceFn *task_reduce; + ExtractFinishFn *finish; + /** Used to request common data. */ + eMRDataType data_type; + size_t data_size; + /** Used to know if the element callbacks are thread-safe and can be parallelized. */ + bool use_threading; + /** + * Offset in bytes of the buffer inside a MeshBufferCache instance. Points to a vertex or index + * buffer. + */ + size_t mesh_buffer_offset; +} MeshExtract; + +/** \} */ + +/* draw_cache_extract_mesh_render_data.c */ +MeshRenderData *mesh_render_data_create(Mesh *me, + const bool is_editmode, + const bool is_paint_mode, + const bool is_mode_active, + const float obmat[4][4], + const bool do_final, + const bool do_uvedit, + const ToolSettings *ts); +void mesh_render_data_free(MeshRenderData *mr); +void mesh_render_data_update_normals(MeshRenderData *mr, const eMRDataType data_flag); +void mesh_render_data_update_loose_geom(MeshRenderData *mr, + MeshBufferExtractionCache *cache, + const eMRIterType iter_type, + const eMRDataType data_flag); +void mesh_render_data_update_polys_sorted(MeshRenderData *mr, + MeshBufferExtractionCache *cache, + const eMRDataType data_flag); +void mesh_render_data_update_looptris(MeshRenderData *mr, + const eMRIterType iter_type, + const eMRDataType data_flag); + +/* draw_cache_extract_mesh_extractors.c */ +typedef struct EditLoopData { + uchar v_flag; + uchar e_flag; + uchar crease; + uchar bweight; +} EditLoopData; + +void *mesh_extract_buffer_get(const MeshExtract *extractor, MeshBufferCache *mbc); +eMRIterType mesh_extract_iter_type(const MeshExtract *ext); +const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor, + const bool do_hq_normals, + const bool do_single_mat); +void mesh_render_data_face_flag(const MeshRenderData *mr, + const BMFace *efa, + const int cd_ofs, + EditLoopData *eattr); +void mesh_render_data_loop_flag(const MeshRenderData *mr, + BMLoop *l, + const int cd_ofs, + EditLoopData *eattr); +void mesh_render_data_loop_edge_flag(const MeshRenderData *mr, + BMLoop *l, + const int cd_ofs, + EditLoopData *eattr); + +extern const MeshExtract extract_tris; +extern const MeshExtract extract_tris_single_mat; +extern const MeshExtract extract_lines; +extern const MeshExtract extract_lines_with_lines_loose; +extern const MeshExtract extract_lines_loose_only; +extern const MeshExtract extract_points; +extern const MeshExtract extract_fdots; +extern const MeshExtract extract_lines_paint_mask; +extern const MeshExtract extract_lines_adjacency; +extern const MeshExtract extract_edituv_tris; +extern const MeshExtract extract_edituv_lines; +extern const MeshExtract extract_edituv_points; +extern const MeshExtract extract_edituv_fdots; +extern const MeshExtract extract_pos_nor; +extern const MeshExtract extract_pos_nor_hq; +extern const MeshExtract extract_lnor_hq; +extern const MeshExtract extract_lnor; +extern const MeshExtract extract_uv; +extern const MeshExtract extract_tan; +extern const MeshExtract extract_tan_hq; +extern const MeshExtract extract_sculpt_data; +extern const MeshExtract extract_vcol; +extern const MeshExtract extract_orco; +extern const MeshExtract extract_edge_fac; +extern const MeshExtract extract_weights; +extern const MeshExtract extract_edit_data; +extern const MeshExtract extract_edituv_data; +extern const MeshExtract extract_edituv_stretch_area; +extern const MeshExtract extract_edituv_stretch_angle; +extern const MeshExtract extract_mesh_analysis; +extern const MeshExtract extract_fdots_pos; +extern const MeshExtract extract_fdots_nor; +extern const MeshExtract extract_fdots_nor_hq; +extern const MeshExtract extract_fdots_uv; +extern const MeshExtract extract_fdots_edituv_data; +extern const MeshExtract extract_skin_roots; +extern const MeshExtract extract_poly_idx; +extern const MeshExtract extract_edge_idx; +extern const MeshExtract extract_vert_idx; +extern const MeshExtract extract_fdot_idx; + +#ifdef __cplusplus +} +#endif diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc index 2dff101c71f..5bd5f7adaa8 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc @@ -21,12 +21,12 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" - #include "BLI_vector.hh" #include "MEM_guardedalloc.h" +#include "extract_mesh.h" + namespace blender::draw { /* ---------------------------------------------------------------------- */ /** \name Extract Edit UV Triangles Indices diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc index c21725ffa32..0f41702a22c 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc @@ -21,12 +21,12 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" - #include "BLI_vector.hh" #include "MEM_guardedalloc.h" +#include "extract_mesh.h" + namespace blender::draw { /* ---------------------------------------------------------------------- */ /** \name Extract Face-dots Indices diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc index 6c677debf88..0096da9e56f 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc @@ -21,10 +21,10 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" - #include "MEM_guardedalloc.h" +#include "extract_mesh.h" + namespace blender::draw { /* ---------------------------------------------------------------------- */ diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc index bdb9af1faf3..7a37cf50264 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc @@ -21,13 +21,13 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" - #include "BLI_edgehash.h" #include "BLI_vector.hh" #include "MEM_guardedalloc.h" +#include "extract_mesh.h" + namespace blender::draw { /* ---------------------------------------------------------------------- */ diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc index 277f9d69c2f..5def7edb75a 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc @@ -21,14 +21,14 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" - #include "BLI_bitmap.h" #include "BLI_vector.hh" #include "atomic_ops.h" #include "MEM_guardedalloc.h" +#include "extract_mesh.h" + namespace blender::draw { /* ---------------------------------------------------------------------- */ /** \name Extract Paint Mask Line Indices diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc index cee0c224aab..cc1a19b8d26 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc @@ -21,12 +21,12 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" - #include "BLI_vector.hh" #include "MEM_guardedalloc.h" +#include "extract_mesh.h" + namespace blender::draw { /* ---------------------------------------------------------------------- */ diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc index 3b2da9879c5..e346177af52 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc @@ -21,10 +21,10 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" - #include "MEM_guardedalloc.h" +#include "extract_mesh.h" + namespace blender::draw { static void extract_tris_mat_task_reduce(void *_userdata_to, void *_userdata_from) diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc index 1bc4c7e330f..302616d4da9 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc @@ -25,7 +25,7 @@ #include "GPU_capabilities.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc index ff250a30ec4..a7efb9c8a1b 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc @@ -21,7 +21,8 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" + #include "draw_cache_impl.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc index aa58266d56b..0378aadabd0 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc @@ -21,7 +21,8 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" + #include "draw_cache_impl.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc index 1d62637d172..a60c0182e89 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc @@ -25,7 +25,7 @@ #include "BKE_mesh.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc index 16814653408..d79ac493c33 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc @@ -25,7 +25,7 @@ #include "BKE_mesh.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc index 5a988c73a7e..b7182d1b60f 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc @@ -21,7 +21,8 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" + #include "draw_cache_impl.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_nor.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_nor.cc index fb9d34e7733..5e4ad54f7b6 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_nor.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_nor.cc @@ -21,7 +21,7 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc index c4706c412c6..e765fb8a8bf 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc @@ -21,7 +21,7 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc index 0289fd63a30..042a0d2debe 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc @@ -21,7 +21,7 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc index b942068352b..8344a615cbe 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc @@ -21,7 +21,7 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc index b734061b76a..075d54e268e 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc @@ -30,7 +30,7 @@ #include "BKE_editmesh_bvh.h" #include "BKE_editmesh_cache.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_orco.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_orco.cc index 80b73cac678..269c0343e32 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_orco.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_orco.cc @@ -21,7 +21,7 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc index 2ac926dd257..b8e5dcb613f 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc @@ -23,7 +23,7 @@ #include "MEM_guardedalloc.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc index 7b36a009419..dbb1e1f880b 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc @@ -27,7 +27,7 @@ #include "BKE_paint.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_select_idx.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_select_idx.cc index ac44e97f229..cd8d46901c5 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_select_idx.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_select_idx.cc @@ -21,7 +21,7 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_skin_roots.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_skin_roots.cc index d7a01ee607f..ffca01d00dd 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_skin_roots.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_skin_roots.cc @@ -21,7 +21,7 @@ * \ingroup draw */ -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc index f251141c442..8f36bfdf1ef 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc @@ -30,7 +30,7 @@ #include "BKE_mesh.h" #include "BKE_mesh_tangent.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc index 0f3c2483296..013da7d674a 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc @@ -23,7 +23,7 @@ #include "BLI_string.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc index 2f1cff08796..d810acfb617 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc @@ -25,7 +25,7 @@ #include "BLI_string.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc index aae266eadce..c547a453aeb 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc @@ -25,7 +25,7 @@ #include "BKE_deform.h" -#include "draw_cache_extract_mesh_private.h" +#include "extract_mesh.h" namespace blender::draw { diff --git a/source/tools b/source/tools index c8579c5cf43..2afbb8ec472 160000 --- a/source/tools +++ b/source/tools @@ -1 +1 @@ -Subproject commit c8579c5cf43229843df505da9644b5b0b7201974 +Subproject commit 2afbb8ec472cac5102eb239f57b006f8c9387685 -- cgit v1.2.3