summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llenvironment.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index 74c1b99e4d..809289fd63 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -612,6 +612,7 @@ namespace
specialSet.insert(SETTING_CLOUD_TEXTUREID);
specialSet.insert(SETTING_MOON_TEXTUREID);
specialSet.insert(SETTING_SUN_TEXTUREID);
+ specialSet.insert(SETTING_CLOUD_SHADOW); // due to being part of skips
}
return specialSet;
}
@@ -652,6 +653,7 @@ namespace
template<>
void LLSettingsInjected<LLSettingsVOSky>::updateSpecial(const typename LLSettingsInjected<LLSettingsVOSky>::Injection::ptr_t &injection, typename LLSettingsBase::BlendFactor mix)
{
+ bool is_texture = true;
if (injection->mKeyName == SETTING_SUN_TEXTUREID)
{
mNextSunTextureId = injection->mValue.asUUID();
@@ -676,9 +678,29 @@ namespace
{
mNextHaloTextureId = injection->mValue.asUUID();
}
+ else if (injection->mKeyName == LLSettingsSky::SETTING_CLOUD_SHADOW)
+ {
+ // Special case due to being texture dependent and part of skips
+ is_texture = false;
+ if (!injection->mBlendIn)
+ mix = 1.0 - mix;
+ stringset_t dummy;
+ LLUUID cloud_noise_id = getCloudNoiseTextureId();
+ F64 value = this->mSettings[injection->mKeyName].asReal();
+ if (this->getCloudNoiseTextureId().isNull())
+ {
+ value = 0; // there was no texture so start from zero coverage
+ }
+ // Ideally we need to check for texture in injection, but
+ // in this case user is setting value explicitly, potentially
+ // with different transitions, don't ignore it
+ F64 result = lerp(value, injection->mValue.asReal(), mix);
+ injection->mLastValue = LLSD::Real(result);
+ this->mSettings[injection->mKeyName] = injection->mLastValue;
+ }
// Unfortunately I don't have a per texture blend factor. We'll just pick the one that is furthest along.
- if (getBlendFactor() < mix)
+ if (is_texture && getBlendFactor() < mix)
{
setBlendFactor(mix);
}