Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 KB | None | 0 0
  1. #include "shaderprogram.h"
  2. #include <fstream>
  3. #include <GL/glew.h>
  4. #include <GL/gl.h>
  5.  
  6. char *slurpFile(const char* filename)
  7. {
  8.  
  9.     std::ifstream f(filename);
  10.     f.seekg(0, std::ios::end);
  11.     int len = f.tellg();
  12.     f.seekg(0, std::ios::beg);
  13.  
  14.     char *data = new char[len + 1];
  15.     f.read(data, len);
  16.     f.close();
  17.  
  18.     data[len] = '\0';
  19.  
  20.     return data;
  21. }
  22.  
  23. ShaderProgram::ShaderProgram(const char *vertPath, const char *fragPath)
  24. {
  25.     const GLchar *vdata = slurpFile(vertPath);
  26.     vert = glCreateShader(GL_VERTEX_SHADER);
  27.  
  28.     glShaderSource(vert, 1, &vdata, NULL);
  29.     glCompileShader(vert);
  30.  
  31.     GLint status;
  32.     glGetShaderiv(vert, GL_COMPILE_STATUS, &status);
  33.  
  34.     if (status == GL_FALSE)
  35.     {
  36.  
  37.         GLint infoLogLength;
  38.         glGetShaderiv(vert, GL_INFO_LOG_LENGTH, &infoLogLength);
  39.  
  40.         GLchar *strInfoLog = new GLchar[infoLogLength + 1];
  41.         glGetShaderInfoLog(vert, infoLogLength, NULL, strInfoLog);
  42.         fprintf(stderr, "ERROR COMPILING VERTEX SHADER:\n%s", strInfoLog);
  43.         delete [] strInfoLog;
  44.     }
  45.  
  46.     delete [] vdata;
  47.  
  48.     const char *fdata = slurpFile(fragPath);
  49.  
  50.     frag = glCreateShader(GL_FRAGMENT_SHADER);
  51.     glShaderSource(frag, 1, &fdata, NULL);
  52.     glCompileShader(frag);
  53.     glGetShaderiv(frag, GL_COMPILE_STATUS, &status);
  54.  
  55.     if (status == GL_FALSE)
  56.     {
  57.  
  58.         GLint infoLogLength;
  59.         glGetShaderiv(frag, GL_INFO_LOG_LENGTH, &infoLogLength);
  60.  
  61.         GLchar *strInfoLog = new GLchar[infoLogLength + 1];
  62.         glGetShaderInfoLog(frag, infoLogLength, NULL, strInfoLog);
  63.         fprintf(stderr, "ERROR COMPILING FRAGMENT SHADER:\n%s", strInfoLog);
  64.         delete [] strInfoLog;
  65.     }
  66.  
  67.     delete [] fdata;
  68.  
  69.     program = glCreateProgram();
  70.     glAttachShader(program, vert);
  71.     glAttachShader(program, frag);
  72.  
  73.     glLinkProgram(program);
  74.  
  75.     glGetProgramiv(program, GL_LINK_STATUS, &status);
  76.  
  77.     if (status == GL_FALSE)
  78.     {
  79.         GLint infoLogLength;
  80.         glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLogLength);
  81.         GLchar *strInfoLog = new GLchar[infoLogLength + 1];
  82.         glGetProgramInfoLog(program, infoLogLength, NULL, strInfoLog);
  83.         fprintf(stderr, "LINKER FAILURE: %s\n", strInfoLog);
  84.         delete[] strInfoLog;
  85.     }
  86. }
  87.  
  88. void ShaderProgram::begin()
  89. {
  90.     glUseProgram(program);
  91. }
  92.  
  93. void ShaderProgram::end()
  94. {
  95.     glUseProgram(0);
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement