X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogrambuilder.h;h=7840ecf00a2ef993a3590b6dd802f798b3d5878e;hb=912ae952489699769be43f90d4478263461964a4;hp=30f1ef15738b3ab969c288442fe354c0ae7b7843;hpb=9034e81679eeeaa3d1d5d643d3f924d9edb45a68;p=libs%2Fgl.git diff --git a/source/programbuilder.h b/source/programbuilder.h index 30f1ef15..7840ecf0 100644 --- a/source/programbuilder.h +++ b/source/programbuilder.h @@ -11,6 +11,13 @@ namespace GL { class Program; +class invalid_variable_definition: public std::invalid_argument +{ +public: + invalid_variable_definition(const std::string &w): std::invalid_argument(w) { } + virtual ~invalid_variable_definition() throw() { } +}; + class ProgramBuilder { public: @@ -29,13 +36,15 @@ public: bool normalmap; bool shadow; bool reflection; - bool transform; + bool legacy; + std::string custom; StandardFeatures(); std::string create_flags() const; }; +private: enum VariableScope { NO_SCOPE, @@ -45,8 +54,7 @@ public: FRAGMENT }; -private: - struct StandardVariable + struct VariableDefinition { VariableScope scope; const char *name; @@ -58,20 +66,23 @@ private: struct ShaderVariable { std::string name; - const StandardVariable *variable; + const VariableDefinition *variable; std::string resolved_name; bool fuzzy_space; std::string resolved_space; std::list referenced_vars; std::list referenced_by; + bool inlined; + bool inline_parens; ShaderVariable(const std::string &); - void resolve(const StandardVariable &); + void resolve(const VariableDefinition &); void resolve(ShaderVariable &); void resolve_space(const std::string &); void add_reference(ShaderVariable &); void update_reference(ShaderVariable &, ShaderVariable &); + void check_inline(bool); bool is_referenced_from(VariableScope) const; std::string get_expression() const; }; @@ -84,13 +95,16 @@ private: }; StandardFeatures features; + std::list custom_variables; std::string feature_flags; + bool optimize; - static const StandardVariable standard_variables[]; + static const VariableDefinition standard_variables[]; public: ProgramBuilder(const StandardFeatures &); + void set_optimize(bool); Program *create_program() const; void add_shaders(Program &) const; private: