51 lines
1 KiB
Text
51 lines
1 KiB
Text
|
#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;
|
||
|
}
|