]> git.tdb.fi Git - libs/gl.git/blob - source/core/uniformblock.h
Eliminate the polymorphic Uniform class hierarchy
[libs/gl.git] / source / core / uniformblock.h
1 #ifndef MSP_GL_UNIFORMBLOCK_H_
2 #define MSP_GL_UNIFORMBLOCK_H_
3
4 #include <map>
5 #include <vector>
6 #include <msp/core/noncopyable.h>
7 #include "bufferable.h"
8 #include "reflectdata.h"
9 #include "vector.h"
10
11 namespace Msp {
12 namespace GL {
13
14 class BufferRange;
15 class Matrix;
16 class Uniform;
17 struct Color;
18
19 /**
20 Stores uniforms with a specific layout.  Both named and default uniform blocks
21 are supported.
22 */
23 class UniformBlock: public NonCopyable, public Bufferable
24 {
25 private:
26         std::vector<char> data;
27
28 public:
29         UniformBlock(const ReflectData::UniformBlockInfo &);
30
31         virtual unsigned get_data_size() const { return data.size(); }
32         virtual const void *get_data_pointer() const { return &data[0]; }
33 private:
34         virtual unsigned get_alignment() const;
35
36 public:
37         void store(const ReflectData::UniformInfo &, unsigned, const void *);
38 };
39
40 } // namespace GL
41 } // namespace Msp
42
43 #endif