From fe900763d7260cb6276ce3c6c3dacec94bd1212f Mon Sep 17 00:00:00 2001
From: XenHat <commits@xenh.at>
Date: Sun, 18 Jul 2021 18:48:17 -0400
Subject: [PATCH] Fix crashed caused by setting RenderResolutionMultiplier too
 low

---
 indra/newview/llviewercontrol.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 5c1554d4bb8..12739856b82 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -487,8 +487,14 @@ static bool handleRenderDebugPipelineChanged(const LLSD& newvalue)
 	return true;
 }
 
-static bool handleRenderResolutionDivisorChanged(const LLSD&)
+static bool validateRenderResolutionDivisor(const LLSD& newvalue)
 {
+	return (newvalue.asReal() > 0.01f);
+}
+
+static bool handleRenderResolutionDivisorChanged(const LLSD& newvalue)
+{
+	LLPipeline::RenderResolutionMultiplier = llmin((F32)newvalue.asReal(), 0.01f);
 	gResizeScreenTexture = TRUE;
 	return true;
 }
@@ -692,6 +698,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));
 	gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));
+	gSavedSettings.getControl("RenderResolutionDivisor")->getValidateSignal()->connect(boost::bind(&validateRenderResolutionDivisor, _2));
 	gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
 // [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
 	gSavedSettings.getControl("RenderResolutionMultiplier")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
-- 
GitLab