diff --git a/libobs-opengl/gl-indexbuffer.c b/libobs-opengl/gl-indexbuffer.c index f63c0bde2..2210fbc28 100644 --- a/libobs-opengl/gl-indexbuffer.c +++ b/libobs-opengl/gl-indexbuffer.c @@ -104,11 +104,5 @@ enum gs_index_type gs_indexbuffer_get_type(const gs_indexbuffer_t *ib) void device_load_indexbuffer(gs_device_t *device, gs_indexbuffer_t *ib) { - if (ib == device->cur_index_buffer) - return; - device->cur_index_buffer = ib; - - if (!gl_bind_buffer(GL_ELEMENT_ARRAY_BUFFER, ib->buffer)) - blog(LOG_ERROR, "device_load_indexbuffer (GL) failed"); } diff --git a/libobs-opengl/gl-subsystem.c b/libobs-opengl/gl-subsystem.c index d1612cad1..3ce12e2ed 100644 --- a/libobs-opengl/gl-subsystem.c +++ b/libobs-opengl/gl-subsystem.c @@ -979,7 +979,7 @@ void device_draw(gs_device_t *device, enum gs_draw_mode draw_mode, if (!program) goto fail; - load_vb_buffers(program, device->cur_vertex_buffer); + load_vb_buffers(program, device->cur_vertex_buffer, ib); if (program != device->cur_program && device->cur_program) { glUseProgram(0); diff --git a/libobs-opengl/gl-subsystem.h b/libobs-opengl/gl-subsystem.h index 263e9f7aa..8f360b97c 100644 --- a/libobs-opengl/gl-subsystem.h +++ b/libobs-opengl/gl-subsystem.h @@ -377,7 +377,7 @@ struct gs_vertex_buffer { }; extern bool load_vb_buffers(struct gs_program *program, - struct gs_vertex_buffer *vb); + struct gs_vertex_buffer *vb, struct gs_index_buffer *ib); struct gs_index_buffer { GLuint buffer; diff --git a/libobs-opengl/gl-vertexbuffer.c b/libobs-opengl/gl-vertexbuffer.c index 6744d204c..62f2476a9 100644 --- a/libobs-opengl/gl-vertexbuffer.c +++ b/libobs-opengl/gl-vertexbuffer.c @@ -234,7 +234,8 @@ static bool load_vb_buffer(struct shader_attrib *attrib, return success; } -bool load_vb_buffers(struct gs_program *program, struct gs_vertex_buffer *vb) +bool load_vb_buffers(struct gs_program *program, struct gs_vertex_buffer *vb, + struct gs_index_buffer *ib) { struct gs_shader *shader = program->vertex_shader; size_t i; @@ -248,6 +249,9 @@ bool load_vb_buffers(struct gs_program *program, struct gs_vertex_buffer *vb) return false; } + if (ib && !gl_bind_buffer(GL_ELEMENT_ARRAY_BUFFER, ib->buffer)) + return false; + return true; }