diff options
| author | Dave Parks <davep@lindenlab.com> | 2013-05-16 15:25:25 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2013-05-16 15:25:25 -0500 | 
| commit | d9a241aaf545655ca990216106c65ed87897ad56 (patch) | |
| tree | 762d8d7a02fd6c1666e377fb3ca25696a977be3e | |
| parent | 4afa3557971f3a7cf750472112ef1755c7ff98db (diff) | |
NORSPEC-190 Fix for local lights not being gamma corrected on alpha objects.
| -rwxr-xr-x | indra/newview/pipeline.cpp | 38 | 
1 files changed, 37 insertions, 1 deletions
| diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f4b445c2eb..2d8947a19b 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -5700,8 +5700,15 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)  		LLLightState* light = gGL.getLight(1); -		mHWLightColors[1] = diffuse; +		if (LLPipeline::sRenderDeferred) +		{ +			diffuse.mV[0] = powf(diffuse.mV[0], 2.2f); +			diffuse.mV[1] = powf(diffuse.mV[1], 2.2f); +			diffuse.mV[2] = powf(diffuse.mV[2], 2.2f); +		} +		mHWLightColors[1] = diffuse; +				  		light->setDiffuse(diffuse);  		light->setAmbient(LLColor4::black);  		light->setSpecular(LLColor4::black); @@ -5740,6 +5747,13 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)  		}  		backlight_diffuse *= backlight_mag / max_component; +		if (LLPipeline::sRenderDeferred) +		{ +			backlight_diffuse.mV[0] = powf(backlight_diffuse.mV[0], 2.2f); +			backlight_diffuse.mV[1] = powf(backlight_diffuse.mV[1], 2.2f); +			backlight_diffuse.mV[2] = powf(backlight_diffuse.mV[2], 2.2f); +		} +  		mHWLightColors[1] = backlight_diffuse;  		LLLightState* light = gGL.getLight(1); @@ -5946,6 +5960,14 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)  		LLVector4 light_pos(mSunDir, 0.0f);  		LLColor4 light_diffuse = mSunDiffuse; + +		if (LLPipeline::sRenderDeferred) +		{ +			light_diffuse.mV[0] = powf(light_diffuse.mV[0], 2.2f); +			light_diffuse.mV[1] = powf(light_diffuse.mV[1], 2.2f); +			light_diffuse.mV[2] = powf(light_diffuse.mV[2], 2.2f); +		} +  		mHWLightColors[0] = light_diffuse;  		LLLightState* light = gGL.getLight(0); @@ -6014,6 +6036,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)  			F32 x = (3.f * (1.f + light->getLightFalloff())); // why this magic?  probably trying to match a historic behavior.  			float linatten = x / (light_radius); // % of brightness at radius +			if (LLPipeline::sRenderDeferred) +			{ +				light_color.mV[0] = powf(light_color.mV[0], 2.2f); +				light_color.mV[1] = powf(light_color.mV[1], 2.2f); +				light_color.mV[2] = powf(light_color.mV[2], 2.2f); +			} +  			mHWLightColors[cur_light] = light_color;  			LLLightState* light_state = gGL.getLight(cur_light); @@ -6087,6 +6116,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)  			F32 x = 3.f;  		float linatten = x / (light_radius); // % of brightness at radius +		if (LLPipeline::sRenderDeferred) +		{ +			light_color.mV[0] = powf(light_color.mV[0], 2.2f); +			light_color.mV[1] = powf(light_color.mV[1], 2.2f); +			light_color.mV[2] = powf(light_color.mV[2], 2.2f); +		} +  		mHWLightColors[2] = light_color;  		LLLightState* light = gGL.getLight(2); | 
