X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogramdata.h;h=e96a73acc651ba8ec9a1ab2b3af1cf77f337c4bc;hb=5bc9c7214feaf4ea4797fc0d4a906e5e59b75839;hp=605b41b1359c0da3146b05d2b78e9cf7dfb96e9f;hpb=d971f8d4848c0b3b453c626a2dafe19445e3e5a8;p=libs%2Fgl.git diff --git a/source/programdata.h b/source/programdata.h index 605b41b1..e96a73ac 100644 --- a/source/programdata.h +++ b/source/programdata.h @@ -2,6 +2,7 @@ #define MSP_GL_PROGRAMDATA_H_ #include +#include #include #include "datatype.h" #include "matrix.h" @@ -11,6 +12,13 @@ namespace Msp { namespace GL { +class too_many_uniforms: public std::runtime_error +{ +public: + too_many_uniforms(const std::string &w): std::runtime_error(w) { } + virtual ~too_many_uniforms() throw() { } +}; + class Buffer; class Uniform; class UniformBlock; @@ -155,11 +163,18 @@ private: public: ProgramData(const Program * = 0); ProgramData(const ProgramData &); + ProgramData(const ProgramData &, const Program *); ProgramData &operator=(const ProgramData &); ~ProgramData(); private: void uniform(const std::string &, Uniform *); + template + void uniform(const std::string &, V); + template + void uniform_array(const std::string &, unsigned, V); + bool validate_name(const std::string &) const; + void add_uniform(const std::string &, Uniform *); public: void uniform(const std::string &, const Uniform &); void uniform(const std::string &, int); @@ -218,6 +233,7 @@ public: std::vector get_uniform_names() const; const Uniform &get_uniform(const std::string &) const; + const Uniform *find_uniform(const std::string &) const; private: static bool uniform_name_compare(const NamedUniform &, const std::string &);