|
|
@@ -15,20 +15,21 @@
|
|
|
|
|
|
namespace {
|
|
|
using key_t = std::pair<std::string, std::string>;
|
|
|
- std::unordered_map<key_t, ::graphics::shader_program> g_shader_programs;
|
|
|
+ std::unordered_map<key_t, flyweight<::graphics::shader_program>>
|
|
|
+ g_shader_programs;
|
|
|
}
|
|
|
|
|
|
namespace graphics {
|
|
|
- shader_program shader_program::create(std::string const & frag,
|
|
|
- std::string const & vert) {
|
|
|
+ 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; }
|
|
|
|
|
|
- shader fragment_shader = shader::create(shaders::type::FRAGMENT, frag);
|
|
|
- shader vertex_shader = shader::create(shaders::type::VERTEX, vert);
|
|
|
+ auto fragment_shader = shader::create(shaders::type::FRAGMENT, frag);
|
|
|
+ auto vertex_shader = shader::create(shaders::type::VERTEX, vert);
|
|
|
|
|
|
- shader_program prog{shaders::init_program(fragment_shader, vertex_shader)};
|
|
|
+ shader_program prog{shaders::init(fragment_shader, vertex_shader)};
|
|
|
return g_shader_programs.emplace(key, std::move(prog)).first->second;
|
|
|
}
|
|
|
|