]> git.tdb.fi Git - libs/gl.git/blobdiff - source/uniformblock.h
Remove an XXX because I no longer remember how to reproduce the issue
[libs/gl.git] / source / uniformblock.h
index 815f49b1db20cc045bcd7adba81388c621e73c73..02e9086ef4ed75bdf118ca2fe41fd21ac4f74637 100644 (file)
@@ -2,44 +2,48 @@
 #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, Uniform *> uniforms;
+       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:
-       void uniform(int, Uniform *);
+       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 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 attach(int, const Uniform &);
+       void attach(const Program::UniformInfo &, const Uniform &);
 
        void apply(int) const;
 };