From f0059ce7311deaf32a66008ef40f05599305df39 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Sun, 6 Oct 2024 18:13:12 -0400 Subject: [PATCH] wrap shaders in classses --- src/systems/shader-system.cpp | 24 ++++++++++++++++-------- src/systems/shader-system.hpp | 25 +++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/systems/shader-system.cpp b/src/systems/shader-system.cpp index 633f9b5..e83c307 100644 --- a/src/systems/shader-system.cpp +++ b/src/systems/shader-system.cpp @@ -34,17 +34,17 @@ ShaderSystem::ShaderSystem() { glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); + VertexShader vertex_shader = VertexShader(); + vertex_shader.SetSource(vertex_shader_text); + vertex_shader.Compile(); - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); + FragmentShader fragment_shader = FragmentShader(); + fragment_shader.SetSource(fragment_shader_text); + fragment_shader.Compile(); program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); + vertex_shader.Attach(program); + fragment_shader.Attach(program); glLinkProgram(program); mvp_location = glGetUniformLocation(program, "MVP"); @@ -79,3 +79,11 @@ int ShaderSystem::Draw(int width, int height, float time) { glDrawArrays(GL_TRIANGLES, 0, 3); 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)) {} diff --git a/src/systems/shader-system.hpp b/src/systems/shader-system.hpp index 801fe9b..731ce85 100644 --- a/src/systems/shader-system.hpp +++ b/src/systems/shader-system.hpp @@ -3,8 +3,6 @@ class ShaderSystem { GLuint vertex_buffer; - GLuint vertex_shader; - GLuint fragment_shader; GLuint program; GLint mvp_location; GLint vpos_location; @@ -15,3 +13,26 @@ public: ShaderSystem(); 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(); +};