#pragma once #include #include #include #include #include #include "glm/gtc/type_ptr.hpp" #include "Light.h" #include "SceneContext.h" #include "Loader.h" #include "Texture.h" class Shader { public: Shader() {}; Shader(const std::string vtx_name, const std::string frag_name); ~Shader(); Material mat; void enable(); void disable(); public: void setUniforms(SceneContext ctx); void addUniform(const std::string name, glm::vec3 data) { _program.use(); glUniform3fv(_program.addUniform(name), 1, glm::value_ptr(data)); } void addUniform(const std::string name, int data) { _program.use(); glUniform1i(_program.addUniform(name), data); } void addUniform(const std::string name, float data) { _program.use(); glUniform1fv(_program.addUniform(name), 1, &data); } void addUniform(const std::string name, glm::mat3x3 &data) { _program.use(); glUniformMatrix3fv(_program.addUniform(name), 1, GL_FALSE, glm::value_ptr(data)); } void addUniform(const std::string name, glm::mat4x4 &data) { _program.use(); glUniformMatrix4fv(_program.addUniform(name), 1, GL_FALSE, glm::value_ptr(data)); } ShaderProgram _program; };