X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fbuiltin.cpp;fp=source%2Fglsl%2Fbuiltin.cpp;h=1fd496b40c5e8210636960d2a69644363844e95a;hb=47d9d5d10469340af44909de9c8ab9fd4f1a19a1;hp=c9118f69d3ffa6e596d44111f8fc9e30b0835c42;hpb=1fa69bb8eec3070f5da296d6dd0bd67aea62d3bf;p=libs%2Fgl.git diff --git a/source/glsl/builtin.cpp b/source/glsl/builtin.cpp index c9118f69..1fd496b4 100644 --- a/source/glsl/builtin.cpp +++ b/source/glsl/builtin.cpp @@ -28,29 +28,35 @@ namespace Msp { namespace GL { namespace SL { -Module *create_builtins_module() +Module *get_builtins_module() { - Parser parser; - Module *module = new Module(parser.parse(builtins_src, "")); - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) + static RefPtr builtins_module; + static bool initialized = false; + if(!initialized) { - VariableResolver().visit(i->content); - for(map::iterator j=i->content.variables.begin(); j!=i->content.variables.end(); ++j) - j->second->linked_declaration = j->second; - } - return module; -} + initialized = true; -Module &get_builtins_module() -{ - static RefPtr builtins_module = create_builtins_module(); - return *builtins_module; + Parser parser; + Module *module = new Module(parser.parse(builtins_src, "")); + for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) + { + VariableResolver().apply(*i); + for(map::iterator j=i->content.variables.begin(); j!=i->content.variables.end(); ++j) + j->second->linked_declaration = j->second; + } + + builtins_module = module; + } + return builtins_module.get(); } Stage *get_builtins(Stage::Type type) { - Module &module = get_builtins_module(); - for(list::iterator i=module.stages.begin(); i!=module.stages.end(); ++i) + Module *module = get_builtins_module(); + if(!module) + return 0; + + for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) if(i->type==type) return &*i; return 0;