Ansariel 2020-04-23 17:42:51 +02:00
commit 6f3797fe3e
7 changed files with 83 additions and 36 deletions

View File

@ -1 +1 @@
6.4.0
6.4.1

View File

@ -152,7 +152,7 @@ void main()
spec = pow(spec, 128.0);
//figure out distortion vector (ripply)
vec2 distort2 = distort+wavef.xy*refScale*0.16/max(dmod*df1, 1.0);
vec2 distort2 = distort+wavef.xy*refScale/max(dmod*df1, 1.0);
vec4 fb = texture2D(screenTex, distort2);
@ -172,7 +172,13 @@ void main()
vec3 screenspacewavef = normalize((norm_mat*vec4(wavef, 1.0)).xyz);
//frag_data[0] = color;
frag_data[0] = color;
// TODO: The non-obvious assignment below is copied from the pre-EEP WL shader code
// Unfortunately, fixing it causes a mismatch for EEP, and so it remains... for now
// SL-12975 (unfix pre-EEP broken alpha)
frag_data[0] = vec4(color.rgb, color); // Effectively, color.rgbr
frag_data[1] = vec4(0); // speccolor, spec
frag_data[2] = vec4(encode_normal(screenspacewavef.xyz), 0.05, 0);// normalxy, 0, 0
}

View File

@ -31,10 +31,19 @@ uniform vec2 screen_res;
VARYING vec2 vary_fragcoord;
// forwards
void setAtmosAttenuation(vec3 c);
void setAdditiveColor(vec3 c);
void main()
{
//transform vertex
vec4 pos = modelview_projection_matrix * vec4(position.xyz, 1.0);
gl_Position = pos;
// appease OSX GLSL compiler/linker by touching all the varyings we said we would
setAtmosAttenuation(vec3(1));
setAdditiveColor(vec3(0));
vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;
}

View File

@ -24,7 +24,6 @@
*/
VARYING vec3 vary_SunlitColor;
VARYING vec3 vary_AdditiveColor;
VARYING vec3 vary_AtmosAttenuation;

View File

@ -851,8 +851,6 @@ void LLEnvironment::initSingleton()
}
LLEventPumps::instance().obtain(PUMP_EXPERIENCE).listen(LISTENER_NAME, [this](LLSD message) { listenExperiencePump(message); return false; });
loadFromSettings();
}
void LLEnvironment::cleanupSingleton()
@ -2797,6 +2795,37 @@ void LLEnvironment::saveToSettings()
}
}
void LLEnvironment::loadSkyWaterFromSettings(const LLSD &env_data, bool &valid, bool &assets_present)
{
if (env_data.has("sky_id"))
{
// causes asset loaded callback and an update
setEnvironment(ENV_LOCAL, env_data["sky_id"].asUUID());
valid = true;
assets_present = true;
}
else if (env_data.has("sky_llsd"))
{
LLSettingsSky::ptr_t sky = std::make_shared<LLSettingsVOSky>(env_data["sky_llsd"]);
setEnvironment(ENV_LOCAL, sky);
valid = true;
}
if (env_data.has("water_id"))
{
// causes asset loaded callback and an update
setEnvironment(ENV_LOCAL, env_data["water_id"].asUUID());
valid = true;
assets_present = true;
}
else if (env_data.has("water_llsd"))
{
LLSettingsWater::ptr_t sky = std::make_shared<LLSettingsVOWater>(env_data["water_llsd"]);
setEnvironment(ENV_LOCAL, sky);
valid = true;
}
}
bool LLEnvironment::loadFromSettings()
{
if (!gSavedSettings.getBOOL("EnvironmentPersistAcrossLogin"))
@ -2845,13 +2874,32 @@ bool LLEnvironment::loadFromSettings()
}
bool valid = false;
bool has_assets = false;
if (env_data.has("day_id"))
{
S32 length = env_data["day_length"].asInteger();
S32 offset = env_data["day_offset"].asInteger();
setEnvironment(ENV_LOCAL, env_data["day_id"].asUUID(), LLSettingsDay::Seconds(length), LLSettingsDay::Seconds(offset));
valid = true;
LLSettingsDay::Seconds length = LLSettingsDay::Seconds(env_data["day_length"].asInteger());
LLSettingsDay::Seconds offset = LLSettingsDay::Seconds(env_data["day_offset"].asInteger());
LLUUID assetId = env_data["day_id"].asUUID();
LLSettingsVOBase::getSettingsAsset(assetId,
[this, length, offset, env_data](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat)
{
// Day should be always applied first,
// otherwise it will override sky or water that was set earlier
// so wait for asset to load before applying sky/water
onSetEnvAssetLoaded(ENV_LOCAL, asset_id, settings, length, offset, TRANSITION_DEFAULT, status, NO_VERSION);
bool valid = false, has_assets = false;
loadSkyWaterFromSettings(env_data, valid, has_assets);
if (!has_assets && valid)
{
// Settings were loaded from file without having an asset, needs update
// otherwise update will be done by asset callback
updateEnvironment(TRANSITION_DEFAULT, true);
}
});
// bail early, everything have to be done at callback
return true;
}
else if (env_data.has("day_llsd"))
{
@ -2862,33 +2910,13 @@ bool LLEnvironment::loadFromSettings()
valid = true;
}
if (env_data.has("sky_id"))
{
setEnvironment(ENV_LOCAL, env_data["sky_id"].asUUID());
valid = true;
}
else if (env_data.has("sky_llsd"))
{
LLSettingsSky::ptr_t sky = std::make_shared<LLSettingsVOSky>(env_data["sky_llsd"]);
setEnvironment(ENV_LOCAL, sky);
valid = true;
}
loadSkyWaterFromSettings(env_data, valid, has_assets);
if (env_data.has("water_id"))
if (valid && !has_assets)
{
setEnvironment(ENV_LOCAL, env_data["water_id"].asUUID());
valid = true;
}
else if (env_data.has("water_llsd"))
{
LLSettingsWater::ptr_t sky = std::make_shared<LLSettingsVOWater>(env_data["water_llsd"]);
setEnvironment(ENV_LOCAL, sky);
valid = true;
}
if (valid)
{
updateEnvironment(TRANSITION_INSTANT, true);
// Settings were loaded from file without having an asset, needs update
// otherwise update will be done by asset callback
updateEnvironment(TRANSITION_DEFAULT, true);
}
return valid;
}

View File

@ -455,6 +455,7 @@ private:
void onSetExperienceEnvAssetLoaded(LLUUID experience_id, LLSettingsBase::ptr_t setting, F32 transition_time, S32 status);
void listenExperiencePump(const LLSD &message);
void loadSkyWaterFromSettings(const LLSD &env_data, bool &valid, bool &assets_present); // for use in loadFromSettings()
};

View File

@ -2659,7 +2659,11 @@ bool idle_startup()
}
display_startup();
// Load stored local environment if needed. Only should be done once at least
// initial region data got loaded to avoid race condition with region's environment
LLEnvironment::instance().loadFromSettings();
// *TODO : Uncomment that line once the whole grid migrated to SLM and suppress it from LLAgent::handleTeleportFinished() (llagent.cpp)
//check_merchant_status();