From cbd8dfb8f4168a284ec89fbc4e1ffe5c5c22b762 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 1 Oct 2020 13:17:53 +0200 Subject: [PATCH] rhi: gl: Skip rebinding the same index buffer in the same pass Already doing the same for GL_ARRAY_BUFFER, follow suit with GL_ELEMENT_ARRAY_BUFFER. Change-Id: I0cf44480abb3a60a44b316af2c09b2235f9f65e7 Reviewed-by: Andy Nichols --- src/gui/rhi/qrhigles2.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp index 02990e8c92..b57558889a 100644 --- a/src/gui/rhi/qrhigles2.cpp +++ b/src/gui/rhi/qrhigles2.cpp @@ -2154,6 +2154,7 @@ void QRhiGles2::executeCommandBuffer(QRhiCommandBuffer *cb) quint32 indexStride = sizeof(quint16); quint32 indexOffset = 0; GLuint currentArrayBuffer = 0; + GLuint currentElementArrayBuffer = 0; static const int TRACKED_ATTRIB_COUNT = 16; bool enabledAttribArrays[TRACKED_ATTRIB_COUNT]; memset(enabledAttribArrays, 0, sizeof(enabledAttribArrays)); @@ -2321,7 +2322,10 @@ void QRhiGles2::executeCommandBuffer(QRhiCommandBuffer *cb) indexType = cmd.args.bindIndexBuffer.type; indexStride = indexType == GL_UNSIGNED_SHORT ? sizeof(quint16) : sizeof(quint32); indexOffset = cmd.args.bindIndexBuffer.offset; - f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cmd.args.bindIndexBuffer.buffer); + if (currentElementArrayBuffer != cmd.args.bindIndexBuffer.buffer) { + currentElementArrayBuffer = cmd.args.bindIndexBuffer.buffer; + f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, currentElementArrayBuffer); + } break; case QGles2CommandBuffer::Command::Draw: {