summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Turner <zakalawe@mac.com>2019-02-04 15:04:49 +0000
committerPaul Lemire <paul.lemire@kdab.com>2019-04-10 13:32:57 +0000
commitbcf39553fb0db8ceb69f203833a4bd0ca4da7276 (patch)
tree95e9c05a4c953fa114575fbf572f5fd634cbc9b4
parent0099270008fa1d218fb5ed38028e6e27ca811bb1 (diff)
Early-return on these jobs if no work to be done
This avoids scene traversal in the case there is no LoD / skinning active Change-Id: I502c38ffe3c23a11543034861778d74d80841744 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/jobs/updatelevelofdetailjob.cpp5
-rw-r--r--src/render/jobs/updateskinningpalettejob.cpp5
2 files changed, 9 insertions, 1 deletions
diff --git a/src/render/jobs/updatelevelofdetailjob.cpp b/src/render/jobs/updatelevelofdetailjob.cpp
index 141d65c22..e4b651949 100644
--- a/src/render/jobs/updatelevelofdetailjob.cpp
+++ b/src/render/jobs/updatelevelofdetailjob.cpp
@@ -93,6 +93,11 @@ void UpdateLevelOfDetailJob::setFrameGraphRoot(FrameGraphNode *frameGraphRoot)
void UpdateLevelOfDetailJob::run()
{
Q_ASSERT(m_frameGraphRoot && m_root && m_manager);
+
+ // short-circuit if no LoDs exist
+ if (m_manager->levelOfDetailManager()->count() == 0)
+ return;
+
updateEntityLod(m_root);
}
diff --git a/src/render/jobs/updateskinningpalettejob.cpp b/src/render/jobs/updateskinningpalettejob.cpp
index 30ffafa53..1ee9101f9 100644
--- a/src/render/jobs/updateskinningpalettejob.cpp
+++ b/src/render/jobs/updateskinningpalettejob.cpp
@@ -59,6 +59,10 @@ UpdateSkinningPaletteJob::~UpdateSkinningPaletteJob()
void UpdateSkinningPaletteJob::run()
{
+ auto armatureManager = m_nodeManagers->armatureManager();
+ if (armatureManager->count() == 0)
+ return;
+
// TODO: Decompose this job across several jobs, say one per skeleton so
// that it can be done in parallel
@@ -78,7 +82,6 @@ void UpdateSkinningPaletteJob::run()
findDirtyArmatures(m_root, dirtyArmatures);
// Update the skeleton for each dirty armature
- auto armatureManager = m_nodeManagers->armatureManager();
auto skeletonManager = m_nodeManagers->skeletonManager();
for (const auto &armatureHandle : qAsConst(dirtyArmatures)) {
auto armature = armatureManager->data(armatureHandle);