summaryrefslogtreecommitdiff
path: root/indra/newview/llenvironment.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llenvironment.cpp')
-rw-r--r--indra/newview/llenvironment.cpp399
1 files changed, 169 insertions, 230 deletions
diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index 60c2682078..0017a724ea 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -5,21 +5,21 @@
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
- *
+ *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -54,8 +54,6 @@
#include "llregioninfomodel.h"
-#include <boost/make_shared.hpp>
-
#include "llatmosphere.h"
#include "llagent.h"
#include "roles_constants.h"
@@ -94,7 +92,7 @@ namespace
const std::string KEY_ACTION("action");
const std::string KEY_ACTIONDATA("action_data");
const std::string KEY_EXPERIENCEID("public_id");
- const std::string KEY_OBJECTNAME("ObjectName"); // some of these do not conform to the '_' format.
+ const std::string KEY_OBJECTNAME("ObjectName"); // some of these do not conform to the '_' format.
const std::string KEY_PARCELNAME("ParcelName"); // But changing these would also alter the Experience Log requirements.
const std::string KEY_COUNT("Count");
@@ -209,7 +207,7 @@ namespace
mInitial = (*initial.first).second;
mFinal = (*initial.second).second;
- mBlendSpan = getSpanTime(initial);
+ mBlendSpan = (LLSettingsBase::TrackPosition)getSpanTime(initial);
initializeTarget(now);
setOnFinished([this](const LLSettingsBlender::ptr_t &){ onFinishedSpan(); });
@@ -237,7 +235,7 @@ namespace
LLSettingsBase::BlendFactor blendf = calculateBlend(targetpos, targetspan);
pendsetting->blend((*bounds.second).second, blendf);
- reset(pstartsetting, pendsetting, LLEnvironment::TRANSITION_ALTITUDE);
+ reset(pstartsetting, pendsetting, (LLSettingsBase::TrackPosition)LLEnvironment::TRANSITION_ALTITUDE);
}
protected:
@@ -304,7 +302,7 @@ namespace
LLSettingsDay::TrackBound_t next = getBoundingEntries(adjusted_now);
LLSettingsBase::Seconds nextspan = getSpanTime(next);
- reset((*next.first).second, (*next.second).second, nextspan);
+ reset((*next.first).second, (*next.second).second, (LLSettingsBase::TrackPosition)nextspan);
// Recalculate (reinitialize) position. Because:
// - 'delta' from applyTimeDelta accumulates errors (probably should be fixed/changed to absolute time)
@@ -370,13 +368,13 @@ namespace
virtual ~LLSettingsInjected() {};
typename SETTINGT::ptr_t getSource() const { return this->mSource; }
- void setSource(const typename SETTINGT::ptr_t &source)
+ void setSource(const typename SETTINGT::ptr_t &source)
{
if (source.get() == this) // do not set a source to itself.
return;
- this->mSource = source;
- this->setDirtyFlag(true);
- this->mLastSourceHash = 0;
+ this->mSource = source;
+ this->setDirtyFlag(true);
+ this->mLastSourceHash = 0;
}
virtual bool isDirty() const override { return SETTINGT::isDirty() || (this->mSource->isDirty()); }
@@ -455,11 +453,11 @@ namespace
void applyInjections(LLSettingsBase::Seconds delta)
{
- this->mSettings = this->mSource->getSettings();
+ LLSD settings = this->mSource->cloneSettings();
for (auto ito = mOverrideValues.beginMap(); ito != mOverrideValues.endMap(); ++ito)
{
- this->mSettings[(*ito).first] = (*ito).second;
+ settings[(*ito).first] = (*ito).second;
}
const LLSettingsBase::stringset_t &slerps = this->getSlerpKeys();
@@ -471,7 +469,7 @@ namespace
{
std::string key_name = (*it)->mKeyName;
- LLSD value = this->mSettings[key_name];
+ LLSD value = settings[key_name];
LLSD target = (*it)->mValue;
if ((*it)->mFirstTime)
@@ -487,11 +485,11 @@ namespace
{
mOverrideValues[key_name] = target;
mOverrideExps[key_name] = (*it)->mExperience;
- this->mSettings[key_name] = target;
+ settings[key_name] = target;
}
else
{
- this->mSettings.erase(key_name);
+ settings.erase(key_name);
}
}
else if (specials.find(key_name) != specials.end())
@@ -502,8 +500,8 @@ namespace
{
if (!(*it)->mBlendIn)
mix = 1.0 - mix;
- (*it)->mLastValue = this->interpolateSDValue(key_name, value, target, this->getParameterMap(), mix, slerps);
- this->mSettings[key_name] = (*it)->mLastValue;
+ (*it)->mLastValue = this->interpolateSDValue(key_name, value, target, this->getParameterMap(), mix, skips, slerps);
+ settings[key_name] = (*it)->mLastValue;
}
}
@@ -522,7 +520,7 @@ namespace
{
mInjections.erase(mInjections.begin(), mInjections.end());
}
-
+ this->setSettings(settings);
}
bool hasInjections() const
@@ -565,7 +563,7 @@ namespace
if (!this->mSource)
return;
- // clears the dirty flag on this object. Need to prevent triggering
+ // clears the dirty flag on this object. Need to prevent triggering
// more calls into this updateSettings
LLSettingsBase::updateSettings();
@@ -687,7 +685,8 @@ namespace
if (!injection->mBlendIn)
mix = 1.0 - mix;
stringset_t dummy;
- F64 value = this->mSettings[injection->mKeyName].asReal();
+ LLSD settings = this->cloneSettings();
+ F64 value = settings[injection->mKeyName].asReal();
if (this->getCloudNoiseTextureId().isNull())
{
value = 0; // there was no texture so start from zero coverage
@@ -695,9 +694,10 @@ namespace
// 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);
+ F64 result = lerp((F32)value, (F32)injection->mValue.asReal(), (F32)mix);
injection->mLastValue = LLSD::Real(result);
- this->mSettings[injection->mKeyName] = injection->mLastValue;
+ settings[injection->mKeyName] = injection->mLastValue;
+ this->setSettings(settings);
}
// Unfortunately I don't have a per texture blend factor. We'll just pick the one that is furthest along.
@@ -757,7 +757,7 @@ namespace
LLEnvironment::DayInstance::ptr_t getBaseDayInstance() const { return mBaseDayInstance; }
void setBaseDayInstance(const LLEnvironment::DayInstance::ptr_t &baseday);
- S32 countExperiencesActive() const { return mActiveExperiences.size(); }
+ S32 countExperiencesActive() const { return static_cast<S32>(mActiveExperiences.size()); }
bool isOverriddenSky() const { return !mSkyExperience.isNull(); }
bool isOverriddenWater() const { return !mWaterExperience.isNull(); }
@@ -816,7 +816,7 @@ const F64Seconds LLEnvironment::TRANSITION_ALTITUDE(5.0f);
const LLUUID LLEnvironment::KNOWN_SKY_SUNRISE("01e41537-ff51-2f1f-8ef7-17e4df760bfb");
const LLUUID LLEnvironment::KNOWN_SKY_MIDDAY("c46226b4-0e43-5a56-9708-d27ca1df3292");
-const LLUUID LLEnvironment::KNOWN_SKY_LEGACY_MIDDAY("cef49723-0292-af49-9b14-9598a616b8a3");
+const LLUUID LLEnvironment::KNOWN_SKY_LEGACY_MIDDAY("6c83e853-e7f8-cad7-8ee6-5f31c453721c");
const LLUUID LLEnvironment::KNOWN_SKY_SUNSET("084e26cd-a900-28e8-08d0-64a9de5c15e2");
const LLUUID LLEnvironment::KNOWN_SKY_MIDNIGHT("8a01b97a-cb20-c1ea-ac63-f7ea84ad0090");
@@ -824,7 +824,7 @@ const S32 LLEnvironment::NO_TRACK(-1);
const S32 LLEnvironment::NO_VERSION(-3); // For viewer sided change, like ENV_LOCAL. -3 since -1 and -2 are taken by parcel initial server/viewer version
const S32 LLEnvironment::VERSION_CLEANUP(-4); // for cleanups
-const F32 LLEnvironment::SUN_DELTA_YAW(F_PI); // 180deg
+const F32 LLEnvironment::SUN_DELTA_YAW(F_PI); // 180deg
const U32 LLEnvironment::DayInstance::NO_ANIMATE_SKY(0x01);
@@ -898,7 +898,7 @@ void LLEnvironment::initSingleton()
gSavedSettings.getControl("RenderSkyAutoAdjustProbeAmbiance")->getSignal()->connect(
[](LLControlVariable*, const LLSD& new_val, const LLSD& old_val)
{
- LLSettingsSky::sAutoAdjustProbeAmbiance = new_val.asReal();
+ LLSettingsSky::sAutoAdjustProbeAmbiance = (F32)new_val.asReal();
}
);
LLSettingsSky::sAutoAdjustProbeAmbiance = gSavedSettings.getF32("RenderSkyAutoAdjustProbeAmbiance");
@@ -929,9 +929,9 @@ bool LLEnvironment::canEdit() const
return true;
}
-LLSettingsSky::ptr_t LLEnvironment::getCurrentSky() const
-{
- LLSettingsSky::ptr_t psky = mCurrentEnvironment->getSky();
+LLSettingsSky::ptr_t LLEnvironment::getCurrentSky() const
+{
+ LLSettingsSky::ptr_t psky = mCurrentEnvironment->getSky();
if (!psky && mCurrentEnvironment->getEnvironmentSelection() >= ENV_EDIT)
{
@@ -947,9 +947,9 @@ LLSettingsSky::ptr_t LLEnvironment::getCurrentSky() const
return psky;
}
-LLSettingsWater::ptr_t LLEnvironment::getCurrentWater() const
+LLSettingsWater::ptr_t LLEnvironment::getCurrentWater() const
{
- LLSettingsWater::ptr_t pwater = mCurrentEnvironment->getWater();
+ LLSettingsWater::ptr_t pwater = mCurrentEnvironment->getWater();
if (!pwater && mCurrentEnvironment->getEnvironmentSelection() >= ENV_EDIT)
{
@@ -967,11 +967,11 @@ LLSettingsWater::ptr_t LLEnvironment::getCurrentWater() const
void LayerConfigToDensityLayer(const LLSD& layerConfig, DensityLayer& layerOut)
{
- layerOut.constant_term = layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM].asReal();
- layerOut.exp_scale = layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR].asReal();
- layerOut.exp_term = layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM].asReal();
- layerOut.linear_term = layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM].asReal();
- layerOut.width = layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH].asReal();
+ layerOut.constant_term = (F32)layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM].asReal();
+ layerOut.exp_scale = (F32)layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR].asReal();
+ layerOut.exp_term = (F32)layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM].asReal();
+ layerOut.linear_term = (F32)layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM].asReal();
+ layerOut.width = (F32)layerConfig[LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH].asReal();
}
void LLEnvironment::getAtmosphericModelSettings(AtmosphericModelSettings& settingsOut, const LLSettingsSky::ptr_t &psky)
@@ -1053,8 +1053,8 @@ bool LLEnvironment::isExtendedEnvironmentEnabled() const
bool LLEnvironment::isInventoryEnabled() const
{
- return (!gAgent.getRegionCapability("UpdateSettingsAgentInventory").empty() &&
- !gAgent.getRegionCapability("UpdateSettingsTaskInventory").empty());
+ return !gAgent.getRegionCapability("UpdateSettingsAgentInventory").empty() &&
+ !gAgent.getRegionCapability("UpdateSettingsTaskInventory").empty();
}
void LLEnvironment::onRegionChange()
@@ -1081,9 +1081,8 @@ void LLEnvironment::onRegionChange()
void LLEnvironment::onParcelChange()
{
S32 parcel_id(INVALID_PARCEL_ID);
- LLParcel* parcel = LLViewerParcelMgr::instance().getAgentParcel();
- if (parcel)
+ if (LLParcel* parcel = LLViewerParcelMgr::instance().getAgentParcel())
{
parcel_id = parcel->getLocalID();
}
@@ -1094,7 +1093,8 @@ void LLEnvironment::onParcelChange()
//-------------------------------------------------------------------------
F32 LLEnvironment::getCamHeight() const
{
- return (mCurrentEnvironment->getSky()->getDomeOffset() * mCurrentEnvironment->getSky()->getDomeRadius());
+ auto sky = mCurrentEnvironment ? mCurrentEnvironment->getSky() : nullptr;
+ return sky ? sky->getDomeOffset() * sky->getDomeRadius() : 0;
}
F32 LLEnvironment::getWaterHeight() const
@@ -1105,16 +1105,14 @@ F32 LLEnvironment::getWaterHeight() const
bool LLEnvironment::getIsSunUp() const
{
- if (!mCurrentEnvironment || !mCurrentEnvironment->getSky())
- return false;
- return mCurrentEnvironment->getSky()->getIsSunUp();
+ auto sky = mCurrentEnvironment ? mCurrentEnvironment->getSky() : nullptr;
+ return sky && sky->getIsSunUp();
}
bool LLEnvironment::getIsMoonUp() const
{
- if (!mCurrentEnvironment || !mCurrentEnvironment->getSky())
- return false;
- return mCurrentEnvironment->getSky()->getIsMoonUp();
+ auto sky = mCurrentEnvironment ? mCurrentEnvironment->getSky() : nullptr;
+ return sky && sky->getIsMoonUp();
}
//-------------------------------------------------------------------------
@@ -1141,13 +1139,19 @@ LLEnvironment::DayInstance::ptr_t LLEnvironment::getEnvironmentInstance(LLEnviro
if (create)
{
if (environment)
+ {
environment = environment->clone();
+ }
else
{
if (env == ENV_PUSH)
+ {
environment = std::make_shared<DayInjection>(env);
+ }
else
+ {
environment = std::make_shared<DayInstance>(env);
+ }
}
mEnvironments[env] = environment;
}
@@ -1174,7 +1178,9 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, const LLSe
environment->animate();
if (!mSignalEnvChanged.empty())
+ {
mSignalEnvChanged(env, env_version);
+ }
}
void LLEnvironment::setCurrentEnvironmentSelection(LLEnvironment::EnvSelection_t env)
@@ -1235,7 +1241,7 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, LLEnvironm
}
}
}
-
+
if (fixed.second)
{
logEnvironment(env, fixed.second, env_version);
@@ -1284,7 +1290,9 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, LLEnvironm
}
if (!mSignalEnvChanged.empty())
+ {
mSignalEnvChanged(env, env_version);
+ }
}
void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, const LLSettingsBase::ptr_t &settings, S32 env_version)
@@ -1377,7 +1385,9 @@ void LLEnvironment::clearEnvironment(LLEnvironment::EnvSelection_t env)
mEnvironments[env].reset();
if (!mSignalEnvChanged.empty())
+ {
mSignalEnvChanged(env, VERSION_CLEANUP);
+ }
}
void LLEnvironment::logEnvironment(EnvSelection_t env, const LLSettingsBase::ptr_t &settings, S32 env_version)
@@ -1417,10 +1427,10 @@ LLSettingsDay::ptr_t LLEnvironment::getEnvironmentDay(LLEnvironment::EnvSelectio
return LLSettingsDay::ptr_t();
}
- DayInstance::ptr_t environment = getEnvironmentInstance(env);
-
- if (environment)
+ if (DayInstance::ptr_t environment = getEnvironmentInstance(env))
+ {
return environment->getDayCycle();
+ }
return LLSettingsDay::ptr_t();
}
@@ -1433,10 +1443,10 @@ LLSettingsDay::Seconds LLEnvironment::getEnvironmentDayLength(EnvSelection_t env
return LLSettingsDay::Seconds(0);
}
- DayInstance::ptr_t environment = getEnvironmentInstance(env);
-
- if (environment)
+ if (DayInstance::ptr_t environment = getEnvironmentInstance(env))
+ {
return environment->getDayLength();
+ }
return LLSettingsDay::Seconds(0);
}
@@ -1449,9 +1459,10 @@ LLSettingsDay::Seconds LLEnvironment::getEnvironmentDayOffset(EnvSelection_t env
return LLSettingsDay::Seconds(0);
}
- DayInstance::ptr_t environment = getEnvironmentInstance(env);
- if (environment)
+ if (DayInstance::ptr_t environment = getEnvironmentInstance(env))
+ {
return environment->getDayOffset();
+ }
return LLSettingsDay::Seconds(0);
}
@@ -1481,7 +1492,9 @@ LLEnvironment::fixedEnvironment_t LLEnvironment::getEnvironmentFixed(LLEnvironme
}
if (!fixed.first || !fixed.second)
+ {
LL_WARNS("ENVIRONMENT") << "Can not construct complete fixed environment. Missing Sky and/or Water." << LL_ENDL;
+ }
return fixed;
}
@@ -1492,10 +1505,10 @@ LLEnvironment::fixedEnvironment_t LLEnvironment::getEnvironmentFixed(LLEnvironme
return fixedEnvironment_t();
}
- DayInstance::ptr_t environment = getEnvironmentInstance(env);
-
- if (environment)
+ if (DayInstance::ptr_t environment = getEnvironmentInstance(env))
+ {
return fixedEnvironment_t(environment->getSky(), environment->getWater());
+ }
return fixedEnvironment_t();
}
@@ -1505,7 +1518,9 @@ LLEnvironment::DayInstance::ptr_t LLEnvironment::getSelectedEnvironmentInstance(
for (S32 idx = mSelectedEnvironment; idx < ENV_DEFAULT; ++idx)
{
if (mEnvironments[idx])
+ {
return mEnvironments[idx];
+ }
}
return mEnvironments[ENV_DEFAULT];
@@ -1516,7 +1531,9 @@ LLEnvironment::DayInstance::ptr_t LLEnvironment::getSharedEnvironmentInstance()
for (S32 idx = ENV_PARCEL; idx < ENV_DEFAULT; ++idx)
{
if (mEnvironments[idx])
+ {
return mEnvironments[idx];
+ }
}
return mEnvironments[ENV_DEFAULT];
@@ -1531,12 +1548,12 @@ void LLEnvironment::updateEnvironment(LLSettingsBase::Seconds transition, bool f
{
if (transition != TRANSITION_INSTANT)
{
- DayInstance::ptr_t trans = std::make_shared<DayTransition>(
- mCurrentEnvironment->getSky(), mCurrentEnvironment->getWater(), pinstance, transition);
-
- trans->animate();
-
- mCurrentEnvironment = trans;
+ DayInstance::ptr_t trans = std::make_shared<DayTransition>(
+ mCurrentEnvironment->getSky(), mCurrentEnvironment->getWater(), pinstance, transition);
+
+ trans->animate();
+
+ mCurrentEnvironment = trans;
}
else
{
@@ -1647,7 +1664,7 @@ LLVector4 LLEnvironment::getRotatedLightNorm() const
return toLightNorm(light_direction);
}
-extern BOOL gCubeSnapshot;
+extern bool gCubeSnapshot;
//-------------------------------------------------------------------------
void LLEnvironment::update(const LLViewerCamera * cam)
@@ -1675,31 +1692,31 @@ void LLEnvironment::update(const LLViewerCamera * cam)
updateSettingsUniforms();
- // *TODO: potential optimization - this block may only need to be
- // executed some of the time. For example for water shaders only.
+ LLViewerShaderMgr::shader_iter shaders_iter, end_shaders;
+ end_shaders = LLViewerShaderMgr::instance()->endShaders();
+ for (shaders_iter = LLViewerShaderMgr::instance()->beginShaders(); shaders_iter != end_shaders; ++shaders_iter)
{
- LLViewerShaderMgr::shader_iter shaders_iter, end_shaders;
- end_shaders = LLViewerShaderMgr::instance()->endShaders();
- for (shaders_iter = LLViewerShaderMgr::instance()->beginShaders(); shaders_iter != end_shaders; ++shaders_iter)
+ shaders_iter->mUniformsDirty = true;
+ if (shaders_iter->mRiggedVariant)
{
- if ((shaders_iter->mProgramObject != 0)
- && (gPipeline.canUseWindLightShaders()
- || shaders_iter->mShaderGroup == LLGLSLShader::SG_WATER))
- {
- shaders_iter->mUniformsDirty = TRUE;
- }
+ shaders_iter->mRiggedVariant->mUniformsDirty = true;
+ }
+
+ for (auto& variant : shaders_iter->mGLTFVariants)
+ {
+ variant.mUniformsDirty = true;
}
}
}
void LLEnvironment::updateCloudScroll()
{
- // This is a function of the environment rather than the sky, since it should
+ // This is a function of the environment rather than the sky, since it should
// persist through sky transitions.
static LLTimer s_cloud_timer;
F64 delta_t = s_cloud_timer.getElapsedTimeAndResetF64();
-
+
if (mCurrentEnvironment->getSky() && !mCloudScrollPaused)
{
LLVector2 rate = mCurrentEnvironment->getSky()->getCloudScrollRate();
@@ -1725,88 +1742,9 @@ void LLEnvironment::updateGLVariablesForSettings(LLShaderUniforms* uniforms, con
{
uniforms[i].clear();
}
-
- LLShaderUniforms* shader = &uniforms[LLGLSLShader::SG_ANY];
- //_WARNS("RIDER") << "----------------------------------------------------------------" << LL_ENDL;
- LLSettingsBase::parammapping_t params = psetting->getParameterMap();
- for (auto &it: params)
- {
- LLSD value;
- // legacy first since it contains ambient color and we prioritize value from legacy, see getAmbientColor()
- if (psetting->mSettings.has(LLSettingsSky::SETTING_LEGACY_HAZE) && psetting->mSettings[LLSettingsSky::SETTING_LEGACY_HAZE].has(it.first))
- {
- value = psetting->mSettings[LLSettingsSky::SETTING_LEGACY_HAZE][it.first];
- }
- else if (psetting->mSettings.has(it.first))
- {
- value = psetting->mSettings[it.first];
- }
- else
- {
- // We need to reset shaders, use defaults
- value = it.second.getDefaultValue();
- }
-
- LLSD::Type setting_type = value.type();
- stop_glerror();
- switch (setting_type)
- {
- case LLSD::TypeInteger:
- shader->uniform1i(it.second.getShaderKey(), value.asInteger());
- //_WARNS("RIDER") << "pushing '" << (*it).first << "' as " << value << LL_ENDL;
- break;
- case LLSD::TypeReal:
- shader->uniform1f(it.second.getShaderKey(), value.asReal());
- //_WARNS("RIDER") << "pushing '" << (*it).first << "' as " << value << LL_ENDL;
- break;
-
- case LLSD::TypeBoolean:
- shader->uniform1i(it.second.getShaderKey(), value.asBoolean() ? 1 : 0);
- //_WARNS("RIDER") << "pushing '" << (*it).first << "' as " << value << LL_ENDL;
- break;
-
- case LLSD::TypeArray:
- {
- LLVector4 vect4(value);
-
- if (gCubeSnapshot && !gPipeline.mReflectionMapManager.isRadiancePass())
- { // maximize and remove tinting if this is an irradiance map render pass and the parameter feeds into the sky background color
- auto max_vec = [](LLVector4 col)
- {
- LLColor3 color(col);
- F32 h, s, l;
- color.calcHSL(&h, &s, &l);
-
- col.mV[0] = col.mV[1] = col.mV[2] = l;
- return col;
- };
-
- switch (it.second.getShaderKey())
- {
- case LLShaderMgr::BLUE_HORIZON:
- case LLShaderMgr::BLUE_DENSITY:
- vect4 = max_vec(vect4);
- break;
- }
- }
-
- //_WARNS("RIDER") << "pushing '" << (*it).first << "' as " << vect4 << LL_ENDL;
- shader->uniform3fv(it.second.getShaderKey(), LLVector3(vect4.mV) );
- break;
- }
-
- // case LLSD::TypeMap:
- // case LLSD::TypeString:
- // case LLSD::TypeUUID:
- // case LLSD::TypeURI:
- // case LLSD::TypeBinary:
- // case LLSD::TypeDate:
- default:
- break;
- }
- }
//_WARNS("RIDER") << "----------------------------------------------------------------" << LL_ENDL;
+ psetting->applyToUniforms(uniforms);
psetting->applySpecial(uniforms);
}
@@ -1924,8 +1862,8 @@ void LLEnvironment::adjustRegionOffset(F32 adjust)
if (mEnvironments[ENV_REGION])
{
- F32 day_length = mEnvironments[ENV_REGION]->getDayLength();
- F32 day_offset = mEnvironments[ENV_REGION]->getDayOffset();
+ F32 day_length = (F32)mEnvironments[ENV_REGION]->getDayLength();
+ F32 day_offset = (F32)mEnvironments[ENV_REGION]->getDayOffset();
F32 day_adjustment = adjust * day_length;
@@ -1969,7 +1907,6 @@ void LLEnvironment::updateRegion(const LLSettingsWater::ptr_t &pwater, S32 day_l
updateParcel(INVALID_PARCEL_ID, pwater, day_length, day_offset, altitudes, cb);
}
-
void LLEnvironment::resetRegion(environment_apply_fn cb)
{
resetParcel(INVALID_PARCEL_ID, cb);
@@ -1994,7 +1931,10 @@ void LLEnvironment::requestParcel(S32 parcel_id, environment_apply_fn cb)
LLEnvironmentRequest::initiate(cb);
}
else if (cb)
+ {
cb(parcel_id, EnvironmentInfo::ptr_t());
+ }
+
return;
}
@@ -2004,16 +1944,14 @@ void LLEnvironment::requestParcel(S32 parcel_id, environment_apply_fn cb)
cb = [this, transition](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo, transition); };
}
- std::string coroname =
- LLCoros::instance().launch("LLEnvironment::coroRequestEnvironment",
+ LLCoros::instance().launch("LLEnvironment::coroRequestEnvironment",
[this, parcel_id, cb]() { coroRequestEnvironment(parcel_id, cb); });
}
void LLEnvironment::updateParcel(S32 parcel_id, const LLUUID &asset_id, std::string display_name, S32 track_num, S32 day_length, S32 day_offset, U32 flags, LLEnvironment::altitudes_vect_t altitudes, environment_apply_fn cb)
{
UpdateInfo::ptr_t updates(std::make_shared<UpdateInfo>(asset_id, display_name, day_length, day_offset, altitudes, flags));
- std::string coroname =
- LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
+ LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
[this, parcel_id, track_num, updates, cb]() { coroUpdateEnvironment(parcel_id, track_num, updates, cb); });
}
@@ -2029,7 +1967,9 @@ void LLEnvironment::onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::p
LLSettingsDay::ptr_t pday;
if (settings->getSettingsType() == "daycycle")
+ {
pday = std::static_pointer_cast<LLSettingsDay>(settings);
+ }
else
{
pday = createDayCycleFromEnvironment( (parcel_id == INVALID_PARCEL_ID) ? ENV_REGION : ENV_PARCEL, settings);
@@ -2063,8 +2003,7 @@ void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday
{
UpdateInfo::ptr_t updates(std::make_shared<UpdateInfo>(pday, day_length, day_offset, altitudes));
- std::string coroname =
- LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
+ LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
[this, parcel_id, track_num, updates, cb]() { coroUpdateEnvironment(parcel_id, track_num, updates, cb); });
}
@@ -2073,12 +2012,9 @@ void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday
updateParcel(parcel_id, pday, NO_TRACK, day_length, day_offset, altitudes, cb);
}
-
-
void LLEnvironment::resetParcel(S32 parcel_id, environment_apply_fn cb)
{
- std::string coroname =
- LLCoros::instance().launch("LLEnvironment::coroResetEnvironment",
+ LLCoros::instance().launch("LLEnvironment::coroResetEnvironment",
[this, parcel_id, cb]() { coroResetEnvironment(parcel_id, NO_TRACK, cb); });
}
@@ -2112,7 +2048,7 @@ void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environ
{
LL_WARNS("ENVIRONMENT") << "Couldn't retrieve environment settings for " << ((parcel_id == INVALID_PARCEL_ID) ? ("region!") : ("parcel!")) << LL_ENDL;
}
- else if (LLApp::isExiting())
+ else if (LLApp::isExiting() || gDisconnected)
{
return;
}
@@ -2121,11 +2057,13 @@ void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environ
LLSD environment = result[KEY_ENVIRONMENT];
if (environment.isDefined() && apply)
{
- EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
- apply(parcel_id, envinfo);
+ LLAppViewer::instance()->postToMainCoro([=]()
+ {
+ EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
+ apply(parcel_id, envinfo);
+ });
}
}
-
}
void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, S32 track_no, UpdateInfo::ptr_t updates, environment_apply_fn apply)
@@ -2145,9 +2083,14 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, S32 track_no, UpdateInf
if (track_no == NO_TRACK)
{ // day length and offset are only applicable if we are addressing the entire day cycle.
if (updates->mDayLength > 0)
+ {
body[KEY_ENVIRONMENT][KEY_DAYLENGTH] = updates->mDayLength;
+ }
+
if (updates->mDayOffset > 0)
+ {
body[KEY_ENVIRONMENT][KEY_DAYOFFSET] = updates->mDayOffset;
+ }
if ((parcel_id == INVALID_PARCEL_ID) && (updates->mAltitudes.size() == 3))
{ // only test for altitude changes if we are changing the region.
@@ -2160,12 +2103,16 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, S32 track_no, UpdateInf
}
if (updates->mDayp)
+ {
body[KEY_ENVIRONMENT][KEY_DAYCYCLE] = updates->mDayp->getSettings();
+ }
else if (!updates->mSettingsAsset.isNull())
{
body[KEY_ENVIRONMENT][KEY_DAYASSET] = updates->mSettingsAsset;
if (!updates->mDayName.empty())
+ {
body[KEY_ENVIRONMENT][KEY_DAYNAME] = updates->mDayName;
+ }
}
body[KEY_ENVIRONMENT][KEY_FLAGS] = LLSD::Integer(updates->mFlags);
@@ -2183,22 +2130,27 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, S32 track_no, UpdateInf
if (track_no != NO_TRACK)
query << "&";
}
+
if (track_no != NO_TRACK)
- {
+ {
query << "trackno=" << track_no;
}
+
url += query.str();
}
LLSD result = httpAdapter->putAndSuspend(httpRequest, url, body);
// results that come back may contain the new settings
+ if (LLApp::isExiting())
+ return;
+
LLSD notify;
LLSD httpResults = result["http_result"];
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
- if ((!status) || !result["success"].asBoolean())
+ if (!status || !result["success"].asBoolean())
{
LL_WARNS("ENVIRONMENT") << "Couldn't update Windlight settings for " << ((parcel_id == INVALID_PARCEL_ID) ? ("region!") : ("parcel!")) << LL_ENDL;
@@ -2213,10 +2165,6 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, S32 track_no, UpdateInf
notify["FAIL_REASON"] = reason;
}
}
- else if (LLApp::isExiting())
- {
- return;
- }
else
{
LLSD environment = result[KEY_ENVIRONMENT];
@@ -2267,34 +2215,26 @@ void LLEnvironment::coroResetEnvironment(S32 parcel_id, S32 track_no, environmen
LLSD result = httpAdapter->deleteAndSuspend(httpRequest, url);
// results that come back may contain the new settings
- LLSD notify;
+ if (LLApp::isExiting())
+ return;
+
+ LLSD notify;
LLSD httpResults = result["http_result"];
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
- if ((!status) || !result["success"].asBoolean())
+ if (!status || !result["success"].asBoolean())
{
LL_WARNS("ENVIRONMENT") << "Couldn't reset Windlight settings in " << ((parcel_id == INVALID_PARCEL_ID) ? ("region!") : ("parcel!")) << LL_ENDL;
notify = LLSD::emptyMap();
std::string reason = result["message"].asString();
- if (reason.empty())
- {
- notify["FAIL_REASON"] = status.toString();
- }
- else
- {
- notify["FAIL_REASON"] = reason;
- }
+ notify["FAIL_REASON"] = reason.empty() ? status.toString() : reason;
}
- else if (LLApp::isExiting())
+ else if (apply)
{
- return;
- }
- else
- {
- LLSD environment = result[KEY_ENVIRONMENT];
- if (environment.isDefined() && apply)
+ LLSD environment = result[KEY_ENVIRONMENT];
+ if (environment.isDefined())
{
EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
apply(parcel_id, envinfo);
@@ -2306,7 +2246,6 @@ void LLEnvironment::coroResetEnvironment(S32 parcel_id, S32 track_no, environmen
LLNotificationsUtil::add("WLRegionApplyFail", notify);
//LLEnvManagerNew::instance().onRegionSettingsApplyResponse(false);
}
-
}
@@ -2341,7 +2280,7 @@ LLEnvironment::EnvironmentInfo::ptr_t LLEnvironment::EnvironmentInfo::extract(LL
{
for (int idx = 0; idx < 3; idx++)
{
- pinfo->mAltitudes[idx+1] = environment[KEY_TRACKALTS][idx].asReal();
+ pinfo->mAltitudes[idx+1] = (F32)environment[KEY_TRACKALTS][idx].asReal();
}
pinfo->mAltitudes[0] = 0;
}
@@ -2508,7 +2447,7 @@ LLSettingsDay::ptr_t LLEnvironment::createDayCycleFromEnvironment(EnvSelection_t
if (type == "sky")
{
- for (S32 idx = 1; idx < LLSettingsDay::TRACK_MAX; ++idx)
+ for (U32 idx = 1; idx < LLSettingsDay::TRACK_MAX; ++idx)
day->clearCycleTrack(idx);
day->setSettingsAtKeyframe(settings, 0.0f, 1);
}
@@ -2547,7 +2486,7 @@ void LLEnvironment::onAgentPositionHasChanged(const LLVector3 &localpos)
S32 LLEnvironment::calculateSkyTrackForAltitude(F64 altitude)
{
auto it = std::find_if_not(mTrackAltitudes.begin(), mTrackAltitudes.end(), [altitude](F32 test) { return altitude > test; });
-
+
if (it == mTrackAltitudes.begin())
return 1;
else if (it == mTrackAltitudes.end())
@@ -2565,25 +2504,25 @@ void LLEnvironment::handleEnvironmentPush(LLSD &message)
std::string action = message[KEY_ACTION].asString();
LLUUID experience_id = message[KEY_EXPERIENCEID].asUUID();
LLSD action_data = message[KEY_ACTIONDATA];
- F32 transition_time = action_data[KEY_TRANSITIONTIME].asReal();
+ F32 transition_time = (F32)action_data[KEY_TRANSITIONTIME].asReal();
//TODO: Check here that the viewer thinks the experience is still valid.
if (action == ACTION_CLEARENVIRONMENT)
- {
+ {
handleEnvironmentPushClear(experience_id, action_data, transition_time);
}
else if (action == ACTION_PUSHFULLENVIRONMENT)
- {
+ {
handleEnvironmentPushFull(experience_id, action_data, transition_time);
}
else if (action == ACTION_PUSHPARTIALENVIRONMENT)
- {
+ {
handleEnvironmentPushPartial(experience_id, action_data, transition_time);
}
else
- {
+ {
LL_WARNS("ENVIRONMENT", "GENERICMESSAGES") << "Unknown environment push action '" << action << "'" << LL_ENDL;
}
}
@@ -2597,7 +2536,7 @@ void LLEnvironment::handleEnvironmentPushFull(LLUUID experience_id, LLSD &messag
{
LLUUID asset_id(message[KEY_ASSETID].asUUID());
- setExperienceEnvironment(experience_id, asset_id, LLSettingsBase::Seconds(transition));
+ setExperienceEnvironment(experience_id, asset_id, (F32)LLSettingsBase::Seconds(transition));
}
void LLEnvironment::handleEnvironmentPushPartial(LLUUID experience_id, LLSD &message, F32 transition)
@@ -2607,7 +2546,7 @@ void LLEnvironment::handleEnvironmentPushPartial(LLUUID experience_id, LLSD &mes
if (settings.isUndefined())
return;
- setExperienceEnvironment(experience_id, settings, LLSettingsBase::Seconds(transition));
+ setExperienceEnvironment(experience_id, settings, (F32)LLSettingsBase::Seconds(transition));
}
void LLEnvironment::clearExperienceEnvironment(LLUUID experience_id, LLSettingsBase::Seconds transition_time)
@@ -2797,9 +2736,9 @@ bool LLEnvironment::DayInstance::setSky(const LLSettingsSky::ptr_t &psky)
mInitialized = false;
bool changed = psky == nullptr || mSky == nullptr || mSky->getHash() != psky->getHash();
-
+
bool different_sky = mSky != psky;
-
+
mSky = psky;
mSky->mReplaced |= different_sky;
mSky->update();
@@ -2934,7 +2873,7 @@ LLEnvironment::DayTransition::DayTransition(const LLSettingsSky::ptr_t &skystart
mNextInstance(end),
mTransitionTime(time)
{
-
+
}
bool LLEnvironment::DayTransition::applyTimeDelta(const LLSettingsBase::Seconds& delta)
@@ -2946,14 +2885,14 @@ bool LLEnvironment::DayTransition::applyTimeDelta(const LLSettingsBase::Seconds&
return changed;
}
-void LLEnvironment::DayTransition::animate()
+void LLEnvironment::DayTransition::animate()
{
mNextInstance->animate();
mWater = mStartWater->buildClone();
mBlenderWater = std::make_shared<LLSettingsBlenderTimeDelta>(mWater, mStartWater, mNextInstance->getWater(), mTransitionTime);
mBlenderWater->setOnFinished(
- [this](LLSettingsBlender::ptr_t blender) {
+ [this](LLSettingsBlender::ptr_t blender) {
mBlenderWater.reset();
if (!mBlenderSky && !mBlenderWater)
@@ -2964,7 +2903,7 @@ void LLEnvironment::DayTransition::animate()
// pause probe updates and reset reflection maps on sky change
- gPipeline.mReflectionMapManager.pause();
+ gPipeline.mReflectionMapManager.pause((F32)mTransitionTime);
gPipeline.mReflectionMapManager.reset();
mSky = mStartSky->buildClone();
@@ -3282,7 +3221,7 @@ void LLTrackBlenderLoopingManual::switchTrack(S32 trackno, const LLSettingsBase:
{
mTrackNo = trackno;
- LLSettingsBase::TrackPosition useposition = (position < 0.0) ? mPosition : position;
+ LLSettingsBase::TrackPosition useposition = (position < 0.0) ? (LLSettingsBase::TrackPosition)mPosition : position;
setPosition(useposition);
}
@@ -3293,7 +3232,7 @@ LLSettingsDay::TrackBound_t LLTrackBlenderLoopingManual::getBoundingEntries(F64
mEndMarker = wtrack.end();
- LLSettingsDay::TrackBound_t bounds = get_bounding_entries(wtrack, position);
+ LLSettingsDay::TrackBound_t bounds = get_bounding_entries(wtrack, (LLSettingsBase::TrackPosition)position);
return bounds;
}
@@ -3362,8 +3301,8 @@ namespace
return changed;
}
- void DayInjection::setBaseDayInstance(const LLEnvironment::DayInstance::ptr_t &baseday)
- {
+ void DayInjection::setBaseDayInstance(const LLEnvironment::DayInstance::ptr_t &baseday)
+ {
mBaseDayInstance = baseday;
if (mSkyExperience.isNull())
@@ -3567,12 +3506,12 @@ namespace
mInjectedSky->setSource(target_sky);
// clear reflection probes and pause updates during sky change
- gPipeline.mReflectionMapManager.pause();
+ gPipeline.mReflectionMapManager.pause((F32)transition);
gPipeline.mReflectionMapManager.reset();
mBlenderSky = std::make_shared<LLSettingsBlenderTimeDelta>(target_sky, start_sky, psky, transition);
mBlenderSky->setOnFinished(
- [this, psky](LLSettingsBlender::ptr_t blender)
+ [this, psky](LLSettingsBlender::ptr_t blender)
{
mBlenderSky.reset();
mInjectedSky->setSource(psky);
@@ -3596,7 +3535,7 @@ namespace
return;
}
if (transition == LLEnvironment::TRANSITION_INSTANT)
- {
+ {
mBlenderWater.reset();
mInjectedWater->setSource(pwater);
}
@@ -3608,7 +3547,7 @@ namespace
mBlenderWater = std::make_shared<LLSettingsBlenderTimeDelta>(scratch_Water, start_Water, pwater, transition);
mBlenderWater->setOnFinished(
- [this, pwater](LLSettingsBlender::ptr_t blender)
+ [this, pwater](LLSettingsBlender::ptr_t blender)
{
mBlenderWater.reset();
mInjectedWater->setSource(pwater);
@@ -3629,7 +3568,7 @@ namespace
LLEnvironment::EnvSelection_t base_env(mBaseDayInstance->getEnvironmentSelection());
LLEnvironment::DayInstance::ptr_t nextbase = LLEnvironment::instance().getSharedEnvironmentInstance();
- if ((base_env == LLEnvironment::ENV_NONE) || (nextbase == mBaseDayInstance) ||
+ if ((base_env == LLEnvironment::ENV_NONE) || (nextbase == mBaseDayInstance) ||
(!mSkyExperience.isNull() && !mWaterExperience.isNull()))
{ // base instance completely overridden, or not changed no transition will happen
return;
@@ -3661,7 +3600,7 @@ namespace
void DayInjection::checkExperience()
{
if ((!mDayExperience.isNull()) && (mSkyExperience != mDayExperience) && (mWaterExperience != mDayExperience))
- { // There was a day experience but we've replaced it with a water and a sky experience.
+ { // There was a day experience but we've replaced it with a water and a sky experience.
mDayExperience.setNull();
mBaseDayInstance = LLEnvironment::instance().getSharedEnvironmentInstance();
}