Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "shaderprogram.h"
- #include <fstream>
- #include <GL/glew.h>
- #include <GL/gl.h>
- char *slurpFile(const char* filename)
- {
- std::ifstream f(filename);
- f.seekg(0, std::ios::end);
- int len = f.tellg();
- f.seekg(0, std::ios::beg);
- char *data = new char[len + 1];
- f.read(data, len);
- f.close();
- data[len] = '\0';
- return data;
- }
- ShaderProgram::ShaderProgram(const char *vertPath, const char *fragPath)
- {
- const GLchar *vdata = slurpFile(vertPath);
- vert = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vert, 1, &vdata, NULL);
- glCompileShader(vert);
- GLint status;
- glGetShaderiv(vert, GL_COMPILE_STATUS, &status);
- if (status == GL_FALSE)
- {
- GLint infoLogLength;
- glGetShaderiv(vert, GL_INFO_LOG_LENGTH, &infoLogLength);
- GLchar *strInfoLog = new GLchar[infoLogLength + 1];
- glGetShaderInfoLog(vert, infoLogLength, NULL, strInfoLog);
- fprintf(stderr, "ERROR COMPILING VERTEX SHADER:\n%s", strInfoLog);
- delete [] strInfoLog;
- }
- delete [] vdata;
- const char *fdata = slurpFile(fragPath);
- frag = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(frag, 1, &fdata, NULL);
- glCompileShader(frag);
- glGetShaderiv(frag, GL_COMPILE_STATUS, &status);
- if (status == GL_FALSE)
- {
- GLint infoLogLength;
- glGetShaderiv(frag, GL_INFO_LOG_LENGTH, &infoLogLength);
- GLchar *strInfoLog = new GLchar[infoLogLength + 1];
- glGetShaderInfoLog(frag, infoLogLength, NULL, strInfoLog);
- fprintf(stderr, "ERROR COMPILING FRAGMENT SHADER:\n%s", strInfoLog);
- delete [] strInfoLog;
- }
- delete [] fdata;
- program = glCreateProgram();
- glAttachShader(program, vert);
- glAttachShader(program, frag);
- glLinkProgram(program);
- glGetProgramiv(program, GL_LINK_STATUS, &status);
- if (status == GL_FALSE)
- {
- GLint infoLogLength;
- glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLogLength);
- GLchar *strInfoLog = new GLchar[infoLogLength + 1];
- glGetProgramInfoLog(program, infoLogLength, NULL, strInfoLog);
- fprintf(stderr, "LINKER FAILURE: %s\n", strInfoLog);
- delete[] strInfoLog;
- }
- }
- void ShaderProgram::begin()
- {
- glUseProgram(program);
- }
- void ShaderProgram::end()
- {
- glUseProgram(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement