diff options
Diffstat (limited to 'indra/newview/app_settings/shaders')
3 files changed, 16 insertions, 7 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 09bb6c5bb8..c8f4d7c570 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -42,6 +42,9 @@ vec3 scaleSoftClipFrag(vec3 l);  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); +vec3 srgb_to_linear(vec3 cs); +vec3 linear_to_srgb(vec3 cs); +  #if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)  #ifdef DEFINE_GL_FRAGCOLOR @@ -199,7 +202,7 @@ void main()  #endif  #if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND) -    vec3 gamma_diff = diffcol.rgb; +    vec3 gamma_diff = linear_to_srgb(diffcol.rgb);  #endif  #if HAS_SPECULAR_MAP @@ -332,6 +335,7 @@ void main()      }      col = atmosFragLighting(col, additive, atten); +    col = scaleSoftClipFrag(col);      vec3 npos = normalize(-pos.xyz); @@ -352,7 +356,8 @@ void main()      glare = min(glare, 1.0);      float al = max(diffcol.a,glare)*vertex_color.a; -    col = scaleSoftClipFrag(col); +    //convert to gamma space for display on screen +    col.rgb = linear_to_srgb(col.rgb);  #ifdef WATER_FOG      vec4 temp = applyWaterFogView(pos, vec4(col.rgb, al)); diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl index cbc19bbba3..058e939ec8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl @@ -44,8 +44,8 @@ vec3 linear_to_srgb(vec3 cl);  void main()   { -	vec4 diff = texture2DRect(diffuseRect, vary_fragcoord); -	diff.rgb = linear_to_srgb(diff.rgb); -	frag_color = diff; +    vec4 diff = texture2DRect(diffuseRect, vary_fragcoord); +    diff.rgb = linear_to_srgb(diff.rgb); +    frag_color = diff;  } diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl index efcf848ab1..565c00ba79 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl @@ -67,7 +67,11 @@ vec3 atmosLighting(vec3 light)  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) {      vec3 P = inPositionEye; -     +    +    //(TERRAIN) limit altitude +    if (P.y > max_y) P *= (max_y / P.y); +    if (P.y < -max_y) P *= (-max_y / P.y);  +      vec3 tmpLightnorm = lightnorm.xyz;      vec3 Pn = normalize(P); @@ -93,7 +97,7 @@ void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit,      //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)      temp2.y = max(0.0, tmpLightnorm.y);      temp2.y = 1. / temp2.y; -    sunlight *= exp( - light_atten * temp2.y); +    sunlight *= exp(-light_atten * temp2.y);      // main atmospheric scattering line integral      temp2.z = Plen * density_multiplier; | 
