]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programbuilder.h
Add support for array and multiple lights in generated shaders
[libs/gl.git] / source / programbuilder.h
index 69170e02ef979f543b16f1fc53ef0c9adbc0c2d1..cca0c14912165616eecc7f9838e59671a9a2ebb1 100644 (file)
@@ -32,6 +32,7 @@ public:
                bool texture;
                bool material;
                bool lighting;
+               unsigned max_lights;
                bool specular;
                bool normalmap;
                bool shadow;
@@ -79,31 +80,37 @@ private:
                std::string resolved_name;
                bool fuzzy_space;
                std::string resolved_space;
+               bool array_sum;
+               std::string array_subscript;
+               unsigned array_size;
                std::list<ShaderVariable *> referenced_vars;
                std::list<ShaderVariable *> referenced_by;
                bool inlined;
                bool inline_parens;
+               bool in_loop;
 
                ShaderVariable(const std::string &);
 
                void resolve(const VariableDefinition &);
                void resolve(ShaderVariable &);
                void resolve_space(const std::string &);
+               void resolve_array(const StandardFeatures &, unsigned = 0);
                void add_reference(ShaderVariable &);
                void update_reference(ShaderVariable &, ShaderVariable &);
                void check_inline(bool, bool);
                bool is_referenced_from(VariableScope) const;
                InterfaceFlags get_interface_flags(VariableScope) const;
-               std::string create_declaration(char = 0) const;
-               std::string create_replacement(VariableScope) const;
-               std::string create_expression() const;
+               std::string create_declaration(char = 0, bool = false) const;
+               std::string create_replacement(VariableScope, const char * = 0) const;
+               std::string create_expression(const char * = 0) const;
        };
 
-       enum MatchLevel
+       enum MatchType
        {
                NO_MATCH,
                EXACT,
-               FUZZY
+               FUZZY,
+               ARRAY
        };
 
        StandardFeatures features;
@@ -123,7 +130,7 @@ public:
 private:
        std::string create_source(const std::list<ShaderVariable *> &, VariableScope) const;
        bool evaluate_flags(const char *) const;
-       static MatchLevel name_match(const char *, const char *, const char ** = 0);
+       static MatchType name_match(const char *, const char *, const char ** = 0);
        static bool parse_identifier(const char *, unsigned &, unsigned &);
        static std::vector<std::string> extract_identifiers(const char *);
        static std::string replace_identifiers(const char *, const std::map<std::string, std::string> &);