- // TODO check if it's mapped
- if(ARB_direct_state_access)
- return glUnmapNamedBuffer(id);
- else if(OES_mapbuffer)
- {
- bind_scratch();
- bool result = glUnmapBuffer(GL_ARRAY_BUFFER);
- return result;
- }
- else
- return true;
-}
-
-void Buffer::set_debug_name(const string &name)
-{
-#ifdef DEBUG
- if(KHR_debug)
- glObjectLabel(GL_BUFFER, id, name.size(), name.c_str());
-#else
- (void)name;
-#endif
-}
-
-void Buffer::bind_scratch()
-{
- if(scratch_binding!=this)
- {
- glBindBuffer(GL_ARRAY_BUFFER, id);
- scratch_binding = this;
- }
-}
-
-void Buffer::unbind_scratch()
-{
- if(scratch_binding)
- {
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- scratch_binding = 0;
- }
+ if(!can_map() || !mapped)
+ throw invalid_operation("Buffer::map");
+ bool result = BufferBackend::unmap();
+ mapped = false;
+ return result;