X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbuffer.h;h=cc5e58741c141f1fd5910e1abda23ec68a650a39;hp=e43536e238da3f50b66fc875f499aeb4d0b90286;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=92351f63c5061d2b0b96201390649662c2833388 diff --git a/source/buffer.h b/source/buffer.h index e43536e2..cc5e5874 100644 --- a/source/buffer.h +++ b/source/buffer.h @@ -1,14 +1,26 @@ #ifndef MSP_GL_BUFFER_H_ #define MSP_GL_BUFFER_H_ +#include +#include #include +#include #include "gl.h" +#include #include #include +#include namespace Msp { namespace GL { +class buffer_too_small: public std::logic_error +{ +public: + buffer_too_small(const std::string &w): std::logic_error(w) { } + virtual ~buffer_too_small() throw() { } +}; + enum BufferType { ARRAY_BUFFER = GL_ARRAY_BUFFER, @@ -51,7 +63,6 @@ class Buffer private: BufferType type; - BufferUsage usage; unsigned id; unsigned size; @@ -71,23 +82,33 @@ public: /** Returns the default binding type for the buffer. */ BufferType get_type() const { return type; } + /** Defines the storage size of the buffer. Must be called before data can + be uploaded. Storage cannot be changed once set. */ + void storage(unsigned); + /** Sets the usage hint of the buffer. It will take effect the next time the buffer's contents are defined. */ - void set_usage(BufferUsage); + DEPRECATED void set_usage(BufferUsage); /** Uploads data into the buffer, completely replacing any previous - contents. */ - void data(unsigned, const void *); + contents. Storage must be defined beforehand. The data must have size + matching the defined storage. */ + void data(const void *); - /** Overwrites part of the buffer data with new data. The buffer size can - not be changed with this call. */ + DEPRECATED void data(unsigned, const void *); + + /** Overwrites part of the buffer data with new data. Storage must be + defined beforehand. */ void sub_data(unsigned, unsigned, const void *); unsigned get_size() const { return size; } + void require_size(unsigned) const; + BufferRange *create_range(unsigned, unsigned); - void *map(BufferAccess); + void *map(); + DEPRECATED void *map(BufferAccess) { return map(); } bool unmap(); /** Binds the buffer in its default slot. */ @@ -121,6 +142,7 @@ private: public: BufferRange(Buffer &, unsigned, unsigned); + ~BufferRange(); void data(const void *);