|
|
|
@ -9,18 +9,6 @@ |
|
|
|
|
#include <assert.h> |
|
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
static int sprite_count = 0; |
|
|
|
|
|
|
|
|
|
void sprite_init(void) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void sprite_cleanup(void) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void sprite_batch_create(struct Sprite_Batch* batch, const char* texture_name, const char* vert_shader, const char* frag_shader, int draw_mode) |
|
|
|
|
{ |
|
|
|
|
assert(batch); |
|
|
|
@ -32,27 +20,27 @@ void sprite_batch_create(struct Sprite_Batch* batch, const char* texture_name, c |
|
|
|
|
glGenBuffers(1, &batch->vbo); |
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, batch->vbo); |
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, |
|
|
|
|
sizeof(struct Vertex) * MAX_SPRITE_VERTICES * SPRITE_BATCH_SIZE, |
|
|
|
|
sizeof(struct Sprite_Vertex) * MAX_SPRITE_VERTICES * SPRITE_BATCH_SIZE, |
|
|
|
|
NULL, |
|
|
|
|
GL_STREAM_DRAW); |
|
|
|
|
renderer_check_glerror("sprite_batch_create:glBufferData"); |
|
|
|
|
|
|
|
|
|
// Position
|
|
|
|
|
glVertexAttribPointer(AL_POSITION, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), 0);
|
|
|
|
|
glVertexAttribPointer(ATTRIB_LOC_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(struct Sprite_Vertex), 0);
|
|
|
|
|
renderer_check_glerror("sprite_batch_create:glVertexAttribPointer"); |
|
|
|
|
glEnableVertexAttribArray(AL_POSITION); |
|
|
|
|
glEnableVertexAttribArray(ATTRIB_LOC_POSITION); |
|
|
|
|
renderer_check_glerror("sprite_batch_create:glEnableVertexAttribPointer"); |
|
|
|
|
|
|
|
|
|
// Uvs
|
|
|
|
|
glVertexAttribPointer(AL_UV, 2, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), sizeof(vec3)); |
|
|
|
|
glVertexAttribPointer(ATRRIB_LOC_UV, 2, GL_FLOAT, GL_FALSE, sizeof(struct Sprite_Vertex), sizeof(vec2)); |
|
|
|
|
renderer_check_glerror("sprite_batch_create:glVertexAttribPointer"); |
|
|
|
|
glEnableVertexAttribArray(AL_UV); |
|
|
|
|
glEnableVertexAttribArray(ATRRIB_LOC_UV); |
|
|
|
|
renderer_check_glerror("sprite_batch_create:glEnableVertexAttribPointer"); |
|
|
|
|
|
|
|
|
|
// Color
|
|
|
|
|
glVertexAttribPointer(AL_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), sizeof(vec3) + sizeof(vec2)); |
|
|
|
|
glVertexAttribPointer(ATTRIB_LOC_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(struct Sprite_Vertex), sizeof(vec2) + sizeof(vec2)); |
|
|
|
|
renderer_check_glerror("sprite_batch_create:glVertexAttribPointer"); |
|
|
|
|
glEnableVertexAttribArray(AL_COLOR); |
|
|
|
|
glEnableVertexAttribArray(ATTRIB_LOC_COLOR); |
|
|
|
|
renderer_check_glerror("sprite_batch_create:glEnableVertexAttribPointer"); |
|
|
|
|
|
|
|
|
|
//glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
|
|
@ -113,7 +101,7 @@ void sprite_batch_add_sprite(struct Sprite_Batch* batch, struct Sprite* sprite) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void sprite_batch_add_sprite_new(struct Sprite_Batch* batch, int texture, struct Vertex vertices[MAX_SPRITE_VERTICES]) |
|
|
|
|
void sprite_batch_add_sprite_new(struct Sprite_Batch* batch, int texture, struct Sprite_Vertex vertices[MAX_SPRITE_VERTICES]) |
|
|
|
|
{ |
|
|
|
|
assert(batch); |
|
|
|
|
if(batch->current_sprite_count < SPRITE_BATCH_SIZE) |
|
|
|
@ -133,7 +121,7 @@ void sprite_batch_end(struct Sprite_Batch* batch) |
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, batch->vbo); |
|
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, |
|
|
|
|
0, |
|
|
|
|
sizeof(struct Vertex) * MAX_SPRITE_VERTICES * batch->current_sprite_count, |
|
|
|
|
sizeof(struct Sprite_Vertex) * MAX_SPRITE_VERTICES * batch->current_sprite_count, |
|
|
|
|
&batch->sprites[0]); |
|
|
|
|
renderer_check_glerror("sprite_batch_end:glBufferSubData"); |
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, 0); |
|
|
|
|