| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- //
- // shader_program.cpp
- // graphics
- //
- // Created by Sam Jaffe on 7/5/16.
- //
- #include "game/graphics/shader_program.hpp"
- #include <unordered_map>
- #include <utility>
- #include "game/graphics/shader.hpp"
- #include "helper.hpp"
- using namespace graphics;
- namespace {
- using key_t = std::pair<std::string, std::string>;
- std::unordered_map<key_t, flyweight<shader_program>> g_shader_programs;
- }
- flyweight<shader_program> 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<shader> frag,
- flyweight<shader> vert)
- : identity<shader_program>(id), fragment_shader(frag), vertex_shader(vert) {
- }
- void shader_program::activate() const { shaders::activate(id); }
|