#ifndef SHADER_H #define SHADER_H #include #include #include "vector.h" #include "util.h" namespace vb01{ class Shader{ public: enum ErrorType{VERTEX_ERROR, GEOMETRY_ERROR, FRAGMENT_ERROR, PROGRAM_ERROR}; enum ShaderType{VERTEX_SHADER, FRAGMENT_SHADER, GEOMETRY_SHADER}; Shader(){} Shader(std::string, bool = false); ~Shader(); std::string getName(); void setNumLights(int); void use(); void setMat4(glm::mat4, std::string); void setVec4(Vector4, std::string); void setVec3(Vector3, std::string); void setVec2(Vector2, std::string); void setFloat(float, std::string); void setBool(bool, std::string); void setInt(int, std::string); void editShader(ShaderType, int, std::string); inline bool isGeometry(){return geometry;} private: void initShaders(std::string, std::string, std::string); void replaceLine(ShaderType, int, std::string); void loadShaders(); void pushShader(u32&, std::string&, int, ErrorType); void checkCompileErrors(u32, ErrorType); u32 id; bool geometry = false; std::string path, vString, fString, gString; friend class ShaderTest; }; } #endif