]> git.tdb.fi Git - libs/gl.git/blob - source/glsl/compatibility.h
Adjust member access of the various visitors in the GLSL compiler
[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 BlockModifier
12 {
13 private:
14         Stage::Type stage_type;
15         bool toplevel;
16         std::set<std::string> have_default;
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 BlockModifier::visit;
28 };
29
30 class PrecisionRemover: private BlockModifier
31 {
32 public:
33         void apply(Stage &s) { visit(s.content); }
34
35 private:
36         virtual void visit(Precision &);
37         virtual void visit(VariableDeclaration &);
38         using BlockModifier::visit;
39 };
40
41 class LegacyConverter: private BlockModifier
42 {
43 private:
44         Stage *stage;
45         GLApi target_api;
46         Version target_version;
47         std::string type;
48         VariableDeclaration *frag_out;
49
50 public:
51         LegacyConverter();
52         LegacyConverter(const Version &);
53
54         virtual void apply(Stage &);
55
56 private:
57         bool check_version(const Version &) const;
58         bool check_extension(const Extension &) const;
59         bool supports_unified_interface_syntax() const;
60         virtual void visit(VariableReference &);
61         virtual void visit(Assignment &);
62         bool supports_unified_sampling_functions() const;
63         virtual void visit(FunctionCall &);
64         bool supports_interface_layouts() const;
65         bool supports_centroid_sampling() const;
66         bool supports_sample_sampling() const;
67         virtual void visit(VariableDeclaration &);
68         bool supports_interface_blocks(const std::string &) const;
69         virtual void visit(InterfaceBlock &);
70         using BlockModifier::visit;
71 };
72
73 } // namespace SL
74 } // namespace GL
75 } // namespace Msp
76
77 #endif