Make water and sky defaults take a position value to allow for default daycycle w/ multiple frames.

Make default daycycle add 8 frames at 0, 0.125, 0.25 etc

Merge over server-side bugfixes.

Eliminate extraneous dirty bits in sky settings.
master
Graham Linden 2018-06-15 21:15:02 +01:00
parent c07775798e
commit 66d78ce1c7
8 changed files with 74 additions and 86 deletions

View File

@ -580,10 +580,18 @@ F64 LLSettingsBlender::setBlendFactor(const LLSettingsBase::BlendFactor& blendf_
}
blendf = llclamp(blendf, 0.0f, 1.0f);
mTarget->replaceSettings(mInitial->getSettings());
if (!mFinal || (mInitial == mFinal) || (blendf == 0.0))
{ // this is a trivial blend. Results will be identical to the initial.
return blendf;
if (mTarget)
{
mTarget->replaceSettings(mInitial->getSettings());
if (!mFinal || (mInitial == mFinal) || (blendf == 0.0))
{ // this is a trivial blend. Results will be identical to the initial.
return blendf;
}
mTarget->blend(mFinal, blendf);
}
else
{
LL_WARNS("SETTINGS") << "No target for settings blender." << LL_ENDL;
}
mTarget->blend(mFinal, blendf);
@ -592,7 +600,8 @@ F64 LLSettingsBlender::setBlendFactor(const LLSettingsBase::BlendFactor& blendf_
void LLSettingsBlender::triggerComplete()
{
mTarget->replaceSettings(mFinal->getSettings());
if (mTarget)
mTarget->replaceSettings(mFinal->getSettings());
LLSettingsBlender::ptr_t hold = shared_from_this(); // prevents this from deleting too soon
mOnFinished(shared_from_this());
}

View File

@ -312,7 +312,7 @@ public:
mInitial(initsetting),
mFinal(endsetting)
{
if (mInitial)
if (mInitial && mTarget)
mTarget->replaceSettings(mInitial->getSettings());
if (!mFinal)
@ -333,7 +333,8 @@ public:
if (!mFinal)
mFinal = mInitial;
mTarget->replaceSettings(mInitial->getSettings());
if (mTarget)
mTarget->replaceSettings(mInitial->getSettings());
}
LLSettingsBase::ptr_t getTarget() const

View File

@ -233,11 +233,13 @@ bool LLSettingsDay::initialize()
keyframe = llclamp(keyframe, 0.0f, 1.0f);
LLSettingsBase::ptr_t setting;
if ((*it).has(SETTING_KEYNAME))
{
std::string key_name = (*it)[SETTING_KEYNAME];
if (i == TRACK_WATER)
{
setting = used[(*it)[SETTING_KEYNAME]];
setting = used[key_name];
if (setting && setting->getSettingsType() != "water")
{
LL_WARNS("DAYCYCLE") << "Water track referencing " << setting->getSettingsType() << " frame at " << keyframe << "." << LL_ENDL;
@ -246,7 +248,7 @@ bool LLSettingsDay::initialize()
}
else
{
setting = used[(*it)[SETTING_KEYNAME]];
setting = used[key_name];
if (setting && setting->getSettingsType() != "sky")
{
LL_WARNS("DAYCYCLE") << "Sky track #" << i << " referencing " << setting->getSettingsType() << " frame at " << keyframe << "." << LL_ENDL;
@ -287,13 +289,36 @@ LLSD LLSettingsDay::defaults()
dfltsetting[SETTING_NAME] = "_default_";
LLSD frames(LLSD::emptyMap());
LLSD waterTrack;
waterTrack[SETTING_KEYKFRAME] = 0.0f;
waterTrack[SETTING_KEYNAME] = "_default_";
LLSD skyTrack;
skyTrack[SETTING_KEYKFRAME] = 0.0f;
skyTrack[SETTING_KEYNAME] = "_default_";
const U32 FRAME_COUNT = 8;
const F32 FRAME_STEP = 1.0f / F32(FRAME_COUNT);
F32 time = 0.0f;
for (U32 i = 0; i < FRAME_COUNT; i++)
{
std::string name("_default_");
name += ('a' + i);
std::string water_frame_name("water:");
std::string sky_frame_name("sky:");
water_frame_name += name;
sky_frame_name += name;
waterTrack[SETTING_KEYKFRAME] = time;
waterTrack[SETTING_KEYNAME] = water_frame_name;
skyTrack[SETTING_KEYKFRAME] = time;
skyTrack[SETTING_KEYNAME] = sky_frame_name;
frames[water_frame_name] = LLSettingsWater::defaults(time);
frames[sky_frame_name] = LLSettingsSky::defaults(time);
time += FRAME_STEP;
}
LLSD tracks;
tracks.append(LLSDArray(waterTrack));
@ -301,10 +326,7 @@ LLSD LLSettingsDay::defaults()
dfltsetting[SETTING_TRACKS] = tracks;
LLSD frames(LLSD::emptyMap());
frames["water:_defaults_"] = LLSettingsWater::defaults();
frames["sky:_defaults_"] = LLSettingsSky::defaults();
dfltsetting[SETTING_FRAMES] = frames;
@ -532,14 +554,6 @@ bool LLSettingsDay::moveTrackKeyframe(S32 trackno, const LLSettingsBase::TrackPo
CycleTrack_t::iterator iter = track.find(old_frame);
if (iter != track.end())
{
/*TODO check that we are not moving too close to another keyframe */
// CycleTrack_t::value_type existing = getSettingsNearKeyfarme(new_frame, trackno, 2.5f);
// if ((*iter).first != existing.first)
// {
// LL_WARNS("DAYCYCLE") << "Track too close to existing track. Not moving." << LL_ENDL;
// return false;
// }
LLSettingsBase::ptr_t base = iter->second;
track.erase(iter);
track[llclamp(new_frame, 0.0f, 1.0f)] = base;

View File

@ -366,9 +366,7 @@ LLSettingsSky::LLSettingsSky(const LLSD &data) :
LLSettingsBase(data),
mNextSunTextureId(),
mNextMoonTextureId(),
mNextCloudTextureId(),
mPositionsDirty(true),
mLightingDirty(true)
mNextCloudTextureId()
{
}
@ -376,9 +374,7 @@ LLSettingsSky::LLSettingsSky():
LLSettingsBase(),
mNextSunTextureId(),
mNextMoonTextureId(),
mNextCloudTextureId(),
mPositionsDirty(true),
mLightingDirty(true)
mNextCloudTextureId()
{
}
@ -396,9 +392,7 @@ void LLSettingsSky::blend(const LLSettingsBase::ptr_t &end, F64 blendf)
LLSD blenddata = interpolateSDMap(mSettings, other->mSettings, blendf);
replaceSettings(blenddata);
mPositionsDirty = true;
mLightingDirty = true;
setBlendFactor(blendf);
mNextSunTextureId = other->getSunTextureId();
mNextMoonTextureId = other->getMoonTextureId();
@ -585,14 +579,19 @@ LLSD LLSettingsSky::mieConfigDefault()
return dflt_mie;
}
LLSD LLSettingsSky::defaults()
LLSD LLSettingsSky::defaults(const LLSettingsBase::TrackPosition& position)
{
LLSD dfltsetting;
LLQuaternion sunquat;
LLQuaternion moonquat;
sunquat = convert_azimuth_and_altitude_to_quat(0.0f, 80.0f * DEG_TO_RAD);
moonquat = convert_azimuth_and_altitude_to_quat(F_PI, 80.0f * DEG_TO_RAD);
F32 azimuth = (F_PI * position) + (80.0f * DEG_TO_RAD);
F32 altitude = (F_PI * position);
// give the sun and moon slightly different tracks through the sky
// instead of positioning them at opposite poles from each other...
sunquat = convert_azimuth_and_altitude_to_quat(altitude, azimuth);
moonquat = convert_azimuth_and_altitude_to_quat(altitude + (F_PI * 0.125f), azimuth + (F_PI * 0.125f));
// Magic constants copied form dfltsetting.xml
dfltsetting[SETTING_CLOUD_COLOR] = LLColor4(0.4099, 0.4099, 0.4099, 0.0).getValue();
@ -784,9 +783,6 @@ LLSD LLSettingsSky::translateLegacySettings(const LLSD& legacy)
void LLSettingsSky::updateSettings()
{
mPositionsDirty |= isVeryDirty();
mLightingDirty |= isVeryDirty();
// base class clears dirty flag so as to not trigger recursive update
LLSettingsBase::updateSettings();
@ -811,15 +807,6 @@ bool LLSettingsSky::getIsMoonUp() const
void LLSettingsSky::calculateHeavenlyBodyPositions() const
{
/* can't do this as it gets defeated during animation of env panel settings
if (!mPositionsDirty)
{
return;
}*/
mPositionsDirty = false;
mLightingDirty = true; // changes light direction
LLQuaternion sunq = getSunRotation();
LLQuaternion moonq = getMoonRotation();
@ -829,11 +816,11 @@ void LLSettingsSky::calculateHeavenlyBodyPositions() const
mSunDirection.normalize();
mMoonDirection.normalize();
LL_WARNS("LAPRAS") << "Sun info: Rotation=" << sunq << " Vector=" << mSunDirection << LL_ENDL;
LL_WARNS("LAPRAS") << "Moon info: Rotation=" << moonq << " Vector=" << mMoonDirection << LL_ENDL;
//LL_WARNS("LAPRAS") << "Sun info: Rotation=" << sunq << " Vector=" << mSunDirection << LL_ENDL;
//LL_WARNS("LAPRAS") << "Moon info: Rotation=" << moonq << " Vector=" << mMoonDirection << LL_ENDL;
llassert(mSunDirection.lengthSquared() > 0.0);
llassert(mMoonDirection.lengthSquared() > 0.0);
llassert(mSunDirection.lengthSquared() > 0.01f);
llassert(mMoonDirection.lengthSquared() > 0.01f);
}
LLVector3 LLSettingsSky::getLightDirection() const
@ -843,12 +830,10 @@ LLVector3 LLSettingsSky::getLightDirection() const
// is the normal from the sun or the moon
if (getIsSunUp())
{
llassert(mSunDirection.lengthSquared() > 0.01f);
return mSunDirection;
}
else if (getIsMoonUp())
{
llassert(mMoonDirection.lengthSquared() > 0.01f);
return mMoonDirection;
}
@ -913,42 +898,36 @@ void LLSettingsSky::setBlueDensity(const LLColor3 &val)
{
mSettings[SETTING_LEGACY_HAZE][SETTING_BLUE_DENSITY] = val.getValue();
setDirtyFlag(true);
mLightingDirty = true;
}
void LLSettingsSky::setBlueHorizon(const LLColor3 &val)
{
mSettings[SETTING_LEGACY_HAZE][SETTING_BLUE_HORIZON] = val.getValue();
setDirtyFlag(true);
mLightingDirty = true;
}
void LLSettingsSky::setDensityMultiplier(F32 val)
{
mSettings[SETTING_LEGACY_HAZE][SETTING_DENSITY_MULTIPLIER] = val;
setDirtyFlag(true);
mLightingDirty = true;
}
void LLSettingsSky::setDistanceMultiplier(F32 val)
{
mSettings[SETTING_LEGACY_HAZE][SETTING_DISTANCE_MULTIPLIER] = val;
setDirtyFlag(true);
mLightingDirty = true;
}
void LLSettingsSky::setHazeDensity(F32 val)
{
mSettings[SETTING_LEGACY_HAZE][SETTING_HAZE_DENSITY] = val;
setDirtyFlag(true);
mLightingDirty = true;
}
void LLSettingsSky::setHazeHorizon(F32 val)
{
mSettings[SETTING_LEGACY_HAZE][SETTING_HAZE_HORIZON] = val;
setDirtyFlag(true);
mLightingDirty = true;
}
// Sunlight attenuation effect (hue and brightness) due to atmosphere
@ -1037,16 +1016,6 @@ LLColor4 LLSettingsSky::getTotalAmbient() const
void LLSettingsSky::calculateLightSettings() const
{
/* can't do this as it gets defeated during animation of env panel settings
if (!mLightingDirty)
{
return;
}
calculateHeavenlyBodyPositions();*/
mLightingDirty = false;
// Initialize temp variables
LLColor3 sunlight = getSunlightColor();
LLColor3 ambient = getAmbientColor();
@ -1158,7 +1127,6 @@ LLColor3 LLSettingsSky::getAmbientColor() const
void LLSettingsSky::setAmbientColor(const LLColor3 &val)
{
setValue(SETTING_AMBIENT, val);
mLightingDirty = true;
}
LLColor3 LLSettingsSky::getCloudColor() const
@ -1241,7 +1209,6 @@ F32 LLSettingsSky::getCloudShadow() const
void LLSettingsSky::setCloudShadow(F32 val)
{
setValue(SETTING_CLOUD_SHADOW, val);
mLightingDirty = true;
}
F32 LLSettingsSky::getDomeOffset() const
@ -1265,7 +1232,6 @@ void LLSettingsSky::setGamma(F32 val)
{
mSettings[SETTING_GAMMA] = LLSD::Real(val);
setDirtyFlag(true);
mLightingDirty = true;
}
LLColor3 LLSettingsSky::getGlow() const
@ -1276,7 +1242,6 @@ LLColor3 LLSettingsSky::getGlow() const
void LLSettingsSky::setGlow(const LLColor3 &val)
{
setValue(SETTING_GLOW, val);
mLightingDirty = true;
}
F32 LLSettingsSky::getMaxY() const
@ -1297,7 +1262,6 @@ LLQuaternion LLSettingsSky::getMoonRotation() const
void LLSettingsSky::setMoonRotation(const LLQuaternion &val)
{
setValue(SETTING_MOON_ROTATION, val);
mPositionsDirty = true;
}
LLUUID LLSettingsSky::getMoonTextureId() const
@ -1328,7 +1292,6 @@ LLColor3 LLSettingsSky::getSunlightColor() const
void LLSettingsSky::setSunlightColor(const LLColor3 &val)
{
setValue(SETTING_SUNLIGHT_COLOR, val);
mLightingDirty = true;
}
LLQuaternion LLSettingsSky::getSunRotation() const
@ -1339,7 +1302,6 @@ LLQuaternion LLSettingsSky::getSunRotation() const
void LLSettingsSky::setSunRotation(const LLQuaternion &val)
{
setValue(SETTING_SUN_ROTATION, val);
mPositionsDirty = true;
}
LLUUID LLSettingsSky::getSunTextureId() const

View File

@ -105,7 +105,7 @@ public:
virtual void replaceSettings(LLSD settings) SETTINGS_OVERRIDE;
static LLSD defaults();
static LLSD defaults(const LLSettingsBase::TrackPosition& position = 0.0f);
F32 getPlanetRadius() const;
F32 getSkyBottomRadius() const;
@ -247,9 +247,6 @@ protected:
virtual void updateSettings() SETTINGS_OVERRIDE;
private:
mutable bool mPositionsDirty;
mutable bool mLightingDirty;
static LLSD rayleighConfigDefault();
static LLSD absorptionConfigDefault();
static LLSD mieConfigDefault();

View File

@ -87,10 +87,13 @@ LLSettingsWater::LLSettingsWater() :
}
//=========================================================================
LLSD LLSettingsWater::defaults()
LLSD LLSettingsWater::defaults(const LLSettingsBase::TrackPosition& position)
{
LLSD dfltsetting;
// give the normal scale offset some variability over track time...
F32 normal_scale_offset = (position * 0.5f) - 0.25f;
// Magic constants copied form defaults.xml
dfltsetting[SETTING_BLUR_MULTIPILER] = LLSD::Real(0.04000f);
dfltsetting[SETTING_FOG_COLOR] = LLColor3(0.0156f, 0.1490f, 0.2509f).getValue();
@ -100,7 +103,7 @@ LLSD LLSettingsWater::defaults()
dfltsetting[SETTING_FRESNEL_SCALE] = LLSD::Real(0.3999);
dfltsetting[SETTING_TRANSPARENT_TEXTURE] = GetDefaultTransparentTextureAssetId();
dfltsetting[SETTING_NORMAL_MAP] = GetDefaultWaterNormalAssetId();
dfltsetting[SETTING_NORMAL_SCALE] = LLVector3(2.0f, 2.0f, 2.0f).getValue();
dfltsetting[SETTING_NORMAL_SCALE] = LLVector3(2.0f + normal_scale_offset, 2.0f + normal_scale_offset, 2.0f + normal_scale_offset).getValue();
dfltsetting[SETTING_SCALE_ABOVE] = LLSD::Real(0.0299f);
dfltsetting[SETTING_SCALE_BELOW] = LLSD::Real(0.2000f);
dfltsetting[SETTING_WAVE1_DIR] = LLVector2(1.04999f, -0.42000f).getValue();

View File

@ -62,7 +62,7 @@ public:
// Settings status
virtual void blend(const LLSettingsBase::ptr_t &end, F64 blendf) SETTINGS_OVERRIDE;
static LLSD defaults();
static LLSD defaults(const LLSettingsBase::TrackPosition& position = 0.0f);
//---------------------------------------------------------------------
F32 getBlurMultiplier() const

View File

@ -845,6 +845,7 @@ void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::pt
updateEditEnvironment();
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT);
synchronizeTabs();
updateTabs();
refresh();
}
@ -869,6 +870,7 @@ void LLFloaterEditExtDayCycle::loadLiveEnvironment(LLEnvironment::EnvSelection_t
updateEditEnvironment();
synchronizeTabs();
updateTabs();
refresh();
}