11#define BUFFER_OFFSET( i ) \
12 ( (char *)( sizeof( char ) * ( i ) ) )
17typedef enum gl_vboType_e {
37static gl_vbo *
gl_vboCreate( GLenum target, GLsizei size,
const void *data,
66static gl_vbo *
gl_vboCreate( GLenum target, GLsizei size,
const void *data,
70 gl_vbo *vbo = calloc( 1,
sizeof( gl_vbo ) );
76 glGenBuffers( 1, &vbo->id );
79 glBindBuffer( target, vbo->id );
80 glBufferData( target, size, data, usage );
81 glBindBuffer( target, 0 );
96void gl_vboData( gl_vbo *vbo, GLsizei size,
const void *data )
104 usage = GL_STREAM_DRAW;
106 usage = GL_DYNAMIC_DRAW;
108 usage = GL_STATIC_DRAW;
110 usage = GL_STREAM_DRAW;
113 glBindBuffer( GL_ARRAY_BUFFER, vbo->id );
114 glBufferData( GL_ARRAY_BUFFER, size, data, usage );
128void gl_vboSubData( gl_vbo *vbo, GLint offset, GLsizei size,
const void *data )
130 glBindBuffer( GL_ARRAY_BUFFER, vbo->id );
131 glBufferSubData( GL_ARRAY_BUFFER, offset, size, data );
145 gl_vbo *vbo =
gl_vboCreate( GL_ARRAY_BUFFER, size, data, GL_STREAM_DRAW );
162 gl_vbo *vbo =
gl_vboCreate( GL_ARRAY_BUFFER, size, data, GL_DYNAMIC_DRAW );
179 gl_vbo *vbo =
gl_vboCreate( GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW );
196 glBindBuffer( GL_ARRAY_BUFFER, vbo->id );
197 return glMapBuffer( GL_ARRAY_BUFFER, GL_WRITE_ONLY );
208 glUnmapBuffer( GL_ARRAY_BUFFER );
225 GLint size, GLenum type, GLsizei stride )
227 const GLvoid *pointer;
230 glBindBuffer( GL_ARRAY_BUFFER, vbo->id );
233 glVertexAttribPointer( index, size, type, GL_FALSE, stride, pointer );
249 glDeleteBuffers( 1, &vbo->id );
static gl_vbo * gl_vboCreate(GLenum target, GLsizei size, const void *data, GLenum usage)
Creates a VBO.
void gl_vboDestroy(gl_vbo *vbo)
Destroys a VBO.
gl_vbo * gl_vboCreateStream(GLsizei size, const void *data)
Creates a stream vbo.
void gl_vboUnmap(gl_vbo *vbo)
Unmaps a buffer.
int gl_initVBO(void)
Initializes the OpenGL VBO subsystem.
void * gl_vboMap(gl_vbo *vbo)
Maps a buffer.
gl_vbo * gl_vboCreateDynamic(GLsizei size, const void *data)
Creates a dynamic vbo.
void gl_exitVBO(void)
Exits the OpenGL VBO subsystem.
void gl_vboActivateAttribOffset(gl_vbo *vbo, GLuint index, GLuint offset, GLint size, GLenum type, GLsizei stride)
Activates a VBO's offset.
void gl_vboData(gl_vbo *vbo, GLsizei size, const void *data)
Reloads new data or grows the size of the vbo.
void gl_vboSubData(gl_vbo *vbo, GLint offset, GLsizei size, const void *data)
Loads some data into the VBO.
gl_vbo * gl_vboCreateStatic(GLsizei size, const void *data)
Creates a stream vbo.