diff options
| author | Rider Linden <rider@lindenlab.com> | 2019-02-01 21:53:44 +0000 | 
|---|---|---|
| committer | Rider Linden <rider@lindenlab.com> | 2019-02-01 21:53:44 +0000 | 
| commit | 6eb180f790c248005bafb8cfb87bb5f575ee129e (patch) | |
| tree | 0cd461cd6304901f2a82db8d6f40593771343985 | |
| parent | e1627330c9d568abca65c2451919c5a6e55dfec3 (diff) | |
| parent | 8b4a86db298335de52db114d63a153808dfde36a (diff) | |
Merged in graham_linden/viewer-eep-fixes (pull request #261)
SL-9996, SL-1130, SL-5546
19 files changed, 77 insertions, 43 deletions
| diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index f3519dc7cb..612c97168c 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -34,7 +34,7 @@  //=========================================================================  namespace { -    const F32 NIGHTTIME_ELEVATION = -8.0f; // degrees +    const F32 NIGHTTIME_ELEVATION = 8.0f; // degrees      const F32 NIGHTTIME_ELEVATION_SIN = (F32)sinf(NIGHTTIME_ELEVATION * DEG_TO_RAD);      const LLUUID IMG_BLOOM1("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef");      const LLUUID IMG_RAINBOW("11b4c57c-56b3-04ed-1f82-2004363882e4"); @@ -952,16 +952,38 @@ void LLSettingsSky::updateSettings()      calculateLightSettings();  } +F32 LLSettingsSky::getSunMoonGlowFactor() const +{ +    LLVector3 sunDir = getSunDirection(); +    LLVector3 moonDir = getMoonDirection(); + +    // sun glow at full iff moon is not up +    if (sunDir.mV[VZ] > -NIGHTTIME_ELEVATION_SIN) +    { +        if (moonDir.mV[2] <= 0.0f) +        { +            return 1.0f; +        } +    } + +    if (moonDir.mV[2] > 0.0f) +    { +        return moonDir.mV[VZ] / 3.0f; // ramp moon glow at moonset +    } + +    return 0.0f; +} +  bool LLSettingsSky::getIsSunUp() const  {      LLVector3 sunDir = getSunDirection(); -    return sunDir.mV[2] > NIGHTTIME_ELEVATION_SIN; +    return (sunDir.mV[2] >= 0.0f) || ((sunDir.mV[2] > -NIGHTTIME_ELEVATION_SIN) && !getIsMoonUp());  }  bool LLSettingsSky::getIsMoonUp() const  {      LLVector3 moonDir = getMoonDirection(); -    return moonDir.mV[2] > NIGHTTIME_ELEVATION_SIN; +    return moonDir.mV[2] > 0.0f;  }  void LLSettingsSky::calculateHeavenlyBodyPositions()  const diff --git a/indra/llinventory/llsettingssky.h b/indra/llinventory/llsettingssky.h index e82ab8db0c..65c0f2c581 100644 --- a/indra/llinventory/llsettingssky.h +++ b/indra/llinventory/llsettingssky.h @@ -272,6 +272,9 @@ public:      bool getIsSunUp() const;      bool getIsMoonUp() const; +    // determines how much the haze glow effect occurs in rendering +    F32 getSunMoonGlowFactor() const; +      LLVector3 getLightDirection() const;      LLColor3  getLightDiffuse() const; diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 807e41dc97..3989c1e2e4 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -1350,7 +1350,7 @@ void LLShaderMgr::initAttribsAndUniforms()      mReservedUniforms.push_back("sh_input_g");      mReservedUniforms.push_back("sh_input_b"); -    mReservedUniforms.push_back("sun_up_factor"); +    mReservedUniforms.push_back("sun_moon_glow_factor");      mReservedUniforms.push_back("water_edge");  	llassert(mReservedUniforms.size() == END_RESERVED_UNIFORMS); diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h index 8651265834..ef6f33f2e5 100644 --- a/indra/llrender/llshadermgr.h +++ b/indra/llrender/llshadermgr.h @@ -248,7 +248,7 @@ public:          SH_INPUT_L1G,          SH_INPUT_L1B, -        SUN_UP_FACTOR, +        SUN_MOON_GLOW_FACTOR,          WATER_EDGE_FACTOR,  		END_RESERVED_UNIFORMS  	} eGLSLReservedUniforms; diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl index baf54c1fbe..53391da9aa 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -58,7 +58,7 @@ uniform float density_multiplier;  uniform float max_y;  uniform vec4 glow; -uniform float sun_up_factor; +uniform float sun_moon_glow_factor;  uniform vec4 cloud_color; @@ -132,7 +132,7 @@ void main()  	temp2.x = pow(temp2.x, glow.z);  		// glow.z should be negative, so we're doing a sort of (1 / "angle") function -        //temp2.x *= sun_up_factor; +        temp2.x *= sun_moon_glow_factor;  	// Add "minimum anti-solar illumination"  	temp2.x += .25; diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl index 7265275e36..c6c12f80f8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl @@ -61,5 +61,7 @@ void main()      frag_data[0] = vec4(c.rgb, c.a);      frag_data[1] = vec4(0.0);      frag_data[2] = vec4(0.0f); + +    gl_FragDepth = 0.9996f;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl index 843901ea6a..6c509b7616 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl @@ -42,7 +42,6 @@ uniform float shadow_bias;  uniform float spot_shadow_bias;  uniform float spot_shadow_offset; -uniform float sun_up_factor;  uniform mat4 inv_proj;  uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl index 0613111632..f8172cae17 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl @@ -44,18 +44,20 @@ vec3 scaleSoftClip(vec3 light);  void main()  { -	// Potential Fill-rate optimization.  Add cloud calculation  -	// back in and output alpha of 0 (so that alpha culling kills  -	// the fragment) if the sky wouldn't show up because the clouds  -	// are fully opaque. - -	vec4 color; -	color = vary_HazeColor; -	color *= 2.; - -	/// Gamma correct for WL (soft clip effect). -	frag_data[0] = vec4(scaleSoftClip(color.rgb), 1.0); -	frag_data[1] = vec4(0.0,0.0,0.0,0.0); -	frag_data[2] = vec4(0.5,0.5,0.0,1.0); //1.0 in norm.w masks off fog +    // Potential Fill-rate optimization.  Add cloud calculation  +    // back in and output alpha of 0 (so that alpha culling kills  +    // the fragment) if the sky wouldn't show up because the clouds  +    // are fully opaque. + +    vec4 color; +    color = vary_HazeColor; +    color *= 2.; + +    /// Gamma correct for WL (soft clip effect). +    frag_data[0] = vec4(scaleSoftClip(color.rgb), 1.0); +    frag_data[1] = vec4(0.0,0.0,0.0,0.0); +    frag_data[2] = vec4(0.5,0.5,0.0,1.0); //1.0 in norm.w masks off fog + +    gl_FragDepth = 0.999f;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl index 4ae3f7b76f..67e7604e22 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl @@ -49,8 +49,8 @@ float twinkle(){  void main()   { -	vec4 col_a = texture2D(diffuseMap, vary_texcoord0.xy); -	vec4 col_b = texture2D(diffuseMap, vary_texcoord0.xy); +    vec4 col_a = texture2D(diffuseMap, vary_texcoord0.xy); +    vec4 col_b = texture2D(diffuseMap, vary_texcoord0.xy);      vec4 col = mix(col_b, col_a, blend_factor);      col.rgb *= vertex_color.rgb; @@ -59,8 +59,10 @@ void main()      col.a = (col.a * factor) * 32.0f;      col.a *= twinkle(); -	frag_data[0] = col; +    frag_data[0] = col;      frag_data[1] = vec4(0.0f);      frag_data[2] = vec4(0.0, 1.0, 0.0, 1.0); + +    gl_FragDepth = 0.9998;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 40d4c24d34..ee028d8194 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -165,11 +165,10 @@ void main()      color.rgb = atmosTransport(color.rgb);      color.rgb = scaleSoftClipFrag(color.rgb); -    color.a   = spec * sunAngle2;      vec3 screenspacewavef = normalize((norm_mat*vec4(wavef, 1.0)).xyz); -    frag_data[0] = vec4(color.rgb, color); // diffuse +    frag_data[0] = vec4(color.rgb, 1); // diffuse      frag_data[1] = vec4(0);     // speccolor, spec      frag_data[2] = vec4(encode_normal(screenspacewavef.xyz*0.5+0.5), 0.05, 0);// normalxy, 0, 0  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl index 792aa4e85c..7e2d41cf7b 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl @@ -45,7 +45,7 @@ uniform float density_multiplier;  uniform float max_y;  uniform vec4 glow; -uniform float sun_up_factor; +uniform float sun_moon_glow_factor;  uniform vec4 cloud_color; @@ -153,7 +153,7 @@ void main()      // Add "minimum anti-solar illumination"      temp2.x += .25; -    //temp2.x *= sun_up_factor; +    temp2.x *= sun_moon_glow_factor;      // Haze color above cloud      vec4 color = (    blue_horizon * blue_weight * (sunlight + ambient) diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 4fd3e73336..2c1cc3026f 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -91,7 +91,7 @@ void main()      float da_sun  = dot(norm.xyz, normalize(sun_dir.xyz));      float da_moon = dot(norm.xyz, normalize(moon_dir.xyz)); -    float da = max(da_sun, da_moon); +    float da = (da_sun > 0.0) ? da_sun : da_moon;            da = clamp(da, 0.0, 1.0);      da = pow(da, global_gamma + 0.3); diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl index 8d1e5e3281..683ab794d3 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl @@ -42,7 +42,7 @@ uniform vec4 glow;  uniform float scene_light_strength;  uniform mat3 ssao_effect_mat;  uniform int no_atmo; -uniform float sun_up_factor; +uniform float sun_moon_glow_factor;  vec3 scaleSoftClipFrag(vec3 light); @@ -119,7 +119,7 @@ void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit,      //add "minimum anti-solar illumination"      temp2.x += .25; -    //temp2.x *= sun_up_factor; +    temp2.x *= sun_moon_glow_factor;      //increase ambient when there are more clouds      vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5; diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl index 5ccf786fce..86cdae8768 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl @@ -54,7 +54,7 @@ uniform float density_multiplier;  uniform float distance_multiplier;  uniform float max_y;  uniform vec4 glow; -uniform float sun_up_factor; +uniform float sun_moon_glow_factor;  void calcAtmospherics(vec3 inPositionEye) { @@ -118,7 +118,7 @@ void calcAtmospherics(vec3 inPositionEye) {      temp2.x = pow(temp2.x, glow.z);          //glow.z should be negative, so we're doing a sort of (1 / "angle") function -        temp2.x *= sun_up_factor; +    temp2.x *= sun_moon_glow_factor;      //add "minimum anti-solar illumination"      temp2.x += .25; diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl index a250cf2c45..3e3bd929e1 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl @@ -57,7 +57,7 @@ uniform float density_multiplier;  uniform float max_y;  uniform vec4 glow; -uniform float sun_up_factor; +uniform float sun_moon_glow_factor;  uniform vec4 cloud_color; @@ -131,7 +131,7 @@ void main()      temp2.x = pow(temp2.x, glow.z);          // glow.z should be negative, so we're doing a sort of (1 / "angle") function -    //temp2.x *= sun_up_factor; +    temp2.x *= sun_moon_glow_factor;      // Add "minimum anti-solar illumination"      temp2.x += .25; diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl index f509f9f8d4..f9f1eb7355 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl @@ -50,7 +50,7 @@ uniform float density_multiplier;  uniform float max_y;  uniform vec4 glow; -uniform float sun_up_factor; +uniform float sun_moon_glow_factor;  uniform vec4 cloud_color;  void main() @@ -119,7 +119,7 @@ void main()  	temp2.x = pow(temp2.x, glow.z);  		// glow.z should be negative, so we're doing a sort of (1 / "angle") function -        //temp2.x *= sun_up_factor; +        temp2.x *= sun_moon_glow_factor;  	// Add "minimum anti-solar illumination"  	temp2.x += .25; diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 996c7eed4b..eaf5b7dd68 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -2001,10 +2001,13 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)  			{  				gGL.matrixMode(LLRender::MM_TEXTURE);  				gGL.loadMatrix((F32*) face->mTextureMatrix->mMatrix); +  				buff->setBuffer(data_mask);  				buff->drawRange(LLRender::TRIANGLES, start, end, count, offset); + +                gGL.matrixMode(LLRender::MM_TEXTURE);  				gGL.loadIdentity(); -				gGL.matrixMode(LLRender::MM_MODELVIEW); +				  			}  			else  			{ diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index c674d9a576..23749d7adb 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -592,6 +592,7 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li  	shader->uniform1f(LLShaderMgr::WATER_SUN_ANGLE, sunAngle);  	shader->uniform1f(LLShaderMgr::WATER_SCALED_ANGLE, scaledAngle);  	shader->uniform1f(LLShaderMgr::WATER_SUN_ANGLE2, 0.1f + 0.2f*sunAngle); +    shader->uniform1i(LLShaderMgr::WATER_EDGE_FACTOR, edge ? 1 : 0);  	LLColor4 water_color;  	LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis(); diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index f9ab241988..acf2a6ea6e 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -232,7 +232,7 @@ void LLDrawPoolWLSky::renderSkyHazeAdvanced(const LLVector3& camPosLocal, F32 ca  	    sky_shader->uniformMatrix4fv(LLShaderMgr::INVERSE_PROJECTION_MATRIX, 1, FALSE, inv_proj.m); -        sky_shader->uniform1f(LLShaderMgr::SUN_UP_FACTOR, psky->getIsSunUp() ? 1.0f : 0.0f); +        sky_shader->uniform1f(LLShaderMgr::SUN_MOON_GLOW_FACTOR, psky->getSunMoonGlowFactor());          sky_shader->uniform3f(sCamPosLocal, camPosLocal.mV[0], camPosLocal.mV[1], camPosLocal.mV[2]); @@ -248,7 +248,7 @@ void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 ca  	if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SKY))  	{ -        LLGLSPipelineDepthTestSkyBox sky(true, false); +        LLGLSPipelineDepthTestSkyBox sky(true, true);          sky_shader->bind(); @@ -268,7 +268,7 @@ void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 ca          sky_shader->uniform1f(LLShaderMgr::DROPLET_RADIUS, droplet_radius);          sky_shader->uniform1f(LLShaderMgr::ICE_LEVEL, ice_level); -        sky_shader->uniform1f(LLShaderMgr::SUN_UP_FACTOR, psky->getIsSunUp() ? 1.0f : 0.0f); +        sky_shader->uniform1f(LLShaderMgr::SUN_MOON_GLOW_FACTOR, psky->getSunMoonGlowFactor());          /// Render the skydome          renderDome(origin, camHeightLocal, sky_shader);	 @@ -479,7 +479,8 @@ void LLDrawPoolWLSky::renderSkyCloudsAdvanced(const LLVector3& camPosLocal, F32          cloudshader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor);          cloudshader->uniform1f(LLShaderMgr::CLOUD_VARIANCE, cloud_variance); -        cloudshader->uniform1f(LLShaderMgr::SUN_UP_FACTOR, psky->getIsSunUp() ? 1.0f : 0.0f); +        cloudshader->uniform1f(LLShaderMgr::SUN_MOON_GLOW_FACTOR, psky->getSunMoonGlowFactor()); +          cloudshader->uniform3f(sCamPosLocal, camPosLocal.mV[0], camPosLocal.mV[1], camPosLocal.mV[2]);  		/// Render the skydome @@ -534,7 +535,7 @@ void LLDrawPoolWLSky::renderSkyCloudsDeferred(const LLVector3& camPosLocal, F32          cloudshader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor);          cloudshader->uniform1f(LLShaderMgr::CLOUD_VARIANCE, cloud_variance); -        cloudshader->uniform1f(LLShaderMgr::SUN_UP_FACTOR, psky->getIsSunUp() ? 1.0f : 0.0f); +        cloudshader->uniform1f(LLShaderMgr::SUN_MOON_GLOW_FACTOR, psky->getSunMoonGlowFactor());  		/// Render the skydome          renderDome(camPosLocal, camHeightLocal, cloudshader); | 
