]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/uniformblock.h
Rearrange soucre files into subdirectories
[libs/gl.git] / source / core / uniformblock.h
diff --git a/source/core/uniformblock.h b/source/core/uniformblock.h
new file mode 100644 (file)
index 0000000..c8b8d36
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef MSP_GL_UNIFORMBLOCK_H_
+#define MSP_GL_UNIFORMBLOCK_H_
+
+#include <map>
+#include <vector>
+#include "bufferable.h"
+#include "program.h"
+#include "vector.h"
+
+namespace Msp {
+namespace GL {
+
+class BufferRange;
+class Matrix;
+class Uniform;
+struct Color;
+
+/**
+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(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 location_changed(Buffer *, unsigned, unsigned) const;
+
+public:
+       void attach(int, const Uniform &);
+       void attach(const Program::UniformInfo &, const Uniform &);
+
+       void apply(int) const;
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif