Advertisement
Verzingz

Shader.h

Jun 22nd, 2017
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. #ifndef SHADER_H
  2. #define SHADER_H
  3.  
  4. #include <GL/glew.h>
  5.  
  6. #include <string>
  7. #include <fstream>
  8. #include <sstream>
  9. #include <iostream>
  10.  
  11. class Shader {
  12. public:
  13.     GLuint Program;
  14.  
  15.     Shader(const GLchar *vertexPath, const GLchar *fragmentPath) {
  16.         std::string vertexCode;
  17.         std::string fragmentCode;
  18.         std::ifstream vShaderFile;
  19.         std::ifstream fShaderFile;
  20.  
  21.         vShaderFile.exceptions(std::ifstream::badbit);
  22.         fShaderFile.exceptions(std::ifstream::badbit);
  23.         try {
  24.             vShaderFile.open(vertexPath);
  25.             fShaderFile.open(fragmentPath);
  26.             std::stringstream vShaderStream, fShaderStream;
  27.  
  28.             vShaderStream << vShaderFile.rdbuf();
  29.             fShaderStream << fShaderFile.rdbuf();
  30.  
  31.             vShaderFile.close();
  32.             fShaderFile.close();
  33.  
  34.             vertexCode = vShaderStream.str();
  35.             fragmentCode = fShaderStream.str();
  36.         } catch (std::ifstream::failure e) {
  37.             std::cout << "Error Reading Shader Files" << std::endl;
  38.         }
  39.  
  40.         const GLchar *vShaderCode = vertexCode.c_str();
  41.         const GLchar *fShaderCode = fragmentCode.c_str();
  42.  
  43.         GLuint vertex, fragment;
  44.         GLint success;
  45.         GLchar infoLog[512];
  46.  
  47.         vertex = glCreateShader(GL_VERTEX_SHADER);
  48.         glShaderSource(vertex, 1, &vShaderCode, NULL);
  49.         glCompileShader(vertex);
  50.  
  51.         glGetShaderiv(vertex, GL_COMPILE_STATUS, &success);
  52.         if (!success) {
  53.             glGetShaderInfoLog(vertex, 512, NULL, infoLog);
  54.             std::cout << "Error Compiling Vertex Shader\n" << infoLog << std::endl;
  55.         }
  56.  
  57.         fragment = glCreateShader(GL_FRAGMENT_SHADER);
  58.         glShaderSource(fragment, 1, &fShaderCode, NULL);
  59.         glCompileShader(fragment);
  60.  
  61.         glGetShaderiv(fragment, GL_COMPILE_STATUS, &success);
  62.         if (!success) {
  63.             glGetShaderInfoLog(fragment, 512, NULL, infoLog);
  64.             std::cout << "Error Compiling Fragment Shader\n" << infoLog << std::endl;
  65.         }
  66.  
  67.         this->Program = glCreateProgram();
  68.         glAttachShader(this->Program, vertex);
  69.         glAttachShader(this->Program, fragment);
  70.         glLinkProgram(this->Program);
  71.  
  72.         glGetProgramiv(this->Program, GL_LINK_STATUS, &success);
  73.         if (!success) {
  74.             glGetProgramInfoLog(this->Program, 512, NULL, infoLog);
  75.             std::cout << "Error linking Shader Program\n" << infoLog << std::endl;
  76.         }
  77.  
  78.         glDeleteShader(vertex);
  79.         glDeleteShader(fragment);
  80.     }
  81.  
  82.     void Use() {
  83.         glUseProgram(this->Program);
  84.     }
  85. };
  86.  
  87. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement