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);
// 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(
#version 330 core
//in vec3 fragColor; // NOTE: removing this line fails to link program... somehow?
in vec3 fragVertex;
in vec3 fragNormal;
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);
}
#include <sstream> // TODO: remove this and make something in util.h
#include <sstream>
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]);
}
}

1
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);

26
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);
}

Loading…
Cancel
Save