diff --git a/assets/sounds/teh_beatz.wav b/assets/sounds/teh_beatz.wav new file mode 100644 index 0000000..c0cbbcb Binary files /dev/null and b/assets/sounds/teh_beatz.wav differ diff --git a/assets/textures/sprite_map.tga b/assets/textures/sprite_map.tga new file mode 100644 index 0000000..a41d7c9 Binary files /dev/null and b/assets/textures/sprite_map.tga differ diff --git a/src/libsymmetry/camera.c b/src/libsymmetry/camera.c index 0255a49..3bc889f 100644 --- a/src/libsymmetry/camera.c +++ b/src/libsymmetry/camera.c @@ -63,10 +63,7 @@ void camera_update_view_proj(struct Entity* entity) { struct Camera* camera = &entity->camera; 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); } diff --git a/src/libsymmetry/game.c b/src/libsymmetry/game.c index 9f492ba..2a1582c 100644 --- a/src/libsymmetry/game.c +++ b/src/libsymmetry/game.c @@ -219,8 +219,8 @@ void scene_setup(void) /*struct Camera* camera = &player->camera; camera->ortho = true; - camera->farz = 1.f; - camera->nearz = -1.f; + camera->farz = 500.f; + camera->nearz = 1.f; camera_update_proj(player);*/ /*struct Entity* suz = entity_find("Suzanne"); @@ -376,12 +376,12 @@ void debug(float dt) sprite_batch_begin(batch); 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[1].pos.x = 1.f; sprite.vertices[1].pos.y = 0.f; sprite.vertices[1].pos.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[3].pos.x = 0.f; sprite.vertices[3].pos.y = 1.f; sprite.vertices[3].pos.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[5].pos.x = 1.f; sprite.vertices[5].pos.y = 0.f; sprite.vertices[5].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].position.x = 50.f; sprite.vertices[1].position.y = 0.f; sprite.vertices[1].position.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].position.x = 0.f; sprite.vertices[3].position.y = 50.f; sprite.vertices[3].position.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].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[1].uv.x = 1.f; sprite.vertices[1].uv.y = 0.f; diff --git a/src/libsymmetry/geometry.c b/src/libsymmetry/geometry.c index 7aedcb5..9a0aa58 100644 --- a/src/libsymmetry/geometry.c +++ b/src/libsymmetry/geometry.c @@ -192,6 +192,21 @@ void geom_remove(int index) geometry->normals = NULL; geometry->vertex_colors = 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); } } diff --git a/src/libsymmetry/renderer.c b/src/libsymmetry/renderer.c index 966b0fc..68fbcf3 100644 --- a/src/libsymmetry/renderer.c +++ b/src/libsymmetry/renderer.c @@ -409,11 +409,11 @@ void renderer_draw(struct Entity* active_viewer) { static mat4 ortho_mat; mat4_identity(&ortho_mat); - /*int width, height; + int width, height; struct Game_State* game_state = game_state_get(); 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); sprite_batch_render(sprite_batch); @@ -426,6 +426,7 @@ void renderer_draw(struct Entity* active_viewer) void renderer_cleanup(void) { + sprite_batch_remove(sprite_batch); free(sprite_batch); gui_cleanup(); geom_remove(quad_geo); diff --git a/src/libsymmetry/sprite.c b/src/libsymmetry/sprite.c index 406b0b1..bcd984e 100644 --- a/src/libsymmetry/sprite.c +++ b/src/libsymmetry/sprite.c @@ -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) { 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); 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; } +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) { assert(batch); diff --git a/src/libsymmetry/sprite.h b/src/libsymmetry/sprite.h index 5d9b045..8d30499 100644 --- a/src/libsymmetry/sprite.h +++ b/src/libsymmetry/sprite.h @@ -9,7 +9,7 @@ struct Vertex { - vec3 pos; + vec3 position; vec2 uv; vec4 color; }; @@ -34,6 +34,7 @@ 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); +void sprite_batch_remove(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_new(struct Sprite_Batch* batch, int texture, struct Vertex vertices[MAX_SPRITE_VERTICES]);