// // shader_program.cpp // graphics // // Created by Sam Jaffe on 7/5/16. // #include "game/graphics/shader_program.hpp" #include #include #include "game/graphics/shader.hpp" #include "helper.hpp" using namespace graphics; namespace { using key_t = std::pair; std::unordered_map> g_shader_programs; } flyweight shader_program::create(std::string const & frag, std::string const & vert) { auto key = std::make_pair(frag, vert); auto found = g_shader_programs.find(key); if (found != g_shader_programs.end()) { return found->second; } auto fragment_shader = shader::create(shaders::type::FRAGMENT, frag); auto vertex_shader = shader::create(shaders::type::VERTEX, vert); shader_program prog{shaders::init(fragment_shader, vertex_shader), fragment_shader, vertex_shader}; return g_shader_programs.emplace(key, std::move(prog)).first->second; } shader_program::shader_program(unsigned int id, flyweight frag, flyweight vert) : identity(id), fragment_shader(frag), vertex_shader(vert) { } void shader_program::activate() const { shaders::activate(id); }