+++ /dev/null
-#ifndef MSP_GL_BUFFER_H_
-#define MSP_GL_BUFFER_H_
-
-#include "gl.h"
-
-namespace Msp {
-namespace GL {
-
-enum BufferType
-{
- ARRAY_BUFFER = GL_ARRAY_BUFFER_ARB,
- ELEMENT_ARRAY_BUFFER = GL_ELEMENT_ARRAY_BUFFER_ARB,
- PIXEL_PACK_BUFFER = GL_PIXEL_PACK_BUFFER_ARB,
- PIXEL_UNPACK_BUFFER = GL_PIXEL_UNPACK_BUFFER_ARB
-};
-
-enum BufferUsage
-{
- STREAM_DRAW = GL_STREAM_DRAW_ARB,
- STREAM_READ = GL_STREAM_READ_ARB,
- STREAM_COPY = GL_STREAM_COPY_ARB,
- STATIC_DRAW = GL_STATIC_DRAW_ARB,
- STATIC_READ = GL_STATIC_READ_ARB,
- STATIC_COPY = GL_STATIC_COPY_ARB,
- DYNAMIC_DRAW = GL_DYNAMIC_DRAW_ARB,
- DYNAMIC_READ = GL_DYNAMIC_READ_ARB,
- DYNAMIC_COPY = GL_DYNAMIC_COPY_ARB
-};
-
-/**
-A buffer for storing data in GL memory. Putting vertex and index data in
-buffers can improve rendering performance. The VertexArray and Mesh classes
-contain built-in support for buffers.
-*/
-class Buffer
-{
-private:
- BufferType type;
- BufferUsage usage;
- unsigned id;
- unsigned size;
-
- static const Buffer *bound[4];
-
-public:
- Buffer(BufferType);
- ~Buffer();
-
-private:
- static void require_buffer_type(BufferType);
-
-public:
- /** Sets the usage hint of the buffer. It will take effect the next time
- the buffer's contents are defined. */
- void set_usage(BufferUsage);
-
- /** Uploads data into the buffer, completely replacing any previous
- contents. */
- void data(unsigned, const void *);
-
- /** Overwrites part of the buffer data with new data. The buffer size can
- not be changed with this call. */
- void sub_data(unsigned, unsigned, const void *);
-
- unsigned get_size() const { return size; }
-
- /** Binds the buffer in its default slot. */
- void bind() const { bind_to(type); }
-
- /** Binds the buffer in an alternate slot. */
- void bind_to(BufferType) const;
-
- /** Unbinds the buffer from its default slot. */
- void unbind() const { unbind_from(type); }
-
- static const Buffer *current(BufferType t) { return binding(t); }
- static void unbind_from(BufferType);
-private:
- static const Buffer *&binding(BufferType);
- static bool set_current(BufferType, const Buffer *);
- static void restore(const Buffer *, BufferType);
-};
-
-/**
-An adaptor for Buffer to make it compatible with Bind.
-*/
-template<BufferType T>
-class BufferAlias
-{
-private:
- const Buffer &buffer;
-
-public:
- BufferAlias(const Buffer &b): buffer(b) { }
-
- void bind() const { buffer.bind_to(T); }
- static const Buffer *current() { return Buffer::current(T); }
- static void unbind() { Buffer::unbind_from(T); }
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif