#include "datatype.h"
#include "matrix.h"
#include "program.h"
+#include "tag.h"
#include "vector.h"
namespace Msp {
ALL_ONES = static_cast<Mask>(-1)
};
- struct NamedUniform
+ struct TaggedUniform
{
- std::string name;
+ Tag tag;
Uniform *value;
- NamedUniform();
+ TaggedUniform();
- bool compare_name(const std::string &, unsigned) const;
void replace_value(Uniform *);
};
// XXX All these mutables are a bit silly, but I'm out of better ideas
const Program *tied_program;
- std::vector<NamedUniform> uniforms;
+ std::vector<TaggedUniform> uniforms;
mutable BlockMap blocks;
mutable ProgramMap programs;
mutable UniformBlock *last_block;
~ProgramData();
private:
- void uniform(const std::string &, Uniform *);
+ void uniform(Tag, Uniform *);
template<typename T, typename V>
- void uniform(const std::string &, V);
+ void uniform(Tag, V);
template<typename T, typename V>
- void uniform_array(const std::string &, unsigned, V);
- bool validate_name(const std::string &) const;
- void add_uniform(const std::string &, Uniform *);
+ void uniform_array(Tag, unsigned, V);
+ bool validate_tag(Tag) const;
+ void add_uniform(Tag, Uniform *);
public:
- void uniform(const std::string &, const Uniform &);
- void uniform(const std::string &, int);
- void uniform(const std::string &, float);
- void uniform(const std::string &, int, int);
- void uniform(const std::string &, float, float);
- void uniform2(const std::string &, const int *);
- void uniform2(const std::string &, const float *);
- void uniform(const std::string &, int, int, int);
- void uniform(const std::string &, float, float, float);
- void uniform(const std::string &, const Vector3 &);
- void uniform3(const std::string &, const int *);
- void uniform3(const std::string &, const float *);
- void uniform(const std::string &, int, int, int, int);
- void uniform(const std::string &, float, float, float, float);
- void uniform(const std::string &, const Vector4 &);
- void uniform(const std::string &, const Color &);
- void uniform4(const std::string &, const int *);
- void uniform4(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 2, 2> &);
- void uniform_matrix2(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 2, 3> &);
- void uniform_matrix3x2(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 2, 4> &);
- void uniform_matrix4x2(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 3, 2> &);
- void uniform_matrix2x3(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 3, 3> &);
- void uniform_matrix3(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 3, 4> &);
- void uniform_matrix4x3(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 4, 2> &);
- void uniform_matrix2x4(const std::string &, const float *);
- void uniform(const std::string &, const LinAl::Matrix<float, 4, 3> &);
- void uniform_matrix3x4(const std::string &, const float *);
- void uniform(const std::string &, const Matrix &);
- void uniform_matrix4(const std::string &, const float *);
- void uniform1_array(const std::string &, unsigned, const int *);
- void uniform1_array(const std::string &, unsigned, const float *);
- void uniform2_array(const std::string &, unsigned, const int *);
- void uniform2_array(const std::string &, unsigned, const float *);
- void uniform3_array(const std::string &, unsigned, const int *);
- void uniform3_array(const std::string &, unsigned, const float *);
- void uniform4_array(const std::string &, unsigned, const int *);
- void uniform4_array(const std::string &, unsigned, const float *);
- void uniform_matrix2_array(const std::string &, unsigned, const float *);
- void uniform_matrix3x2_array(const std::string &, unsigned, const float *);
- void uniform_matrix4x2_array(const std::string &, unsigned, const float *);
- void uniform_matrix2x3_array(const std::string &, unsigned, const float *);
- void uniform_matrix3_array(const std::string &, unsigned, const float *);
- void uniform_matrix4x3_array(const std::string &, unsigned, const float *);
- void uniform_matrix2x4_array(const std::string &, unsigned, const float *);
- void uniform_matrix3x4_array(const std::string &, unsigned, const float *);
- void uniform_matrix4_array(const std::string &, unsigned, const float *);
- void remove_uniform(const std::string &);
-
- std::vector<std::string> get_uniform_names() const;
- const Uniform &get_uniform(const std::string &) const;
- const Uniform *find_uniform(const std::string &) const;
+ void uniform(Tag, const Uniform &);
+ void uniform(Tag, int);
+ void uniform(Tag, float);
+ void uniform(Tag, int, int);
+ void uniform(Tag, float, float);
+ void uniform2(Tag, const int *);
+ void uniform2(Tag, const float *);
+ void uniform(Tag, int, int, int);
+ void uniform(Tag, float, float, float);
+ void uniform(Tag, const Vector3 &);
+ void uniform3(Tag, const int *);
+ void uniform3(Tag, const float *);
+ void uniform(Tag, int, int, int, int);
+ void uniform(Tag, float, float, float, float);
+ void uniform(Tag, const Vector4 &);
+ void uniform(Tag, const Color &);
+ void uniform4(Tag, const int *);
+ void uniform4(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 2, 2> &);
+ void uniform_matrix2(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 2, 3> &);
+ void uniform_matrix3x2(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 2, 4> &);
+ void uniform_matrix4x2(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 3, 2> &);
+ void uniform_matrix2x3(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 3, 3> &);
+ void uniform_matrix3(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 3, 4> &);
+ void uniform_matrix4x3(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 4, 2> &);
+ void uniform_matrix2x4(Tag, const float *);
+ void uniform(Tag, const LinAl::Matrix<float, 4, 3> &);
+ void uniform_matrix3x4(Tag, const float *);
+ void uniform(Tag, const Matrix &);
+ void uniform_matrix4(Tag, const float *);
+ void uniform1_array(Tag, unsigned, const int *);
+ void uniform1_array(Tag, unsigned, const float *);
+ void uniform2_array(Tag, unsigned, const int *);
+ void uniform2_array(Tag, unsigned, const float *);
+ void uniform3_array(Tag, unsigned, const int *);
+ void uniform3_array(Tag, unsigned, const float *);
+ void uniform4_array(Tag, unsigned, const int *);
+ void uniform4_array(Tag, unsigned, const float *);
+ void uniform_matrix2_array(Tag, unsigned, const float *);
+ void uniform_matrix3x2_array(Tag, unsigned, const float *);
+ void uniform_matrix4x2_array(Tag, unsigned, const float *);
+ void uniform_matrix2x3_array(Tag, unsigned, const float *);
+ void uniform_matrix3_array(Tag, unsigned, const float *);
+ void uniform_matrix4x3_array(Tag, unsigned, const float *);
+ void uniform_matrix2x4_array(Tag, unsigned, const float *);
+ void uniform_matrix3x4_array(Tag, unsigned, const float *);
+ void uniform_matrix4_array(Tag, unsigned, const float *);
+ void remove_uniform(Tag);
+
+ std::vector<Tag> get_uniform_tags() const;
+ const Uniform &get_uniform(Tag) const;
+ const Uniform *find_uniform(Tag) const;
private:
- static bool uniform_name_compare(const NamedUniform &, const std::string &);
- int find_uniform_index(const std::string &) const;
+ int find_uniform_index(Tag) const;
void update_block_uniform_indices(SharedBlock &, const Program::UniformBlockInfo &) const;
void update_block(SharedBlock &, const Program::UniformBlockInfo &) const;
SharedBlock *get_shared_block(const Program::UniformBlockInfo &) const;