Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. Shader::Shader(std::string VShader, std::string FShader)
  2. {
  3.     std::string vsh_src((std::istreambuf_iterator<char>(std::fstream(VShader))),
  4.         std::istreambuf_iterator<char>());
  5.  
  6.     std::string fsh_src((std::istreambuf_iterator<char>(std::fstream(FShader))),
  7.         std::istreambuf_iterator<char>());
  8.  
  9.     VertexShader = vsh_src;
  10.     FragmentShader = fsh_src;
  11.  
  12.     Compile();
  13. }
  14.  
  15. void Shader::AddShader(GLuint ShaderProgram, const std::string& pShaderText, GLenum ShaderType)
  16. {
  17.     GLuint ShaderObj = glCreateShader(ShaderType);
  18.  
  19.     const GLchar* p[1];
  20.     p[0] = pShaderText.data();
  21.     GLint Lengths[1];
  22.     Lengths[0] = pShaderText.length();
  23.     glShaderSource(ShaderObj, 1, p, Lengths);
  24.  
  25.     glCompileShader(ShaderObj);
  26.  
  27.     GLint success;
  28.     glGetShaderiv(ShaderObj, GL_COMPILE_STATUS, &success);
  29.  
  30.     if (!success) {
  31.         GLchar InfoLog[1024];
  32.         glGetShaderInfoLog(ShaderObj, 1024, NULL, InfoLog);
  33.         printf("Error compiling shader type %d: '%s'\n", ShaderType, InfoLog);
  34.     }
  35.  
  36.     glAttachShader(ShaderProgram, ShaderObj);
  37. }
  38.  
  39. void Shader::Compile()
  40. {
  41.     ShaderProgram = glCreateProgram();
  42.  
  43.     AddShader(ShaderProgram, VertexShader, GL_VERTEX_SHADER);
  44.     AddShader(ShaderProgram, FragmentShader, GL_FRAGMENT_SHADER);
  45.  
  46.     glLinkProgram(ShaderProgram);
  47.  
  48.     GLint Success = 0;
  49.     GLchar ErrorLog[1024] = { 0 };
  50.     glGetProgramiv(ShaderProgram, GL_LINK_STATUS, &Success);
  51.     if (Success == 0) {
  52.         glGetProgramInfoLog(ShaderProgram, sizeof(ErrorLog), NULL, ErrorLog);
  53.         printf("Error linking shader program: '%s'\n", ErrorLog);
  54.     }
  55.     glValidateProgram(ShaderProgram);
  56.     glGetProgramiv(ShaderProgram, GL_VALIDATE_STATUS, &Success);
  57.     if (Success == 0) {
  58.         glGetProgramInfoLog(ShaderProgram, sizeof(ErrorLog), NULL, ErrorLog);
  59.         printf("Invalid shader program: '%s'\n", ErrorLog);
  60.     }
  61.     glUseProgram(ShaderProgram);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement