--- /dev/null
+#ifndef MSP_GL_UNIFORMBLOCK_H_
+#define MSP_GL_UNIFORMBLOCK_H_
+
+#include <map>
+
+namespace Msp {
+namespace GL {
+
+class Color;
+class Matrix;
+class Uniform;
+class Vector3;
+class Vector4;
+
+class UniformBlock
+{
+private:
+ std::map<int, Uniform *> uniforms;
+
+ UniformBlock(const UniformBlock &);
+ UniformBlock &operator=(const UniformBlock &);
+public:
+ UniformBlock() { }
+ ~UniformBlock();
+
+private:
+ void uniform(int, Uniform *);
+public:
+ void uniform(int, const Uniform &);
+ void uniform(int, int);
+ void uniform(int, float);
+ void uniform(int, float, float);
+ void uniform2(int, const float *);
+ void uniform(int, float, float, float);
+ void uniform(int, const Vector3 &);
+ void uniform3(int, const float *);
+ void uniform(int, float, float, float, float);
+ void uniform(int, const Vector4 &);
+ void uniform(int, const Color &);
+ void uniform4(int, const float *);
+ void uniform_matrix4(int, const float *);
+ void uniform_matrix4(int, const Matrix &);
+
+ void apply(int) const;
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif