Added sprite batch remove function and vbo/vao removal to geometry

dev
Shariq Shah 8 years ago
parent 33ae972f04
commit 50b4b33bf1
  1. BIN
      assets/sounds/teh_beatz.wav
  2. BIN
      assets/textures/sprite_map.tga
  3. 3
      src/libsymmetry/camera.c
  4. 16
      src/libsymmetry/game.c
  5. 15
      src/libsymmetry/geometry.c
  6. 5
      src/libsymmetry/renderer.c
  7. 19
      src/libsymmetry/sprite.c
  8. 3
      src/libsymmetry/sprite.h

Binary file not shown.

Binary file not shown.

@ -63,9 +63,6 @@ void camera_update_view_proj(struct Entity* entity)
{ {
struct Camera* camera = &entity->camera; struct Camera* camera = &entity->camera;
mat4_identity(&camera->view_proj_mat); mat4_identity(&camera->view_proj_mat);
if(camera->ortho)
mat4_mul(&camera->view_proj_mat, &camera->view_proj_mat, &camera->proj_mat);
else
mat4_mul(&camera->view_proj_mat, &camera->proj_mat, &camera->view_mat); mat4_mul(&camera->view_proj_mat, &camera->proj_mat, &camera->view_mat);
update_frustum(camera); update_frustum(camera);
} }

