X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fglsl%2Fcompatibility.h;h=852a6590bd67c287cf272d1a85bc9cfdb746a5c3;hb=bd8816692056230c36504dcccd76c6946dff47b1;hp=f33768767b0b0909614e9c8181cf26a32cf66487;hpb=696a97bd7411d69953c1a9e4b5f3dfb4c1d848f1;p=libs%2Fgl.git diff --git a/source/glsl/compatibility.h b/source/glsl/compatibility.h index f3376876..852a6590 100644 --- a/source/glsl/compatibility.h +++ b/source/glsl/compatibility.h @@ -8,45 +8,57 @@ namespace Msp { namespace GL { namespace SL { -class DefaultPrecisionGenerator: public BlockModifier +class DefaultPrecisionGenerator: private TraversingVisitor { private: - bool toplevel; + Stage *stage; std::set have_default; + NodeList::iterator insert_point; public: DefaultPrecisionGenerator(); - using StageVisitor::visit; + void apply(Stage &); + +private: virtual void visit(Block &); virtual void visit(Precision &); virtual void visit(VariableDeclaration &); }; -class PrecisionRemover: public BlockModifier +class PrecisionRemover: private TraversingVisitor { +private: + std::set nodes_to_remove; + public: - using StageVisitor::visit; + void apply(Stage &); + +private: virtual void visit(Precision &); virtual void visit(VariableDeclaration &); }; -class LegacyConverter: public BlockModifier +class LegacyConverter: private TraversingVisitor { private: - GLApi target_api; - Version target_version; + Stage *stage; + Features features; std::string type; VariableDeclaration *frag_out; + NodeList::iterator uniform_insert_point; + std::set nodes_to_remove; public: LegacyConverter(); - LegacyConverter(const Version &); + + virtual void apply(Stage &, const Features &); private: + virtual void visit(Block &); bool check_version(const Version &) const; - bool check_extension(const Extension &) const; - using StageVisitor::visit; + bool check_extension(bool Features::*) const; + bool supports_stage(Stage::Type) const; bool supports_unified_interface_syntax() const; virtual void visit(VariableReference &); virtual void visit(Assignment &);