#version 150 compatibility

// diffuse texture map
uniform sampler2D diffuse_map;
// whether to use the diffuse map
uniform bool use_diffuse_map;
// whether to use the bump map
uniform bool use_bump_map;
///
uniform bool use_color_material = true;
///
uniform bool two_sided = false;

// interpolated surface normal in eye space
in vec3 N;
// interpolated surface point in eye space
in vec3 s;
// interpolated texture coordinates
in vec2 tc;

in vec4 clr;

vec3 bump_map_normal(vec3 s, vec2 tc, vec3 N);

vec4 doLighting(vec3 position, vec3 normal, vec4 diffuseMaterial);

void main()
{
	// compute bump mapped normal
	vec4 diff = gl_FrontMaterial.diffuse;
	if (use_color_material) {
		diff = clr;
	}
	if (use_diffuse_map) {
		diff = texture2D(diffuse_map, tc);
	}
	vec3 normal;
	if (use_bump_map) {
		normal = normalize(bump_map_normal(s,tc,N));
	}
	else {
		normal = N;
	}
	if (two_sided) {
		if (dot(s, normal) > 0.0) {
			normal = -normal;
		}
	}
	gl_FragColor = doLighting(s, normal, diff);
	gl_FragColor.a = diff.a;
}