summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llcharacter/llkeyframemotion.cpp10
-rw-r--r--indra/llcommon/tests/llprocess_test.cpp148
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl22
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/materialF.glsl39
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl10
-rw-r--r--indra/newview/featuretable.txt23
-rw-r--r--indra/newview/featuretable_mac.txt9
-rw-r--r--indra/newview/llfeaturemanager.cpp13
-rw-r--r--indra/newview/llfloaterpreferencesgraphicsadvanced.cpp2
-rw-r--r--indra/newview/lltexturefetch.cpp20
-rw-r--r--indra/newview/lltexturefetch.h2
-rw-r--r--indra/newview/llviewertexture.cpp10
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml9
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml1
17 files changed, 202 insertions, 132 deletions
diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp
index 6790f1ad56..b82734615f 100644
--- a/indra/llcharacter/llkeyframemotion.cpp
+++ b/indra/llcharacter/llkeyframemotion.cpp
@@ -2427,9 +2427,15 @@ void LLKeyframeMotion::onLoadComplete(const LLUUID& asset_uuid,
LLCharacter* character = *char_iter;
// look for an existing instance of this motion
- LLKeyframeMotion* motionp = static_cast<LLKeyframeMotion*> (character->findMotion(asset_uuid));
- if (motionp)
+ if (LLMotion* asset = character->findMotion(asset_uuid))
{
+ LLKeyframeMotion* motionp = dynamic_cast<LLKeyframeMotion*>(asset);
+ if (!motionp)
+ {
+ // This motion is not LLKeyframeMotion (e.g., LLEmote)
+ return;
+ }
+
if (0 == status)
{
if (motionp->mAssetStatus == ASSET_LOADED)
diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp
index 6e8422ca0c..b63cc52bec 100644
--- a/indra/llcommon/tests/llprocess_test.cpp
+++ b/indra/llcommon/tests/llprocess_test.cpp
@@ -1085,7 +1085,27 @@ namespace tut
return false;
}
- std::list<LLSD> mHistory;
+ template <typename CALLABLE>
+ void checkHistory(CALLABLE&& code)
+ {
+ try
+ {
+ // we expect this lambda to contain tut::ensure() calls
+ std::forward<CALLABLE>(code)(mHistory);
+ }
+ catch (const failure&)
+ {
+ LL_INFOS() << "event history:" << LL_ENDL;
+ for (const LLSD& item : mHistory)
+ {
+ LL_INFOS() << item << LL_ENDL;
+ }
+ throw;
+ }
+ }
+
+ using Listory = std::list<LLSD>;
+ Listory mHistory;
LLTempBoundListener mConnection;
};
@@ -1136,23 +1156,26 @@ namespace tut
// finish out the run
waitfor(*py.mPy);
// now verify history
- std::list<LLSD>::const_iterator li(listener.mHistory.begin()),
- lend(listener.mHistory.end());
- ensure("no events", li != lend);
- ensure_equals("history[0]", (*li)["data"].asString(), "abc");
- ensure_equals("history[0] len", (*li)["len"].asInteger(), 3);
- ++li;
- ensure("only 1 event", li != lend);
- ensure_equals("history[1]", (*li)["data"].asString(), "abcdef");
- ensure_equals("history[0] len", (*li)["len"].asInteger(), 6);
- ++li;
- ensure("only 2 events", li != lend);
- ensure_equals("history[2]", (*li)["data"].asString(), "abcdefghi" EOL);
- ensure_equals("history[0] len", (*li)["len"].asInteger(), 9 + sizeof(EOL) - 1);
- ++li;
- // We DO NOT expect a whole new event for the second line because we
- // disconnected.
- ensure("more than 3 events", li == lend);
+ listener.checkHistory(
+ [](const EventListener::Listory& history)
+ {
+ auto li(history.begin()), lend(history.end());
+ ensure("no events", li != lend);
+ ensure_equals("history[0]", (*li)["data"].asString(), "abc");
+ ensure_equals("history[0] len", (*li)["len"].asInteger(), 3);
+ ++li;
+ ensure("only 1 event", li != lend);
+ ensure_equals("history[1]", (*li)["data"].asString(), "abcdef");
+ ensure_equals("history[0] len", (*li)["len"].asInteger(), 6);
+ ++li;
+ ensure("only 2 events", li != lend);
+ ensure_equals("history[2]", (*li)["data"].asString(), "abcdefghi" EOL);
+ ensure_equals("history[0] len", (*li)["len"].asInteger(), 9 + sizeof(EOL) - 1);
+ ++li;
+ // We DO NOT expect a whole new event for the second line because we
+ // disconnected.
+ ensure("more than 3 events", li == lend);
+ });
}
template<> template<>
@@ -1172,14 +1195,17 @@ namespace tut
// (or any other intervening layer) does crazy buffering. What we want
// to ensure is that there was exactly ONE event with "eof" true, and
// that it was the LAST event.
- std::list<LLSD>::const_reverse_iterator rli(listener.mHistory.rbegin()),
- rlend(listener.mHistory.rend());
- ensure("no events", rli != rlend);
- ensure("last event not \"eof\"", (*rli)["eof"].asBoolean());
- while (++rli != rlend)
- {
- ensure("\"eof\" event not last", ! (*rli)["eof"].asBoolean());
- }
+ listener.checkHistory(
+ [](const EventListener::Listory& history)
+ {
+ auto rli(history.rbegin()), rlend(history.rend());
+ ensure("no events", rli != rlend);
+ ensure("last event not \"eof\"", (*rli)["eof"].asBoolean());
+ while (++rli != rlend)
+ {
+ ensure("\"eof\" event not last", ! (*rli)["eof"].asBoolean());
+ }
+ });
}
template<> template<>
@@ -1202,13 +1228,17 @@ namespace tut
ensure_equals("getLimit() after setlimit(10)", childout.getLimit(), 10);
// okay, pump I/O to pick up output from child
waitfor(*py.mPy);
- ensure("no events", ! listener.mHistory.empty());
- // For all we know, that data could have arrived in several different
- // bursts... probably not, but anyway, only check the last one.
- ensure_equals("event[\"len\"]",
- listener.mHistory.back()["len"].asInteger(), abc.length());
- ensure_equals("length of setLimit(10) data",
- listener.mHistory.back()["data"].asString().length(), 10);
+ listener.checkHistory(
+ [abc](const EventListener::Listory& history)
+ {
+ ensure("no events", ! history.empty());
+ // For all we know, that data could have arrived in several different
+ // bursts... probably not, but anyway, only check the last one.
+ ensure_equals("event[\"len\"]",
+ history.back()["len"].asInteger(), abc.length());
+ ensure_equals("length of setLimit(10) data",
+ history.back()["data"].asString().length(), 10);
+ });
}
template<> template<>
@@ -1275,18 +1305,22 @@ namespace tut
params.postend = pumpname;
LLProcessPtr child = LLProcess::create(params);
ensure("shouldn't have launched", ! child);
- ensure_equals("number of postend events", listener.mHistory.size(), 1);
- LLSD postend(listener.mHistory.front());
- ensure("has id", ! postend.has("id"));
- ensure_equals("desc", postend["desc"].asString(), std::string(params.desc));
- ensure_equals("state", postend["state"].asInteger(), LLProcess::UNSTARTED);
- ensure("has data", ! postend.has("data"));
- std::string error(postend["string"]);
- // All we get from canned parameter validation is a bool, so the
- // "validation failed" message we ourselves generate can't mention
- // "executable" by name. Just check that it's nonempty.
- //ensure_contains("error", error, "executable");
- ensure("string", ! error.empty());
+ listener.checkHistory(
+ [&params](const EventListener::Listory& history)
+ {
+ ensure_equals("number of postend events", history.size(), 1);
+ LLSD postend(history.front());
+ ensure("has id", ! postend.has("id"));
+ ensure_equals("desc", postend["desc"].asString(), std::string(params.desc));
+ ensure_equals("state", postend["state"].asInteger(), LLProcess::UNSTARTED);
+ ensure("has data", ! postend.has("data"));
+ std::string error(postend["string"]);
+ // All we get from canned parameter validation is a bool, so the
+ // "validation failed" message we ourselves generate can't mention
+ // "executable" by name. Just check that it's nonempty.
+ //ensure_contains("error", error, "executable");
+ ensure("string", ! error.empty());
+ });
}
template<> template<>
@@ -1308,16 +1342,20 @@ namespace tut
{
yield();
}
- ensure("no postend event", i < timeout);
- ensure_equals("number of postend events", listener.mHistory.size(), 1);
- LLSD postend(listener.mHistory.front());
- ensure_equals("id", postend["id"].asInteger(), childid);
- ensure("desc empty", ! postend["desc"].asString().empty());
- ensure_equals("state", postend["state"].asInteger(), LLProcess::EXITED);
- ensure_equals("data", postend["data"].asInteger(), 35);
- std::string str(postend["string"]);
- ensure_contains("string", str, "exited");
- ensure_contains("string", str, "35");
+ listener.checkHistory(
+ [i, timeout, childid](const EventListener::Listory& history)
+ {
+ ensure("no postend event", i < timeout);
+ ensure_equals("number of postend events", history.size(), 1);
+ LLSD postend(history.front());
+ ensure_equals("id", postend["id"].asInteger(), childid);
+ ensure("desc empty", ! postend["desc"].asString().empty());
+ ensure_equals("state", postend["state"].asInteger(), LLProcess::EXITED);
+ ensure_equals("data", postend["data"].asInteger(), 35);
+ std::string str(postend["string"]);
+ ensure_contains("string", str, "exited");
+ ensure_contains("string", str, "35");
+ });
}
struct PostendListener
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
index e9f849a8c0..bc13e7d1ec 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
@@ -36,6 +36,7 @@ out vec4 frag_color;
uniform mat3 env_mat;
uniform vec3 sun_dir;
uniform vec3 moon_dir;
+uniform int classic_mode;
#ifdef USE_DIFFUSE_TEX
uniform sampler2D diffuseMap;
@@ -147,7 +148,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec
float lit = 0.0f;
float amb_da = 0.0;//ambiance;
- if (da > 0)
+ if (da > 0.0)
{
lit = max(da * dist_atten,0.0);
col = lit * light_col * diffuse;
@@ -241,10 +242,10 @@ void main()
calcAtmosphericVarsLinear(pos.xyz, norm, light_dir, sunlit, amblit, additive, atten);
- vec3 sunlit_linear = srgb_to_linear(sunlit);
+ vec3 sunlit_linear = sunlit;
vec3 amblit_linear = amblit;
- vec3 irradiance;
+ vec3 irradiance = amblit;
vec3 glossenv;
vec3 legacyenv;
sampleReflectionProbesLegacy(irradiance, glossenv, legacyenv, frag, pos.xyz, norm.xyz, 0.0, 0.0, true, amblit_linear);
@@ -260,11 +261,20 @@ void main()
color.a = final_alpha;
- vec3 sun_contrib = min(final_da, shadow) * sunlit_linear;
-
color.rgb = irradiance;
+ if (classic_mode > 0)
+ {
+ final_da = pow(final_da,1.2);
+ vec3 sun_contrib = vec3(min(final_da, shadow));
- color.rgb += sun_contrib;
+ color.rgb = srgb_to_linear(color.rgb * 0.9 + linear_to_srgb(sun_contrib) * sunlit_linear * 0.7);
+ sunlit_linear = srgb_to_linear(sunlit_linear);
+ }
+ else
+ {
+ vec3 sun_contrib = min(final_da, shadow) * sunlit_linear;
+ color.rgb += sun_contrib;
+ }
color.rgb *= diffuse_linear.rgb;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
index 95110005dc..cec844559f 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
@@ -161,7 +161,7 @@ void main()
vec3 atten;
calcAtmosphericVarsLinear(pos.xyz, norm, light_dir, sunlit, amblit, additive, atten);
- vec3 sunlit_linear = srgb_to_linear(sunlit);
+ vec3 sunlit_linear = sunlit;
vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
@@ -182,7 +182,7 @@ void main()
// PBR IBL
float gloss = 1.0 - perceptualRoughness;
- vec3 irradiance = vec3(0);
+ vec3 irradiance = amblit;
vec3 radiance = vec3(0);
sampleReflectionProbes(irradiance, radiance, vary_position.xy*0.5+0.5, pos.xyz, norm.xyz, gloss, true, amblit);
diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
index 140bd731ff..0166cd6e0c 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
@@ -36,6 +36,7 @@
uniform float emissive_brightness; // fullbright flag, 1.0 == fullbright, 0.0 otherwise
uniform int sun_up_factor;
+uniform int classic_mode;
vec4 applySkyAndWaterFog(vec3 pos, vec3 additive, vec3 atten, vec4 color);
vec3 scaleSoftClipFragLinear(vec3 l);
@@ -137,7 +138,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe
float lit = 0.0f;
float amb_da = ambiance;
- if (da >= 0)
+ if (da >= 0.0)
{
lit = max(da * dist_atten, 0.0);
col = lit * light_col * diffuse;
@@ -158,10 +159,10 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe
float nv = dot(n, npos);
float vh = dot(npos, h);
float sa = nh;
- float fres = pow(1 - dot(h, npos), 5)*0.4 + 0.5;
+ float fres = pow(1.0 - dot(h, npos), 5.0)*0.4 + 0.5;
- float gtdenom = 2 * nh;
- float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+ float gtdenom = 2.0 * nh;
+ float gt = max(0.0, min(gtdenom * nv / vh, gtdenom * da / vh));
if (nh > 0.0)
{
@@ -222,7 +223,7 @@ vec3 getNormal(inout float glossiness)
#ifdef HAS_NORMAL_MAP
vec4 vNt = texture(bumpMap, vary_texcoord1.xy);
glossiness *= vNt.a;
- vNt.xyz = vNt.xyz * 2 - 1;
+ vNt.xyz = vNt.xyz * 2.0 - 1.0;
float sign = vary_sign;
vec3 vN = vary_normal;
vec3 vT = vary_tangent.xyz;
@@ -329,10 +330,10 @@ void main()
vec3 atten;
calcAtmosphericVarsLinear(pos.xyz, norm.xyz, light_dir, sunlit, amblit, additive, atten);
- vec3 sunlit_linear = srgb_to_linear(sunlit);
+ vec3 sunlit_linear = sunlit;
vec3 amblit_linear = amblit;
- vec3 ambenv;
+ vec3 ambenv = amblit;
vec3 glossenv;
vec3 legacyenv;
sampleReflectionProbesLegacy(ambenv, glossenv, legacyenv, pos.xy*0.5+0.5, pos.xyz, norm.xyz, glossiness, env, true, amblit_linear);
@@ -340,8 +341,20 @@ void main()
color = ambenv;
float da = clamp(dot(norm.xyz, light_dir.xyz), 0.0, 1.0);
- vec3 sun_contrib = min(da, shadow) * sunlit_linear;
- color.rgb += sun_contrib;
+ if (classic_mode > 0)
+ {
+ da = pow(da,1.2);
+ vec3 sun_contrib = vec3(min(da, shadow));
+
+ color.rgb = srgb_to_linear(color.rgb * 0.9 + linear_to_srgb(sun_contrib) * sunlit_linear * 0.7);
+ sunlit_linear = srgb_to_linear(sunlit_linear);
+ }
+ else
+ {
+ vec3 sun_contrib = min(da, shadow) * sunlit_linear;
+ color.rgb += sun_contrib;
+ }
+
color *= diffcol.rgb;
vec3 refnormpersp = reflect(pos.xyz, norm.xyz);
@@ -361,9 +374,9 @@ void main()
float lit = min(nl*6.0, 1.0);
float sa = nh;
- float fres = pow(1 - vh, 5) * 0.4+0.5;
- float gtdenom = 2 * nh;
- float gt = max(0,(min(gtdenom * nv / vh, gtdenom * nl / vh)));
+ float fres = pow(1.0 - vh, 5.0) * 0.4+0.5;
+ float gtdenom = 2.0 * nh;
+ float gt = max(0.0,(min(gtdenom * nv / vh, gtdenom * nl / vh)));
float scol = shadow*fres*texture(lightFunc, vec2(nh, glossiness)).r*gt/(nh*nl);
color.rgb += lit*scol*sunlit_linear.rgb*spec.rgb;
@@ -380,7 +393,7 @@ void main()
applyLegacyEnv(color, legacyenv, spec, pos.xyz, norm.xyz, env);
float cur_glare = max(max(legacyenv.r, legacyenv.g), legacyenv.b);
- cur_glare = clamp(cur_glare, 0, 1);
+ cur_glare = clamp(cur_glare, 0.0, 1.0);
cur_glare *= env;
glare += cur_glare;
}
diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
index 8db3bcd363..d4359e7aa3 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
@@ -152,10 +152,10 @@ void main()
if (spec.a > 0.0)
{
lit = min(nl * 6.0, 1.0) * dist_atten;
- float fres = pow(1 - vh, 5) * 0.4 + 0.5;
+ float fres = pow(1.0 - vh, 5.0) * 0.4 + 0.5;
- float gtdenom = 2 * nh;
- float gt = max(0, min(gtdenom * nv / vh, gtdenom * nl / vh));
+ float gtdenom = 2.0 * nh;
+ float gt = max(0.0, min(gtdenom * nv / vh, gtdenom * nl / vh));
if (nh > 0.0)
{
diff --git a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
index 987089fcc9..1ca4024c69 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
@@ -133,9 +133,9 @@ void main()
lit = min(nl*6.0, 1.0) * dist_atten;
float sa = nh;
- float fres = pow(1 - vh, 5) * 0.4+0.5;
- float gtdenom = 2 * nh;
- float gt = max(0,(min(gtdenom * nv / vh, gtdenom * nl / vh)));
+ float fres = pow(1.0 - vh, 5.0) * 0.4+0.5;
+ float gtdenom = 2.0 * nh;
+ float gt = max(0.0,(min(gtdenom * nv / vh, gtdenom * nl / vh)));
if (nh > 0.0)
{
diff --git a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
index 78db8ccf5b..d13e71445f 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
@@ -198,7 +198,7 @@ void main()
proj_tc.x > 0.0 &&
proj_tc.y > 0.0)
{
- float amb_da = 0;
+ float amb_da = 0.0;
float lit = 0.0;
if (nl > 0.0)
@@ -221,10 +221,10 @@ void main()
{
dlit *= min(nl*6.0, 1.0) * dist_atten;
- float fres = pow(1 - vh, 5)*0.4+0.5;
+ float fres = pow(1.0 - vh, 5.0)*0.4+0.5;
- float gtdenom = 2 * nh;
- float gt = max(0, min(gtdenom * nv / vh, gtdenom * nl / vh));
+ float gtdenom = 2.0 * nh;
+ float gt = max(0.0, min(gtdenom * nv / vh, gtdenom * nl / vh));
if (nh > 0.0)
{
@@ -258,7 +258,7 @@ void main()
stc.x > 0.0 &&
stc.y > 0.0)
{
- final_color += color.rgb * texture2DLodSpecular(stc.xy, (1 - spec.a) * (proj_lod * 0.6)).rgb * shadow * envIntensity;
+ final_color += color.rgb * texture2DLodSpecular(stc.xy, (1.0 - spec.a) * (proj_lod * 0.6)).rgb * shadow * envIntensity;
}
}
}
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index bd7c11a52f..fceb81f061 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -1,4 +1,4 @@
-version 71
+version 72
// The version number above should be incremented IF AND ONLY IF some
// change has been made that is sufficiently important to justify
// resetting the graphics preferences of all users to the recommended
@@ -127,8 +127,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderEnableEmissiveBuffer 1 0
-RenderHDREnabled 1 0
RenderVintageMode 1 1
//
@@ -170,9 +168,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderEnableEmissiveBuffer 1 1
-RenderHDREnabled 1 1
-RenderVintageMode 1 0
+RenderVintageMode 1 1
//
// Medium Graphics Settings (standard)
@@ -213,9 +209,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderEnableEmissiveBuffer 1 1
-RenderHDREnabled 1 1
-RenderVintageMode 1 0
//
// Medium High Graphics Settings
@@ -256,9 +249,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderEnableEmissiveBuffer 1 1
-RenderHDREnabled 1 1
-RenderVintageMode 1 0
//
// High Graphics Settings (SSAO + sun shadows)
@@ -299,9 +289,6 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderEnableEmissiveBuffer 1 1
-RenderHDREnabled 1 1
-RenderVintageMode 1 0
//
// High Ultra Graphics Settings (deferred + SSAO + all shadows)
@@ -342,9 +329,6 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderEnableEmissiveBuffer 1 1
-RenderHDREnabled 1 1
-RenderVintageMode 1 0
//
// Ultra graphics (REALLY PURTY!)
@@ -385,9 +369,6 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderEnableEmissiveBuffer 1 1
-RenderHDREnabled 1 1
-RenderVintageMode 1 0
//
// Class Unknown Hardware (unknown)
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index a11a08f752..b411e69ab9 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -1,4 +1,4 @@
-version 65
+version 66
// The version number above should be incremented IF AND ONLY IF some
// change has been made that is sufficiently important to justify
// resetting the graphics preferences of all users to the recommended
@@ -166,7 +166,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
+RenderVintageMode 1 1
//
// Medium Graphics Settings (standard)
@@ -207,7 +207,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// Medium High Graphics Settings
@@ -248,7 +247,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// High Graphics Settings (SSAO + sun shadows)
@@ -289,7 +287,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// High Ultra Graphics Settings (SSAO + all shadows)
@@ -330,7 +327,6 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// Ultra graphics (REALLY PURTY!)
@@ -371,7 +367,6 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// Class Unknown Hardware (unknown)
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index b25ef02e13..28f26b1eac 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -655,8 +655,16 @@ void LLFeatureManager::applyBaseMasks()
if (gGLManager.mIsIntel)
{
maskFeatures("Intel");
+
+ static constexpr F32 TARGET_GL_VERSION =
+#if LL_DARWIN
+ 4.09f;
+#else
+ 4.59f;
+#endif
+
// check against 3.33 to avoid applying this fallback twice
- if (gGLManager.mGLVersion < 4.59f && gGLManager.mGLVersion > 3.33f)
+ if (gGLManager.mGLVersion < TARGET_GL_VERSION && gGLManager.mGLVersion > 3.33f)
{
// if we don't have OpenGL 4.6 on intel, set it to OpenGL 3.3
// we also want to trigger the GL3 fallbacks on these chipsets
@@ -709,6 +717,9 @@ void LLFeatureManager::applyBaseMasks()
// make sure to disable background context activity in GL3 mode
LLImageGLThread::sEnabledMedia = false;
LLImageGLThread::sEnabledTextures = false;
+
+ // Make extra sure that vintage mode also gets enabled.
+ gSavedSettings.setBOOL("RenderVintageMode", true);
}
// now mask by gpu string
diff --git a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
index e29ea0c39a..247c0d249a 100644
--- a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
+++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
@@ -271,6 +271,7 @@ void LLFloaterPreferenceGraphicsAdvanced::disableUnavailableSettings()
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail");
LLTextBox* sky_text = getChild<LLTextBox>("SkyMeshDetailText");
+ LLSliderCtrl* cas_slider = getChild<LLSliderCtrl>("RenderSharpness");
// disabled windlight
if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
@@ -330,6 +331,7 @@ void LLFloaterPreferenceGraphicsAdvanced::disableUnavailableSettings()
tonemapLabel->setEnabled(!is_vintage);
tonemapMix->setEnabled(!is_vintage);
exposureSlider->setEnabled(!is_vintage);
+ cas_slider->setEnabled(!is_vintage);
}
void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState()
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index dd1be028cd..5172fad29d 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1503,18 +1503,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
if (http_not_found == mGetStatus)
{
- if (mFTType != FTT_MAP_TILE)
- {
- LL_WARNS(LOG_TXT) << "Texture missing from server (404): " << mUrl << LL_ENDL;
- }
-
if(mWriteToCacheState == NOT_WRITE) //map tiles or server bakes
{
setState(DONE);
releaseHttpSemaphore();
if (mFTType != FTT_MAP_TILE)
{
- LL_WARNS(LOG_TXT) << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << "NOT_WRITE texture missing from server (404), abort: " << mUrl << LL_ENDL;
}
return true;
}
@@ -1524,6 +1519,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
LLViewerRegion* region = getRegion();
if (!region || mLastRegionId != region->getRegionID())
{
+ if (mFTType != FTT_MAP_TILE)
+ {
+ LL_INFOS(LOG_TXT) << "Texture missing from server (404), retrying: " << mUrl << " mRetryAttempt " << mRetryAttempt << LL_ENDL;
+ }
// cap failure? try on new region.
mUrl.clear();
++mRetryAttempt;
@@ -1532,6 +1531,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
return false;
}
}
+
+ if (mFTType != FTT_MAP_TILE)
+ {
+ LL_WARNS(LOG_TXT) << "Texture missing from server (404): " << mUrl << LL_ENDL;
+ }
}
else if (http_service_unavail == mGetStatus)
{
@@ -2734,7 +2738,7 @@ LLTextureFetchWorker* LLTextureFetch::getWorker(const LLUUID& id)
// Threads: T*
-bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
+bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level, S32& worker_state,
LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux,
LLCore::HttpStatus& last_http_get_status)
{
@@ -2743,6 +2747,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
LLTextureFetchWorker* worker = getWorker(id);
if (worker)
{
+ worker_state = worker->mState;
if (worker->wasAborted())
{
res = true;
@@ -2821,6 +2826,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
}
else
{
+ worker_state = 0;
res = true;
}
return res;
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index 3405f76e37..c2c5ec5acc 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -95,7 +95,7 @@ public:
// Threads: T*
// keep in mind that if fetcher isn't done, it still might need original raw image
- bool getRequestFinished(const LLUUID& id, S32& discard_level,
+ bool getRequestFinished(const LLUUID& id, S32& discard_level, S32& worker_state,
LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux,
LLCore::HttpStatus& last_http_get_status);
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 4a15b8624a..00e1ea4cd3 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1872,7 +1872,7 @@ bool LLViewerFetchedTexture::updateFetch()
if (mRawImage.notNull()) sRawCount--;
if (mAuxRawImage.notNull()) sAuxCount--;
// keep in mind that fetcher still might need raw image, don't modify original
- bool finished = LLAppViewer::getTextureFetch()->getRequestFinished(getID(), fetch_discard, mRawImage, mAuxRawImage,
+ bool finished = LLAppViewer::getTextureFetch()->getRequestFinished(getID(), fetch_discard, mFetchState, mRawImage, mAuxRawImage,
mLastHttpGetStatus);
if (mRawImage.notNull()) sRawCount++;
if (mAuxRawImage.notNull())
@@ -1965,7 +1965,9 @@ bool LLViewerFetchedTexture::updateFetch()
if (!mIsFetching)
{
- if ((decode_priority > 0) && (mRawDiscardLevel < 0 || mRawDiscardLevel == INVALID_DISCARD_LEVEL))
+ if ((decode_priority > 0)
+ && (mRawDiscardLevel < 0 || mRawDiscardLevel == INVALID_DISCARD_LEVEL)
+ && mFetchState > 1) // 1 - initial, make sure fetcher did at least something
{
// We finished but received no data
if (getDiscardLevel() < 0)
@@ -1977,6 +1979,7 @@ bool LLViewerFetchedTexture::updateFetch()
<< " mRawDiscardLevel " << mRawDiscardLevel
<< " current_discard " << current_discard
<< " stats " << mLastHttpGetStatus.toHex()
+ << " worker state " << mFetchState
<< LL_ENDL;
}
setIsMissingAsset();
@@ -2003,6 +2006,9 @@ bool LLViewerFetchedTexture::updateFetch()
{
// We have data, but our fetch failed to return raw data
// *TODO: FIgure out why this is happening and fix it
+ // Potentially can happen when TEX_LIST_SCALE and TEX_LIST_STANDARD
+ // get requested for the same texture id at the same time
+ // (two textures, one fetcher)
destroyRawImage();
}
}
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index ec2d1471cc..6f5a6d141b 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -70,7 +70,7 @@
follows="all"
left="10"
name="megapahit_credits_panel"
- height="390"
+ height="405"
top="10">
<text
follows="top|left|right"
@@ -86,7 +86,7 @@ Megapahit is brought to you by (in order of appearance):
<text_editor
enabled="false"
follows="top|left"
- height="230"
+ height="245"
bg_readonly_color="Transparent"
left="5"
text_color="LtGray"
@@ -98,17 +98,18 @@ Erik Kundiman
LinneNoir
milo (observeur)
Fritigern Gothly
+Kou Ayashi
Hadet Sonnenkern
Remmy (Secret Foxtail)
Eris Ravenwood
+gwigz (nya)
EmilyAmiee
Bavid Dailey
Aria (Tashia Redrose)
Cate (32a)
-Melodey
Hiroo Ono
+Melodey
Keysin (scoutkeysin)
-gwigz
Yikes Lopez
</text_editor>
<text
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index a64b3eee36..b4b4bb6fd3 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -361,6 +361,7 @@
<slider
control_name="RenderExposure"
+ disabled_control="RenderVintageMode"
decimal_digits="1"
follows="left|top"
height="16"