diff options
| author | Graham Linden <graham@lindenlab.com> | 2018-11-01 20:41:56 +0100 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2018-11-01 20:41:56 +0100 | 
| commit | e529da6ba7afd5ce9adffc3d02186a47c596b905 (patch) | |
| tree | 0ef5661eee6d826d8e6eb69f54fd129cbe9cc5ff | |
| parent | 4f267a5723e7da2de36b9f2295e4942a4c8bf6c5 (diff) | |
| parent | e6b5ed3fefb1b5f0fca59075a20404a160b5116b (diff) | |
Merge
| -rw-r--r-- | indra/llinventory/llsettingsbase.cpp | 5 | ||||
| -rw-r--r-- | indra/llinventory/llsettingssky.cpp | 49 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llfloaterland.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvosky.cpp | 6 | 
5 files changed, 64 insertions, 19 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 aff8bec1cd..f21cca34a6 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -438,18 +438,56 @@ 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); +            } +        } + +        LLUUID cloud_noise_id = getCloudNoiseTextureId(); +        LLUUID cloud_noise_id_next = other->getCloudNoiseTextureId(); +        F64 cloud_shadow = 0; +        if (!cloud_noise_id.isNull() && cloud_noise_id_next.isNull()) +        { +            // If there is no cloud texture in destination, reduce coverage to imitate disappearance +            // See LLDrawPoolWLSky::renderSkyClouds... we don't blend present texture with null +            // Note: Probably can be done by shader +            cloud_shadow = lerp(mSettings[SETTING_CLOUD_SHADOW].asReal(), (F64)0.f, blendf); +            cloud_noise_id_next = cloud_noise_id; +        } +        else if (cloud_noise_id.isNull() && !cloud_noise_id_next.isNull()) +        { +            // Source has no cloud texture, reduce initial coverage to imitate appearance +            // use same texture as destination +            cloud_shadow = lerp((F64)0.f, other->mSettings[SETTING_CLOUD_SHADOW].asReal(), blendf); +            setCloudNoiseTextureId(cloud_noise_id_next); +        } +        else +        { +            cloud_shadow = lerp(mSettings[SETTING_CLOUD_SHADOW].asReal(), other->mSettings[SETTING_CLOUD_SHADOW].asReal(), blendf);          }          LLSD blenddata = interpolateSDMap(mSettings, other->mSettings, other->getParameterMap(), blendf); +        blenddata[SETTING_CLOUD_SHADOW] = LLSD::Real(cloud_shadow);          replaceSettings(blenddata);          mNextSunTextureId = other->getSunTextureId();          mNextMoonTextureId = other->getMoonTextureId(); -        mNextCloudTextureId = other->getCloudNoiseTextureId(); +        mNextCloudTextureId = cloud_noise_id_next;          mNextBloomTextureId = other->getBloomTextureId();          mNextRainbowTextureId = other->getRainbowTextureId();          mNextHaloTextureId = other->getHaloTextureId(); @@ -472,6 +510,7 @@ LLSettingsSky::stringset_t LLSettingsSky::getSkipInterpolateKeys() const          skipSet.insert(SETTING_RAYLEIGH_CONFIG);          skipSet.insert(SETTING_MIE_CONFIG);          skipSet.insert(SETTING_ABSORPTION_CONFIG); +        skipSet.insert(SETTING_CLOUD_SHADOW);      }      return skipSet; diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 3d3ab9e80b..aff9dec0db 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -51,6 +51,7 @@  // newview  #include "llagent.h" +#include "llappviewer.h" //gDisconected  #include "llparcel.h"  #include "llflyoutcombobtn.h" //Todo: make a proper UI element/button/panel instead  #include "llregioninfomodel.h" @@ -1523,17 +1524,19 @@ void LLFloaterEditExtDayCycle::stopPlay()  //static  void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data)  { -    LLFloaterEditExtDayCycle* self = (LLFloaterEditExtDayCycle*)user_data; - -    F32 prcnt_played = self->mPlayTimer.getElapsedTimeF32() / DAY_CYCLE_PLAY_TIME_SECONDS; -    F32 new_frame = fmod(self->mPlayStartFrame + prcnt_played, 1.f); +    if (!gDisconnected) +    { +        LLFloaterEditExtDayCycle* self = (LLFloaterEditExtDayCycle*)user_data; -    self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding -    self->mSkyBlender->setPosition(new_frame); -    self->mWaterBlender->setPosition(new_frame); -    self->synchronizeTabs(); -    self->updateTimeAndLabel(); +        F32 prcnt_played = self->mPlayTimer.getElapsedTimeF32() / DAY_CYCLE_PLAY_TIME_SECONDS; +        F32 new_frame = fmod(self->mPlayStartFrame + prcnt_played, 1.f); +        self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding +        self->mSkyBlender->setPosition(new_frame); +        self->mWaterBlender->setPosition(new_frame); +        self->synchronizeTabs(); +        self->updateTimeAndLabel(); +    }  } diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 1147f54853..0ff660fcad 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -255,7 +255,7 @@ LLPanelLandCovenant* LLFloaterLand::getCurrentPanelLandCovenant()  // static  void LLFloaterLand::refreshAll()  { -	LLFloaterLand* land_instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); +	LLFloaterLand* land_instance = LLFloaterReg::findTypedInstance<LLFloaterLand>("about_land");  	if(land_instance)  	{  		land_instance->refresh(); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index fe45bdc671..b890e21e41 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -1001,7 +1001,7 @@ void LLVOSky::setMoonTextures(const LLUUID& moon_texture, const LLUUID& moon_tex      LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();      LLUUID moon_tex = moon_texture.isNull() ? psky->GetDefaultMoonTextureId() : moon_texture; -    LLUUID moon_tex_next = moon_texture_next.isNull() ? (moon_texture.isNull() ? psky->GetDefaultMoonTextureId() : moon_texture) : moon_texture_next; +    LLUUID moon_tex_next = moon_texture_next.isNull() ? psky->GetDefaultMoonTextureId() : moon_texture_next;      mMoonTexturep[0] = moon_tex.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(moon_tex, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);      mMoonTexturep[1] = moon_tex_next.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(moon_tex_next, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI); @@ -1026,10 +1026,8 @@ void LLVOSky::setCloudNoiseTextures(const LLUUID& cloud_noise_texture, const LLU  {      LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky(); -    LLUUID cloud_noise_tex_next = cloud_noise_texture_next.isNull() ? (cloud_noise_texture.isNull() ? LLUUID() : cloud_noise_texture) : cloud_noise_texture_next; -      mCloudNoiseTexturep[0] = cloud_noise_texture.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(cloud_noise_texture, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI); -    mCloudNoiseTexturep[1] = cloud_noise_tex_next.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(cloud_noise_tex_next, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI); +    mCloudNoiseTexturep[1] = cloud_noise_texture_next.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(cloud_noise_texture_next, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);      if (mCloudNoiseTexturep[0])      {  | 
