--- /dev/null
+#ifndef MSP_GL_BUFFER_BACKEND_H_
+#define MSP_GL_BUFFER_BACKEND_H_
+
+#include <msp/core/noncopyable.h>
+
+namespace Msp {
+namespace GL {
+
+class OpenGLBuffer: public NonCopyable
+{
+ friend class OpenGLPipelineState;
+ friend class OpenGLTexture2D;
+ friend class OpenGLVertexSetup;
+
+protected:
+ unsigned id;
+
+ static OpenGLBuffer *scratch_binding;
+
+ OpenGLBuffer();
+ ~OpenGLBuffer();
+
+ void allocate();
+ void sub_data(unsigned, unsigned, const void *);
+
+ void *map();
+ bool unmap();
+
+ void set_debug_name(const std::string &);
+
+ void bind_scratch();
+ static void unbind_scratch();
+};
+
+using BufferBackend = OpenGLBuffer;
+
+} // namespace GL
+} // namespace Msp
+
+#endif