]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programbuilder.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / programbuilder.h
diff --git a/source/programbuilder.h b/source/programbuilder.h
deleted file mode 100644 (file)
index 56fd5e8..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-#ifndef MSP_GL_PROGRAMBUILDER_H_
-#define MSP_GL_PROGRAMBUILDER_H_
-
-#include <map>
-#include <string>
-#include <vector>
-#include <msp/datafile/objectloader.h>
-
-namespace Msp {
-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() { }
-};
-
-/**
-Generates shaders with common features.
-
-The shader generation model is based on variable substitutions.  Initially, a
-goal variable is given for each shader stage.  The expression for computing
-each variable is examined for further variable definitions.  When there are no
-more known variables available for substitution, the process terminates.  Any
-unknown variables at this point are assumed to be provided by OpenGL.
-
-Variables can be defined in a number of scopes.  The scope of a variable
-determines where its value is computed.  If a variable is referenced from a
-scope that comes after the declaration scope, an interface variable is
-automatically emitted.
-
-Generated shaders are normally optimized by inlining variables with a single
-reference into the expression referencing them.  This can result in expressions
-of several hundreds of characters in length, so optimizations can be disabled
-with the set_optimize() method for debugging purposes.
-
-Custom variables can be injected to the generated shaders with the custom
-member of the StandardFeatures struct.  The syntax is:
-
-  <custom> := [<decl> ...]
-  <decl>   := <scope> <type> <name> [= <expr>] ;
-  <scope>  := uniform | attribute | vertex | fragment
-  <type>   := (any GLSL type)
-  <name>   := (valid identifier)
-  <expr>   := (GLSL expression)
-
-The custom variables should always include at least one override for a built-in
-variable; otherwise they will be ignored as no built-in expression references
-them.
-*/
-class ProgramBuilder
-{
-public:
-       /**
-       Describes the features of a standard shader program.  All boolean features
-       default to false unless stated otherwise.
-       */
-       struct StandardFeatures
-       {
-               class Loader: public DataFile::ObjectLoader<StandardFeatures>
-               {
-               public:
-                       Loader(StandardFeatures &);
-               };
-
-               /** Use a diffuse map texture. */
-               bool texture;
-
-               /** Use material properties if lighting is true, or vertex colors if
-               lighting is false. */
-               bool material;
-
-               /** Use lighting to compute the brightness of surfaces. */
-               bool lighting;
-
-               /** Number of lights to use in lighting calculations.  Defaults to 1. */
-               unsigned max_lights;
-
-               /** Use a skylight component for ambient lighting. */
-               bool skylight;
-
-               /** Use a specular lighting component. */
-               bool specular;
-
-               /** Use a normal map texture.  Only used if lighting is true. */
-               bool normalmap;
-
-               /** Use a shadow map.  Requires a ShadowMap effect or equivalent in the
-               pipeline. */
-               bool shadow;
-
-               /** Use a reflection cube map.  Requires an EnvironmentMap effect or
-               equivalend in the pipeline. */
-               bool reflection;
-
-               /** Force the use of legacy shaders conforming to GLSL 1.10.   Defaults
-               to true if the version of GLSL is less than 1.30, false otherwise. */
-               bool legacy;
-
-               /** Custom variables to use in the shader. */
-               std::string custom;
-
-               StandardFeatures();
-
-               std::string create_flags() const;
-       };
-
-private:
-       enum VariableScope
-       {
-               NO_SCOPE,
-               TYPE,
-               UNIFORM,
-               ATTRIBUTE,
-               VERTEX,
-               FRAGMENT
-       };
-
-       enum InterfaceFlags
-       {
-               NO_INTERFACE = 0,
-               INPUT = 1,
-               OUTPUT = 2,
-               GOAL = 4
-       };
-
-       struct VariableDefinition
-       {
-               VariableScope scope;
-               const char *name;
-               const char *type;
-               const char *expression;
-               const char *flags;
-       };
-
-       struct ShaderVariable
-       {
-               std::string name;
-               const VariableDefinition *variable;
-               const VariableDefinition *type;
-               std::string resolved_name;
-               std::string resolved_block;
-               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_type(const VariableDefinition &);
-               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_type_declaration() 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 MatchType
-       {
-               NO_MATCH,
-               EXACT,
-               FUZZY,
-               ARRAY
-       };
-
-       StandardFeatures features;
-       std::list<VariableDefinition> custom_variables;
-       std::string feature_flags;
-       std::map<std::string, std::string> aliases;
-       bool optimize;
-
-       static const VariableDefinition standard_variables[];
-       static const char interfaces[];
-
-public:
-       ProgramBuilder(const StandardFeatures &);
-
-       /// Enable or disable optimization.  Defaults to enabled.
-       void set_optimize(bool);
-
-       /// Create a new Program with the features associated with the builder.
-       Program *create_program() const;
-
-       /// Generate shaders and add them to an existing program.
-       void add_shaders(Program &) const;
-
-private:
-       std::string create_source(const std::list<ShaderVariable *> &, VariableScope) const;
-       bool evaluate_flags(const char *) const;
-       static const char *unqualified_name(const char *);
-       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> &, bool = false);
-       std::string create_expression(const ShaderVariable &, const char * = 0) const;
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif