summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2015-12-15 14:01:15 +0100
committerKevin Ottens <kevin.ottens@kdab.com>2015-12-18 15:55:29 +0000
commit38fe0e3aae7dbaacf02064defa42b8cff292703b (patch)
tree58877175060be01ad80a51f76be34a1594d5dc5d /src
parenta768092904a6f294b321a3b8e603be786aabfcb5 (diff)
Destroy allocators in aspect not the renderer
Otherwise it was creating a weird confusion of responsibility. The aspect asked for the creation of the allocators while the renderer itself was asking for their destruction. Change-Id: Ib06a315b39dc654d5a9bb97d4d2153884c457443 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/render/backend/abstractrenderer_p.h1
-rw-r--r--src/render/backend/renderer.cpp2
-rw-r--r--src/render/backend/renderer_p.h2
-rw-r--r--src/render/frontend/qrenderaspect.cpp2
4 files changed, 4 insertions, 3 deletions
diff --git a/src/render/backend/abstractrenderer_p.h b/src/render/backend/abstractrenderer_p.h
index 3706cafa0..2e24dc819 100644
--- a/src/render/backend/abstractrenderer_p.h
+++ b/src/render/backend/abstractrenderer_p.h
@@ -94,6 +94,7 @@ public:
virtual void initialize() = 0;
virtual void shutdown() = 0;
virtual void createAllocators(Qt3DCore::QAbstractAspectJobManager *jobManager) = 0;
+ virtual void destroyAllocators(Qt3DCore::QAbstractAspectJobManager *jobManager) = 0;
// Threaded renderer
virtual void render() = 0;
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index 3e304aee3..a05800851 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -154,8 +154,6 @@ Renderer::Renderer(QRenderAspect::RenderType type)
Renderer::~Renderer()
{
- // Clean up the TLS allocators
- destroyAllocators(QAbstractAspectPrivate::get(m_rendererAspect)->jobManager());
}
NodeManagers *Renderer::nodeManagers() const
diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h
index e39cb46b6..eead65190 100644
--- a/src/render/backend/renderer_p.h
+++ b/src/render/backend/renderer_p.h
@@ -135,6 +135,7 @@ public:
void initialize() Q_DECL_OVERRIDE;
void shutdown() Q_DECL_OVERRIDE;
void createAllocators(Qt3DCore::QAbstractAspectJobManager *jobManager) Q_DECL_OVERRIDE;
+ void destroyAllocators(Qt3DCore::QAbstractAspectJobManager *jobManager) Q_DECL_OVERRIDE;
void render() Q_DECL_OVERRIDE;
void doRender() Q_DECL_OVERRIDE;
@@ -162,7 +163,6 @@ public:
void setOpenGLContext(QOpenGLContext *context);
QGraphicsApiFilter *contextInfo() const;
- void destroyAllocators(Qt3DCore::QAbstractAspectJobManager *jobManager);
void addAllocator(Qt3DCore::QFrameAllocator *allocator);
Qt3DCore::QFrameAllocator *currentFrameAllocator();
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index 892728e9a..337bb9747 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -443,6 +443,8 @@ void QRenderAspect::onInitialize(const QVariantMap &data)
void QRenderAspect::onCleanup()
{
Q_D(QRenderAspect);
+ if (d->m_renderer)
+ d->m_renderer->destroyAllocators(d->jobManager());
delete d->m_renderer;
d->m_renderer = Q_NULLPTR;
}