From b89a7ee8b956c96a1dcee995ea840feddc5d4b27 Mon Sep 17 00:00:00 2001 From: Pierre Frisch Date: Thu, 22 Dec 2011 07:25:50 -0800 Subject: First commit of Ninja to ninja-internal Signed-off-by: Valerio Virgillito --- assets/shaders/test_fshader_full.glsl | 82 +++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 assets/shaders/test_fshader_full.glsl (limited to 'assets/shaders/test_fshader_full.glsl') diff --git a/assets/shaders/test_fshader_full.glsl b/assets/shaders/test_fshader_full.glsl new file mode 100644 index 00000000..ef721b39 --- /dev/null +++ b/assets/shaders/test_fshader_full.glsl @@ -0,0 +1,82 @@ +/* +This file contains proprietary software owned by Motorola Mobility, Inc.
+No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. +
*/ + + +#ifdef GL_ES +precision highp float; +#endif + +// lighting uniforms +uniform vec3 u_lightPos; +uniform vec4 u_lightDiff; +uniform vec4 u_lightAmb; + +// diffuse map +uniform sampler2D colMap; + +// environment map +uniform sampler2D envMap; + +// normal map +uniform sampler2D normalMap; + +//material uniforms +uniform vec4 u_matAmbient; +uniform vec4 u_matDiffuse; +uniform vec4 u_matSpecular; +uniform float u_matShininess; +uniform vec4 u_matEmission; +uniform float u_renderGlow; + +// varyings +varying vec4 vNormal; // w = texcoord.x +varying vec4 vECPos; // w = texcoord.y +varying vec3 vEyePos; + +void main() +{ + vec4 colMapTexel = vec4(texture2D(colMap, vec2(vNormal.w, vECPos.w)).rgb, 1.0); + + // normal mapping + vec3 normal = normalize(vNormal.xyz); + vec3 mapNormal = texture2D(normalMap, vec2(vNormal.w, vECPos.w)).xyz * 2.0 - 1.0; + mapNormal = normalize(mapNormal.x*vec3(normal.z, 0.0, -normal.x) + vec3(0.0, mapNormal.y, 0.0) + mapNormal.z*normal); + + // create envmap coordinates + vec3 r = reflect( normalize(vec3(vECPos.xyz - vEyePos.xyz)), mapNormal); + float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + r.z*r.z ); + + // calculate environment map texel + vec4 envMapTexel = vec4(texture2D(envMap, vec2(r.x/m + 0.5, r.y/m + 0.5)).rgb, 0.0); + + // lighting + vec3 lightDirection = u_lightPos - vECPos.xyz; + float lightDist = length(lightDirection); + lightDirection /= lightDist; + + float attenuation = clamp(1.0 - lightDist * 0.01, 0.0, 1.0); + + vec3 halfVec = normalize(lightDirection + vEyePos); + + float diffuseIntensity = max(0.0, dot(mapNormal, lightDirection)); + float specularModifier = max(0.0, dot(mapNormal, halfVec)); + + float pf; + if(diffuseIntensity == 0.0) + pf = 0.0; + else + pf = pow(specularModifier, 76.0); + + vec4 ambient = u_matAmbient * u_lightAmb; + vec4 diffuse = u_matDiffuse * (colMapTexel + envMapTexel); + + if (u_renderGlow <= 0.5) + diffuse *= u_lightDiff * diffuseIntensity * attenuation; + + vec4 specular = 2.0 * pf * envMapTexel; + + gl_FragColor = (colMapTexel*(ambient + diffuse)) + specular + vec4(0.0,0.0,0.0,1.0); +} -- cgit v1.2.3