From 4fdadd2348eb2c952650fbd8b9e5d18ed41405dc Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Fri, 8 Jul 2022 13:21:31 +0200 Subject: rhi: gl: Reset the buffer bindings on beginExternal Play nice with old renderers like the OpenGL paint engine for QPainter. When combining Qt Quick and QPainter targeting the same GL window, calling QQuickWindow::beginExternalCommands() is not currently sufficient to ensure problem-free operation, it also needs a QQOpenGLUtils::resetOpenGLState() afterwards to get rid of the buffer bindings. (which is important when using legacy code with client-side vertex arrays) Which in turn is not what the documentation promises, so resetting the bindings is now ensured on the rhi level when Qt Quick calls beginExternal(). Pick-to: 6.4 6.3 6.2 Fixes: QTBUG-104801 Change-Id: Ibd82753996768aad0118bff87d4e1f8bcc388c58 Reviewed-by: Andy Nichols --- src/gui/rhi/qrhigles2.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp index 7cc2a01ef7..0912ed077f 100644 --- a/src/gui/rhi/qrhigles2.cpp +++ b/src/gui/rhi/qrhigles2.cpp @@ -1855,8 +1855,14 @@ void QRhiGles2::beginExternal(QRhiCommandBuffer *cb) cbD->resetCommands(); - if (vao) + if (vao) { f->glBindVertexArray(0); + } else { + f->glBindBuffer(GL_ARRAY_BUFFER, 0); + f->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + if (caps.compute) + f->glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); + } } void QRhiGles2::endExternal(QRhiCommandBuffer *cb) -- cgit v1.2.3