#include <stdexcept>
#include <msp/gl/extensions/arb_direct_state_access.h>
#include <msp/gl/extensions/arb_map_buffer_range.h>
+#include <msp/strings/format.h>
#include "buffer.h"
#include "error.h"
#include "misc.h"
}
}
+void Buffer::require_size(unsigned req_sz) const
+{
+ if(size<req_sz)
+ throw buffer_too_small(format("buffer has %d bytes; %d required", size, req_sz));
+}
+
BufferRange *Buffer::create_range(unsigned s, unsigned o)
{
return new BufferRange(*this, s, o);
}
-void *Buffer::map(BufferAccess access)
+void *Buffer::map()
{
if(ARB_map_buffer_range)
{
- GLenum access_bits = 0;
- if(access==READ_ONLY)
- access_bits = GL_MAP_READ_BIT;
- else if(access==WRITE_ONLY)
- access_bits = GL_MAP_WRITE_BIT;
- else if(access==READ_WRITE)
- access_bits = GL_MAP_READ_BIT|GL_MAP_WRITE_BIT;
if(ARB_direct_state_access)
- return glMapNamedBufferRange(id, 0, size, access_bits);
+ return glMapNamedBufferRange(id, 0, size, GL_MAP_READ_BIT|GL_MAP_WRITE_BIT);
else
{
BindRestore _bind(this, type);
- return glMapBufferRange(type, 0, size, access_bits);
+ return glMapBufferRange(type, 0, size, GL_MAP_READ_BIT|GL_MAP_WRITE_BIT);
}
}
else if(ARB_direct_state_access)
- return glMapNamedBuffer(id, access);
+ return glMapNamedBuffer(id, GL_READ_WRITE);
else if(OES_mapbuffer)
{
BindRestore _bind(this, type);
- return glMapBuffer(type, access);
+ return glMapBuffer(type, GL_READ_WRITE);
}
else
throw invalid_operation("Buffer::map");