+++ /dev/null
-/* vi: set ft=glsl */
-#ifdef USE_CUBEMAP
-uniform samplerCube envmap;
-#endif
-uniform sampler2DShadow shadowmap;
-
-varying vec3 vdir, ldir[3], normal;
-varying vec4 shadow_tc;
-varying vec3 wdir;
-
-#define KD gl_FrontMaterial.diffuse.rgb
-#define KS gl_FrontMaterial.specular.rgb
-#define SPOW gl_FrontMaterial.shininess
-
-#define LD(i) gl_LightSource[i].diffuse.rgb
-#define LS(i) gl_LightSource[i].specular.rgb
-
-vec3 calc_diffuse(in vec3 n, in vec3 l, in vec3 lcol)
-{
- float ndotl = max(dot(n, l), 0.0);
- return KD * lcol * ndotl;
-}
-
-vec3 calc_specular(in vec3 n, in vec3 l, in vec3 v, in vec3 lcol)
-{
- vec3 h = normalize(l + v);
- float ndoth = max(dot(n, h), 0.0);
- return KS * lcol * pow(ndoth, SPOW);
-}
-
-void main()
-{
- float shadow = shadow2DProj(shadowmap, shadow_tc).x;
-
- vec3 n = normalize(normal);
- vec3 v = normalize(vdir);
-
- vec3 l = normalize(ldir[0]);
- vec3 diffuse = calc_diffuse(n, l, LD(0)) * shadow;
- vec3 specular = calc_specular(n, l, v, LS(0)) * shadow;
-
- l = normalize(ldir[1]);
- diffuse += calc_diffuse(n, l, LD(1));
- specular += calc_specular(n, l, v, LS(1));
-
- l = normalize(ldir[2]);
- diffuse += calc_diffuse(n, l, LD(2));
- specular += calc_specular(n, l, v, LS(2));
-
-#ifdef USE_CUBEMAP
- // envmap
- vec3 rdir = -reflect(wdir, n);
- vec3 env_texel = textureCube(envmap, rdir).xyz;
- specular += KS * env_texel;
-#endif // USE_CUBEMAP
-
- vec3 ambient = gl_LightModel.ambient.rgb * KD;
- gl_FragColor.rgb = ambient + diffuse + specular;
- gl_FragColor.a = gl_FrontMaterial.diffuse.a;
-}