X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuffer.cpp;h=080c3fb380dc6dbf605e3a843b5ffb1e9a2851ba;hb=9ea7e740503b09298ae814b1bf521312d1744db2;hp=066ab96c5919b2c154879224323f704662ce2e14;hpb=d42fdf115dfd6f3e5e2f83f2c2f905fb02fc1af4;p=libs%2Fgl.git diff --git a/source/buffer.cpp b/source/buffer.cpp index 066ab96c..080c3fb3 100644 --- a/source/buffer.cpp +++ b/source/buffer.cpp @@ -1,7 +1,5 @@ #include -#include -#include -#include +#include #include "buffer.h" #include "error.h" #include "mesh.h" @@ -67,8 +65,23 @@ BufferRange *Buffer::create_range(unsigned s, unsigned o) void *Buffer::map(BufferAccess access) { - BindRestore _bind(this, type); - return glMapBuffer(type, access); + if(ARB_map_buffer_range) + { + BindRestore _bind(this, type); + 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; + return glMapBufferRange(type, 0, size, access_bits); + } + else + { + BindRestore _bind(this, type); + return glMapBuffer(type, access); + } } bool Buffer::unmap()