diff --git a/inc/shader.hpp b/inc/shader.hpp new file mode 100755 index 0000000..8c949a9 --- /dev/null +++ b/inc/shader.hpp @@ -0,0 +1,28 @@ +#ifndef SHADER_HPP +#define SHADER_HPP + +#include +#include +#include +#include + +class Shaders +{ +private: + GLuint vertexShader; + GLuint fragmentShader; + GLuint shaderProgram; + + void addVertShader(const char* vertexShaderSource); + void addFragShader(const char* fragmentShaderSource); + void compileInProgram(); + +public: + Shaders(const char* vertexShaderSource, const char* fragmentShaderSource); + ~Shaders(); + + GLuint getProgram() const; + void use() const; +}; + +#endif \ No newline at end of file diff --git a/src/shader.cpp b/src/shader.cpp new file mode 100755 index 0000000..f861a97 --- /dev/null +++ b/src/shader.cpp @@ -0,0 +1,52 @@ +#include "shader.hpp" + +Shaders::Shaders(const char* vertexShaderSource, const char* fragmentShaderSource) +{ + vertexShader = glCreateShader(GL_VERTEX_SHADER); + fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + shaderProgram = glCreateProgram(); + + addVertShader(vertexShaderSource); + addFragShader(fragmentShaderSource); + + compileInProgram(); +} + +void Shaders::addVertShader(const char* vertexShaderSource) +{ + glShaderSource(vertexShader, 1, &vertexShaderSource, nullptr); + glCompileShader(vertexShader); +} + +void Shaders::addFragShader(const char* fragmentShaderSource) +{ + glShaderSource(fragmentShader, 1, &fragmentShaderSource, nullptr); + glCompileShader(fragmentShader); +} + +void Shaders::compileInProgram() +{ + glAttachShader(shaderProgram, vertexShader); + glAttachShader(shaderProgram, fragmentShader); + glLinkProgram(shaderProgram); + + glDetachShader(shaderProgram, vertexShader); + glDetachShader(shaderProgram, fragmentShader); + glDeleteShader(vertexShader); + glDeleteShader(fragmentShader); +} + +Shaders::~Shaders() +{ + glDeleteProgram(shaderProgram); +} + +void Shaders::use() const +{ + glUseProgram(shaderProgram); +} + +GLuint Shaders::getProgram() const +{ + return shaderProgram; +} \ No newline at end of file