diff options
| author | Dave Parks <davep@lindenlab.com> | 2013-07-03 11:53:48 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2013-07-03 11:53:48 -0500 | 
| commit | c4d6c4213f263456fc48be468cb5596c35ccd6ec (patch) | |
| tree | 55debaaeb48b155c24b439e568899ec50e4da609 /indra/newview/app_settings/shaders/class1/deferred | |
| parent | 4f2c25979488733bcf92bc2f6ec357618c3e9632 (diff) | |
| parent | 930de04f51212195a2c7a877d235d4106f4d37e2 (diff) | |
Automated merge with https://bitbucket.org/lindenlab/viewer-development-materials
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred')
6 files changed, 107 insertions, 16 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 143af0576c..e80e4b0fcf 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -135,6 +135,26 @@ float pcfShadow(sampler2DShadow shadowMap, vec4 stc)  }  #endif +vec3 srgb_to_linear(vec3 cs) +{ +	 +/*        {  cs / 12.92,                 cs <= 0.04045 +    cl = { +        {  ((cs + 0.055)/1.055)^2.4,   cs >  0.04045*/ + +	return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +} + +vec3 linear_to_srgb(vec3 cl) +{ +	    /*{  0.0,                          0         <= cl +            {  12.92 * c,                    0         <  cl < 0.0031308 +    cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1 +            {  1.0,                                       cl >= 1*/ + +	return 1.055 * pow(cl, vec3(0.41666)) - 0.055; +} +  void main()   { @@ -217,7 +237,7 @@ void main()  #endif  	vec4 gamma_diff = diff; -	diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f)); +	diff.rgb = srgb_to_linear(diff.rgb);  #ifdef USE_VERTEX_COLOR  	float vertex_color_alpha = vertex_color.a;	 @@ -243,9 +263,8 @@ void main()  	color.rgb = scaleSoftClip(color.rgb); -	color.rgb = pow(color.rgb, vec3(2.2)); +	color.rgb = srgb_to_linear(color.rgb);  	col = vec4(0,0,0,0); -     #define LIGHT_LOOP(i) col.rgb += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, normal, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z); @@ -257,9 +276,9 @@ void main()  	LIGHT_LOOP(6)  	LIGHT_LOOP(7) -	color.rgb += diff.rgb * pow(vary_pointlight_col, vec3(2.2)) * col.rgb; +	color.rgb += diff.rgb * srgb_to_linear(vary_pointlight_col) * col.rgb; -	color.rgb = pow(color.rgb, vec3(1.0/2.2)); +	color.rgb = linear_to_srgb(color.rgb);  	frag_color = color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 53ade8ea64..027c6eeadb 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -30,6 +30,28 @@  uniform float emissive_brightness; + +vec3 srgb_to_linear(vec3 cs) +{ +	 +/*        {  cs / 12.92,                 cs <= 0.04045 +    cl = { +        {  ((cs + 0.055)/1.055)^2.4,   cs >  0.04045*/ + +	return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +} + +vec3 linear_to_srgb(vec3 cl) +{ +	    /*{  0.0,                          0         <= cl +            {  12.92 * c,                    0         <  cl < 0.0031308 +    cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1 +            {  1.0,                                       cl >= 1*/ + +	return 1.055 * pow(cl, vec3(0.41666)) - 0.055; +} + +  #if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)  #ifdef DEFINE_GL_FRAGCOLOR @@ -459,7 +481,7 @@ void main()  #if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)  	vec3 old_diffcol = diffcol.rgb; -	diffcol.rgb = pow(diffcol.rgb, vec3(2.2)); +	diffcol.rgb = srgb_to_linear(diffcol.rgb);  #endif  #if HAS_SPECULAR_MAP @@ -648,7 +670,7 @@ void main()  	col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);  	//convert to linear space before adding local lights -	col = pow(col, vec3(2.2)); +	col = srgb_to_linear(col);  	vec3 npos = normalize(-pos.xyz); @@ -665,7 +687,7 @@ void main()  	//convert to gamma space for display on screen -	col.rgb = pow(col.rgb, vec3(1.0/2.2)); +	col.rgb = linear_to_srgb(col.rgb);  	frag_color.rgb = col.rgb;  	glare = min(glare, 1.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index a955ef6e9d..3ba6de8b76 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -99,6 +99,7 @@ void main()  	norm = normalize(norm);  	vec4 spec = texture2DRect(specularRect, frag.xy);  	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb; +	  	float noise = texture2D(noiseMap, frag.xy/128.0).b;  	vec3 out_col = vec3(0,0,0);  	vec3 npos = normalize(-pos); @@ -157,6 +158,7 @@ void main()  		}  	} +  	frag_color.rgb = out_col;  	frag_color.a = 0.0;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 7d39ad7bc1..11220bfa47 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -84,15 +84,30 @@ vec3 decode_normal (vec2 enc)      return n;  } -vec4 correctWithGamma(vec4 col) +vec3 srgb_to_linear(vec3 cs)  { -	return vec4(pow(col.rgb, vec3(2.2)), col.a); +	 +/*        {  cs / 12.92,                 cs <= 0.04045 +    cl = { +        {  ((cs + 0.055)/1.055)^2.4,   cs >  0.04045*/ + +	return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +} + +vec3 linear_to_srgb(vec3 cl) +{ +	    /*{  0.0,                          0         <= cl +            {  12.92 * c,                    0         <  cl < 0.0031308 +    cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1 +            {  1.0,                                       cl >= 1*/ + +	return 1.055 * pow(cl, vec3(0.41666)) - 0.055;  }  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); -	ret = correctWithGamma(ret); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = tc-vec2(0.5); @@ -108,7 +123,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); -	ret = correctWithGamma(ret); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); @@ -126,7 +141,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)  vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); -	ret = correctWithGamma(ret); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = tc-vec2(0.5); diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl index 6f2cfae6d2..a3610bfffa 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl @@ -38,9 +38,20 @@ VARYING vec2 vary_fragcoord;  uniform float texture_gamma; +vec3 linear_to_srgb(vec3 cl) +{ +	    /*{  0.0,                          0         <= cl +            {  12.92 * c,                    0         <  cl < 0.0031308 +    cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1 +            {  1.0,                                       cl >= 1*/ + +	return 1.055 * pow(cl, vec3(0.41666)) - 0.055; +} +  void main()   {  	vec4 diff = texture2DRect(diffuseRect, vary_fragcoord); -	frag_color = pow(diff, vec4(texture_gamma, texture_gamma, texture_gamma, 1.0f)); +	diff.rgb = linear_to_srgb(diff.rgb); +	frag_color = diff;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index f0d2746700..dc2519bd0a 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -78,6 +78,28 @@ vec3 vary_AtmosAttenuation;  uniform mat4 inv_proj;  uniform vec2 screen_res; + +vec3 srgb_to_linear(vec3 cs) +{ +	 +/*        {  cs / 12.92,                 cs <= 0.04045 +    cl = { +        {  ((cs + 0.055)/1.055)^2.4,   cs >  0.04045*/ + +	return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4)); +} + +vec3 linear_to_srgb(vec3 cl) +{ +	    /*{  0.0,                          0         <= cl +            {  12.92 * c,                    0         <  cl < 0.0031308 +    cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1 +            {  1.0,                                       cl >= 1*/ + +	return 1.055 * pow(cl, vec3(0.41666)) - 0.055; +} + +  vec3 decode_normal (vec2 enc)  {      vec2 fenc = enc*4-2; @@ -313,7 +335,7 @@ void main()  	vec4 diffuse = texture2DRect(diffuseRect, tc);  	//convert to gamma space -	diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2)); +	diffuse.rgb = linear_to_srgb(diffuse.rgb);  	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);  	vec3 col; @@ -369,7 +391,7 @@ void main()  			col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);  		} -		col = pow(col, vec3(2.2)); +		col = srgb_to_linear(col);  		//col = vec3(1,0,1);  		//col.g = envIntensity; | 
