|  | uniform sampler2D sTexture; | 
|  | uniform sampler2D sNormalMap; | 
|  | uniform bool bUseDot3; | 
|  |  | 
|  | varying mediump vec2 TexCoord; | 
|  | varying mediump vec3 Light; | 
|  |  | 
|  | void main() | 
|  | { | 
|  | if(bUseDot3) | 
|  | { | 
|  | /* | 
|  | Note: | 
|  | In the normal map red = y, green = x, blue = z which is why when we get the normal | 
|  | from the texture we use the swizzle .grb so the colours are mapped to the correct | 
|  | co-ordinate variable. | 
|  | */ | 
|  |  | 
|  | mediump vec3 fNormal = texture2D(sNormalMap, TexCoord).grb; | 
|  | mediump float fNDotL = dot((fNormal - 0.5) * 2.0, Light); | 
|  |  | 
|  | gl_FragColor = texture2D(sTexture, TexCoord) * fNDotL; | 
|  | } | 
|  | else | 
|  | gl_FragColor = texture2D(sTexture, TexCoord) * Light.x; | 
|  | } |