diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-08-21 11:09:44 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-08-25 16:45:59 +0200 |
commit | 09eb4028e1221a8aaca8b563a1dba2ae6c39b92c (patch) | |
tree | 796ec16f1cec8b65368587e8e734ee9c536706d6 /src/render | |
parent | 4c7cfd85abdd4a914a5b80e7c406b7cc823840a6 (diff) |
Rework Scene3D to fix potential crash on shutdown
- Rework Scene3DRenderer/Scene3DItem to remove coupling and help
simplify the flow
- Introduce a Scene3DManagerNode to manager lifetime of the
Scene3DRenderer. Rely on the Scene3DManagerNode dtor to know
to shutdown the Qt3D renderer in the proper thread.
- Try to handle the fact that destruction order between Item and SGNode
is random by using an AspectEngineDestroyer helper
- Stop using a sharedptr to store the QEntity on the Scene3DItem side.
This can lead to crashes as the AspectEngine assumes it is the sole
owner of the Entity ptr.
Change-Id: I14915705eb9ab1195b2b783cbbb45076acc2ac1a
Task-number: QTBUG-84847
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index de99840b2..4e8967e6e 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -629,7 +629,8 @@ void QRenderAspectPrivate::renderSynchronous(bool swapBuffers) */ void QRenderAspectPrivate::renderShutdown() { - m_renderer->shutdown(); + if (m_renderer != nullptr) + m_renderer->shutdown(); } QVector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time) |