]> git.tdb.fi Git - libs/gl.git/blob - builtin_data/_ambientocclusion.glsl
Make WindowView override the parameterless render function
[libs/gl.git] / builtin_data / _ambientocclusion.glsl
1 const int max_samples = 128;
2
3 uniform CameraTransform
4 {
5         mat4 eye_world_matrix;
6         mat4 world_eye_matrix;
7         mat4 clip_eye_matrix;
8         mat4 eye_clip_matrix;
9 };
10
11 uniform sampler2D source;
12 uniform sampler2D depth;
13 uniform sampler2D occlusion;
14 uniform sampler2D rotate;
15 uniform AmbientOcclusionParams
16 {
17         float darkness;
18         vec3 sample_points[max_samples];
19         int n_samples;
20         float occlusion_radius;
21         float edge_depth_threshold;
22 };
23
24 #pragma MSP stage(fragment)
25 vec3 project(vec3 position)
26 {
27         if(position.z>=0.0)
28                 return vec3(0.0, 0.0, -1.0);
29         vec4 pp = clip_eye_matrix*vec4(position, 1.0);
30         return pp.xyz/pp.w;
31 }
32
33 vec3 unproject(vec3 position)
34 {
35         vec4 upp = eye_clip_matrix*vec4(position, 1.0);
36         return upp.xyz/upp.w;
37 }
38
39 vec3 get_fragment_position(vec2 tc)
40 {
41         return unproject(vec3(tc*2.0-1.0, texture(depth, tc).r));
42 }
43
44 vec3 get_slope(vec3 a, vec3 x, vec3 b)
45 {
46         float dz1 = abs(x.z-a.z);
47         float dz2 = abs(b.z-x.z);
48         return (dz1>2.0*dz2 ? b-x : dz2>2.0*dz1 ? x-a : b-a);
49 }