- mat2 transform = mat2(texture(rotate, texcoord*screen_size/4.0)*2.0-1.0)
- *mat2(screen_size.y/screen_size.x, 0.0, 0.0, 1.0)*3.0/screen_size.y;
- float sample = depth_ratio.x/(texture(depth, texcoord).r-depth_ratio.y);
- float sum = 0.0;
- for(int i=0; i<=3; ++i)
- for(int j=0; j<=3; ++j)
+ vec4 rv = texture(rotate, gl_FragCoord.xy/4.0)*2.0-1.0;
+ mat3 transform = mat3(rv.xy, 0.0, rv.zx, 0.0, 0.0, 0.0, rv.w)*occlusion_radius;
+ vec3 center = unproject(vec3(vertex.xy, texture(depth, texcoord).r));
+ float min_depth = project(vec3(center.xy, center.z+occlusion_radius)).z;
+ float occlusion_sum = 0.0;
+ float count = 0.0;
+ for(int i=0; i<n_samples; ++i)
+ {
+ vec3 psp = project(center+transform*sample_points[i]);
+ float sample = texture(depth, psp.xy*0.5+0.5).r;
+ if(sample>=min_depth)