From: Mikko Rasa Date: Mon, 20 Oct 2014 08:56:10 +0000 (+0300) Subject: Prefer glMapBufferRange over glMapBuffer X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=00ffc97eda26687f98f04226c2da728e2ca1220e;p=libs%2Fgl.git Prefer glMapBufferRange over glMapBuffer OpenGL ES does not have glMapBuffer. --- diff --git a/extensions/arb_map_buffer_range.glext b/extensions/arb_map_buffer_range.glext new file mode 100644 index 00000000..643bb9ea --- /dev/null +++ b/extensions/arb_map_buffer_range.glext @@ -0,0 +1 @@ +extension ARB_map_buffer_range diff --git a/source/buffer.cpp b/source/buffer.cpp index 1226dbe3..080c3fb3 100644 --- a/source/buffer.cpp +++ b/source/buffer.cpp @@ -1,4 +1,5 @@ #include +#include #include "buffer.h" #include "error.h" #include "mesh.h" @@ -64,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()