1#ifdef GL_ES 2#define LOWP lowp 3#define MED mediump 4#define HIGH highp 5precision mediump float; 6#else 7#define MED 8#define LOWP 9#define HIGH 10#endif 11 12#if defined(specularTextureFlag) || defined(specularColorFlag) 13#define specularFlag 14#endif 15 16#ifdef normalFlag 17varying vec3 v_normal; 18#endif //normalFlag 19 20#if defined(colorFlag) 21varying vec4 v_color; 22#endif 23 24#ifdef blendedFlag 25varying float v_opacity; 26#ifdef alphaTestFlag 27varying float v_alphaTest; 28#endif //alphaTestFlag 29#endif //blendedFlag 30 31#if defined(diffuseTextureFlag) || defined(specularTextureFlag) 32#define textureFlag 33#endif 34 35#ifdef diffuseTextureFlag 36varying MED vec2 v_diffuseUV; 37#endif 38 39#ifdef specularTextureFlag 40varying MED vec2 v_specularUV; 41#endif 42 43#ifdef diffuseColorFlag 44uniform vec4 u_diffuseColor; 45#endif 46 47#ifdef diffuseTextureFlag 48uniform sampler2D u_diffuseTexture; 49#endif 50 51#ifdef specularColorFlag 52uniform vec4 u_specularColor; 53#endif 54 55#ifdef specularTextureFlag 56uniform sampler2D u_specularTexture; 57#endif 58 59#ifdef normalTextureFlag 60uniform sampler2D u_normalTexture; 61#endif 62 63#ifdef lightingFlag 64varying vec3 v_lightDiffuse; 65 66#if defined(ambientLightFlag) || defined(ambientCubemapFlag) || defined(sphericalHarmonicsFlag) 67#define ambientFlag 68#endif //ambientFlag 69 70#ifdef specularFlag 71varying vec3 v_lightSpecular; 72#endif //specularFlag 73 74#ifdef shadowMapFlag 75uniform sampler2D u_shadowTexture; 76uniform float u_shadowPCFOffset; 77varying vec3 v_shadowMapUv; 78#define separateAmbientFlag 79 80float getShadowness(vec2 offset) 81{ 82 const vec4 bitShifts = vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 160581375.0); 83 return step(v_shadowMapUv.z, dot(texture2D(u_shadowTexture, v_shadowMapUv.xy + offset), bitShifts));//+(1.0/255.0)); 84} 85 86float getShadow() 87{ 88 return (//getShadowness(vec2(0,0)) + 89 getShadowness(vec2(u_shadowPCFOffset, u_shadowPCFOffset)) + 90 getShadowness(vec2(-u_shadowPCFOffset, u_shadowPCFOffset)) + 91 getShadowness(vec2(u_shadowPCFOffset, -u_shadowPCFOffset)) + 92 getShadowness(vec2(-u_shadowPCFOffset, -u_shadowPCFOffset))) * 0.25; 93} 94#endif //shadowMapFlag 95 96#if defined(ambientFlag) && defined(separateAmbientFlag) 97varying vec3 v_ambientLight; 98#endif //separateAmbientFlag 99 100#endif //lightingFlag 101 102#ifdef fogFlag 103uniform vec4 u_fogColor; 104varying float v_fog; 105#endif // fogFlag 106 107void main() { 108 #if defined(normalFlag) 109 vec3 normal = v_normal; 110 #endif // normalFlag 111 112 #if defined(diffuseTextureFlag) && defined(diffuseColorFlag) && defined(colorFlag) 113 vec4 diffuse = texture2D(u_diffuseTexture, v_diffuseUV) * u_diffuseColor * v_color; 114 #elif defined(diffuseTextureFlag) && defined(diffuseColorFlag) 115 vec4 diffuse = texture2D(u_diffuseTexture, v_diffuseUV) * u_diffuseColor; 116 #elif defined(diffuseTextureFlag) && defined(colorFlag) 117 vec4 diffuse = texture2D(u_diffuseTexture, v_diffuseUV) * v_color; 118 #elif defined(diffuseTextureFlag) 119 vec4 diffuse = texture2D(u_diffuseTexture, v_diffuseUV); 120 #elif defined(diffuseColorFlag) && defined(colorFlag) 121 vec4 diffuse = u_diffuseColor * v_color; 122 #elif defined(diffuseColorFlag) 123 vec4 diffuse = u_diffuseColor; 124 #elif defined(colorFlag) 125 vec4 diffuse = v_color; 126 #else 127 vec4 diffuse = vec4(1.0); 128 #endif 129 130 #if (!defined(lightingFlag)) 131 gl_FragColor.rgb = diffuse.rgb; 132 #elif (!defined(specularFlag)) 133 #if defined(ambientFlag) && defined(separateAmbientFlag) 134 #ifdef shadowMapFlag 135 gl_FragColor.rgb = (diffuse.rgb * (v_ambientLight + getShadow() * v_lightDiffuse)); 136 //gl_FragColor.rgb = texture2D(u_shadowTexture, v_shadowMapUv.xy); 137 #else 138 gl_FragColor.rgb = (diffuse.rgb * (v_ambientLight + v_lightDiffuse)); 139 #endif //shadowMapFlag 140 #else 141 #ifdef shadowMapFlag 142 gl_FragColor.rgb = getShadow() * (diffuse.rgb * v_lightDiffuse); 143 #else 144 gl_FragColor.rgb = (diffuse.rgb * v_lightDiffuse); 145 #endif //shadowMapFlag 146 #endif 147 #else 148 #if defined(specularTextureFlag) && defined(specularColorFlag) 149 vec3 specular = texture2D(u_specularTexture, v_specularUV).rgb * u_specularColor.rgb * v_lightSpecular; 150 #elif defined(specularTextureFlag) 151 vec3 specular = texture2D(u_specularTexture, v_specularUV).rgb * v_lightSpecular; 152 #elif defined(specularColorFlag) 153 vec3 specular = u_specularColor.rgb * v_lightSpecular; 154 #else 155 vec3 specular = v_lightSpecular; 156 #endif 157 158 #if defined(ambientFlag) && defined(separateAmbientFlag) 159 #ifdef shadowMapFlag 160 gl_FragColor.rgb = (diffuse.rgb * (getShadow() * v_lightDiffuse + v_ambientLight)) + specular; 161 //gl_FragColor.rgb = texture2D(u_shadowTexture, v_shadowMapUv.xy); 162 #else 163 gl_FragColor.rgb = (diffuse.rgb * (v_lightDiffuse + v_ambientLight)) + specular; 164 #endif //shadowMapFlag 165 #else 166 #ifdef shadowMapFlag 167 gl_FragColor.rgb = getShadow() * ((diffuse.rgb * v_lightDiffuse) + specular); 168 #else 169 gl_FragColor.rgb = (diffuse.rgb * v_lightDiffuse) + specular; 170 #endif //shadowMapFlag 171 #endif 172 #endif //lightingFlag 173 174 #ifdef fogFlag 175 gl_FragColor.rgb = mix(gl_FragColor.rgb, u_fogColor.rgb, v_fog); 176 #endif // end fogFlag 177 178 #ifdef blendedFlag 179 gl_FragColor.a = diffuse.a * v_opacity; 180 #ifdef alphaTestFlag 181 if (gl_FragColor.a <= v_alphaTest) 182 discard; 183 #endif 184 #else 185 gl_FragColor.a = 1.0; 186 #endif 187 188} 189