diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2018-10-03 08:46:28 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-10-03 07:55:54 +0000 |
commit | ff07ec93db2b56fb3c3047549a1ad7c7d0e367e8 (patch) | |
tree | 104e9069b33d9e701934432a382603fb099122a6 | |
parent | c19036f8484e0ce08e4f38b7e0bd0d64772ded67 (diff) |
Fix leak with VAOManager
Change-Id: I09f15de230c571adb580bdbb3250405f562f255b
Task-number: QTBUG-70892
Reviewed-by: Juan José Casafranca <juan.casafranca@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
3 files changed, 8 insertions, 1 deletions
diff --git a/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp b/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp index 0c4fd8c9d..f5d0a64f5 100644 --- a/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp +++ b/src/render/renderers/opengl/renderer/openglvertexarrayobject.cpp @@ -108,6 +108,11 @@ void OpenGLVertexArrayObject::create(SubmissionContext *ctx, const VAOIdentifier m_owners = key; } +VAOIdentifier OpenGLVertexArrayObject::key() const +{ + return m_owners; +} + // called from Render thread void OpenGLVertexArrayObject::destroy() { diff --git a/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h b/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h index eee837221..4896df9bf 100644 --- a/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h +++ b/src/render/renderers/opengl/renderer/openglvertexarrayobject_p.h @@ -73,6 +73,7 @@ public: void release(); void create(SubmissionContext *ctx, const VAOIdentifier &key); + VAOIdentifier key() const; void destroy(); void cleanup(); diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index 7319fd0e5..e1d237622 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -2142,7 +2142,8 @@ void Renderer::cleanGraphicsResources() OpenGLVertexArrayObject *vao = m_nodesManager->vaoManager()->data(vaoHandle); if (vao) { vao->destroy(); - m_nodesManager->vaoManager()->release(vaoHandle); + // We remove VAO from manager using its VAOIdentifier + m_nodesManager->vaoManager()->releaseResource(vao->key()); } } } |