diff options
Diffstat (limited to 'source/blender/gpu/GPU_buffers.h')
-rw-r--r-- | source/blender/gpu/GPU_buffers.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h index a8630d0c5be..4c9b8c0519b 100644 --- a/source/blender/gpu/GPU_buffers.h +++ b/source/blender/gpu/GPU_buffers.h @@ -48,6 +48,9 @@ struct GSet; struct GPUVertPointLink; struct PBVH; +typedef void (*GPUBufferCopyFunc)(DerivedMesh *dm, float *varray, int *index, + int *mat_orig_to_new, void *user_data); + typedef struct GPUBuffer { int size; /* in bytes */ void *pointer; /* used with vertex arrays */ @@ -88,6 +91,7 @@ typedef struct GPUDrawObject { GPUBuffer *colors; GPUBuffer *edges; GPUBuffer *uvedges; + GPUBuffer *facemapindices; /* for each triangle, the original MFace index */ int *triangle_to_mface; @@ -114,6 +118,10 @@ typedef struct GPUDrawObject { int totvert; int totedge; + int totfacemaps; /* total facemaps */ + int *facemap_start; /* beginning of facemap */ + int *facemap_count; /* elements per facemap */ + int loose_edge_offset; int tot_loose_edge_drawn; int tot_edge_drawn; @@ -132,9 +140,21 @@ void GPU_global_buffer_pool_free_unused(void); GPUBuffer *GPU_buffer_alloc(int size, bool force_vertex_arrays); void GPU_buffer_free(GPUBuffer *buffer); -GPUDrawObject *GPU_drawobject_new(struct DerivedMesh *dm); void GPU_drawobject_free(struct DerivedMesh *dm); +/* flag that controls data type to fill buffer with, a modifier will prepare. */ +typedef enum { + GPU_BUFFER_VERTEX = 0, + GPU_BUFFER_NORMAL, + GPU_BUFFER_COLOR, + GPU_BUFFER_UV, + GPU_BUFFER_UV_TEXPAINT, + GPU_BUFFER_EDGE, + GPU_BUFFER_UVEDGE, + GPU_BUFFER_FACEMAP +} GPUBufferType; + + /* called before drawing */ void GPU_vertex_setup(struct DerivedMesh *dm); void GPU_normal_setup(struct DerivedMesh *dm); @@ -144,6 +164,7 @@ void GPU_texpaint_uv_setup(struct DerivedMesh *dm); void GPU_color_setup(struct DerivedMesh *dm, int colType); void GPU_edge_setup(struct DerivedMesh *dm); /* does not mix with other data */ void GPU_uvedge_setup(struct DerivedMesh *dm); +void GPU_facemap_setup(struct DerivedMesh *dm); int GPU_attrib_element_size(GPUAttrib data[], int numdata); void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numdata); |