summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
diff options
context:
space:
mode:
authorGeenz <geenz@geenzo.com>2013-04-09 11:46:52 -0400
committerGeenz <geenz@geenzo.com>2013-04-09 11:46:52 -0400
commit27fbf5efc9192813e5109443c60bfc26f99716ee (patch)
treeb04206ff449518dfd2c9500db4eea27a9d29fa3f /indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
parentc2df68743d53a9525f67cbec14637db9d56dd9fe (diff)
Re-added RGB10_A2 normal buffer, this time encoded with a sphere map transform so we can store the environment intensity in the blue channel.
Diffstat (limited to 'indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl')
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl13
1 files changed, 12 insertions, 1 deletions
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index 147fb4562e..1e835ae49e 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -65,6 +65,17 @@ uniform float shadow_offset;
uniform float spot_shadow_bias;
uniform float spot_shadow_offset;
+vec3 decode_normal (vec2 enc)
+{
+ vec2 fenc = enc*4-2;
+ float f = dot(fenc,fenc);
+ float g = sqrt(1-f/4);
+ vec3 n;
+ n.xy = fenc*g;
+ n.z = 1-f/2;
+ return n;
+}
+
vec4 getPosition(vec2 pos_screen)
{
float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -126,7 +137,7 @@ void main()
vec4 pos = getPosition(pos_screen);
vec4 nmap4 = texture2DRect(normalMap, pos_screen);
- nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
+ nmap4 = vec4(decode_normal(nmap4.xy),nmap4.w); // unpack norm
float displace = nmap4.w;
vec3 norm = nmap4.xyz;