2016-08-08 01:32:37 +00:00
|
|
|
#include "../glfw.h"
|
2016-09-30 06:18:51 +00:00
|
|
|
#include "../util.h"
|
2016-07-16 05:39:17 +00:00
|
|
|
|
2016-08-10 06:28:17 +00:00
|
|
|
#ifndef LOVR_BUFFER_TYPES
|
|
|
|
#define LOVR_BUFFER_TYPES
|
2016-09-17 22:38:13 +00:00
|
|
|
typedef enum {
|
|
|
|
BUFFER_POINTS = GL_POINTS,
|
|
|
|
BUFFER_TRIANGLE_STRIP = GL_TRIANGLE_STRIP,
|
|
|
|
BUFFER_TRIANGLES = GL_TRIANGLES,
|
|
|
|
BUFFER_TRIANGLE_FAN = GL_TRIANGLE_FAN
|
|
|
|
} BufferDrawMode;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
BUFFER_STATIC = GL_STATIC_DRAW,
|
|
|
|
BUFFER_DYNAMIC = GL_DYNAMIC_DRAW,
|
|
|
|
BUFFER_STREAM = GL_STREAM_DRAW
|
|
|
|
} BufferUsage;
|
|
|
|
|
2016-10-10 00:40:02 +00:00
|
|
|
typedef enum {
|
|
|
|
BUFFER_FLOAT = GL_FLOAT,
|
|
|
|
BUFFER_BYTE = GL_BYTE
|
|
|
|
} BufferAttributeType;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
const char* name;
|
|
|
|
BufferAttributeType type;
|
|
|
|
int size;
|
|
|
|
} BufferAttribute;
|
|
|
|
|
|
|
|
typedef vec_t(BufferAttribute) BufferFormat;
|
|
|
|
|
2016-07-16 05:39:17 +00:00
|
|
|
typedef struct {
|
2016-08-08 21:40:18 +00:00
|
|
|
int size;
|
2016-10-10 00:40:02 +00:00
|
|
|
int stride;
|
|
|
|
void* data;
|
|
|
|
void* scratchVertex;
|
|
|
|
BufferFormat format;
|
2016-09-17 22:38:13 +00:00
|
|
|
BufferDrawMode drawMode;
|
|
|
|
BufferUsage usage;
|
2016-07-27 06:17:55 +00:00
|
|
|
GLuint vao;
|
|
|
|
GLuint vbo;
|
2016-09-18 00:52:52 +00:00
|
|
|
GLuint ibo;
|
|
|
|
vec_uint_t map;
|
|
|
|
char isRangeEnabled;
|
2016-08-09 01:27:35 +00:00
|
|
|
int rangeStart;
|
|
|
|
int rangeCount;
|
2016-07-16 05:39:17 +00:00
|
|
|
} Buffer;
|
2016-08-10 06:28:17 +00:00
|
|
|
#endif
|
2016-07-16 05:39:17 +00:00
|
|
|
|
2016-10-10 00:40:02 +00:00
|
|
|
Buffer* lovrBufferCreate(int size, BufferFormat* format, BufferDrawMode drawMode, BufferUsage usage);
|
2016-08-10 06:28:17 +00:00
|
|
|
void lovrBufferDestroy(Buffer* buffer);
|
|
|
|
void lovrBufferDraw(Buffer* buffer);
|
2016-10-10 00:40:02 +00:00
|
|
|
BufferFormat lovrBufferGetVertexFormat(Buffer* buffer);
|
2016-09-17 22:38:13 +00:00
|
|
|
BufferDrawMode lovrBufferGetDrawMode(Buffer* buffer);
|
|
|
|
int lovrBufferSetDrawMode(Buffer* buffer, BufferDrawMode drawMode);
|
2016-09-17 23:29:39 +00:00
|
|
|
int lovrBufferGetVertexCount(Buffer* buffer);
|
2016-10-10 00:40:02 +00:00
|
|
|
int lovrBufferGetVertexSize(Buffer* buffer);
|
|
|
|
void* lovrBufferGetScratchVertex(Buffer* buffer);
|
|
|
|
void lovrBufferGetVertex(Buffer* buffer, int index, void* dest);
|
|
|
|
void lovrBufferSetVertex(Buffer* buffer, int index, void* vertex);
|
2016-10-31 20:54:32 +00:00
|
|
|
void lovrBufferSetVertices(Buffer* buffer, float* vertices, int count);
|
2016-09-18 00:52:52 +00:00
|
|
|
unsigned int* lovrBufferGetVertexMap(Buffer* buffer, int* count);
|
|
|
|
void lovrBufferSetVertexMap(Buffer* buffer, unsigned int* map, int count);
|
2016-09-20 06:42:21 +00:00
|
|
|
char lovrBufferIsRangeEnabled(Buffer* buffer);
|
|
|
|
void lovrBufferSetRangeEnabled(Buffer* buffer, char isEnabled);
|
2016-08-10 06:28:17 +00:00
|
|
|
void lovrBufferGetDrawRange(Buffer* buffer, int* start, int* count);
|
|
|
|
int lovrBufferSetDrawRange(Buffer* buffer, int start, int count);
|