From 285a68b7bbf2fa40e41d507991467387f5dd5264 Mon Sep 17 00:00:00 2001 From: Joseph Eagar Date: Wed, 8 Jun 2022 12:30:01 -0700 Subject: Sculpt: PBVH Draw Support for EEVEE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch adds support for PBVH drawing in EEVEE. Notes: # PBVH_FACES only. For Multires we'll need an API to get/cache attributes. DynTopo support will be merged in later with sculpt-dev's DynTopo implementation. # Supports vertex color and UV attributes only; other types can be added fairly easily though. # Workbench only sends the active vertex color and UV layers to the GPU. # Added a new draw engine API method, DRW_cdlayer_attr_aliases_add. Please review. # The vertex format object is now stored in the pbvh. Reviewed By: Clément Foucault & Brecht Van Lommel & Jeroen Bakker Differential Revision: https://developer.blender.org/D13897 Ref D13897 --- source/blender/gpu/GPU_buffers.h | 44 ++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'source/blender/gpu/GPU_buffers.h') diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h index e4a01670558..5d33ea71fe7 100644 --- a/source/blender/gpu/GPU_buffers.h +++ b/source/blender/gpu/GPU_buffers.h @@ -10,6 +10,7 @@ #include #include "BKE_attribute.h" +#include "BKE_pbvh.h" #ifdef __cplusplus extern "C" { @@ -20,6 +21,7 @@ struct CCGElem; struct CCGKey; struct DMFlagMat; struct GSet; +struct TableGSet; struct MLoop; struct MLoopCol; struct MLoopTri; @@ -29,6 +31,9 @@ struct MVert; struct Mesh; struct PBVH; struct SubdivCCG; +struct CustomData; + +typedef struct PBVHGPUFormat PBVHGPUFormat; /** * Buffers for drawing from PBVH grids. @@ -78,36 +83,46 @@ enum { }; /** + * Creates a vertex buffer (coordinate, normal, color) and, + * if smooth shading, an element index buffer. * Threaded: do not call any functions that use OpenGL calls! */ -void GPU_pbvh_mesh_buffers_update(GPU_PBVH_Buffers *buffers, +void GPU_pbvh_mesh_buffers_update(PBVHGPUFormat *vbo_id, + GPU_PBVH_Buffers *buffers, const struct MVert *mvert, - const float (*vert_normals)[3], + const CustomData *vdata, + const CustomData *ldata, const float *vmask, - const void *vcol_data, - int vcol_type, - eAttrDomain vcol_domain, const int *sculpt_face_sets, - int face_sets_color_seed, - int face_sets_color_default, - int update_flags); + const int face_sets_color_seed, + const int face_sets_color_default, + const int update_flags, + const float (*vert_normals)[3]); + +bool GPU_pbvh_attribute_names_update(PBVHType pbvh_type, + PBVHGPUFormat *vbo_id, + const struct CustomData *vdata, + const struct CustomData *ldata, + bool active_attrs_only); /** * Creates a vertex buffer (coordinate, normal, color) and, * if smooth shading, an element index buffer. * Threaded: do not call any functions that use OpenGL calls! */ -void GPU_pbvh_bmesh_buffers_update(GPU_PBVH_Buffers *buffers, +void GPU_pbvh_bmesh_buffers_update(PBVHGPUFormat *vbo_id, + struct GPU_PBVH_Buffers *buffers, struct BMesh *bm, struct GSet *bm_faces, struct GSet *bm_unique_verts, struct GSet *bm_other_verts, - int update_flags); + const int update_flags); /** * Threaded: do not call any functions that use OpenGL calls! */ -void GPU_pbvh_grid_buffers_update(GPU_PBVH_Buffers *buffers, +void GPU_pbvh_grid_buffers_update(PBVHGPUFormat *vbo_id, + GPU_PBVH_Buffers *buffers, struct SubdivCCG *subdiv_ccg, struct CCGElem **grids, const struct DMFlagMat *grid_flag_mats, @@ -120,7 +135,8 @@ void GPU_pbvh_grid_buffers_update(GPU_PBVH_Buffers *buffers, int update_flags); /** - * Finish update. Not thread safe, must run in OpenGL main thread. + * Finish update. Not thread safe, must run in OpenGL main + * thread. */ void GPU_pbvh_buffers_update_flush(GPU_PBVH_Buffers *buffers); @@ -133,9 +149,11 @@ void GPU_pbvh_buffers_free(GPU_PBVH_Buffers *buffers); struct GPUBatch *GPU_pbvh_buffers_batch_get(GPU_PBVH_Buffers *buffers, bool fast, bool wires); short GPU_pbvh_buffers_material_index_get(GPU_PBVH_Buffers *buffers); - bool GPU_pbvh_buffers_has_overlays(GPU_PBVH_Buffers *buffers); +PBVHGPUFormat *GPU_pbvh_make_format(); +void GPU_pbvh_free_format(PBVHGPUFormat *vbo_id); + #ifdef __cplusplus } #endif -- cgit v1.2.3