diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b0894f562c9f059ad35b98f212f717dd26741160..d341e98a38adebcc3bca3c062476ffdebe8910d9 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 e83bda40e0937b381145ef0b3d45868b89d4daa9..03a59712f7964b9f1e916896fbd3b94ef05fd278 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 0d3bea3269c3f6a4f06a7023f121d77adf8c30fb..4db9bde5727193bec0e66d45de31188ca239733f 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 42d23ca02d224a86184db031f4a0c313105822d8..fa500148b2378e6fd66f86384a92183349439c3e 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;