@ -219,8 +219,8 @@ void scene_setup(void)
/*struct Camera* camera = &player->camera; /*struct Camera* camera = &player->camera;
camera->ortho = true; camera->ortho = true;
camera->farz = 1.f; camera->farz = 500.f;
camera->nearz = -1.f; camera->nearz = 1.f;
camera_update_proj(player);*/ camera_update_proj(player);*/
/*struct Entity* suz = entity_find("Suzanne"); /*struct Entity* suz = entity_find("Suzanne");
@ -376,12 +376,12 @@ void debug(float dt)
sprite_batch_begin(batch); sprite_batch_begin(batch);
static struct Sprite sprite; static struct Sprite sprite;
sprite.vertices[0].pos.x = 0.f; sprite.vertices[0].pos.y = 0.f; sprite.vertices[0].pos.z = 0.f; sprite.vertices[0].position.x = 0.f; sprite.vertices[0].position.y = 0.f; sprite.vertices[0].position.z = 0.f;
sprite.vertices[1].pos.x = 1.f; sprite.vertices[1].pos.y = 0.f; sprite.vertices[1].pos.z = 0.f; sprite.vertices[1].position.x = 50.f; sprite.vertices[1].position.y = 0.f; sprite.vertices[1].position.z = 0.f;
sprite.vertices[2].pos.x = 0.f; sprite.vertices[2].pos.y = 1.f; sprite.vertices[2].pos.z = 0.f; sprite.vertices[2].position.x = 0.f; sprite.vertices[2].position.y = 50.f; sprite.vertices[2].position.z = 0.f;
sprite.vertices[3].pos.x = 0.f; sprite.vertices[3].pos.y = 1.f; sprite.vertices[3].pos.z = 0.f; sprite.vertices[3].position.x = 0.f; sprite.vertices[3].position.y = 50.f; sprite.vertices[3].position.z = 0.f;
sprite.vertices[4].pos.x = 1.f; sprite.vertices[4].pos.y = 1.f; sprite.vertices[4].pos.z = 0.f; sprite.vertices[4].position.x = 50.f; sprite.vertices[4].position.y = 50.f; sprite.vertices[4].position.z = 0.f;
sprite.vertices[5].pos.x = 1.f; sprite.vertices[5].pos.y = 0.f; sprite.vertices[5].pos.z = 0.f; sprite.vertices[5].position.x = 50.f; sprite.vertices[5].position.y = 0.f; sprite.vertices[5].position.z = 0.f;
sprite.vertices[0].uv.x = 0.f; sprite.vertices[0].uv.y = 0.f; sprite.vertices[0].uv.x = 0.f; sprite.vertices[0].uv.y = 0.f;
sprite.vertices[1].uv.x = 1.f; sprite.vertices[1].uv.y = 0.f; sprite.vertices[1].uv.x = 1.f; sprite.vertices[1].uv.y = 0.f;

@ -192,6 +192,21 @@ void geom_remove(int index)
geometry->normals = NULL; geometry->normals = NULL;
geometry->vertex_colors = NULL; geometry->vertex_colors = NULL;
geometry->filename = NULL; geometry->filename = NULL;
glDeleteBuffers(1, &geometry->vertex_vbo);
glDeleteBuffers(1, &geometry->color_vbo);
glDeleteBuffers(1, &geometry->uv_vbo);
glDeleteBuffers(1, &geometry->normal_vbo);
glDeleteBuffers(1, &geometry->index_vbo);
glDeleteVertexArrays(1, geometry->vao);
geometry->vertex_vbo = 0;
geometry->color_vbo = 0;
geometry->uv_vbo = 0;
geometry->normal_vbo = 0;
geometry->index_vbo = 0;
geometry->vao = 0;
array_push(empty_indices, index, int); array_push(empty_indices, index, int);
} }
} }

@ -409,11 +409,11 @@ void renderer_draw(struct Entity* active_viewer)
{ {
static mat4 ortho_mat; static mat4 ortho_mat;
mat4_identity(&ortho_mat); mat4_identity(&ortho_mat);
/*int width, height; int width, height;
struct Game_State* game_state = game_state_get(); struct Game_State* game_state = game_state_get();
platform->window.get_size(game_state->window, &width, &height); platform->window.get_size(game_state->window, &width, &height);
mat4_ortho(&ortho_mat, 0, width, height, 0, -1.f, 1.f);*/ mat4_ortho(&ortho_mat, 0, width, height, 0, -10.f, 10.f);
shader_set_uniform_mat4(sprite_batch->shader, "mvp", &ortho_mat); shader_set_uniform_mat4(sprite_batch->shader, "mvp", &ortho_mat);
sprite_batch_render(sprite_batch); sprite_batch_render(sprite_batch);
@ -426,6 +426,7 @@ void renderer_draw(struct Entity* active_viewer)
void renderer_cleanup(void) void renderer_cleanup(void)
{ {
sprite_batch_remove(sprite_batch);
free(sprite_batch); free(sprite_batch);
gui_cleanup(); gui_cleanup();
geom_remove(quad_geo); geom_remove(quad_geo);

@ -24,7 +24,7 @@ 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) 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); assert(batch);
memset(&batch->sprites[0], '\0', sizeof(struct Sprite) * SPRITE_BATCH_SIZE); memset(&batch->sprites[0], 0, sizeof(struct Sprite) * SPRITE_BATCH_SIZE);
glGenVertexArrays(1, &batch->vao); glGenVertexArrays(1, &batch->vao);
glBindVertexArray(batch->vao); glBindVertexArray(batch->vao);
@ -76,6 +76,23 @@ void sprite_batch_create(struct Sprite_Batch* batch, const char* texture_name, c
batch->draw_mode = draw_mode; batch->draw_mode = draw_mode;
} }
void sprite_batch_remove(struct Sprite_Batch * batch)
{
assert(batch);
glDeleteBuffers(1, &batch->vbo);
glDeleteVertexArrays(1, &batch->vbo);
batch->current_sprite_count = 0;
texture_remove(batch->texture);
shader_remove(batch->shader);
batch->texture = -1;
batch->shader = -1;
batch->current_sprite_count = 0;
batch->vao = 0;
batch->vbo = 0;
memset(&batch->sprites[0], 0, sizeof(struct Sprite) * SPRITE_BATCH_SIZE);
}
void sprite_batch_begin(struct Sprite_Batch* batch) void sprite_batch_begin(struct Sprite_Batch* batch)
{ {
assert(batch); assert(batch);

@ -9,7 +9,7 @@
struct Vertex struct Vertex
{ {
vec3 pos; vec3 position;
vec2 uv; vec2 uv;
vec4 color; vec4 color;
}; };
@ -34,6 +34,7 @@ void sprite_init(void);
void sprite_cleanup(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); void sprite_batch_create(struct Sprite_Batch* batch, const char* texture_name, const char* vert_shader, const char* frag_shader, int draw_mode);
void sprite_batch_remove(struct Sprite_Batch* batch);
void sprite_batch_begin(struct Sprite_Batch* batch); void sprite_batch_begin(struct Sprite_Batch* batch);
void sprite_batch_add_sprite(struct Sprite_Batch* batch, struct Sprite* sprite); 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 Vertex vertices[MAX_SPRITE_VERTICES]);

Loading…
Cancel
Save