diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-07-06 12:09:09 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-07-07 12:14:01 +0200 |
commit | e5e7073c9750fe7a29d02011ffc98299bcee811c (patch) | |
tree | 4254101e2e3c7d27ed3eacf6408324b8b973fc88 /src | |
parent | dc1c573cb14d115a39220b7001d21ac26acc4736 (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.h | 16 | ||||
-rw-r--r-- | src/plugins/renderers/opengl/renderer/renderer.cpp | 2 | ||||
-rw-r--r-- | src/plugins/renderers/rhi/renderer/renderer.cpp | 2 | ||||
-rw-r--r-- | src/render/jobs/renderqueue_p.h | 2 |
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; |