Add texture bumpmapping feature.
[oweals/minetest.git] / client / shaders / bumpmaps_liquids / opengl_fragment.glsl
1 \r
2 uniform sampler2D myTexture;\r
3 uniform sampler2D normalTexture;\r
4 \r
5 uniform vec4 skyBgColor;\r
6 uniform float fogDistance;\r
7 \r
8 varying vec3 vPosition;\r
9 \r
10 varying vec3 viewVec;\r
11 \r
12 void main (void)\r
13 {\r
14         vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));\r
15         float alpha = col.a;\r
16         vec2 uv = gl_TexCoord[0].st;\r
17         vec4 base = texture2D(myTexture, uv);\r
18         vec4 final_color = vec4(0.2, 0.2, 0.2, 1.0) * base;\r
19         vec3 vVec = normalize(viewVec);\r
20         vec3 bump = normalize(texture2D(normalTexture, uv).xyz * 2.0 - 1.0);\r
21         vec3 R = reflect(-vVec, bump);\r
22         vec3 lVec = normalize(vec3(0.0, -0.4, 0.5));\r
23         float diffuse = max(dot(lVec, bump), 0.0);\r
24   \r
25         vec3 color = diffuse * texture2D(myTexture, gl_TexCoord[0].st).rgb;\r
26         \r
27         \r
28         float specular = pow(clamp(dot(R, lVec), 0.0, 1.0),1.0);\r
29         vec4 vSpecular = 0.2*specular * diffuse;        \r
30     color += vSpecular;\r
31  \r
32   \r
33         col = vec4(color.r, color.g, color.b, alpha);\r
34         col *= gl_Color;\r
35         col = col * col; // SRGB -> Linear\r
36         col *= 1.8;\r
37         col.r = 1.0 - exp(1.0 - col.r) / exp(1.0);\r
38         col.g = 1.0 - exp(1.0 - col.g) / exp(1.0);\r
39         col.b = 1.0 - exp(1.0 - col.b) / exp(1.0);\r
40         col = sqrt(col); // Linear -> SRGB\r
41         if(fogDistance != 0.0){\r
42                 float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));\r
43                 alpha = mix(alpha, 0.0, d);\r
44         }\r
45 \r
46     gl_FragColor = vec4(col.r, col.g, col.b, alpha);   \r
47 }\r