17 #define GLM_FORCE_RADIANS 18 #include <glm/gtc/type_ptr.hpp> 27 Shader::Shader(
const std::string &vertexFilename,
const std::string &fragmentFilename) {
48 addShader(GL_VERTEX_SHADER, vertexFilename);
49 addShader(GL_FRAGMENT_SHADER, fragmentFilename);
61 GLint linkOK = GL_FALSE;
67 char *errorMsg =
new char[errorSize + 1];
70 errorMsg[errorSize] =
'\0';
72 std::string error = std::string(errorMsg);
83 glCheck(shader = glCreateShader(type));
85 if(type == GL_VERTEX_SHADER) {
91 std::ifstream file(filename);
93 glCheck(glDeleteShader(shader));
95 throw EXCEPTION(
"Failed to open", filename);
99 std::string sourceCode;
101 while(getline(file, line)) sourceCode += line +
'\n';
104 const GLchar *sourceCodeString = sourceCode.c_str();
106 glCheck(glShaderSource(shader, 1, &sourceCodeString,
nullptr));
108 glCheck(glCompileShader(shader));
110 GLint compileOK = GL_FALSE;
111 glCheck(glGetShaderiv(shader, GL_COMPILE_STATUS, &compileOK));
114 glCheck(glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &errorSize));
116 char *errorMsg =
new char[errorSize + 1];
118 glCheck(glGetShaderInfoLog(shader, errorSize, &errorSize, errorMsg));
119 errorMsg[errorSize] =
'\0';
121 std::string error = std::string(errorMsg);
124 glCheck(glDeleteShader(shader));
126 throw EXCEPTION(
"Shader", filename,
"compilation failed:", error);
137 DEBUG(
"Could not bind attribute:", name);
148 DEBUG(
"Could not bind uniform:", name);
171 glCheck(glUniformMatrix4fv(
uniform(name), 1, GL_FALSE, glm::value_ptr(matrix)));
void enableVertexAttribArray(const std::string &name) const
void disableVertexAttribArray(const std::string &name) const
#define EXCEPTION(args...)
static void bind(const Shader *shader)
std::vector< GLuint > m_fragmentShaders
void loadFromFile(const std::string &vertexFilename, const std::string &fragementFilename)
void addShader(GLenum type, const std::string &filename)
GLint attrib(const std::string &name) const
std::vector< GLuint > m_vertexShaders
void setUniform(const std::string &name, int n) const
GLint uniform(const std::string &name) const