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:
bool normalmap;
bool shadow;
bool reflection;
- bool transform;
- bool colorify;
bool legacy;
+ std::string custom;
StandardFeatures();
std::string create_flags() const;
};
+private:
enum VariableScope
{
NO_SCOPE,
FRAGMENT
};
-private:
- struct StandardVariable
+ struct VariableDefinition
{
VariableScope scope;
const char *name;
struct ShaderVariable
{
std::string name;
- const StandardVariable *variable;
+ const VariableDefinition *variable;
std::string resolved_name;
bool fuzzy_space;
std::string resolved_space;
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 &);
};
StandardFeatures features;
+ std::list<VariableDefinition> custom_variables;
std::string feature_flags;
bool optimize;
- static const StandardVariable standard_variables[];
+ static const VariableDefinition standard_variables[];
public:
ProgramBuilder(const StandardFeatures &);