15 std::string filename =
"";
20 typedef std::map<std::string, shader_info> shader_lib_map;
21 shader_lib_map shaders;
23 shader_info& get_shader_info(
const std::string& name) {
25 if(shaders.find(name) != shaders.end()) {
26 return shaders.at(name);
28 std::cerr <<
"Error: shader_library::get shader with name " << name <<
" not found!" << std::endl;
37 void clear(context& ctx);
39 bool add(
const std::string& name,
const std::string& file,
const shader_define_map& defines = {});
41 shader_program& get(
const std::string& name) {
43 return get_shader_info(name).prog;
48 return get_shader_info(name).defines;
51 bool contains(
const std::string& name)
const {
53 return shaders.find(name) != shaders.end();
56 shader_lib_map::iterator begin() {
return shaders.begin(); }
57 shader_lib_map::iterator end() {
return shaders.end(); }
59 bool load_all(context& ctx,
const std::string& where =
"");
61 bool reload(context& ctx,
const std::string& name,
const shader_define_map& defines = {},
const std::string& where =
"");
63 static bool load(context& ctx, shader_program& prog,
const std::string& name,
const bool reload =
false,
const std::string& where =
"") {
68 static bool load(context& ctx, shader_program& prog,
const std::string& name,
const shader_define_map& defines,
const bool reload =
false,
const std::string& where =
"") {
70 if(prog.is_created()) {
71 if(reload) prog.destruct(ctx);
75 std::string function_context = where ==
"" ?
"shader_library::load_shader()" : where;
77 if(!prog.is_created()) {
78 bool from_program_file = name.length() > 4 && name.substr(name.length() - 5) ==
".glpr";
80 if(from_program_file) {
81 if(!prog.build_program(ctx, name,
true, defines)) {
82 std::cerr <<
"ERROR in " << function_context <<
" ... could not build shader program " << name << std::endl;
86 if(!prog.build_files(ctx, name,
true, defines)) {
87 std::cerr <<
"ERROR in " << function_context <<
" ... could not build shader files " << name << std::endl;
95 bool reload_all(context& ctx,
const std::string& where =
"");