diff options
| author | Graham Linden <graham@lindenlab.com> | 2013-07-24 04:03:27 -0700 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2013-07-24 04:03:27 -0700 | 
| commit | e290dd3fa175c2a891cc4f4e0c401edb10cedfb4 (patch) | |
| tree | 2a542af707196211e78051cbb8a75a1a1583538d /indra/newview | |
| parent | 72a0ae58e909b017c07e543bc99adc1db5e89180 (diff) | |
NORSPEC-311 make post deferred (alpha objects) respect same gamma ramp as deferred (opaque objects)
Diffstat (limited to 'indra/newview')
8 files changed, 45 insertions, 13 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index b928761358..e836e9750f 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -35,6 +35,8 @@ out vec4 frag_color;  #define frag_color gl_FragColor  #endif +uniform float display_gamma; +  #if HAS_SHADOW  uniform sampler2DShadow shadowMap0;  uniform sampler2DShadow shadowMap1; @@ -204,6 +206,11 @@ vec3 linear_to_srgb(vec3 cl)      cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1              {  1.0,                                       cl >= 1*/ +	cl = clamp(cl, vec3(0), vec3(1)); + +	if ((cl.r+cl.g+cl.b) < 0.0031308) +		return 12.92 * cl; +  	return 1.055 * pow(cl, vec3(0.41666)) - 0.055;  } @@ -295,7 +302,7 @@ void main()  #ifdef USE_VERTEX_COLOR  	float vertex_color_alpha = diff.a * vertex_color.a;	  #else -	float vertex_color_alpha = 1.0; +	float vertex_color_alpha = diff.a;  #endif  	vec3 normal = vary_norm;  @@ -333,7 +340,7 @@ void main()  	color.rgb += diff.rgb * vary_pointlight_col_linear * col.rgb; -	color.rgb = linear_to_srgb(color.rgb); +	color.rgb = pow(color.rgb,vec3(display_gamma));  #ifdef WATER_FOG  	color = applyWaterFogDeferred(pos.xyz, color); diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index da2585f662..da4ebfea58 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -117,6 +117,11 @@ vec3 linear_to_srgb(vec3 cl)      cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1              {  1.0,                                       cl >= 1*/ +	cl = clamp(cl, vec3(0), vec3(1)); + +	if ((cl.r+cl.g+cl.b) < 0.0031308) +		return 12.92 * cl; +  	return 1.055 * pow(cl, vec3(0.41666)) - 0.055;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index e028eef900..a46fbd9516 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -53,6 +53,11 @@ vec3 linear_to_srgb(vec3 cl)      cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1              {  1.0,                                       cl >= 1*/ +	cl = clamp(cl, vec3(0), vec3(1)); + +	if ((cl.r+cl.g+cl.b) < 0.0031308) +		return 12.92 * cl; +  	return 1.055 * pow(cl, vec3(0.41666)) - 0.055;  } @@ -701,7 +706,7 @@ void main()  		col += spec_contrib;  	} -	col = mix(col.rgb, old_diffcol.rgb, diffuse.a); +	col = mix(col.rgb, diffcol.rgb, diffuse.a);  	if (envIntensity > 0.0)  	{ @@ -754,7 +759,7 @@ void main()  	frag_color.a   = al;  #else -	//final_color.rgb = vec3(1,0,1); +	//final_color.rgb = old_diffcol.rgb;  	frag_data[0] = final_color;  	frag_data[1] = final_specular; // XYZ = Specular color. W = Specular exponent.  	frag_data[2] = final_normal; // XY = Normal.  Z = Env. intensity. diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl index 59b027a045..01f9d99682 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl @@ -36,7 +36,7 @@ uniform sampler2DRect diffuseRect;  uniform vec2 screen_res;  VARYING vec2 vary_fragcoord; -uniform float texture_gamma; +uniform float display_gamma;  vec3 linear_to_srgb(vec3 cl)  { @@ -45,13 +45,17 @@ vec3 linear_to_srgb(vec3 cl)      cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1              {  1.0,                                       cl >= 1*/ +	cl = clamp(cl, vec3(0), vec3(1)); + +	if ((cl.r+cl.g+cl.b) < 0.0031308) +		return 12.92 * cl;  	return 1.055 * pow(cl, vec3(0.41666)) - 0.055;  }  void main()   {  	vec4 diff = texture2DRect(diffuseRect, vary_fragcoord); -	diff.rgb = pow(diff.rgb,vec3(texture_gamma)); +	diff.rgb = pow(diff.rgb,vec3(display_gamma));  	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 6f11e8427c..045b449bbf 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -101,6 +101,11 @@ vec3 linear_to_srgb(vec3 cl)      cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1              {  1.0,                                       cl >= 1*/ +	cl = clamp(cl, vec3(0), vec3(1)); + +	if ((cl.r+cl.g+cl.b) < 0.0031308) +		return 12.92 * cl; +  	return 1.055 * pow(cl, vec3(0.41666)) - 0.055;  } @@ -403,9 +408,7 @@ void main()  		ambient = (1.0-ambient);  		col.rgb *= ambient; - -		col += atmosAffectDirectionalLight(max(min(da, 1.0), 0.0)); -	 +		col += atmosAffectDirectionalLight(max(min(da, 1.0), 0.0));	  		col *= diffuse.rgb;  		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index dbb32c40f4..fa67c4ecea 100755 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -100,6 +100,11 @@ vec3 linear_to_srgb(vec3 cl)      cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl < 1              {  1.0,                                       cl >= 1*/ +	cl = clamp(cl, vec3(0), vec3(1)); + +	if ((cl.r+cl.g+cl.b) < 0.0031308) +		return 12.92 * cl; +  	return 1.055 * pow(cl, vec3(0.41666)) - 0.055;  } @@ -467,8 +472,6 @@ void main()  			bloom = fogged.a;  		#endif - -  		col = srgb_to_linear(col);  		//col = vec3(1,0,1); diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 973e263572..6302cf6b00 100755 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -103,13 +103,18 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)  			simple_shader = &gDeferredAlphaProgram;  			fullbright_shader = &gDeferredFullbrightProgram;  		} +		 +		F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");  		fullbright_shader->bind();  		fullbright_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);  +		fullbright_shader->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));  		fullbright_shader->unbind();  		//prime simple shader (loads shadow relevant uniforms)  		gPipeline.bindDeferredShader(*simple_shader); + +		simple_shader->uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));  	}  	else  	{ diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c593c85ce7..165b28beb5 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8833,7 +8833,7 @@ void LLPipeline::renderDeferredLighting()  		F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma"); -		gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f)); +		gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));  		gGL.begin(LLRender::TRIANGLE_STRIP);  		gGL.texCoord2f(tc1.mV[0], tc1.mV[1]); @@ -9382,7 +9382,7 @@ void LLPipeline::renderDeferredLightingToRT(LLRenderTarget* target)  		F32 gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma"); -		gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f)); +		gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::DISPLAY_GAMMA, (gamma > 0.1f) ? 1.0f / gamma : (1.0f/2.2f));  		gGL.begin(LLRender::TRIANGLE_STRIP);  		gGL.texCoord2f(tc1.mV[0], tc1.mV[1]); | 
