//HEADER FILE #ifndef CS5400_PROGRAM #define CS5400_PROGRAM #include #include "Shader.hpp" namespace cs5400 { class Program { public: Program( std::shared_ptr vertex_ ,std::shared_ptr fragment_) :handle(glCreateProgram()) ,vertex(vertex_) ,fragment(fragment_) {} GLuint getHandle(){return handle;} ~Program() { //glDeleteProgram(handle); } private: GLuint handle; std::shared_ptr vertex; std::shared_ptr fragment; }; std::shared_ptr make_program(std::shared_ptr vertex,std::shared_ptr fragment); } #endif //SOURCE FILE #include "Program.hpp" std::shared_ptr cs5400::make_program ( std::shared_ptr vertex ,std::shared_ptr fragment ) { GLint link_ok = GL_FALSE; auto program = std::make_shared(vertex,fragment); glAttachShader(program->getHandle(), vertex->getHandle()); glAttachShader(program->getHandle(), fragment->getHandle()); glLinkProgram(program->getHandle()); glGetProgramiv(program->getHandle(), GL_LINK_STATUS, &link_ok); if (!link_ok) { throw std::runtime_error("Could not link shader program."); } return program; }