#ifndef MSP_GL_BUFFER_H_
#define MSP_GL_BUFFER_H_
+#include <stdexcept>
+#include <string>
#include <vector>
+#include <msp/core/attributes.h>
#include "gl.h"
+#include <msp/gl/extensions/arb_pixel_buffer_object.h>
#include <msp/gl/extensions/arb_vertex_buffer_object.h>
#include <msp/gl/extensions/arb_uniform_buffer_object.h>
+#include <msp/gl/extensions/oes_mapbuffer.h>
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,
private:
BufferType type;
- BufferUsage usage;
unsigned id;
unsigned size;
/** 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. */