10 Shader::Shader(
const std::string& vertexPath,
const std::string& fragmentPath)
13 std::string vertexCode;
14 std::string fragmentCode;
16 if (!vertexPath.empty())
18 std::ifstream vShaderFile;
19 std::stringstream vShaderStream;
20 vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
23 vShaderFile.open(vertexPath);
24 vShaderStream << vShaderFile.rdbuf();
26 vertexCode = vShaderStream.str();
28 catch (std::ifstream::failure e)
30 LOG_ERROR(
"Vertex shader file not succesfully read");
38 if (!fragmentPath.empty())
40 std::ifstream fShaderFile;
41 fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
44 fShaderFile.open(fragmentPath);
45 std::stringstream fShaderStream;
46 fShaderStream << fShaderFile.rdbuf();
48 fragmentCode = fShaderStream.str();
50 catch (std::ifstream::failure e)
52 LOG_ERROR(
"Fragment shader file not sucesfully read");
60 const char *vShaderCode = vertexCode.c_str();
61 const char *fShaderCode = fragmentCode.c_str();
64 unsigned int vertex, fragment;
67 vertex = glCreateShader(GL_VERTEX_SHADER);
68 glShaderSource(vertex, 1, &vShaderCode, NULL);
69 glCompileShader(vertex);
73 fragment = glCreateShader(GL_FRAGMENT_SHADER);
74 glShaderSource(fragment, 1, &fShaderCode, NULL);
75 glCompileShader(fragment);
80 glAttachShader(
program, vertex);
81 glAttachShader(
program, fragment);
86 glDeleteShader(vertex);
87 glDeleteShader(fragment);
165 if (type !=
"PROGRAM")
167 glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
170 glGetShaderInfoLog(shader, 1024, NULL, infoLog);
171 LOG_ERROR(
"Shader compilation error of type: " << type <<
'\n' << infoLog);
176 glGetProgramiv(shader, GL_LINK_STATUS, &success);
179 glGetProgramInfoLog(shader, 1024, NULL, infoLog);
180 LOG_ERROR(
"Shader program linking error of type: " << type <<
'\n' << infoLog);