X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fcompatibility.h;h=a391aab0f20f7dbcb8bd0a4477434570437e7697;hb=ab5f2e6f1ddd35f8f117460530d76c0ba0c9bc87;hp=59e21c35a3644a78451f85b1100bc47b107a9547;hpb=947bb7477205c038aa1804b84452cddd2108550a;p=libs%2Fgl.git diff --git a/source/glsl/compatibility.h b/source/glsl/compatibility.h index 59e21c35..a391aab0 100644 --- a/source/glsl/compatibility.h +++ b/source/glsl/compatibility.h @@ -8,12 +8,12 @@ namespace Msp { namespace GL { namespace SL { -class DefaultPrecisionGenerator: private BlockModifier +class DefaultPrecisionGenerator: private TraversingVisitor { private: - Stage::Type stage_type; - bool toplevel; + Stage *stage; std::set have_default; + NodeList::iterator insert_point; public: DefaultPrecisionGenerator(); @@ -24,21 +24,24 @@ private: virtual void visit(Block &); virtual void visit(Precision &); virtual void visit(VariableDeclaration &); - using BlockModifier::visit; + using TraversingVisitor::visit; }; -class PrecisionRemover: private BlockModifier +class PrecisionRemover: private TraversingVisitor { +private: + std::set nodes_to_remove; + public: - void apply(Stage &s) { visit(s.content); } + void apply(Stage &); private: virtual void visit(Precision &); virtual void visit(VariableDeclaration &); - using BlockModifier::visit; + using TraversingVisitor::visit; }; -class LegacyConverter: private BlockModifier +class LegacyConverter: private TraversingVisitor { private: Stage *stage; @@ -46,6 +49,8 @@ private: Version target_version; std::string type; VariableDeclaration *frag_out; + NodeList::iterator uniform_insert_point; + std::set nodes_to_remove; public: LegacyConverter(); @@ -53,6 +58,7 @@ public: virtual void apply(Stage &); private: + virtual void visit(Block &); bool check_version(const Version &) const; bool check_extension(const Extension &) const; bool supports_unified_interface_syntax() const; @@ -66,7 +72,7 @@ private: virtual void visit(VariableDeclaration &); bool supports_interface_blocks(const std::string &) const; virtual void visit(InterfaceBlock &); - using BlockModifier::visit; + using TraversingVisitor::visit; }; } // namespace SL