From 142b6fdf2f59e999d593cec1971ae7b7b68dfe11 Mon Sep 17 00:00:00 2001 From: Alexei Dobrohotov Date: Wed, 2 Feb 2022 16:57:59 +0300 Subject: [PATCH] Fix double precision bound issues in std::max/std::clamp --- apps/openmw/mwrender/localmap.cpp | 6 ++++-- components/sceneutil/lightmanager.cpp | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 9a645312d5..66d41a47e4 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -460,8 +460,10 @@ void LocalMap::requestInteriorMap(const MWWorld::CellStore* cell) yOffset++; mBounds.yMin() = fog->mBounds.mMinY - yOffset * mMapWorldSize; } - mBounds.xMax() = std::max(mBounds.xMax(), fog->mBounds.mMaxX); - mBounds.yMax() = std::max(mBounds.yMax(), fog->mBounds.mMaxY); + if (fog->mBounds.mMaxX > mBounds.xMax()) + mBounds.xMax() = fog->mBounds.mMaxX; + if (fog->mBounds.mMaxY > mBounds.yMax()) + mBounds.yMax() = fog->mBounds.mMaxY; if(xOffset != 0 || yOffset != 0) Log(Debug::Warning) << "Warning: expanding fog by " << xOffset << ", " << yOffset; diff --git a/components/sceneutil/lightmanager.cpp b/components/sceneutil/lightmanager.cpp index 29907c542d..45738bcad8 100644 --- a/components/sceneutil/lightmanager.cpp +++ b/components/sceneutil/lightmanager.cpp @@ -1109,7 +1109,8 @@ namespace SceneUtil if (transform.mLightSource->getLastAppliedFrame() != frameNum && mPointLightFadeEnd != 0.f) { const float fadeDelta = mPointLightFadeEnd - mPointLightFadeStart; - float fade = 1 - std::clamp((viewBound.center().length() - mPointLightFadeStart) / fadeDelta, 0.f, 1.f); + const float viewDelta = viewBound.center().length() - mPointLightFadeStart; + float fade = 1 - std::clamp(viewDelta / fadeDelta, 0.f, 1.f); if (fade == 0.f) continue;