summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-05-13 11:35:12 +0200
committerPaul Lemire <paul.lemire@kdab.com>2020-05-14 17:02:51 +0200
commitcfd8c4d06bc81028b055e6c3343d0d4b50793219 (patch)
tree7e18423314512a9179dc8f6a64e7203dfcbee385 /src
parent3c0b236a235d68de329609fc4643c3b3c4326849 (diff)
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 <mike.krus@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp7
-rw-r--r--src/render/renderers/opengl/graphicshelpers/submissioncontext_p.h1
-rw-r--r--src/render/renderers/opengl/renderer/renderer.cpp2
3 files changed, 10 insertions, 0 deletions
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";