#include <stdexcept>
#include <string>
-#include <vector>
-#include "gl.h"
+#include "buffer_backend.h"
namespace Msp {
namespace GL {
buffers can improve rendering performance. The VertexArray, Mesh and
UniformBlock classes contain built-in support for buffers.
*/
-class Buffer
+class Buffer: public BufferBackend
{
-private:
- unsigned id;
- unsigned size;
- bool allocated;
+ friend BufferBackend;
- static Buffer *scratch_binding;
+private:
+ unsigned 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);
- /** Allocates storage for the buffer. The contents are initially undefined.
- If storage has already been allocated, does nothing. */
- void allocate();
-
/** Uploads data into the buffer, completely replacing any previous
contents. Storage must be defined beforehand. The data must have size
matching the defined storage. */
void require_size(unsigned) const;
- void *map();
- bool unmap();
-
- void set_debug_name(const std::string &);
+ using BufferBackend::map;
+ using BufferBackend::unmap;
-private:
- void bind_scratch();
-public:
- static void unbind_scratch();
+ using BufferBackend::set_debug_name;
};
} // namespace GL