summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-07-06 12:09:09 +0200
committerPaul Lemire <paul.lemire@kdab.com>2020-07-07 12:14:01 +0200
commite5e7073c9750fe7a29d02011ffc98299bcee811c (patch)
tree4254101e2e3c7d27ed3eacf6408324b8b973fc88 /src
parentdc1c573cb14d115a39220b7001d21ac26acc4736 (diff)
RenderQueue: reset now destroys RenderViews
This makes things tidier by tying RenderViews lifetime to current RenderQueue. Change-Id: I35ef5761cf987582c361d700efce8ef06231ff38 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/vector_helper_p.h16
-rw-r--r--src/plugins/renderers/opengl/renderer/renderer.cpp2
-rw-r--r--src/plugins/renderers/rhi/renderer/renderer.cpp2
-rw-r--r--src/render/jobs/renderqueue_p.h2
4 files changed, 18 insertions, 4 deletions
diff --git a/src/core/vector_helper_p.h b/src/core/vector_helper_p.h
index 77cfd9a52..c4e2ed2ca 100644
--- a/src/core/vector_helper_p.h
+++ b/src/core/vector_helper_p.h
@@ -81,6 +81,22 @@ bool contains(const std::vector<T>& destination, const U& element) noexcept
{
return std::find(destination.begin(), destination.end(), element) != destination.end();
}
+
+template <typename ForwardIterator>
+void deleteAll(ForwardIterator begin, ForwardIterator end)
+{
+ while (begin != end) {
+ delete *begin;
+ ++begin;
+ }
+}
+
+template <typename Container>
+inline void deleteAll(const Container &c)
+{
+ qDeleteAll(c.begin(), c.end());
+}
+
} // namespace Qt3DCore
QT_END_NAMESPACE
diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp
index 0ef7eac29..e6ebadf90 100644
--- a/src/plugins/renderers/opengl/renderer/renderer.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderer.cpp
@@ -537,7 +537,6 @@ void Renderer::shutdown()
// We delete any renderqueue that we may not have had time to render
// before the surface was destroyed
QMutexLocker lockRenderQueue(m_renderQueue.mutex());
- qDeleteAll(m_renderQueue.nextFrameQueue());
m_renderQueue.reset();
lockRenderQueue.unlock();
@@ -769,7 +768,6 @@ void Renderer::render(bool swapBuffers)
// Reset RenderQueue and destroy the renderViews
m_renderQueue.reset();
- qDeleteAll(renderViews);
// Allow next frame to be built once we are done doing all rendering
m_vsyncFrameAdvanceService->proceedToNextFrame();
diff --git a/src/plugins/renderers/rhi/renderer/renderer.cpp b/src/plugins/renderers/rhi/renderer/renderer.cpp
index 887654341..42902afeb 100644
--- a/src/plugins/renderers/rhi/renderer/renderer.cpp
+++ b/src/plugins/renderers/rhi/renderer/renderer.cpp
@@ -501,7 +501,6 @@ void Renderer::shutdown()
// We delete any renderqueue that we may not have had time to render
// before the surface was destroyed
QMutexLocker lockRenderQueue(m_renderQueue.mutex());
- qDeleteAll(m_renderQueue.nextFrameQueue());
m_renderQueue.reset();
lockRenderQueue.unlock();
@@ -756,7 +755,6 @@ void Renderer::render(bool swapBuffers)
// Reset RenderQueue and destroy the renderViews
m_renderQueue.reset();
- qDeleteAll(renderViews);
// We allow the RenderTickClock service to proceed to the next frame
// In turn this will allow the aspect manager to request a new set of jobs
diff --git a/src/render/jobs/renderqueue_p.h b/src/render/jobs/renderqueue_p.h
index c3bb18391..942e351f8 100644
--- a/src/render/jobs/renderqueue_p.h
+++ b/src/render/jobs/renderqueue_p.h
@@ -53,6 +53,7 @@
#include <vector>
#include <QMutex>
+#include <Qt3DCore/private/vector_helper_p.h>
QT_BEGIN_NAMESPACE
@@ -127,6 +128,7 @@ public:
{
m_currentRenderViewCount = 0;
m_targetRenderViewCount = 0;
+ Qt3DCore::deleteAll(m_currentWorkQueue);
m_currentWorkQueue.clear();
m_noRender = false;
m_wasReset = true;