]> git.tdb.fi Git - libs/gl.git/blob - source/glsl/compatibility.h
a391aab0f20f7dbcb8bd0a4477434570437e7697
[libs/gl.git] / source / glsl / compatibility.h
1 #ifndef MSP_GL_SL_COMPATIBILITY_H_
2 #define MSP_GL_SL_COMPATIBILITY_H_
3
4 #include <string>
5 #include "visitor.h"
6
7 namespace Msp {
8 namespace GL {
9 namespace SL {
10
11 class DefaultPrecisionGenerator: private TraversingVisitor
12 {
13 private:
14         Stage *stage;
15         std::set<std::string> have_default;
16         NodeList<Statement>::iterator insert_point;
17
18 public:
19         DefaultPrecisionGenerator();
20
21         void apply(Stage &);
22
23 private:
24         virtual void visit(Block &);
25         virtual void visit(Precision &);
26         virtual void visit(VariableDeclaration &);
27         using TraversingVisitor::visit;
28 };
29
30 class PrecisionRemover: private TraversingVisitor
31 {
32 private:
33         std::set<Node *> nodes_to_remove;
34
35 public:
36         void apply(Stage &);
37
38 private:
39         virtual void visit(Precision &);
40         virtual void visit(VariableDeclaration &);
41         using TraversingVisitor::visit;
42 };
43
44 class LegacyConverter: private TraversingVisitor
45 {
46 private:
47         Stage *stage;
48         GLApi target_api;
49         Version target_version;
50         std::string type;
51         VariableDeclaration *frag_out;
52         NodeList<Statement>::iterator uniform_insert_point;
53         std::set<Node *> nodes_to_remove;
54
55 public:
56         LegacyConverter();
57
58         virtual void apply(Stage &);
59
60 private:
61         virtual void visit(Block &);
62         bool check_version(const Version &) const;
63         bool check_extension(const Extension &) const;
64         bool supports_unified_interface_syntax() const;
65         virtual void visit(VariableReference &);
66         virtual void visit(Assignment &);
67         bool supports_unified_sampling_functions() const;
68         virtual void visit(FunctionCall &);
69         bool supports_interface_layouts() const;
70         bool supports_centroid_sampling() const;
71         bool supports_sample_sampling() const;
72         virtual void visit(VariableDeclaration &);
73         bool supports_interface_blocks(const std::string &) const;
74         virtual void visit(InterfaceBlock &);
75         using TraversingVisitor::visit;
76 };
77
78 } // namespace SL
79 } // namespace GL
80 } // namespace Msp
81
82 #endif