From 60b6af7215eb0d8e6a86fd5cd00615bb821b1bcd Mon Sep 17 00:00:00 2001 From: stm <14291421+stephanmeesters@users.noreply.github.com> Date: Sat, 18 Jul 2026 14:11:09 +0200 Subject: [PATCH 1/4] perf(smudge): Early return W3DSmudgeManager::render when no smudges present --- .../Source/W3DDevice/GameClient/W3DSmudge.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index c2172643e27..fa3c37d9977 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -310,6 +310,11 @@ Bool W3DSmudgeManager::testHardwareSupport() void W3DSmudgeManager::render(RenderInfoClass &rinfo) { + // TheSuperHackers @perf stephanmeesters 14/08/2026 Early return when we have no smudge sets + // or if there are no smudges in the global smudge set. + if(m_usedSmudgeSetList.empty() || m_usedSmudgeSetList.front()->getUsedSmudgeCount() == 0) + return; + //Verify that the card supports the effect. if (!testHardwareSupport()) return; @@ -365,11 +370,8 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) SmudgeSetDeque::iterator setIt=m_usedSmudgeSetList.begin(); //first set that didn't fit into render batch. Int count = 0; - if (setIt != m_usedSmudgeSetList.end()) - { - //there are possibly some smudges to render, so make sure background particles have finished drawing. - SortingRendererClass::Flush(); //draw sorted translucent polys like particles. - } + // make sure background particles have finished drawing. + SortingRendererClass::Flush(); //draw sorted translucent polys like particles. for(; setIt != m_usedSmudgeSetList.end(); ++setIt) { From 281bda27d43deb5ab6fba696bc0b1d2b9d2d7282 Mon Sep 17 00:00:00 2001 From: stm <14291421+stephanmeesters@users.noreply.github.com> Date: Fri, 14 Aug 2026 12:23:28 +0200 Subject: [PATCH 2/4] Process review comments --- .../Source/W3DDevice/GameClient/W3DSmudge.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index fa3c37d9977..8529bd3617d 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -310,14 +310,17 @@ Bool W3DSmudgeManager::testHardwareSupport() void W3DSmudgeManager::render(RenderInfoClass &rinfo) { + //Verify that the card supports the effect. + if (!testHardwareSupport()) + return; + // TheSuperHackers @perf stephanmeesters 14/08/2026 Early return when we have no smudge sets // or if there are no smudges in the global smudge set. if(m_usedSmudgeSetList.empty() || m_usedSmudgeSetList.front()->getUsedSmudgeCount() == 0) + { + m_smudgeCountLastFrame = 0; return; - - //Verify that the card supports the effect. - if (!testHardwareSupport()) - return; + } SurfaceClass *backBuffer = DX8Wrapper::_Get_DX8_Back_Buffer(); From 89d390a25cf2e8b46983de94da52a75da15b5b5d Mon Sep 17 00:00:00 2001 From: stm <14291421+stephanmeesters@users.noreply.github.com> Date: Sat, 15 Aug 2026 15:45:58 +0200 Subject: [PATCH 3/4] Adjust condition --- .../Source/W3DDevice/GameClient/W3DSmudge.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index 8529bd3617d..59409f06fc1 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -315,8 +315,8 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) return; // TheSuperHackers @perf stephanmeesters 14/08/2026 Early return when we have no smudge sets - // or if there are no smudges in the global smudge set. - if(m_usedSmudgeSetList.empty() || m_usedSmudgeSetList.front()->getUsedSmudgeCount() == 0) + // or if the global smudge set is the only set and contains no smudges. + if (m_usedSmudgeSetList.empty() || (m_usedSmudgeSetList.size() == 1 && m_usedSmudgeSetList.front()->getUsedSmudgeCount() == 0)) { m_smudgeCountLastFrame = 0; return; From d95da7059f9cc855c5ff23df9278178d8719e74b Mon Sep 17 00:00:00 2001 From: stm <14291421+stephanmeesters@users.noreply.github.com> Date: Sat, 15 Aug 2026 19:48:06 +0200 Subject: [PATCH 4/4] Use correct keyword --- Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp index 59409f06fc1..08031903925 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DSmudge.cpp @@ -314,7 +314,7 @@ void W3DSmudgeManager::render(RenderInfoClass &rinfo) if (!testHardwareSupport()) return; - // TheSuperHackers @perf stephanmeesters 14/08/2026 Early return when we have no smudge sets + // TheSuperHackers @performance stephanmeesters 14/08/2026 Early return when we have no smudge sets // or if the global smudge set is the only set and contains no smudges. if (m_usedSmudgeSetList.empty() || (m_usedSmudgeSetList.size() == 1 && m_usedSmudgeSetList.front()->getUsedSmudgeCount() == 0)) {