forked from enlightenment/efl
104 lines
2.1 KiB
Plaintext
104 lines
2.1 KiB
Plaintext
varying vec3 vLightVector;
|
|
varying vec3 vLightHalfVector;
|
|
varying vec3 vNormal;
|
|
|
|
FRAGMENT_SHADER_USE_TEX_COORD
|
|
FRAGMENT_SHADER_USE_FOG
|
|
FRAGMENT_SHADER_USE_SHADOWS
|
|
FRAGMENT_SHADER_USE_DIFFUSE_TERM
|
|
FRAGMENT_SHADER_USE_SPECULAR_TERM
|
|
FRAGMENT_SHADER_USE_AMBIENT_TERM
|
|
FRAGMENT_SHADER_USE_EMISSION_TERM
|
|
FRAGMENT_SHADER_USE_LIGHT
|
|
FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
|
|
|
|
vec4 fragmentPhong()
|
|
{
|
|
vec3 normal = normalize(vNormal);
|
|
vec3 lv = normalize(vLightVector);
|
|
float factor = dot(lv, normal);
|
|
vec4 color;
|
|
vec4 fragcolor;
|
|
|
|
#ifdef LIGHT_SPOT
|
|
float f = dot(-lv, normalize(uLightSpotDir));
|
|
|
|
if (f > uLightSpotCutoffCos)
|
|
factor *= pow(f, uLightSpotExp);
|
|
else
|
|
factor = 0.0;
|
|
#endif //LIGHT_SPOT
|
|
|
|
if (factor > 0.0)
|
|
{
|
|
|
|
/* Diffuse term. */
|
|
#ifdef DIFFUSE
|
|
|
|
FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
|
|
|
|
fragcolor = uLightDiffuse * color * factor;
|
|
#else
|
|
fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
#endif //DIFFUSE
|
|
|
|
/* Specular term. */
|
|
#ifdef SPECULAR
|
|
factor = dot(normalize(vLightHalfVector), normal);
|
|
if (factor > 0.0)
|
|
{
|
|
factor = pow(factor, uMaterialShininess);
|
|
|
|
FRAGMENT_SHADER_TEXTURE_BLEND(SPECULAR, Specular)
|
|
|
|
fragcolor += uLightSpecular * color * factor;
|
|
}
|
|
#endif
|
|
|
|
}
|
|
else
|
|
fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
|
|
#ifdef SHADOWED
|
|
fragcolor *= shadow;
|
|
#endif //SHADOWED
|
|
|
|
#ifdef AMBIENT
|
|
FRAGMENT_SHADER_TEXTURE_BLEND(AMBIENT, Ambient)
|
|
|
|
fragcolor += uLightAmbient * color;
|
|
#endif
|
|
|
|
/* Light attenuation. */
|
|
#ifdef LIGHT_ATTENUATION
|
|
fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * vLightDist));
|
|
#endif
|
|
|
|
/* Emission term. */
|
|
#ifdef EMISSION
|
|
|
|
FRAGMENT_SHADER_TEXTURE_BLEND(EMISSION, Emission)
|
|
fragcolor += color;
|
|
#endif
|
|
return fragcolor;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
vec4 color;
|
|
#ifdef SHADOWED
|
|
shadow = pcf(vLightPosition);
|
|
#endif //SHADOWED
|
|
|
|
color = fragmentPhong();
|
|
|
|
#ifdef ALPHA_TEST_ENABLED
|
|
FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
|
|
#else
|
|
gl_FragColor = color;
|
|
#endif //ALPHA_TEST_ENABLED
|
|
|
|
FRAGMENT_SHADER_FOG_APPLY
|
|
}
|
|
|