/* <copyright> This file contains proprietary software owned by Motorola Mobility, Inc.<br/> No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. </copyright> */ #ifdef GL_ES precision highp float; #endif // lighting uniforms uniform vec3 u_light0Pos; uniform vec4 u_light0Diff; uniform vec4 u_light0Amb; // diffuse map uniform sampler2D u_colMap; // environment map uniform sampler2D envMap; // normal map uniform sampler2D u_normalMap; // specular map uniform sampler2D u_glowMap; // depth map uniform sampler2D depthMap; //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; varying vec4 vShadowCoord; varying vec2 vEnvTexCoord; varying float vDiffuseIntensity; #if defined( PC ) void main() { vec4 rgba_depth = texture2D(depthMap, vShadowCoord.xy/vShadowCoord.w, -32.0); const vec4 bit_shift = vec4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1.0); float dist = vShadowCoord.w/200.0; float d = dot(rgba_depth, bit_shift); float shadowCoef = (dist > d + 0.00779) ? (0.6) : (1.0); vec4 colMapTexel = vec4(0); if (u_renderGlow <= 0.5) { colMapTexel = vec4(texture2D(u_colMap, vec2(vNormal.w, vECPos.w)).rgb, 1.0); } else { colMapTexel = vec4(texture2D(u_glowMap, vec2(vNormal.w, vECPos.w)).rgb, 1.0); } // normal mapping vec3 normal = normalize(vNormal.xyz); vec3 mapNormal = texture2D(u_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_light0Pos - 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_light0Amb; vec4 diffuse = u_matDiffuse * (colMapTexel + envMapTexel)*shadowCoef; if (u_renderGlow <= 0.5) { diffuse *= u_light0Diff; } vec4 specular = 2.0 * pf * envMapTexel; //gl_FragColor = vec4(dist, dist, dist, 1.0); gl_FragColor = ((colMapTexel*(ambient + diffuse)) + specular); } #endif #if defined( DEVICE ) void main() { vec4 colMapTexel = vec4(texture2D(u_colMap, vec2(vNormal.w, vECPos.w)).rgb, 1.0); // // normal mapping vec3 normal = normalize(vNormal.xyz); // vec3 mapNormal = texture2D(u_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( (vec3(vECPos.xyz - vEyePos.xyz)), mapNormal); // float m = 2.0 * length(r); // calculate environment map texel //vec4 envMapTexel = vec4(texture2D(envMap, vec2(r.x/m + 0.5, r.y/m + 0.5)).rgb, 0.0); vec4 envMapTexel = vec4(texture2D(envMap, vEnvTexCoord).rgb, 0.0); // lighting //vec3 lightDirection = normalize(u_light0Pos - vECPos.xyz); // float lightDist = length(lightDirection); // lightDirection /= lightDist; //vec3 halfVec = normalize(lightDirection + vEyePos); //float diffuseIntensity = max(0.0, dot(normal, 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_light0Amb; vec4 diffuse = u_matDiffuse*(colMapTexel + envMapTexel)*(vDiffuseIntensity + u_matAmbient); //diffuse *= u_light0Diff * diffuseIntensity; //vec4 specular = envMapTexel; //gl_FragColor = vec4(dist, dist, dist, 1.0); gl_FragColor = diffuse;//(colMapTexel*(ambient + diffuse)) + specular; } #endif