1 #include "shaderprogram.h"
5 ShaderProgram::~ShaderProgram()
7 for(auto shader : m_shaders)
9 glDetachShader(m_program, shader.obj);
10 glDeleteShader(shader.obj);
14 glDeleteProgram(m_program);
17 void ShaderProgram::LazyCreateProgram()
21 m_program = glCreateProgram();
25 bool ShaderProgram::AttachShader(const char *src, GLenum type)
27 GLuint shader_obj = glCreateShader(type);
28 glShaderSource(shader_obj, 1, &src, 0);
29 glCompileShader(shader_obj);
31 m_shaders.push_back(Shader{type, shader_obj});
33 glAttachShader(m_program, shader_obj);
37 bool ShaderProgram::AttachVertexProgram(const char *src)
39 return AttachShader(src, GL_VERTEX_SHADER);
42 bool ShaderProgram::AttachFragmentProgram(const char *src)
44 return AttachShader(src, GL_FRAGMENT_SHADER);
47 bool ShaderProgram::Link()
49 glLinkProgram(m_program);
53 const void ShaderProgram::Use() const
55 glUseProgram(m_program);
58 const GLint ShaderProgram::GetUniformLocation(const char *name) const
60 return glGetUniformLocation(m_program, name);