#pragma once #include #include #include #include #include #include #include namespace cgl{ template class ShaderProgram : public Program { public: ShaderProgram() : Program() { glProgramParameteri(id, GL_PROGRAM_SEPARABLE, GL_TRUE); } explicit ShaderProgram(const std::string_view &src) : ShaderProgram(std::string(src)) {} explicit ShaderProgram(const std::string &src) : ShaderProgram() { Shader sh(src); attach(sh); if (!link()) throw ShaderError(get_info_log()); detach(sh); } static ShaderProgram file(const std::string &name) { return ShaderProgram(utilReadFile(name)); } }; namespace pgm { using vert = ShaderProgram; using tcs = ShaderProgram; using tes = ShaderProgram; using geom = ShaderProgram; using frag = ShaderProgram; using comp = ShaderProgram; } }