X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuffer.h;h=fc9ace78c0ac0f48194a20fdcb1a8e4012be01e1;hb=5f78db03b3285c977760a41da1e3927720e50352;hp=a7d4c2ba4314f8cbbc9db9fb6c2422cf0e85da2c;hpb=8b99547d099c96bd8cc6037e2026db123b2523c1;p=libs%2Fgl.git diff --git a/source/buffer.h b/source/buffer.h index a7d4c2ba..fc9ace78 100644 --- a/source/buffer.h +++ b/source/buffer.h @@ -1,14 +1,25 @@ #ifndef MSP_GL_BUFFER_H_ #define MSP_GL_BUFFER_H_ +#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, @@ -31,6 +42,13 @@ enum BufferUsage DYNAMIC_COPY = GL_DYNAMIC_COPY }; +enum BufferAccess +{ + READ_ONLY = GL_READ_ONLY, + WRITE_ONLY = GL_WRITE_ONLY, + READ_WRITE = GL_READ_WRITE +}; + class BufferRange; /** @@ -78,8 +96,13 @@ public: unsigned get_size() const { return size; } + void require_size(unsigned) const; + BufferRange *create_range(unsigned, unsigned); + void *map(BufferAccess); + bool unmap(); + /** Binds the buffer in its default slot. */ void bind() const { bind_to(type); } @@ -111,6 +134,7 @@ private: public: BufferRange(Buffer &, unsigned, unsigned); + ~BufferRange(); void data(const void *);