// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "display/shader/_Shader.hpp" #include "dawnopengl.hpp" #include "display/Color.hpp" typedef GLuint shaderparameter_t; namespace Dawn { class Shader : public IShader { private: /** Pointer to an uploaded vertex shader program */ GLuint shaderVertex = -1; /** Pointer to an uploaded fragment shader program */ GLuint shaderFrag = -1; /** Pointer to an uploaded shader program linked */ GLuint shaderProgram = -1; protected: void compileShader( std::string vertexShader, std::string fragmentShader ); public: /** * Locate a shader parameter by its name. * * @param name Name of the parameter to get. * @return The shader parameter. */ shaderparameter_t getParameterByName(std::string name); void bind() override; virtual void compile() = 0; void setMatrix(shaderparameter_t parameter, glm::mat4 matrix) override; void setBoolean(shaderparameter_t parameter, bool_t value) override; void setColor(shaderparameter_t parameter, struct Color color) override; void setVector3(shaderparameter_t parameter, glm::vec3 vector) override; ~Shader(); }; }