diff --git a/indra/newview/alfloaterlightbox.cpp b/indra/newview/alfloaterlightbox.cpp index e3385bba452712bbd8d99f7ec72df6bc3e5141f3..39bc592b7aa7e71870c9064519f881281757b75b 100644 --- a/indra/newview/alfloaterlightbox.cpp +++ b/indra/newview/alfloaterlightbox.cpp @@ -45,7 +45,6 @@ ALFloaterLightBox::ALFloaterLightBox(const LLSD& key) mCommitCallbackRegistrar.add("LightBox.ResetGroupDefault", std::bind(&ALFloaterLightBox::onClickResetGroupDefault, this, std::placeholders::_2)); mCommitCallbackRegistrar.add("LightBox.CASSelect", boost::bind(&ALFloaterLightBox::updateCAS, this)); mCommitCallbackRegistrar.add("LightBox.CASCommit", std::bind(&ALFloaterLightBox::commitCAS, this, std::placeholders::_2)); - mCommitCallbackRegistrar.add("LightBox.SSAOCommit", std::bind(&ALFloaterLightBox::commitSSAO, this, std::placeholders::_2)); } ALFloaterLightBox::~ALFloaterLightBox() @@ -62,7 +61,6 @@ BOOL ALFloaterLightBox::postBuild() void ALFloaterLightBox::draw() { - updateSSAO(); updateCAS(); LLFloater::draw(); } @@ -496,28 +494,6 @@ void ALFloaterLightBox::updateTonemapper() } } -void ALFloaterLightBox::updateSSAO() -{ - //TODO: Make generic in case more Vec3 values need to be poked - LLVector3 SSAO_PARAMS = gSavedSettings.getVector3("RenderSSAOEffect"); - F32 SSAO_Strength_Relative = clamp(1 - SSAO_PARAMS[VX], 0.0f, 1.0f); // Remapped Value to Slider's Expecations, also clamped - - // Init UI - LLSpinCtrl* spinner1 = getChild<LLSpinCtrl>("ssao_strength_spinner"); - LLSliderCtrl* slider1 = getChild<LLSliderCtrl>("ssao_strength_slider"); - - spinner1->setMinValue(0.0f); - spinner1->setMaxValue(1.0f); - spinner1->setPrecision(2); - spinner1->setIncrement(0.01f); - spinner1->setValue(SSAO_Strength_Relative); - - slider1->setMinValue(0.0f); - slider1->setMaxValue(1.0f); - slider1->setIncrement(0.01f); - slider1->setValue(SSAO_Strength_Relative); -} - void ALFloaterLightBox::updateCAS() { // Check the state of RenderSharpenMethod @@ -577,69 +553,6 @@ void ALFloaterLightBox::updateCAS() slider2->setValue(CAS_PARAMS[VY]); } -void ALFloaterLightBox::commitTonemapper(const LLSD& userdata) -{ - const std::string& active_control = userdata.asString(); - // Check the state of RenderToneMapType - U32 TMap = gSavedSettings.getU32("RenderToneMapType"); - - LLVector3 vTM_A; - LLVector3 vTM_B; - LLVector3 vTM_C; - if (TMap == 7) // Uchimura - { - vTM_A[VX] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "1")->getValue().asReal(); - vTM_A[VY] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "2")->getValue().asReal(); - vTM_A[VZ] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "3")->getValue().asReal(); - vTM_B[VX] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "4")->getValue().asReal(); - vTM_B[VY] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "5")->getValue().asReal(); - vTM_B[VZ] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "6")->getValue().asReal(); - gSavedSettings.setVector3("RenderToneMapUchimuraA", vTM_A); - gSavedSettings.setVector3("RenderToneMapUchimuraB", vTM_B); - } - else if (TMap == 8) // Lottes - { - vTM_A[VX] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "1")->getValue().asReal(); - vTM_A[VY] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "2")->getValue().asReal(); - vTM_A[VZ] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "3")->getValue().asReal(); - vTM_B[VX] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "4")->getValue().asReal(); - vTM_B[VY] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "5")->getValue().asReal(); - vTM_B[VZ] = 0.0f; - gSavedSettings.setVector3("RenderToneMapLottesA", vTM_A); - gSavedSettings.setVector3("RenderToneMapLottesB", vTM_B); - } - else if (TMap == 9) // Uncharted - { - vTM_A[VX] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "1")->getValue().asReal(); - vTM_A[VY] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "2")->getValue().asReal(); - vTM_A[VZ] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "3")->getValue().asReal(); - vTM_B[VX] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "4")->getValue().asReal(); - vTM_B[VY] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "5")->getValue().asReal(); - vTM_B[VZ] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "6")->getValue().asReal(); - vTM_C[VX] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "7")->getValue().asReal(); - vTM_C[VY] = (F32) getChild<LLUICtrl>("tonemapper_dynamic_" + active_control + "8")->getValue().asReal(); - vTM_C[VZ] = 0.0f; - gSavedSettings.setVector3("RenderToneMapUnchartedA", vTM_A); - gSavedSettings.setVector3("RenderToneMapUnchartedB", vTM_B); - gSavedSettings.setVector3("RenderToneMapUnchartedC", vTM_C); - } -} - -void ALFloaterLightBox::commitSSAO(const LLSD& userdata) -{ - // TODO: This should probably be more generic in case I need to poke another vec3 setting. - const std::string& active_control = userdata.asString(); - - // Remap back to what the value expects, also clamp - F32 SSAO_Strength_Real = clamp(1 - (F32) getChild<LLUICtrl>("ssao_strength_" + active_control)->getValue().asReal(), 0.0f, 1.0f); - - LLVector3 SSAO; - SSAO[VX] = SSAO_Strength_Real; - SSAO[VY] = 1.0f; - SSAO[VZ] = 0.0f; - gSavedSettings.setVector3("RenderSSAOEffect", SSAO); -} - void ALFloaterLightBox::commitCAS(const LLSD& userdata) { const std::string& active_control = userdata.asString(); diff --git a/indra/newview/alfloaterlightbox.h b/indra/newview/alfloaterlightbox.h index a86877b0755bb4d0c096289a5eff40366c98aff8..315c13be5cc2580976d00dbbaf1b089c26eb903f 100644 --- a/indra/newview/alfloaterlightbox.h +++ b/indra/newview/alfloaterlightbox.h @@ -50,12 +50,9 @@ class ALFloaterLightBox final : public LLFloater void onClickResetGroupDefault(const LLSD& userdata); void updateTonemapper(); void updateCAS(); - void updateSSAO(); - void commitTonemapper(const LLSD& userdata); void commitCAS(const LLSD& userdata); - void commitSSAO(const LLSD& userdata); - boost::signals2::scoped_connection mTonemapConnection; + boost::signals2::scoped_connection mTonemapConnection; }; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 547a17587b13f46ad0b69a21d48f3dda8eb75fa1..7a09f1c8e009488b1f1073723ef9d323f11bd179 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9560,6 +9560,28 @@ <key>Value</key> <real>0.30</real> </map> + <key>RenderSSAOEffectValue</key> + <map> + <key>Comment</key> + <string>Multiplier for value , for areas which are totally occluded. Blends with original color for partly-occluded areas.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.80</real> + </map> + <key>RenderSSAOEffectSat</key> + <map> + <key>Comment</key> + <string>Multiplier for saturation , for areas which are totally occluded. Blends with original color for partly-occluded areas.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.00</real> + </map> <key>RenderSSAOEffect</key> <map> <key>Comment</key> diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 14a064a5b37cbfed9ecf453d9120b17d4aa532cb..bb6dde37fb3056f1b50ea78b5523212e07ed82ec 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -74,6 +74,7 @@ RenderGLMultiThreadedTextures 1 0 RenderGLMultiThreadedMedia 1 1 RenderReflectionProbeResolution 1 128 RenderScreenSpaceReflections 1 1 +RenderToneMapType 1 1 // diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 52d32622ef23cc84a1a75ba78df0825b4dacaf10..ad740b035974f3127d2e37ff14bb7daa60b27c28 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -72,6 +72,7 @@ RenderGLContextCoreProfile 1 1 RenderGLMultiThreaded 1 0 RenderReflectionProbeResolution 1 128 RenderScreenSpaceReflections 1 1 +RenderToneMapType 1 1 // diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index c8f8ce57ae711b3a92f3647459bcdf5c61b7230f..16cc68ae52b86acddcd4d96b26eec419fe6f28da 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -73,6 +73,7 @@ RenderReflectionProbeDetail 1 2 RenderScreenSpaceReflections 1 1 RenderReflectionProbeCount 1 256 RenderReflectionProbeLevel 1 3 +RenderToneMapType 1 1 // // Low Graphics Settings diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f9567805730face8002352df7a1b45ec8a8e8d4b..aa14720243f8f8eb8a01c508ec9c408203f6aa9f 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -512,7 +512,8 @@ void LLPipeline::init() connectRefreshCachedSettingsSafe("RenderSSAOScale"); connectRefreshCachedSettingsSafe("RenderSSAOMaxScale"); connectRefreshCachedSettingsSafe("RenderSSAOFactor"); - connectRefreshCachedSettingsSafe("RenderSSAOEffect"); + connectRefreshCachedSettingsSafe("RenderSSAOEffectValue"); + connectRefreshCachedSettingsSafe("RenderSSAOEffectSat"); connectRefreshCachedSettingsSafe("RenderShadowOffsetError"); connectRefreshCachedSettingsSafe("RenderShadowBiasError"); connectRefreshCachedSettingsSafe("RenderShadowOffset"); @@ -1047,7 +1048,7 @@ void LLPipeline::refreshCachedSettings() RenderSSAOScale = gSavedSettings.getF32("RenderSSAOScale"); RenderSSAOMaxScale = gSavedSettings.getU32("RenderSSAOMaxScale"); RenderSSAOFactor = gSavedSettings.getF32("RenderSSAOFactor"); - RenderSSAOEffect = gSavedSettings.getVector3("RenderSSAOEffect"); + RenderSSAOEffect = LLVector3(gSavedSettings.getF32("RenderSSAOEffectValue"), gSavedSettings.getF32("RenderSSAOEffectSat"), 0.0f); RenderShadowOffsetError = gSavedSettings.getF32("RenderShadowOffsetError"); RenderShadowBiasError = gSavedSettings.getF32("RenderShadowBiasError"); RenderShadowOffset = gSavedSettings.getF32("RenderShadowOffset"); @@ -7439,31 +7440,40 @@ void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst) { } } - if (focus_point.isExactlyZero()) + static LLVector3 last_focus_point{}; + if (LLPipeline::RenderFocusPointLocked && !last_focus_point.isExactlyZero()) { - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { // focus on point under cursor - focus_point.set(gDebugRaycastIntersection.getF32ptr()); - } - else if (gAgentCamera.cameraMouselook()) - { // focus on point under mouselook crosshairs - LLVector4a result; - result.clear(); + focus_point = last_focus_point; + } + else + { + if (focus_point.isExactlyZero()) + { + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { // focus on point under cursor + focus_point.set(gDebugRaycastIntersection.getF32ptr()); + } + else if (gAgentCamera.cameraMouselook()) + { // focus on point under mouselook crosshairs + LLVector4a result; + result.clear(); - gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, NULL, &result); + gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, NULL, &result); - focus_point.set(result.getF32ptr()); - } - else - { - // focus on alt-zoom target - LLViewerRegion* region = gAgent.getRegion(); - if (region) + focus_point.set(result.getF32ptr()); + } + else { - focus_point = LLVector3(gAgentCamera.getFocusGlobal() - region->getOriginGlobal()); + // focus on alt-zoom target + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + focus_point = LLVector3(gAgentCamera.getFocusGlobal() - region->getOriginGlobal()); + } } } } + last_focus_point = focus_point; LLVector3 eye = LLViewerCamera::getInstance()->getOrigin(); F32 target_distance = 16.f; diff --git a/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml b/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml index 1a566180660836059cf99261a4e4e4861ccba079..cac983236e6fb81016f82e0a185b6e62fb69f240 100644 --- a/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater width="365" - height="330" + height="340" layout="topleft" - min_height="330" + min_height="340" min_width="365" name="floater_lightbox_settings" positioning="cascading" @@ -15,13 +15,13 @@ top_pad="0" enabled="true" follows="left|top" - height="330" - left_delta="5" + height="340" mouse_opaque="false" name="lightbox_tab_container" tab_position="top" tab_stop="false" - width="350"> + tab_min_width="70" + width="363"> <!--Image Panel--> <panel label="Image" @@ -34,7 +34,7 @@ follows="left|top" height="15" left="10" - top_pad="6" + top_pad="8" width="60" layout="topleft" tool_tip="What Colorgrading LUT (Look Up Texture) to be used to colorgrade the image. Custom LUTs require the full filename!" @@ -45,12 +45,11 @@ tool_tip="What Colorgrading LUT (Look Up Texture) to be used to colorgrade the image. Custom LUTs require the full filename!" control_name="RenderColorGradeLUT" follows="left|top" - height="20" layout="topleft" right="-4" max_chars="200" name="colorlut_combo" - top_pad="-18" + top_pad="-21" width="265"> <combo_box.item label="None" @@ -1366,12 +1365,12 @@ top_pad="4" width="110" layout="topleft" - tool_tip="Controls the strength of the SSAO effect." - value="SSAO Strength:" /> + tool_tip="Controls the value of the SSAO HSV transform." + value="SSAO Value:" /> <slider top_pad="-18" height="20" - increment=".1" + increment=".01" follows="left|top|right" layout="topleft" max_val="1" @@ -1379,32 +1378,77 @@ left="140" right="-75" show_text="false" - name="ssao_strength_slider" - tool_tip="Controls the strength of the SSAO effect." - control_name=""> - <slider.commit_callback - function="LightBox.SSAOCommit" - parameter="slider" /> - </slider> + name="ssao_value_slider" + tool_tip="Controls the value of the SSAO HSV transform.." + control_name="RenderSSAOEffectValue" /> <spinner top_pad="-20" height="15" label_width="0" right="-20" - decimal_digits="1" + decimal_digits="3" follows="top|right" layout="topleft" max_val="1" min_val="0" width="55" - increment=".1" + increment=".01" + name="ssao_value_spinner" + tool_tip="Controls the value of the SSAO HSV transform." + control_name="RenderSSAOEffectValue"/> + <button + name="ssaoVal_default_btn" + follows="top|right" + layout="topleft" + height="22" + left_delta="55" + top_pad="-15" + width="18" + scale_image="true" + image_overlay="Refresh_Off" + image_overlay_alignment="center"> + <button.commit_callback + function="LightBox.ResetControlDefault" + parameter="RenderSSAOEffectValue" /> + </button> + <text + follows="left|top" + height="15" + left="30" + top_pad="4" + width="110" + layout="topleft" + tool_tip="Controls the saturation of the SSAO HSV transform." + value="SSAO Saturation:" /> + <slider + top_pad="-18" + height="20" + increment=".01" + follows="left|top|right" + layout="topleft" + max_val="1" + min_val="0" + left="140" + right="-75" + show_text="false" + name="ssao_sat_slider" + tool_tip="Controls the saturation of the SSAO HSV transform." + control_name="RenderSSAOEffectSat" /> + <spinner + top_pad="-20" + height="15" + label_width="0" + right="-20" + decimal_digits="3" + follows="top|right" + layout="topleft" + max_val="1" + min_val="0" + width="55" + increment=".01" name="ssao_strength_spinner" - tool_tip="Controls the strength of the SSAO effect." - control_name=""> - <spinner.commit_callback - function="LightBox.SSAOCommit" - parameter="spinner" /> - </spinner> + tool_tip="Controls the saturation of the SSAO HSV transform." + control_name="RenderSSAOEffectSat"/> <button name="ssaoStrength_default_btn" follows="top|right" @@ -1418,7 +1462,7 @@ image_overlay_alignment="center"> <button.commit_callback function="LightBox.ResetControlDefault" - parameter="RenderSSAOEffect" /> + parameter="RenderSSAOEffectSat" /> </button> <!--SSAO Factor--> <text @@ -1448,7 +1492,7 @@ height="15" label_width="0" right="-20" - decimal_digits="1" + decimal_digits="3" follows="top|right" layout="topleft" max_val="10"