X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fbuffer.h;h=b642738e0e96ef370a5e748701be071998e2de54;hb=df9119a9bf2d348a513c515ed92953353da97b54;hp=a80e52a68b9c34b00e499c6a16fb0b9e85446d39;hpb=9b3bce7ae76ff8c0c81315d2505ea96bf422a318;p=libs%2Fgl.git diff --git a/source/core/buffer.h b/source/core/buffer.h index a80e52a6..b642738e 100644 --- a/source/core/buffer.h +++ b/source/core/buffer.h @@ -3,13 +3,7 @@ #include #include -#include -#include -#include "gl.h" -#include -#include -#include -#include +#include "buffer_backend.h" namespace Msp { namespace GL { @@ -21,81 +15,44 @@ public: virtual ~buffer_too_small() throw() { } }; -enum BufferUsage -{ - STREAM_DRAW = GL_STREAM_DRAW, - STREAM_READ = GL_STREAM_READ, - STREAM_COPY = GL_STREAM_COPY, - STATIC_DRAW = GL_STATIC_DRAW, - STATIC_READ = GL_STATIC_READ, - STATIC_COPY = GL_STATIC_COPY, - DYNAMIC_DRAW = GL_DYNAMIC_DRAW, - DYNAMIC_READ = GL_DYNAMIC_READ, - DYNAMIC_COPY = GL_DYNAMIC_COPY -}; - -enum BufferAccess -{ - READ_ONLY = GL_READ_ONLY, - WRITE_ONLY = GL_WRITE_ONLY, - READ_WRITE = GL_READ_WRITE -}; +/** +Stores data in GPU memory. -class BufferRange; +Memory must be allocated for the buffer by calling storage(). Contents can +then be modified either synchronously with the data() and sub_data() functions, +or asynchronously by memory-mapping the buffer. -/** -A buffer for storing data in GL memory. Putting vertex and index data in -buffers can improve rendering performance. The VertexArray, Mesh and -UniformBlock classes contain built-in support for buffers. +Applications normally don't need to deal with Buffers directly. They're +managed by other classes such as Mesh and ProgramData. */ -class Buffer +class Buffer: public BufferBackend { - friend class BufferRange; + friend BufferBackend; private: - unsigned id; - unsigned size; - bool allocated; + std::size_t size = 0; public: - Buffer(); - ~Buffer(); - - /** Returns the OpenGL ID of the buffer. For internal use only. */ - unsigned get_id() const { return id; } - - /** 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 storage size and allocates memory for the buffer. Size cannot + be changed once set. */ + void storage(std::size_t); - /** Allocates storage for the buffer. The contents are initially undefined. - If storage has already been allocated, does nothing. */ - void allocate(); - - /** Sets the usage hint of the buffer. It will take effect the next time - the buffer's contents are defined. */ - DEPRECATED void set_usage(BufferUsage); - - /** Uploads data into the buffer, completely replacing any previous - contents. Storage must be defined beforehand. The data must have size - matching the defined storage. */ + /** Replaces contents of the entire buffer. Allocated storage must exist. + The data must have size matching the defined storage. */ void data(const void *); - 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 *); + /** Replaces a range of bytes in the buffer. Allocated storage must exist. + The range must be fully inside the buffer. */ + void sub_data(std::size_t, std::size_t, const void *); - unsigned get_size() const { return size; } + std::size_t get_size() const { return size; } - void require_size(unsigned) const; + void require_size(std::size_t) const; - void *map(); - DEPRECATED void *map(BufferAccess) { return map(); } - bool unmap(); + using BufferBackend::map; + using BufferBackend::unmap; - void set_debug_name(const std::string &); + using BufferBackend::set_debug_name; }; } // namespace GL