From a47f6fde87d132d6947ef8d3327ac620265ed979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20S=C3=B8rvig?= Date: Fri, 19 Jul 2024 13:59:40 +0200 Subject: [PATCH] QRhiGles2: Skip GL cleanup on context loss MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We are getting errors such as WebGL: INVALID_OPERATION: delete: object does not belong to this context Normally, QRhiGles2::destroy() should delete/free all GL resources. However if the GL context is lost then there is not much we can do. Task-number: QTBUG-120138 Change-Id: I6d00b10d72b7f7240499ceff0d002b88104009a0 Reviewed-by: Laszlo Agocs Reviewed-by: Piotr WierciƄski --- src/gui/rhi/qrhigles2.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp index 4f1aceea487..f848c5cd2ce 100644 --- a/src/gui/rhi/qrhigles2.cpp +++ b/src/gui/rhi/qrhigles2.cpp @@ -1118,23 +1118,24 @@ void QRhiGles2::destroy() if (!f) return; - ensureContext(); - executeDeferredReleases(); + if (ensureContext()) { + executeDeferredReleases(); - if (ofr.tsQueries[0]) { - f->glDeleteQueries(2, ofr.tsQueries); - ofr.tsQueries[0] = ofr.tsQueries[1] = 0; + if (ofr.tsQueries[0]) { + f->glDeleteQueries(2, ofr.tsQueries); + ofr.tsQueries[0] = ofr.tsQueries[1] = 0; + } + + if (vao) { + f->glDeleteVertexArrays(1, &vao); + vao = 0; + } + + for (uint shader : m_shaderCache) + f->glDeleteShader(shader); + m_shaderCache.clear(); } - if (vao) { - f->glDeleteVertexArrays(1, &vao); - vao = 0; - } - - for (uint shader : m_shaderCache) - f->glDeleteShader(shader); - m_shaderCache.clear(); - if (!importedContext) { delete ctx; ctx = nullptr;