1 #include "shaderprogram.h"
6 ShaderProgram::~ShaderProgram()
8 for(auto shader : m_shaders)
10 glDetachShader(m_program, shader.obj);
11 glDeleteShader(shader.obj);
15 glDeleteProgram(m_program);
18 void ShaderProgram::LazyCreateProgram()
22 m_program = glCreateProgram();
26 bool ShaderProgram::AttachShader(const char *src, GLenum type)
28 GLuint shader_obj = glCreateShader(type);
29 glShaderSource(shader_obj, 1, &src, 0);
30 glCompileShader(shader_obj);
32 glGetShaderiv(shader_obj, GL_COMPILE_STATUS, &did_compile);
37 glGetShaderInfoLog(shader_obj, 2048, nullptr, info_log);
38 Error("Shader compile error: %s\n", info_log);
42 m_shaders.push_back(Shader{type, shader_obj});
44 glAttachShader(m_program, shader_obj);
48 bool ShaderProgram::AttachVertexProgram(const char *src)
50 return AttachShader(src, GL_VERTEX_SHADER);
53 bool ShaderProgram::AttachFragmentProgram(const char *src)
55 return AttachShader(src, GL_FRAGMENT_SHADER);
58 bool ShaderProgram::AttachGeometryProgram(const char *src)
60 return AttachShader(src, GL_GEOMETRY_SHADER);
63 bool ShaderProgram::Link()
65 glLinkProgram(m_program);
69 const void ShaderProgram::Use() const
71 glUseProgram(m_program);
74 const GLint ShaderProgram::GetUniformLocation(const char *name) const
76 return glGetUniformLocation(m_program, name);