Use glMapBufferRange instead of glMapBuffer

glMapBufferRange has the advantage that it is available in GLES.
And the extra fun factor that it uses different flags.
This commit is contained in:
Matthias Clasen
2024-03-12 19:20:16 -04:00
parent 94cb4be21b
commit b883504f8c

View File

@@ -9,6 +9,7 @@ struct _GskGLMapBuffer
GLenum target;
GLuint buffer_id;
GLenum access;
gsize size;
};
G_DEFINE_TYPE (GskGLMapBuffer, gsk_gl_map_buffer, GSK_TYPE_GPU_BUFFER)
@@ -27,10 +28,26 @@ static guchar *
gsk_gl_map_buffer_map (GskGpuBuffer *buffer)
{
GskGLMapBuffer *self = GSK_GL_MAP_BUFFER (buffer);
int flags;
gsk_gl_map_buffer_bind (self);
return glMapBuffer (self->target, self->access);
switch (self->access)
{
case GL_READ_ONLY:
flags = GL_MAP_READ_BIT;
break;
case GL_WRITE_ONLY:
flags = GL_MAP_WRITE_BIT;
break;
case GL_READ_WRITE:
flags = GL_MAP_READ_BIT | GL_MAP_WRITE_BIT;
break;
default:
g_assert_not_reached ();
}
return glMapBufferRange (self->target, 0, self->size, flags);
}
static void
@@ -73,6 +90,7 @@ gsk_gl_map_buffer_new (GLenum target,
self->target = target;
self->access = access;
self->size = size;
glGenBuffers (1, &self->buffer_id);
glBindBuffer (target, self->buffer_id);