]> git.tdb.fi Git - libs/gl.git/blob - source/programcompiler.h
Begin implementing a new shader program generator system
[libs/gl.git] / source / programcompiler.h
1 #ifndef MSP_GL_PROGRAMCOMPILER_H_
2 #define MSP_GL_PROGRAMCOMPILER_H_
3
4 #include "programparser.h"
5 #include "programsyntax.h"
6
7 namespace Msp {
8 namespace GL {
9
10 class Program;
11
12 class ProgramCompiler
13 {
14 public:
15         struct Formatter: ProgramSyntax::NodeVisitor
16         {
17                 std::string formatted;
18                 unsigned indent;
19                 bool parameter_list;
20                 bool else_if;
21
22                 Formatter();
23
24                 std::string format_expression(ProgramSyntax::Expression &);
25                 virtual void visit(ProgramSyntax::Block &);
26                 virtual void visit(ProgramSyntax::ExpressionStatement &);
27                 virtual void visit(ProgramSyntax::Layout &);
28                 virtual void visit(ProgramSyntax::StructDeclaration &);
29                 virtual void visit(ProgramSyntax::VariableDeclaration &);
30                 virtual void visit(ProgramSyntax::InterfaceBlock &);
31                 virtual void visit(ProgramSyntax::FunctionDeclaration &);
32                 virtual void visit(ProgramSyntax::Conditional &);
33                 virtual void visit(ProgramSyntax::Iteration &);
34                 virtual void visit(ProgramSyntax::Return &);
35         };
36
37 private:
38         ProgramParser parser;
39         ProgramSyntax::Module *module;
40
41 public:
42         ProgramCompiler();
43
44         void compile(const std::string &);
45         void compile(IO::Base &);
46         void add_shaders(Program &);
47
48 private:
49         std::string format_context(ProgramSyntax::Context &);
50 };
51
52 } // namespace GL
53 } // namespace Msp
54
55 #endif