diff options
author | James Turner <zakalawe@mac.com> | 2019-02-04 15:04:49 +0000 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-04-10 13:32:57 +0000 |
commit | bcf39553fb0db8ceb69f203833a4bd0ca4da7276 (patch) | |
tree | 95e9c05a4c953fa114575fbf572f5fd634cbc9b4 | |
parent | 0099270008fa1d218fb5ed38028e6e27ca811bb1 (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.cpp | 5 | ||||
-rw-r--r-- | src/render/jobs/updateskinningpalettejob.cpp | 5 |
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); |