8 m_id = glCreateProgram();
12 cerr <<
"ERROR: Failed to create shader program" << endl;
16 auto vs =
loadShader(
"content\\shaders\\" + name +
".vert", GL_VERTEX_SHADER);
17 auto fs =
loadShader(
"content\\shaders\\" + name +
".frag", GL_FRAGMENT_SHADER);
19 glAttachShader(
m_id, vs);
20 glAttachShader(
m_id, fs);
30 glDeleteProgram(
m_id);
38 GLuint
id = glCreateShader(shaderType);
45 string type = temp.str();
49 case GL_FRAGMENT_SHADER: type = string(
"GL_FRAGMENT_SHADER");
break;
50 case GL_TESS_EVALUATION_SHADER: type = string(
"GL_TESS_EVALUATION_SHADER");
break;
51 case GL_TESS_CONTROL_SHADER: type = string(
"GL_TESS_CONTROL_SHADER");
break;
52 case GL_GEOMETRY_SHADER: type = string(
"GL_GEOMETRY_SHADER");
break;
53 case GL_VERTEX_SHADER: type = string(
"GL_VERTEX_SHADER");
break;
59 cerr <<
"ERROR: Loading shader '" << file <<
"' failed (Shader-type '" << type <<
"' not supported)" << endl;
65 GLint result = GL_FALSE;
67 char const * shaderCodePtr = code.c_str();
68 glShaderSource(
id, 1, &shaderCodePtr ,
nullptr);
71 glGetShaderiv(
id, GL_COMPILE_STATUS, &result);
72 if (result != GL_TRUE)
74 glGetShaderiv(
id, GL_INFO_LOG_LENGTH, &infoLogLength);
76 vector<char> errorMessage(infoLogLength);
77 glGetShaderInfoLog(
id, infoLogLength,
nullptr, &errorMessage[0]);
79 cerr <<
"ERROR: Loading shader '" << file <<
"' failed (Compile-error: '" << string(&errorMessage[0]) <<
"')" << endl;
93 glGetProgramiv(
m_id, GL_LINK_STATUS, &succeded);
98 glGetProgramiv(
m_id, GL_INFO_LOG_LENGTH, &infoLogLength);
100 vector<char> errorMessage(infoLogLength);
101 glGetProgramInfoLog(
m_id, infoLogLength,
nullptr, &errorMessage[0]);
103 cerr <<
"ERROR: Loading shader '" <<
m_name <<
"' failed (Link-error: '" << string(&errorMessage[0]) <<
"')" << endl;
119 return found->second;
122 entry = glGetUniformLocation(
m_id, name.c_str());
129 return found->second;
132 entry = glGetUniformBlockIndex(
m_id, name.c_str());
144 return found->second.get();
147 entry.reset(
new Shader(name));
string read_file_to_string(string const &filename)
map< string, unique_ptr< Shader > > m_shaders
Shader * get(string const &name)
map< string, GLint > m_uniforms
int loadShader(string const &file, GLenum shaderType)
GLint uniformBlock(string const &name)
Shader(string const &name)
GLint uniform(string const &name)