aboutsummaryrefslogtreecommitdiff
path: root/examples/09_vp_calibration/soft_edge.frag
blob: 1c2e35f2656f6c624bd65125609b981f5e1f001d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Cyrille Henry 2010

//#extension GL_ARB_texture_rectangle : enable
//uniform sampler2DRect MyTex;
uniform sampler2D MyTex;
uniform vec2 overlap, geometry_screen, geometry_computer;

void main (void)
{
// FSAA

// change coord from computer matrix to screen matrice
	vec2 coord = (gl_TextureMatrix[0] * gl_TexCoord[0]).st;
   	vec2 pos_new = coord;
    pos_new *= geometry_computer;
    float screen_num = floor(pos_new.x)+floor(pos_new.y)*geometry_computer.x; // number of the screen
    pos_new = fract(pos_new); // coord in 1 screen (from 0 to 1)
    pos_new.x += fract(screen_num/geometry_screen.x)*geometry_screen.x;
    pos_new.y += floor(screen_num/geometry_screen.x);
    pos_new /= geometry_screen;

// compute position regarding to the overlap
    vec2 pos = pos_new;
    pos *= geometry_screen;

    vec2 pos_over = fract(pos);
    pos_over *= overlap;
    pos_over -= overlap/2.;
    pos += pos_over;
    pos += overlap/2.;
    pos /= geometry_screen + overlap;
    vec4 color = texture2D(MyTex, pos);

// compute fade on Top and Right
    vec2 black = pos_new;
    black *= geometry_screen;
    black = fract(black);
	black *= 1. + (overlap/ (geometry_screen/2.));
    black -= 1.;
    black = max(black,0.);
	black *= (geometry_screen / 2.) / overlap;
    if ( ( floor(pos_new.x*geometry_screen.x) < geometry_screen.x-1. ) && (overlap.x != 0.) )
        color *= (1.-black.x);
    if ( ( floor(pos_new.y*geometry_screen.y) < geometry_screen.y-1. ) && (overlap.x != 0.) )
    	color *= (1.-black.y);

// compute fade on Left and bottom
    black = pos_new;
    black *= geometry_screen;
    black = fract(black);
	black = vec2(1.) - black;
	black *= 1. + (overlap/ (geometry_screen/2.));
    black -= 1.;
    black = max(black,0.);
	black *= (geometry_screen / 2.) / overlap;
    if ( ( floor(pos_new.x*geometry_screen.x) > 0. ) && (overlap.x != 0.) )
        color *= (1.-black.x);
    if ( ( floor(pos_new.y*geometry_screen.y) > 0. ) && (overlap.x != 0.) )
        color *= (1.-black.y);

    gl_FragColor = color;
}