summaryrefslogtreecommitdiffstats
path: root/src/render/frontend
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2021-06-15 11:32:15 +0100
committerMike Krus <mike.krus@kdab.com>2021-06-21 11:23:46 +0100
commite378ebd0db6c06af7709498122912284852e6bc9 (patch)
tree0161e97ca45a56e0a04d20bd3e7cbb4d3d208ee4 /src/render/frontend
parent85985abc9b5488a9cf2bc18b9331b639cb37b681 (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.cpp15
-rw-r--r--src/render/frontend/qrenderaspect_p.h1
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();