X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Freflect.h;h=6e6f9d8316bf2c5af1522a03b097bf301c057df6;hb=08d3b5a55fad7439b47fc93d8ba604cbeb7e19ca;hp=6c00bca8de3d7f5f8dc3372dfd45cc8937b0568f;hpb=3f245515062d10e4d527827e5126fe412de06ce0;p=libs%2Fgl.git diff --git a/source/glsl/reflect.h b/source/glsl/reflect.h index 6c00bca8..6e6f9d83 100644 --- a/source/glsl/reflect.h +++ b/source/glsl/reflect.h @@ -16,16 +16,14 @@ bool can_convert(const BasicTypeDeclaration &, const BasicTypeDeclaration &); class TypeComparer: private NodeVisitor { private: - Node *first; - Node *second; - unsigned first_tag; - bool r_result; + Node *first = 0; + Node *second = 0; + unsigned first_tag = 0; + bool r_result = false; static unsigned next_tag; public: - TypeComparer(); - bool apply(TypeDeclaration &t1, TypeDeclaration &t2) { compare(t1, t2); return r_result; } private: @@ -47,11 +45,9 @@ private: class LocationCounter: private NodeVisitor { private: - unsigned r_count; + unsigned r_count = 0; public: - LocationCounter(); - unsigned apply(VariableDeclaration &v) { v.visit(*this); return r_count; } private: @@ -74,9 +70,9 @@ public: Result(unsigned s, unsigned a): size(s), alignment(a), stride(s+a-1-(s+a-1)%a) { } }; private: - unsigned r_size; - unsigned r_alignment; - int r_offset; + unsigned r_size = 0; + unsigned r_alignment = 1; + int r_offset = -1; public: Result apply(VariableDeclaration &v) { v.visit(*this); return Result(r_size, r_alignment); } @@ -102,12 +98,27 @@ public: private: virtual void visit(VariableReference &); - virtual void visit(InterfaceBlockReference &); virtual void visit(FunctionCall &); virtual void visit(VariableDeclaration &); virtual void visit(FunctionDeclaration &); }; +class AssignmentCollector: private TraversingVisitor +{ +private: + bool assignment_target = false; + std::set assigned_variables; + +public: + std::set apply(Node &); + +private: + virtual void visit(VariableReference &); + virtual void visit(UnaryExpression &); + virtual void visit(BinaryExpression &); + virtual void visit(Assignment &); +}; + } // namespace SL } // namespace GL } // namespace Msp