diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llinventory/llsettingsbase.cpp | 5 | ||||
| -rw-r--r-- | indra/llinventory/llsettingssky.cpp | 22 | 
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);  | 
