+private:
+ void uniform(const std::string &, 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;
+
+private:
+ static bool uniform_name_compare(const NamedUniform &, const std::string &);
+ int find_uniform_index(const std::string &) 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;
+
+public:
+ /** Applies uniform blocks for the currently bound program, creating them
+ if needed. */