+ 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;