From bcf39553fb0db8ceb69f203833a4bd0ca4da7276 Mon Sep 17 00:00:00 2001 From: James Turner Date: Mon, 4 Feb 2019 15:04:49 +0000 Subject: 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 --- src/render/jobs/updatelevelofdetailjob.cpp | 5 +++++ src/render/jobs/updateskinningpalettejob.cpp | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) 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); -- cgit v1.2.3