diff options
author | Mike Krus <mike.krus@kdab.com> | 2021-06-15 11:32:15 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2021-06-21 11:23:46 +0100 |
commit | e378ebd0db6c06af7709498122912284852e6bc9 (patch) | |
tree | 0161e97ca45a56e0a04d20bd3e7cbb4d3d208ee4 /src/render/frontend | |
parent | 85985abc9b5488a9cf2bc18b9331b639cb37b681 (diff) |
Change bounding update propagation
Previously, bounding computation results from the core aspect were
propagated to the render aspect via the front end objects.
This introduces a job watcher which gets called with the results
and the render aspect can update it's backend data directly.
The watcher process method is called in the thread of the core
aspect job but the render aspect job will wait for that complete
anyway (since it depends on the core aspect job).
Pick-to: 6.1 6.2
Change-Id: Ie59337f00025fd55fc723a7d105342e0b1e91d6c
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/frontend')
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 15 | ||||
-rw-r--r-- | src/render/frontend/qrenderaspect_p.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index dab3b8c8f..13587fda6 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -183,6 +183,7 @@ #include <Qt3DCore/private/qentity_p.h> #include <Qt3DCore/private/qaspectmanager_p.h> #include <Qt3DCore/private/qeventfilterservice_p.h> +#include <Qt3DCore/private/calcboundingvolumejob_p.h> #include <QThread> #include <QOpenGLContext> @@ -402,6 +403,20 @@ void QRenderAspectPrivate::onEngineStartup() auto *coreAspect = qobject_cast<Qt3DCore::QCoreAspect *>(m_aspectManager->aspect(&Qt3DCore::QCoreAspect::staticMetaObject)); Q_ASSERT(coreAspect); m_calculateBoundingVolumeJob->addDependency(coreAspect->calculateBoundingVolumeJob()); + + auto bvJob = qSharedPointerCast<Qt3DCore::CalculateBoundingVolumeJob>(coreAspect->calculateBoundingVolumeJob()); + bvJob->addWatcher(m_calculateBoundingVolumeJob); + } +} + +void QRenderAspectPrivate::onEngineAboutToShutdown() +{ + if (m_aspectManager) { + auto *coreAspect = qobject_cast<Qt3DCore::QCoreAspect *>(m_aspectManager->aspect(&Qt3DCore::QCoreAspect::staticMetaObject)); + Q_ASSERT(coreAspect); + + auto bvJob = qSharedPointerCast<Qt3DCore::CalculateBoundingVolumeJob>(coreAspect->calculateBoundingVolumeJob()); + bvJob->removeWatcher(m_calculateBoundingVolumeJob); } } diff --git a/src/render/frontend/qrenderaspect_p.h b/src/render/frontend/qrenderaspect_p.h index b1b7bedc3..23a90e78f 100644 --- a/src/render/frontend/qrenderaspect_p.h +++ b/src/render/frontend/qrenderaspect_p.h @@ -108,6 +108,7 @@ public: void createNodeManagers(); void onEngineStartup(); + void onEngineAboutToShutdown() override; void registerBackendTypes(); void unregisterBackendTypes(); |