+class UniformBlock: public NonCopyable
+{
+protected:
+ UniformBlock() { }
+public:
+ virtual ~UniformBlock() { }
+
+ virtual void attach(const Program::UniformInfo &, const Uniform &) = 0;
+ virtual void apply(int) const = 0;
+};
+
+/** Stores uniforms for the default uniform block. Uniforms are associated
+with locations, as returned by Program::get_uniform_location. */
+class DefaultUniformBlock: public UniformBlock