]> git.tdb.fi Git - libs/gl.git/blob - source/glsl/builtin.cpp
Load builtin GLSL declarations from a file
[libs/gl.git] / source / glsl / builtin.cpp
1 #include <msp/gl/resources.h>
2 #include <msp/io/seekable.h>
3 #include "builtin.h"
4 #include "parser.h"
5
6 using namespace std;
7
8 namespace Msp {
9 namespace GL {
10 namespace SL {
11
12 Module *get_builtins_module()
13 {
14         static RefPtr<Module> builtins_module;
15         static bool initialized = false;
16         if(!initialized)
17         {
18                 initialized = true;
19
20                 RefPtr<IO::Seekable> io = Resources::get_builtins().open("_builtin.glsl");
21                 if(!io)
22                         return 0;
23
24                 Parser parser;
25                 Module *module = new Module(parser.parse(*io, "<builtin>", BUILTIN_SOURCE));
26
27                 builtins_module = module;
28         }
29         return builtins_module.get();
30 }
31
32 Stage *get_builtins(Stage::Type type)
33 {
34         Module *module = get_builtins_module();
35         if(!module)
36                 return 0;
37
38         if(type==Stage::SHARED)
39                 return &module->shared;
40         for(list<Stage>::iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
41                 if(i->type==type)
42                         return &*i;
43         return 0;
44 }
45
46 } // namespace SL
47 } // namespace GL
48 } // namespace Msp