summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorRider Linden <rider@lindenlab.com>2018-10-30 17:55:42 +0000
committerRider Linden <rider@lindenlab.com>2018-10-30 17:55:42 +0000
commit7b6cd0859cbdf80f027bcec3948c7c165c7fe114 (patch)
tree0b5147ba3eb7d9d8a7feaecfabf11d8fff6f966e /indra
parent9a8e124fdecbeb57f65645d102f5f1767f8e4d16 (diff)
parent86419eb11be50bf75c9049a80e422d7704dd7d30 (diff)
Merged in andreykproductengine/maint-eep (pull request #170)
SL-1476 EEP Better shader transitions Approved-by: Maxim Nikolenko <maximnproductengine@lindenlab.com>
Diffstat (limited to 'indra')
-rw-r--r--indra/llinventory/llsettingsbase.cpp5
-rw-r--r--indra/llinventory/llsettingssky.cpp22
2 files changed, 23 insertions, 4 deletions
diff --git a/indra/llinventory/llsettingsbase.cpp b/indra/llinventory/llsettingsbase.cpp
index 80680948b5..4b8be04355 100644
--- a/indra/llinventory/llsettingsbase.cpp
+++ b/indra/llinventory/llsettingsbase.cpp
@@ -230,6 +230,11 @@ LLSD LLSettingsBase::interpolateSDMap(const LLSD &settings, const LLSD &other, c
// Blend against default value
newSettings[key_name] = interpolateSDValue(key_name, def_iter->second.getDefaultValue(), (*it).second, defaults, mix, slerps);
}
+ else if ((*it).second.type() == LLSD::TypeMap)
+ {
+ // interpolate in case there are defaults inside (part of legacy)
+ newSettings[key_name] = interpolateSDValue(key_name, LLSDMap(), (*it).second, defaults, mix, slerps);
+ }
// else do nothing when no known defaults
// TODO: Should I blend this out instead?
}
diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index cf6bc45080..088c183f70 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -438,11 +438,25 @@ void LLSettingsSky::blend(const LLSettingsBase::ptr_t &end, F64 blendf)
LLSettingsSky::ptr_t other = PTR_NAMESPACE::dynamic_pointer_cast<LLSettingsSky>(end);
if (other)
{
- if (!mSettings.has(SETTING_LEGACY_HAZE) && !mSettings[SETTING_LEGACY_HAZE].has(SETTING_AMBIENT))
+ if (other->mSettings.has(SETTING_LEGACY_HAZE))
{
- // Special case since SETTING_AMBIENT is both in outer and legacy maps, we prioritize legacy one
- // see getAmbientColor()
- setAmbientColor(getAmbientColor());
+ if (!mSettings.has(SETTING_LEGACY_HAZE) || !mSettings[SETTING_LEGACY_HAZE].has(SETTING_AMBIENT))
+ {
+ // Special case since SETTING_AMBIENT is both in outer and legacy maps, we prioritize legacy one
+ // see getAmbientColor(), we are about to replaceSettings(), so we are free to set it
+ setAmbientColor(getAmbientColor());
+ }
+ }
+ else
+ {
+ if (mSettings.has(SETTING_LEGACY_HAZE) && mSettings[SETTING_LEGACY_HAZE].has(SETTING_AMBIENT))
+ {
+ // Special case due to ambient's duality
+ // We need to match 'other's' structure for interpolation.
+ // We are free to change mSettings, since we are about to reset it
+ mSettings[SETTING_AMBIENT] = getAmbientColor().getValue();
+ mSettings[SETTING_LEGACY_HAZE].erase(SETTING_AMBIENT);
+ }
}
LLSD blenddata = interpolateSDMap(mSettings, other->mSettings, other->getParameterMap(), blendf);