namespace GL {
namespace SL {
+/** Generates default precision declarations if they are missing, to satisfy
+GLSL ES requirements. */
class DefaultPrecisionGenerator: private TraversingVisitor
{
private:
virtual void visit(Block &);
virtual void visit(Precision &);
virtual void visit(VariableDeclaration &);
- using TraversingVisitor::visit;
};
+/** Removes precision qualifiers from variable declarations, as well as
+default precision declarations. */
class PrecisionRemover: private TraversingVisitor
{
private:
private:
virtual void visit(Precision &);
virtual void visit(VariableDeclaration &);
- using TraversingVisitor::visit;
};
+/** Converts structures of the syntax tree to match a particular set of
+features. */
class LegacyConverter: private TraversingVisitor
{
private:
Stage *stage;
Features features;
- std::string type;
+ std::string r_type;
VariableDeclaration *frag_out;
NodeList<Statement>::iterator uniform_insert_point;
std::set<Node *> nodes_to_remove;
virtual void apply(Stage &, const Features &);
private:
+ void unsupported(const std::string &);
+
virtual void visit(Block &);
bool check_version(const Version &) const;
bool check_extension(bool Features::*) const;
virtual void visit(VariableDeclaration &);
bool supports_interface_blocks(const std::string &) const;
virtual void visit(InterfaceBlock &);
- using TraversingVisitor::visit;
};
} // namespace SL