• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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