Browse Source

don't forget to free meshes and shaders

testing
cinnaboot 6 years ago
parent
commit
81cb24a2d8
  1. 10
      README.txt
  2. 1
      include/entity.h
  3. 2
      include/mesh.h
  4. 1
      include/renderer.h
  5. 3
      src/entity.cpp
  6. 14
      src/mesh.cpp
  7. 7
      src/renderer.cpp
  8. 3
      src/shader_program.cpp

10
README.txt

@ -4,6 +4,16 @@ Tangerine
A small OpenGL 3+ renderer and game engine
NOTE: This is still a work in progress
Features:
vertices
pixels
TODO:
finish node animations from assimp
add input abstraction for SDL
store meshes separately from entities for reuse
add a function to update camera transforms only once per frame, per shader
Dependencies:
assimp
glew

1
include/entity.h

@ -15,6 +15,7 @@
struct entity
{
glm::mat4 world_transform;
// TODO: hide simple_mesh/mesh_group pointer behind abstraction
simple_mesh* mesh;
// TODO: should be a pointer into a global array of mesh_info(s) or

2
include/mesh.h

@ -58,7 +58,7 @@ void
meFreeMeshGroup(mesh_group& mesh_group);
void
meFreeSimpleMesh(simple_mesh& mesh);
meFreeSimpleMesh(simple_mesh* mesh);
void
meShutdownAssimp();

1
include/renderer.h

@ -48,6 +48,7 @@ struct render_state
render_group* render_groups;
uint render_group_count;
// TODO: hide shaders behind a better abstraction than 'shader_wrapper'
default_shader_program* default_shader;
simple_shader_program* simple_shader;

3
src/entity.cpp

@ -50,6 +50,9 @@ entFree(entity& e)
{
roFree(e.render_objs);
e.render_objs = nullptr;
meFreeMeshGroup(e.meshes);
meFreeSimpleMesh(e.mesh);
e.mesh = nullptr;
}
void

14
src/mesh.cpp

@ -14,7 +14,7 @@
// forward declarations
//
mesh_info* allocateMeshInfo(uint num_vertices, uint num_indices);
void assimpLogCB(const char* message, char* user);
mesh_info* copyMeshInfo(const aiScene* scene, aiMesh* mesh);
@ -92,13 +92,13 @@ meFreeMeshGroup(mesh_group& mesh_group)
}
void
meFreeSimpleMesh(simple_mesh& mesh)
meFreeSimpleMesh(simple_mesh* mesh)
{
utilSafeFree(mesh.vertices);
mesh.vertices = nullptr;
utilSafeFree(mesh.vert_colors);
mesh.vert_colors = nullptr;
mesh.num_vertices = 0;
utilSafeFree(mesh->vertices);
mesh->vertices = nullptr;
utilSafeFree(mesh->vert_colors);
mesh->vert_colors = nullptr;
mesh->num_vertices = 0;
}
void

7
src/renderer.cpp

@ -16,7 +16,6 @@
#include "renderer.h"
#include "default_shaders.cpp"
#define MAX_LIGHTS 10 // NOTE: needs to match the fragment shader source
#define CLEAR_COL_R 55.f / 255.f
#define CLEAR_COL_G 55.f / 255.f
#define CLEAR_COL_B 55.f / 255.f
@ -79,10 +78,14 @@ renShutdown(render_state* rs)
}
shaderFree(rs->default_shader->program_id);
utilSafeFree(rs->default_shader);
rs->default_shader = nullptr;
shaderFree(rs->simple_shader->program_id);
utilSafeFree(rs->simple_shader);
rs->simple_shader = nullptr;
lightsOut(rs->lights);
utilSafeFree(rs->render_groups);
utilSafeFree(rs->default_shader);
meShutdownAssimp();
SDL_GL_DeleteContext(rs->handles->glContext);
SDL_DestroyWindow(rs->handles->window);

3
src/shader_program.cpp

@ -43,6 +43,7 @@ shaderInitDefault(const char* vertex_code, const char* frag_code)
if (!checkShaderErrors(sp->program_id)) {
glDeleteProgram(sp->program_id);
utilSafeFree(sp);
return nullptr;
}
@ -56,7 +57,6 @@ shaderInitSimple(const char* vertex_code, const char* frag_code)
GLuint vs_id = 0;
GLuint fs_id = 0;
compileProgram(sp->program_id, vs_id, fs_id, vertex_code, frag_code);
// TODO: add to compile program?
glGenVertexArrays(1, &sp->vertex_array_id);
glBindVertexArray(sp->vertex_array_id);
@ -67,6 +67,7 @@ shaderInitSimple(const char* vertex_code, const char* frag_code)
if (!checkShaderErrors(sp->program_id)) {
glDeleteProgram(sp->program_id);
utilSafeFree(sp);
return nullptr;
}

Loading…
Cancel
Save