X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.h;h=a4ab75719e29b2416ad36e3be6918ace0beeddd1;hp=73b933bfb63b0f04155c80ab2bb7e484f2529f03;hb=89f26eba675defb38542faacacde6b9d4a2248c5;hpb=118de6cee2de6e9a6caa28415cb9008779285ff9 diff --git a/source/glsl/generate.h b/source/glsl/generate.h index 73b933bf..a4ab7571 100644 --- a/source/glsl/generate.h +++ b/source/glsl/generate.h @@ -63,6 +63,32 @@ private: virtual void visit(Passthrough &); }; +/** +Assigns sizes to arrays which don't have a size. Geometry shader inputs are +sized by topology. Other arrays are sized by their use with literal indices. +*/ +class ArraySizer: private TraversingVisitor +{ +private: + std::map max_indices; + unsigned input_size = 0; + VariableDeclaration *r_declaration; + +public: + void apply(Stage &); + +private: + virtual void visit(VariableReference &); + virtual void visit(MemberAccess &); + virtual void visit(Swizzle &); + virtual void visit(UnaryExpression&); + virtual void visit(BinaryExpression &); + virtual void visit(TernaryExpression &); + virtual void visit(FunctionCall &); + virtual void visit(InterfaceLayout &); + virtual void visit(VariableDeclaration &); +}; + } // namespace SL } // namespace GL } // namespace Msp