-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshader.cpp
84 lines (68 loc) · 1.79 KB
/
shader.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <GL/glew.h>
#include <iostream>
#include "shader.hpp"
namespace sre {
/** \class Shader
* \brief A class representing shader code
*/
/**
*
*/
Shader::Shader( )
{
}
Shader::~Shader()
{
glDeleteShader(this->shader);
}
/** \class VertexShader
*/
VertexShader::VertexShader() {
//Create a vertex shader
GLuint shader = glCreateShader(GL_VERTEX_SHADER);
// if gl shader object allocation was unsuccessful, stop and send notification
// to error console
if (shader == 0) {
std::cerr<<"Vertex shader creation failed!\n";
}
else {
// save shader id
this->shader = shader;
//Shader sourcecode (default)
this->source = vertexSource;
glShaderSource(shader, 1, &source, NULL);
//Attempt to compile the shader...
glCompileShader(shader);
//get compilation status
GLint * param;
glGetShaderiv(shader, GL_COMPILE_STATUS, param);
// if compilation is unsuccessfull:
if(param) {
//print out log info
char * infoLog = new char[logLength];
glGetShaderInfoLog( shader, logLength - 1, NULL, infoLog );
// copy logLength characters of shader's error log is saved
errorLog += infoLog;
std::cerr<<errorLog;
} else { // compilation is successful
}
}
} // VertexShader
/** \class FragmentShader
* ToDo
*/
/** \class ShaderProgram
* ToDo
*/
ShaderProgram::ShaderProgram() {
//create shader program;
GLuint program = glCreateProgram();
this->program = program;
}
ShaderProgram::~ShaderProgram() {
glDeleteProgram(this->program);
}
void ShaderProgram::attach(Shader shader) {
glAttachShader(this->program, shader.getId());
}
} // namespace sre