]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/builtin.cpp
Inject builtins into the module
[libs/gl.git] / source / glsl / builtin.cpp
index ee692462299dc7397a239a994a1b57228d385c4b..049740657a5c251432f5054a67a40d1fa4b98164 100644 (file)
@@ -1,5 +1,4 @@
 #include "builtin.h"
-#include "generate.h"
 #include "parser.h"
 
 using namespace std;
@@ -28,30 +27,29 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
-Module *create_builtins_module()
+Module *get_builtins_module()
 {
-       Parser parser;
-       Module *module = new Module(parser.parse(builtins_src, "<builtin>"));
-       for(list<Stage>::iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
+       static RefPtr<Module> builtins_module;
+       static bool initialized = false;
+       if(!initialized)
        {
-               VariableResolver resolver;
-               i->content.visit(resolver);
-               for(map<string, VariableDeclaration *>::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<Module> builtins_module = create_builtins_module();
-       return *builtins_module;
+               Parser parser;
+               Module *module = new Module(parser.parse(builtins_src, "<builtin>", BUILTIN_SOURCE));
+
+               builtins_module = module;
+       }
+       return builtins_module.get();
 }
 
 Stage *get_builtins(Stage::Type type)
 {
-       Module &module = get_builtins_module();
-       for(list<Stage>::iterator i=module.stages.begin(); i!=module.stages.end(); ++i)
+       Module *module = get_builtins_module();
+       if(!module)
+               return 0;
+
+       for(list<Stage>::iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
                if(i->type==type)
                        return &*i;
        return 0;