From 14e3617736c63bd22b0785ad418acef825db221f Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 28 Oct 2021 17:10:41 +0200 Subject: Use a separate glx context for every window Fix vertex buffer causing crash on render if update is called with an empty list. --- src/graphics/vertex_buffer.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/graphics/vertex_buffer.c') diff --git a/src/graphics/vertex_buffer.c b/src/graphics/vertex_buffer.c index 1f122c3..aa4fdbb 100644 --- a/src/graphics/vertex_buffer.c +++ b/src/graphics/vertex_buffer.c @@ -56,6 +56,7 @@ static int mgl_vertex_buffer_resize(mgl_vertex_buffer *self, const mgl_vertex *v self->usage = usage; context->gl.glBindBuffer(GL_ARRAY_BUFFER, self->id); + /* TODO: Optimize by calling with NULL data first? or do that in |mgl_vertex_buffer_update| */ context->gl.glBufferData(GL_ARRAY_BUFFER, sizeof(mgl_vertex) * vertex_count, vertices, mgl_vertex_buffer_usage_to_gl_usage(self->usage)); mgl_vertex_buffer_set_gl_buffer_pointers(context); context->gl.glBindBuffer(GL_ARRAY_BUFFER, 0); @@ -69,10 +70,22 @@ void mgl_vertex_buffer_set_position(mgl_vertex_buffer *self, mgl_vec2f position) /* TODO: Check for glBufferSubData error */ int mgl_vertex_buffer_update(mgl_vertex_buffer *self, const mgl_vertex *vertices, size_t vertex_count, mgl_primitive_type primitive_type, mgl_vertex_buffer_usage usage) { + mgl_context *context = mgl_get_context(); + + if(vertex_count == 0) { + if(self->id) { + context->gl.glDeleteBuffers(1, &self->id); + self->id = 0; + } + self->vertex_count = vertex_count; + self->primitive_type = primitive_type; + self->usage = usage; + return 0; + } + if(vertex_count != self->vertex_count || primitive_type != self->primitive_type || usage != self->usage) return mgl_vertex_buffer_resize(self, vertices, vertex_count, primitive_type, usage); - mgl_context *context = mgl_get_context(); context->gl.glBindBuffer(GL_ARRAY_BUFFER, self->id); context->gl.glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(mgl_vertex) * vertex_count, vertices); mgl_vertex_buffer_set_gl_buffer_pointers(context); -- cgit v1.2.3