X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Funiformblock.h;h=bc0b933b01666f3a8e4df77fb1e179f1a8123652;hb=3af09f06e9f69532e5adfe6bcd9a7b2d1aea6d5b;hp=c8b8d36a3d8e2deceaf8881d5dbb83ec0ae1f825;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/core/uniformblock.h b/source/core/uniformblock.h index c8b8d36a..bc0b933b 100644 --- a/source/core/uniformblock.h +++ b/source/core/uniformblock.h @@ -19,20 +19,45 @@ struct Color; Stores uniforms with a specific layout. Both named and default uniform blocks are supported. */ -class UniformBlock: public Bufferable +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 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: - std::map uniforms; unsigned size; std::vector data; mutable BufferRange *buf_range; - UniformBlock(const UniformBlock &); - UniformBlock &operator=(const UniformBlock &); public: - UniformBlock(); - UniformBlock(unsigned); - ~UniformBlock(); + BufferBackedUniformBlock(unsigned); + virtual ~BufferBackedUniformBlock(); private: virtual unsigned get_data_size() const { return size; } @@ -41,10 +66,8 @@ private: 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; + virtual void apply(int) const; }; } // namespace GL