summaryrefslogtreecommitdiffstats
path: root/src/render/jobs/computefilteredboundingvolumejob.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/jobs/computefilteredboundingvolumejob.cpp')
-rw-r--r--src/render/jobs/computefilteredboundingvolumejob.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/render/jobs/computefilteredboundingvolumejob.cpp b/src/render/jobs/computefilteredboundingvolumejob.cpp
index d8a7b5094..02852685c 100644
--- a/src/render/jobs/computefilteredboundingvolumejob.cpp
+++ b/src/render/jobs/computefilteredboundingvolumejob.cpp
@@ -44,6 +44,8 @@
#include <Qt3DRender/private/renderlogging_p.h>
#include <Qt3DRender/private/sphere_p.h>
#include <Qt3DRender/private/job_common_p.h>
+#include <Qt3DRender/private/managers_p.h>
+#include <Qt3DRender/private/nodemanagers_p.h>
#include <QThread>
@@ -54,16 +56,18 @@ namespace Render {
namespace {
-void expandWorldBoundingVolume(Qt3DRender::Render::Sphere *sphere,
+void expandWorldBoundingVolume(NodeManagers *manager,
+ Qt3DRender::Render::Sphere *sphere,
Qt3DRender::Render::Entity *node,
Qt3DRender::Render::Entity *excludeSubTree)
{
Qt3DRender::Render::Sphere childSphere(*node->worldBoundingVolume());
// Go to the nodes that have the most depth
- const auto children = node->children();
- for (Entity *c : children) {
- if (c != excludeSubTree)
- expandWorldBoundingVolume(&childSphere, c, excludeSubTree);
+ const auto childrenHandles = node->childrenHandles();
+ for (const HEntity &handle : childrenHandles) {
+ Entity *c = manager->renderNodesManager()->data(handle);
+ if (c && c != excludeSubTree)
+ expandWorldBoundingVolume(manager, &childSphere, c, excludeSubTree);
}
sphere->expandToContain(childSphere);
}
@@ -73,6 +77,7 @@ void expandWorldBoundingVolume(Qt3DRender::Render::Sphere *sphere,
ComputeFilteredBoundingVolumeJob::ComputeFilteredBoundingVolumeJob()
: m_root(nullptr)
, m_ignoreSubTree(nullptr)
+ , m_manager(nullptr)
{
SET_JOB_RUN_STAT_TYPE(this, JobTypes::ExpandBoundingVolume, 0);
}
@@ -82,6 +87,11 @@ void ComputeFilteredBoundingVolumeJob::setRoot(Entity *root)
m_root = root;
}
+void ComputeFilteredBoundingVolumeJob::setManagers(NodeManagers *manager)
+{
+ m_manager = manager;
+}
+
void ComputeFilteredBoundingVolumeJob::ignoreSubTree(Entity *node)
{
m_ignoreSubTree = node;
@@ -113,7 +123,7 @@ void ComputeFilteredBoundingVolumeJob::run()
}
Qt3DRender::Render::Sphere sphere;
- expandWorldBoundingVolume(&sphere, m_root, m_ignoreSubTree);
+ expandWorldBoundingVolume(m_manager, &sphere, m_root, m_ignoreSubTree);
finished(sphere);
qCDebug(Jobs) << "Exiting" << Q_FUNC_INFO << QThread::currentThread();