diff options
Diffstat (limited to 'source/blender/gpu/GPU_element.h')
-rw-r--r-- | source/blender/gpu/GPU_element.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/source/blender/gpu/GPU_element.h b/source/blender/gpu/GPU_element.h index 4ac89d2658b..75caf4cbd6a 100644 --- a/source/blender/gpu/GPU_element.h +++ b/source/blender/gpu/GPU_element.h @@ -36,14 +36,19 @@ typedef enum { } GPUIndexBufType; typedef struct GPUIndexBuf { + uint index_start; uint index_len; + bool is_subrange; #if GPU_TRACK_INDEX_RANGE GPUIndexBufType index_type; uint32_t gl_index_type; uint base_index; #endif uint32_t ibo_id; /* 0 indicates not yet sent to VRAM */ - void *data; /* non-NULL indicates not yet sent to VRAM */ + union { + void *data; /* non-NULL indicates not yet sent to VRAM */ + struct GPUIndexBuf *src; /* if is_subrange is true, this is the source buffer. */ + }; } GPUIndexBuf; void GPU_indexbuf_use(GPUIndexBuf *); @@ -71,9 +76,21 @@ void GPU_indexbuf_add_line_verts(GPUIndexBufBuilder *, uint v1, uint v2); void GPU_indexbuf_add_tri_verts(GPUIndexBufBuilder *, uint v1, uint v2, uint v3); void GPU_indexbuf_add_line_adj_verts(GPUIndexBufBuilder *, uint v1, uint v2, uint v3, uint v4); +void GPU_indexbuf_set_point_vert(GPUIndexBufBuilder *builder, uint elem, uint v1); +void GPU_indexbuf_set_line_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2); +void GPU_indexbuf_set_tri_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2, uint v3); + +/* Skip primitive rendering at the given index. */ +void GPU_indexbuf_set_point_restart(GPUIndexBufBuilder *builder, uint elem); +void GPU_indexbuf_set_line_restart(GPUIndexBufBuilder *builder, uint elem); +void GPU_indexbuf_set_tri_restart(GPUIndexBufBuilder *builder, uint elem); + GPUIndexBuf *GPU_indexbuf_build(GPUIndexBufBuilder *); void GPU_indexbuf_build_in_place(GPUIndexBufBuilder *, GPUIndexBuf *); +/* Create a subrange of an existing indexbuffer. */ +GPUIndexBuf *GPU_indexbuf_create_subrange(GPUIndexBuf *ibo, uint start, uint length); + void GPU_indexbuf_discard(GPUIndexBuf *); int GPU_indexbuf_primitive_len(GPUPrimType prim_type); |