From d56b519bedfc5cf9b38a744d784b0931ef50408f Mon Sep 17 00:00:00 2001
From: Kitty Barnett <develop@catznip.com>
Date: Tue, 27 Mar 2018 20:07:07 +0200
Subject: [PATCH] Added 'RenderResolutionMultiplier' as an more fine-tuned
 alternative to 'RenderResolutionDivisor'

--HG--
branch : RLVa
---
 indra/newview/app_settings/settings.xml | 11 ++++++++
 indra/newview/llviewercontrol.cpp       |  3 +++
 indra/newview/pipeline.cpp              | 35 +++++++++++++++++++------
 indra/newview/pipeline.h                |  3 +++
 4 files changed, 44 insertions(+), 8 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index b0894f562c..d341e98a38 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10254,6 +10254,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>RenderResolutionMultiplier</key>
+    <map>
+      <key>Comment</key>
+      <string>Multiplier for rendering 3D scene at reduced resolution.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderShaderLightingMaxLevel</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index e83bda40e0..03a59712f7 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -635,6 +635,9 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));
 	gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _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));
+// [/SL:KB]
 	gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2));
 	gSavedSettings.getControl("RenderShadowDetail")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderDeferredSSAO")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 0d3bea3269..4db9bde572 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -141,6 +141,9 @@ bool LLPipeline::RenderDeferred;
 F32 LLPipeline::RenderDeferredSunWash;
 U32 LLPipeline::RenderFSAASamples;
 U32 LLPipeline::RenderResolutionDivisor;
+// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
+F32 LLPipeline::RenderResolutionMultiplier;
+// [/SL:KB]
 bool LLPipeline::RenderUIBuffer;
 S32 LLPipeline::RenderShadowDetail;
 bool LLPipeline::RenderDeferredSSAO;
@@ -586,6 +589,9 @@ void LLPipeline::init()
 	connectRefreshCachedSettingsSafe("RenderDeferredSunWash");
 	connectRefreshCachedSettingsSafe("RenderFSAASamples");
 	connectRefreshCachedSettingsSafe("RenderResolutionDivisor");
+// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
+	connectRefreshCachedSettingsSafe("RenderResolutionMultiplier");
+// [/SL:KB]
 	connectRefreshCachedSettingsSafe("RenderUIBuffer");
 	connectRefreshCachedSettingsSafe("RenderShadowDetail");
 	connectRefreshCachedSettingsSafe("RenderDeferredSSAO");
@@ -792,17 +798,20 @@ void LLPipeline::resizeScreenTexture()
 		GLuint resX = gViewerWindow->getWorldViewWidthRaw();
 		GLuint resY = gViewerWindow->getWorldViewHeightRaw();
 	
-// [RLVa:KB] - Checked: 2014-02-23 (RLVa-1.4.10)
-		U32 resMod = RenderResolutionDivisor, resAdjustedX = resX, resAdjustedY = resY;
-		if ( (resMod > 1) && (resMod < resX) && (resMod < resY) )
+// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
+		if ( (RenderResolutionDivisor > 1) && (RenderResolutionDivisor < resX) && (RenderResolutionDivisor < resY) )
 		{
-			resAdjustedX /= resMod;
-			resAdjustedY /= resMod;
+			resX /= RenderResolutionDivisor;
+			resY /= RenderResolutionDivisor;
 		}
+		else if (RenderResolutionMultiplier != 1.f)
+		{
+			resX *= RenderResolutionMultiplier;
+			resY *= RenderResolutionMultiplier;
+		}
+// [/SL:KB]
 
-		if ( (resAdjustedX != mScreen.getWidth()) || (resAdjustedY != mScreen.getHeight()) )
-// [/RLVa:KB]
-//		if ((resX != mScreen.getWidth()) || (resY != mScreen.getHeight()))
+		if ((resX != mScreen.getWidth()) || (resY != mScreen.getHeight()))
 		{
 			releaseScreenBuffers();
 		if (!allocateScreenBuffer(resX,resY))
@@ -938,6 +947,13 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 		resX /= res_mod;
 		resY /= res_mod;
 	}
+// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
+	else if (RenderResolutionMultiplier != 1.f)
+	{
+		resX *= RenderResolutionMultiplier;
+		resY *= RenderResolutionMultiplier;
+	}
+// [/SL:KB]
 
 	if (RenderUIBuffer)
 	{
@@ -1116,6 +1132,9 @@ void LLPipeline::refreshCachedSettings()
 	RenderDeferredSunWash = gSavedSettings.getF32("RenderDeferredSunWash");
 	RenderFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
 	RenderResolutionDivisor = gSavedSettings.getU32("RenderResolutionDivisor");
+// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
+	RenderResolutionMultiplier = gSavedSettings.getF32("RenderResolutionMultiplier");
+// [/SL:KB]
 	RenderUIBuffer = gSavedSettings.getBOOL("RenderUIBuffer");
 	RenderShadowDetail = gSavedSettings.getS32("RenderShadowDetail");
 	RenderDeferredSSAO = gSavedSettings.getBOOL("RenderDeferredSSAO");
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 42d23ca02d..fa500148b2 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -871,6 +871,9 @@ public:
 	static F32 RenderDeferredSunWash;
 	static U32 RenderFSAASamples;
 	static U32 RenderResolutionDivisor;
+// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
+	static F32 RenderResolutionMultiplier;
+// [/SL:KB]
 	static bool RenderUIBuffer;
 	static S32 RenderShadowDetail;
 	static bool RenderDeferredSSAO;
-- 
GitLab