X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Funiformblock.h;h=5e88f0f80de81919ebcc510defaccc6f778e7b47;hb=be6ffe96ecb4707599fe1a6f620c348760213d46;hp=bc0b933b01666f3a8e4df77fb1e179f1a8123652;hpb=3af09f06e9f69532e5adfe6bcd9a7b2d1aea6d5b;p=libs%2Fgl.git diff --git a/source/core/uniformblock.h b/source/core/uniformblock.h index bc0b933b..5e88f0f8 100644 --- a/source/core/uniformblock.h +++ b/source/core/uniformblock.h @@ -1,73 +1,34 @@ #ifndef MSP_GL_UNIFORMBLOCK_H_ #define MSP_GL_UNIFORMBLOCK_H_ -#include #include +#include #include "bufferable.h" -#include "program.h" -#include "vector.h" +#include "reflectdata.h" +#include "uniformblock_backend.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 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 +class UniformBlock: public UniformBlockBackend, public NonCopyable, public Bufferable { private: - std::vector 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 -{ -private: - unsigned size; std::vector data; - mutable BufferRange *buf_range; public: - BufferBackedUniformBlock(unsigned); - virtual ~BufferBackedUniformBlock(); + UniformBlock(const ReflectData::UniformBlockInfo &); -private: - virtual unsigned get_data_size() const { return size; } + virtual std::size_t get_data_size() const { return data.size(); } virtual const void *get_data_pointer() const { return &data[0]; } - virtual unsigned get_alignment() const; - virtual void location_changed(Buffer *, unsigned, unsigned) const; +private: + virtual std::size_t get_alignment() const; public: - void attach(const Program::UniformInfo &, const Uniform &); - virtual void apply(int) const; + void store(const ReflectData::UniformInfo &, std::size_t, const void *); }; } // namespace GL