Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //HEADER FILE
- #ifndef CS5400_PROGRAM
- #define CS5400_PROGRAM
- #include <memory>
- #include "Shader.hpp"
- namespace cs5400
- {
- class Program
- {
- public:
- Program(
- std::shared_ptr<VertexShader> vertex_
- ,std::shared_ptr<FragmentShader> fragment_)
- :handle(glCreateProgram())
- ,vertex(vertex_)
- ,fragment(fragment_)
- {}
- GLuint getHandle(){return handle;}
- ~Program()
- {
- //glDeleteProgram(handle);
- }
- private:
- GLuint handle;
- std::shared_ptr<VertexShader> vertex;
- std::shared_ptr<FragmentShader> fragment;
- };
- std::shared_ptr<Program> make_program(std::shared_ptr<VertexShader> vertex,std::shared_ptr<FragmentShader> fragment);
- }
- #endif
- //SOURCE FILE
- #include "Program.hpp"
- std::shared_ptr<cs5400::Program> cs5400::make_program
- (
- std::shared_ptr<cs5400::VertexShader> vertex
- ,std::shared_ptr<cs5400::FragmentShader> fragment
- )
- {
- GLint link_ok = GL_FALSE;
- auto program = std::make_shared<Program>(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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement