summaryrefslogtreecommitdiff
path: root/indra/newview/pipeline.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/pipeline.cpp')
-rw-r--r--indra/newview/pipeline.cpp35
1 files changed, 27 insertions, 8 deletions
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 4b50b7218e..6c8fe60776 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7077,18 +7077,37 @@ void LLPipeline::generateExposure(LLRenderTarget* src, LLRenderTarget* dst, bool
LLSettingsSky::ptr_t sky = LLEnvironment::instance().getCurrentSky();
F32 probe_ambiance = LLEnvironment::instance().getCurrentSky()->getReflectionProbeAmbiance(should_auto_adjust);
- F32 exp_min = sky->getHDRMin();
- F32 exp_max = sky->getHDRMax();
- if (dynamic_exposure_enabled)
+ F32 exp_min = 1.f;
+ F32 exp_max = 1.f;
+
+ static LLCachedControl<bool> use_exposure_sky_settings(gSavedSettings, "RenderUseExposureSkySettings", false);
+
+ if (use_exposure_sky_settings)
{
- exp_min = sky->getHDROffset() - exp_min;
- exp_max = sky->getHDROffset() + exp_max;
+ if (dynamic_exposure_enabled)
+ {
+ exp_min = sky->getHDROffset() - sky->getHDRMin();
+ exp_max = sky->getHDROffset() + sky->getHDRMax();
+ }
+ else
+ {
+ exp_min = sky->getHDROffset();
+ exp_max = sky->getHDROffset();
+ }
}
- else
+ else if (dynamic_exposure_enabled)
{
- exp_min = sky->getHDROffset();
- exp_max = sky->getHDROffset();
+ if (probe_ambiance > 0.f)
+ {
+ F32 hdr_scale = sqrtf(LLEnvironment::instance().getCurrentSky()->getGamma()) * 2.f;
+
+ if (hdr_scale > 1.f)
+ {
+ exp_min = 1.f / hdr_scale;
+ exp_max = hdr_scale;
+ }
+ }
}
shader->uniform1f(dt, gFrameIntervalSeconds);