diff --git a/include/shader_program.h b/include/shader_program.h index be46672..bf02fd6 100644 --- a/include/shader_program.h +++ b/include/shader_program.h @@ -20,4 +20,4 @@ struct shader_program shader_program* shaderInit(const char* vertex_code, const char* frag_code); -// TODO: make use of glDeleteShader/glDeleteProgram in eg) shaderFree() +void shaderFree(shader_program* shader); diff --git a/src/default_shaders.cpp b/src/default_shaders.cpp index 8ec9662..70d72f6 100644 --- a/src/default_shaders.cpp +++ b/src/default_shaders.cpp @@ -25,7 +25,6 @@ void main() const char* DEFAULT_FRAGMENT_SHADER = R"FS( #version 330 core -//in vec3 fragColor; // NOTE: removing this line fails to link program... somehow? in vec3 fragVertex; in vec3 fragNormal; in vec2 fragUV; diff --git a/src/render_object.cpp b/src/render_object.cpp index 36da09d..b1d3487 100644 --- a/src/render_object.cpp +++ b/src/render_object.cpp @@ -148,7 +148,7 @@ enableGLFloatBuffer(uint buffer_id, uint location) glVertexAttribPointer(location, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); } -#include // TODO: remove this and make something in util.h +#include inline void updateLights(shader_program& shader, point_light* lights, uint num_lights) @@ -164,6 +164,7 @@ updateLights(shader_program& shader, point_light* lights, uint num_lights) std::stringstream ss; ss << "lights[" << i << "].position"; int light_pos_loc = glGetUniformLocation(shader.program_id, ss.str().c_str()); + glUniform3fv(light_pos_loc, 1, &lights[i].position[0]); } } diff --git a/src/renderer.cpp b/src/renderer.cpp index b4ffef9..4eb7b53 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -83,6 +83,7 @@ renShutdown(render_state* rs) utilSafeFree(rg.entities); } + shaderFree(rs->default_shader); utilSafeFree(rs->render_groups); utilSafeFree(rs->default_shader); utilSafeFree(rs->lights); diff --git a/src/shader_program.cpp b/src/shader_program.cpp index f4cdfee..a75c407 100644 --- a/src/shader_program.cpp +++ b/src/shader_program.cpp @@ -4,10 +4,6 @@ #include "util.h" -// TODO: remove and fix hack for dynamic stack allocation -#define INFO_LOG_MAX_LENGTH 312 - - shader_program* shaderInit(const char* vertex_code, const char* frag_code) { @@ -42,20 +38,24 @@ shaderInit(const char* vertex_code, const char* frag_code) GLint isLinked = 0; glGetProgramiv(sp->program_id, GL_LINK_STATUS, &isLinked); if (isLinked == GL_FALSE) { - GLint maxLength = INFO_LOG_MAX_LENGTH; - glGetProgramiv(sp->program_id, GL_INFO_LOG_LENGTH, &maxLength); -#ifdef _WIN32 - GLchar infoLog[312] = { 0 }; -#else - GLchar infoLog[maxLength] = { 0 }; -#endif - glGetProgramInfoLog(sp->program_id, maxLength, &maxLength, &infoLog[0]); + GLint info_len = 0; + glGetProgramiv(sp->program_id, GL_INFO_LOG_LENGTH, &info_len); + + char* infoLog = UTIL_ALLOC(info_len, char); + glGetProgramInfoLog(sp->program_id, info_len, &info_len, &infoLog[0]); LOG(Error) << infoLog << "\n"; - glDeleteProgram(sp->program_id); + utilSafeFree(infoLog); + glDeleteProgram(sp->program_id); return nullptr; } return sp; } +void +shaderFree(shader_program* shader) +{ + glDeleteProgram(shader->program_id); +} +