From cfd8c4d06bc81028b055e6c3343d0d4b50793219 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 13 May 2020 11:35:12 +0200 Subject: Release rendertargets on destruction We were only releasing them at runtime if they changed, but we should also clean them up before we are destroyed. Change-Id: Ibc3f37fba92e8be8381fd869af7f5747da87038a Reviewed-by: Mike Krus --- src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp | 7 +++++++ src/render/renderers/opengl/graphicshelpers/submissioncontext_p.h | 1 + src/render/renderers/opengl/renderer/renderer.cpp | 2 ++ 3 files changed, 10 insertions(+) (limited to 'src') diff --git a/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp b/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp index 5453dd98d..d57aebe6c 100644 --- a/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp +++ b/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp @@ -558,6 +558,13 @@ GLuint SubmissionContext::updateRenderTarget(Qt3DCore::QNodeId renderTargetNodeI return fboId; } +void SubmissionContext::releaseRenderTargets() +{ + const auto keys = m_renderTargets.keys(); + for (Qt3DCore::QNodeId renderTargetId : keys) + releaseRenderTarget(renderTargetId); +} + QSize SubmissionContext::renderTargetSize(const QSize &surfaceSize) const { QSize renderTargetSize; diff --git a/src/render/renderers/opengl/graphicshelpers/submissioncontext_p.h b/src/render/renderers/opengl/graphicshelpers/submissioncontext_p.h index 6f2888b93..ac8d29096 100644 --- a/src/render/renderers/opengl/graphicshelpers/submissioncontext_p.h +++ b/src/render/renderers/opengl/graphicshelpers/submissioncontext_p.h @@ -111,6 +111,7 @@ public: GLuint activeFBO() const { return m_activeFBO; } void activateRenderTarget(const Qt3DCore::QNodeId id, const AttachmentPack &attachments, GLuint defaultFboId); void releaseRenderTarget(const Qt3DCore::QNodeId id); + void releaseRenderTargets(); QSize renderTargetSize(const QSize &surfaceSize) const; QImage readFramebuffer(const QRect &rect); void blitFramebuffer(Qt3DCore::QNodeId outputRenderTargetId, Qt3DCore::QNodeId inputRenderTargetId, diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index 47a7c5e01..162836ff1 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -534,6 +534,8 @@ void Renderer::releaseGraphicsResources() vao->destroy(); } + m_submissionContext->releaseRenderTargets(); + context->doneCurrent(); } else { qWarning() << "Failed to make context current: OpenGL resources will not be destroyed"; -- cgit v1.2.3