X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fprogramdata.h;h=97f293430c1c718e06f594d84ddf0d2de1a84263;hb=3f5e469de3454aee1d1923045fc713329a32cc18;hp=e96a73acc651ba8ec9a1ab2b3af1cf77f337c4bc;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/render/programdata.h b/source/render/programdata.h index e96a73ac..97f29343 100644 --- a/source/render/programdata.h +++ b/source/render/programdata.h @@ -7,6 +7,7 @@ #include "datatype.h" #include "matrix.h" #include "program.h" +#include "tag.h" #include "vector.h" namespace Msp { @@ -97,14 +98,13 @@ private: ALL_ONES = static_cast(-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 *); }; @@ -153,12 +153,12 @@ private: // XXX All these mutables are a bit silly, but I'm out of better ideas const Program *tied_program; - std::vector uniforms; + std::vector uniforms; mutable BlockMap blocks; mutable ProgramMap programs; mutable UniformBlock *last_block; mutable Buffer *buffer; - mutable unsigned dirty; + mutable Mask dirty; public: ProgramData(const Program * = 0); @@ -168,76 +168,75 @@ public: ~ProgramData(); private: - void uniform(const std::string &, Uniform *); + void uniform(Tag, Uniform *); template - void uniform(const std::string &, V); + void uniform(Tag, V); template - 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 &); - void uniform_matrix2(const std::string &, const float *); - void uniform(const std::string &, const LinAl::Matrix &); - void uniform_matrix3x2(const std::string &, const float *); - void uniform(const std::string &, const LinAl::Matrix &); - void uniform_matrix4x2(const std::string &, const float *); - void uniform(const std::string &, const LinAl::Matrix &); - void uniform_matrix2x3(const std::string &, const float *); - void uniform(const std::string &, const LinAl::Matrix &); - void uniform_matrix3(const std::string &, const float *); - void uniform(const std::string &, const LinAl::Matrix &); - void uniform_matrix4x3(const std::string &, const float *); - void uniform(const std::string &, const LinAl::Matrix &); - void uniform_matrix2x4(const std::string &, const float *); - void uniform(const std::string &, const LinAl::Matrix &); - 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 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 &); + void uniform_matrix2(Tag, const float *); + void uniform(Tag, const LinAl::Matrix &); + void uniform_matrix3x2(Tag, const float *); + void uniform(Tag, const LinAl::Matrix &); + void uniform_matrix4x2(Tag, const float *); + void uniform(Tag, const LinAl::Matrix &); + void uniform_matrix2x3(Tag, const float *); + void uniform(Tag, const LinAl::Matrix &); + void uniform_matrix3(Tag, const float *); + void uniform(Tag, const LinAl::Matrix &); + void uniform_matrix4x3(Tag, const float *); + void uniform(Tag, const LinAl::Matrix &); + void uniform_matrix2x4(Tag, const float *); + void uniform(Tag, const LinAl::Matrix &); + 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 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;