Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Shader::Shader(std::string VShader, std::string FShader)
- {
- std::string vsh_src((std::istreambuf_iterator<char>(std::fstream(VShader))),
- std::istreambuf_iterator<char>());
- std::string fsh_src((std::istreambuf_iterator<char>(std::fstream(FShader))),
- std::istreambuf_iterator<char>());
- VertexShader = vsh_src;
- FragmentShader = fsh_src;
- Compile();
- }
- void Shader::AddShader(GLuint ShaderProgram, const std::string& pShaderText, GLenum ShaderType)
- {
- GLuint ShaderObj = glCreateShader(ShaderType);
- const GLchar* p[1];
- p[0] = pShaderText.data();
- GLint Lengths[1];
- Lengths[0] = pShaderText.length();
- glShaderSource(ShaderObj, 1, p, Lengths);
- glCompileShader(ShaderObj);
- GLint success;
- glGetShaderiv(ShaderObj, GL_COMPILE_STATUS, &success);
- if (!success) {
- GLchar InfoLog[1024];
- glGetShaderInfoLog(ShaderObj, 1024, NULL, InfoLog);
- printf("Error compiling shader type %d: '%s'\n", ShaderType, InfoLog);
- }
- glAttachShader(ShaderProgram, ShaderObj);
- }
- void Shader::Compile()
- {
- ShaderProgram = glCreateProgram();
- AddShader(ShaderProgram, VertexShader, GL_VERTEX_SHADER);
- AddShader(ShaderProgram, FragmentShader, GL_FRAGMENT_SHADER);
- glLinkProgram(ShaderProgram);
- GLint Success = 0;
- GLchar ErrorLog[1024] = { 0 };
- glGetProgramiv(ShaderProgram, GL_LINK_STATUS, &Success);
- if (Success == 0) {
- glGetProgramInfoLog(ShaderProgram, sizeof(ErrorLog), NULL, ErrorLog);
- printf("Error linking shader program: '%s'\n", ErrorLog);
- }
- glValidateProgram(ShaderProgram);
- glGetProgramiv(ShaderProgram, GL_VALIDATE_STATUS, &Success);
- if (Success == 0) {
- glGetProgramInfoLog(ShaderProgram, sizeof(ErrorLog), NULL, ErrorLog);
- printf("Invalid shader program: '%s'\n", ErrorLog);
- }
- glUseProgram(ShaderProgram);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement