virtual ~buffer_too_small() throw() { }
};
-enum BufferType
-{
- ARRAY_BUFFER = GL_ARRAY_BUFFER,
- ELEMENT_ARRAY_BUFFER = GL_ELEMENT_ARRAY_BUFFER,
- PIXEL_PACK_BUFFER = GL_PIXEL_PACK_BUFFER,
- PIXEL_UNPACK_BUFFER = GL_PIXEL_UNPACK_BUFFER,
- UNIFORM_BUFFER = GL_UNIFORM_BUFFER
-};
-
enum BufferUsage
{
STREAM_DRAW = GL_STREAM_DRAW,
unsigned size;
bool allocated;
- static const Buffer *bound[5];
-
public:
Buffer();
~Buffer();
-private:
- static void require_buffer_type(BufferType);
-
-public:
/** Returns the OpenGL ID of the buffer. For internal use only. */
unsigned get_id() const { return id; }
void require_size(unsigned) const;
- BufferRange *create_range(unsigned, unsigned);
-
void *map();
DEPRECATED void *map(BufferAccess) { return map(); }
bool unmap();
- /** Binds the buffer. */
- void bind_to(BufferType) const;
-
- static const Buffer *current(BufferType);
- static void unbind_from(BufferType);
-private:
- static const Buffer *&binding(BufferType);
- static bool set_current(BufferType, const Buffer *);
-
-public:
void set_debug_name(const std::string &);
};
-
-/**
-A proxy for a subset of a buffer. Can be bound for use with uniform blocks.
-*/
-class BufferRange
-{
-private:
- Buffer &buffer;
- unsigned offset;
- unsigned size;
-
- static std::vector<const BufferRange *> bound_uniform;
-
-public:
- BufferRange(Buffer &, unsigned, unsigned);
- ~BufferRange();
-
- void data(const void *);
-
- void bind_to(BufferType, unsigned);
-
- static const BufferRange *current(BufferType t, unsigned i) { return binding(t, i); }
- static void unbind_from(BufferType, unsigned);
-private:
- static const BufferRange *&binding(BufferType, unsigned);
- static bool set_current(BufferType, unsigned, const BufferRange *);
-
-public:
- DEPRECATED static unsigned get_n_uniform_buffer_bindings();
- DEPRECATED static unsigned get_uniform_buffer_alignment();
-};
-
} // namespace GL
} // namespace Msp