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,
friend class BufferRange;
private:
- BufferType type;
unsigned id;
unsigned size;
-
- static const Buffer *bound[5];
+ bool allocated;
public:
- Buffer(BufferType);
+ 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; }
- /** 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);
+ /** 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);
void require_size(unsigned) const;
- BufferRange *create_range(unsigned, unsigned);
-
void *map();
DEPRECATED void *map(BufferAccess) { return map(); }
bool unmap();
- /** 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);
- static void unbind_from(BufferType);
-private:
- static const Buffer *&binding(BufferType);
- static bool set_current(BufferType, const Buffer *);
-};
-
-
-/**
-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:
- static unsigned get_n_uniform_buffer_bindings();
- static unsigned get_uniform_buffer_alignment();
+ void set_debug_name(const std::string &);
};
} // namespace GL