wrap shaders in classses

This commit is contained in:
Benjamin Palko 2024-10-06 18:13:12 -04:00
parent 6b1a8ede56
commit f0059ce731
2 changed files with 39 additions and 10 deletions

View file

@ -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)) {}

View file

@ -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();
};