+ static RefPtr<Module> builtins_module;
+ static bool initialized = false;
+ if(!initialized)
+ {
+ initialized = true;
+
+ RefPtr<IO::Seekable> io = Resources::get_builtins().open("_builtin.glsl");
+ if(!io)
+ return 0;
+
+ builtins_module = new Module;
+ add_builtin_type(builtins_module->shared, "void", BasicTypeDeclaration::VOID, 0, true);
+ add_builtin_type(builtins_module->shared, "bool", BasicTypeDeclaration::BOOL, 1, true);
+ add_builtin_type(builtins_module->shared, "int", BasicTypeDeclaration::INT, 32, true);
+ add_builtin_type(builtins_module->shared, "uint", BasicTypeDeclaration::INT, 32, false);
+ add_builtin_type(builtins_module->shared, "float", BasicTypeDeclaration::FLOAT, 32, true);
+
+ try
+ {
+ Parser parser(0);
+ parser.parse(*builtins_module, *io, "<builtin>", BUILTIN_SOURCE);
+ }
+ catch(...)
+ {
+ builtins_module = 0;
+ throw;
+ }
+ }
+ return builtins_module.get();