#include <map>
#include <vector>
+#include <msp/core/noncopyable.h>
#include "bufferable.h"
-#include "program.h"
+#include "reflectdata.h"
#include "vector.h"
namespace Msp {
Stores uniforms with a specific layout. Both named and default uniform blocks
are supported.
*/
-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
-{
-private:
- std::vector<const Uniform *> uniforms;
-
-public:
- DefaultUniformBlock();
-
- virtual void attach(const Program::UniformInfo &, const Uniform &);
- void attach(int, const Uniform &);
- virtual void apply(int) const;
-};
-
-/** Stores uniforms for a buffer-backed uniform block. Uniform values are
-stored in a memory block which can be uploaded into a buffer and bound for use
-by a Program. */
-class BufferBackedUniformBlock: public UniformBlock, public Bufferable
+class UniformBlock: public NonCopyable, public Bufferable
{
private:
- unsigned size;
std::vector<char> data;
- mutable BufferRange *buf_range;
public:
- BufferBackedUniformBlock(unsigned);
- virtual ~BufferBackedUniformBlock();
+ UniformBlock(const ReflectData::UniformBlockInfo &);
-private:
- virtual unsigned get_data_size() const { return size; }
+ virtual unsigned get_data_size() const { return data.size(); }
virtual const void *get_data_pointer() const { return &data[0]; }
+private:
virtual unsigned get_alignment() const;
- virtual void location_changed(Buffer *, unsigned, unsigned) const;
public:
- void attach(const Program::UniformInfo &, const Uniform &);
- virtual void apply(int) const;
+ void store(const ReflectData::UniformInfo &, unsigned, const void *);
};
} // namespace GL