X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fbuiltin.cpp;fp=source%2Fglsl%2Fbuiltin.cpp;h=7aecda3c244bbd31d028021687f1352bc9dd584e;hb=696a97bd7411d69953c1a9e4b5f3dfb4c1d848f1;hp=0000000000000000000000000000000000000000;hpb=c1ec86d6b9ceb6c71f787fed3b2ea6c75457a474;p=libs%2Fgl.git diff --git a/source/glsl/builtin.cpp b/source/glsl/builtin.cpp new file mode 100644 index 00000000..7aecda3c --- /dev/null +++ b/source/glsl/builtin.cpp @@ -0,0 +1,62 @@ +#include "builtin.h" +#include "generate.h" +#include "parser.h" + +using namespace std; + +namespace { + +const char builtins_src[] = + "#pragma MSP stage(vertex)\n" + "out gl_PerVertex {\n" + " vec4 gl_Position;\n" + " float gl_ClipDistance[];\n" + "};\n" + "#pragma MSP stage(geometry)\n" + "in gl_PerVertex {\n" + " vec4 gl_Position;\n" + " float gl_ClipDistance[];\n" + "} gl_in[];\n" + "out gl_PerVertex {\n" + " vec4 gl_Position;\n" + " float gl_ClipDistance[];\n" + "};\n"; + +} + +namespace Msp { +namespace GL { +namespace SL { + +Module *create_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 resolver; + i->content.visit(resolver); + for(map::iterator j=i->content.variables.begin(); j!=i->content.variables.end(); ++j) + j->second->linked_declaration = j->second; + } + return module; +} + +Module &get_builtins_module() +{ + static RefPtr builtins_module = create_builtins_module(); + return *builtins_module; +} + +Stage *get_builtins(StageType type) +{ + Module &module = get_builtins_module(); + for(list::iterator i=module.stages.begin(); i!=module.stages.end(); ++i) + if(i->type==type) + return &*i; + return 0; +} + +} // namespace SL +} // namespace GL +} // namespace Msp