Browse Source

clean up shader initialization

testing
cinnaboot 6 years ago
parent
commit
89a9a78e2a
  1. 2
      include/shader_program.h
  2. 1
      src/default_shaders.cpp
  3. 3
      src/render_object.cpp
  4. 1
      src/renderer.cpp
  5. 26
      src/shader_program.cpp

2
include/shader_program.h

@ -20,4 +20,4 @@ struct shader_program
shader_program* shaderInit(const char* vertex_code, const char* frag_code); 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);

1
src/default_shaders.cpp

@ -25,7 +25,6 @@ void main()
const char* DEFAULT_FRAGMENT_SHADER = R"FS( const char* DEFAULT_FRAGMENT_SHADER = R"FS(
#version 330 core #version 330 core
//in vec3 fragColor; // NOTE: removing this line fails to link program... somehow?
in vec3 fragVertex; in vec3 fragVertex;
in vec3 fragNormal; in vec3 fragNormal;
in vec2 fragUV; in vec2 fragUV;

3
src/render_object.cpp

@ -148,7 +148,7 @@ enableGLFloatBuffer(uint buffer_id, uint location)
glVertexAttribPointer(location, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); glVertexAttribPointer(location, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0);
} }
#include <sstream> // TODO: remove this and make something in util.h #include <sstream>
inline void inline void
updateLights(shader_program& shader, point_light* lights, uint num_lights) 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; std::stringstream ss;
ss << "lights[" << i << "].position"; ss << "lights[" << i << "].position";
int light_pos_loc = glGetUniformLocation(shader.program_id, ss.str().c_str()); int light_pos_loc = glGetUniformLocation(shader.program_id, ss.str().c_str());
glUniform3fv(light_pos_loc, 1, &lights[i].position[0]); glUniform3fv(light_pos_loc, 1, &lights[i].position[0]);
} }
} }

1
src/renderer.cpp

@ -83,6 +83,7 @@ renShutdown(render_state* rs)
utilSafeFree(rg.entities); utilSafeFree(rg.entities);
} }
shaderFree(rs->default_shader);
utilSafeFree(rs->render_groups); utilSafeFree(rs->render_groups);
utilSafeFree(rs->default_shader); utilSafeFree(rs->default_shader);
utilSafeFree(rs->lights); utilSafeFree(rs->lights);

26
src/shader_program.cpp

@ -4,10 +4,6 @@
#include "util.h" #include "util.h"
// TODO: remove and fix hack for dynamic stack allocation
#define INFO_LOG_MAX_LENGTH 312
shader_program* shader_program*
shaderInit(const char* vertex_code, const char* frag_code) 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; GLint isLinked = 0;
glGetProgramiv(sp->program_id, GL_LINK_STATUS, &isLinked); glGetProgramiv(sp->program_id, GL_LINK_STATUS, &isLinked);
if (isLinked == GL_FALSE) { if (isLinked == GL_FALSE) {
GLint maxLength = INFO_LOG_MAX_LENGTH; GLint info_len = 0;
glGetProgramiv(sp->program_id, GL_INFO_LOG_LENGTH, &maxLength); glGetProgramiv(sp->program_id, GL_INFO_LOG_LENGTH, &info_len);
#ifdef _WIN32
GLchar infoLog[312] = { 0 }; char* infoLog = UTIL_ALLOC(info_len, char);
#else glGetProgramInfoLog(sp->program_id, info_len, &info_len, &infoLog[0]);
GLchar infoLog[maxLength] = { 0 };
#endif
glGetProgramInfoLog(sp->program_id, maxLength, &maxLength, &infoLog[0]);
LOG(Error) << infoLog << "\n"; LOG(Error) << infoLog << "\n";
glDeleteProgram(sp->program_id); utilSafeFree(infoLog);
glDeleteProgram(sp->program_id);
return nullptr; return nullptr;
} }
return sp; return sp;
} }
void
shaderFree(shader_program* shader)
{
glDeleteProgram(shader->program_id);
}

Loading…
Cancel
Save