#define MSP_GL_UNIFORMBLOCK_H_
#include <map>
+#include <vector>
+#include "bufferable.h"
+#include "program.h"
+#include "vector.h"
namespace Msp {
namespace GL {
-class Color;
+class BufferRange;
class Matrix;
class Uniform;
-class Vector3;
-class Vector4;
+struct Color;
-class UniformBlock
+/**
+Stores uniforms with a specific layout. Both named and default uniform blocks
+are supported.
+*/
+class UniformBlock: public Bufferable
{
private:
std::map<int, const Uniform *> uniforms;
+ unsigned size;
+ std::vector<char> data;
+ mutable BufferRange *buf_range;
UniformBlock(const UniformBlock &);
UniformBlock &operator=(const UniformBlock &);
public:
- UniformBlock() { }
+ UniformBlock();
+ UniformBlock(unsigned);
+ ~UniformBlock();
+private:
+ virtual unsigned get_data_size() const { return size; }
+ virtual const void *get_data_pointer() const { return &data[0]; }
+ virtual unsigned get_alignment() const;
+ virtual void offset_changed();
+ virtual void upload_data(char *) const;
+
+public:
void attach(int, const Uniform &);
+ void attach(const Program::UniformInfo &, const Uniform &);
void apply(int) const;
};