wrap shaders in classses
This commit is contained in:
parent
6b1a8ede56
commit
f0059ce731
2 changed files with 39 additions and 10 deletions
|
|
@ -34,17 +34,17 @@ ShaderSystem::ShaderSystem() {
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
||||||
|
|
||||||
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
|
VertexShader vertex_shader = VertexShader();
|
||||||
glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL);
|
vertex_shader.SetSource(vertex_shader_text);
|
||||||
glCompileShader(vertex_shader);
|
vertex_shader.Compile();
|
||||||
|
|
||||||
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
FragmentShader fragment_shader = FragmentShader();
|
||||||
glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL);
|
fragment_shader.SetSource(fragment_shader_text);
|
||||||
glCompileShader(fragment_shader);
|
fragment_shader.Compile();
|
||||||
|
|
||||||
program = glCreateProgram();
|
program = glCreateProgram();
|
||||||
glAttachShader(program, vertex_shader);
|
vertex_shader.Attach(program);
|
||||||
glAttachShader(program, fragment_shader);
|
fragment_shader.Attach(program);
|
||||||
glLinkProgram(program);
|
glLinkProgram(program);
|
||||||
|
|
||||||
mvp_location = glGetUniformLocation(program, "MVP");
|
mvp_location = glGetUniformLocation(program, "MVP");
|
||||||
|
|
@ -79,3 +79,11 @@ int ShaderSystem::Draw(int width, int height, float time) {
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Shader::SetSource(const char *source) {
|
||||||
|
glShaderSource(shader, 1, &source, NULL);
|
||||||
|
}
|
||||||
|
void Shader::Compile() { glCompileShader(shader); }
|
||||||
|
void Shader::Attach(GLuint program) { glAttachShader(program, shader); }
|
||||||
|
VertexShader::VertexShader() : Shader(glCreateShader(GL_VERTEX_SHADER)) {}
|
||||||
|
FragmentShader::FragmentShader() : Shader(glCreateShader(GL_FRAGMENT_SHADER)) {}
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,6 @@
|
||||||
|
|
||||||
class ShaderSystem {
|
class ShaderSystem {
|
||||||
GLuint vertex_buffer;
|
GLuint vertex_buffer;
|
||||||
GLuint vertex_shader;
|
|
||||||
GLuint fragment_shader;
|
|
||||||
GLuint program;
|
GLuint program;
|
||||||
GLint mvp_location;
|
GLint mvp_location;
|
||||||
GLint vpos_location;
|
GLint vpos_location;
|
||||||
|
|
@ -15,3 +13,26 @@ public:
|
||||||
ShaderSystem();
|
ShaderSystem();
|
||||||
int Draw(int width, int height, float time);
|
int Draw(int width, int height, float time);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Shader {
|
||||||
|
public:
|
||||||
|
Shader(GLuint shader);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
GLuint shader;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void SetSource(const char *source);
|
||||||
|
void Compile();
|
||||||
|
void Attach(GLuint program);
|
||||||
|
};
|
||||||
|
|
||||||
|
class VertexShader : public Shader {
|
||||||
|
public:
|
||||||
|
VertexShader();
|
||||||
|
};
|
||||||
|
|
||||||
|
class FragmentShader : public Shader {
|
||||||
|
public:
|
||||||
|
FragmentShader();
|
||||||
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue