aboutsummaryrefslogtreecommitdiff
path: root/examples/09_vp_calibration/soft_edge.frag
diff options
context:
space:
mode:
Diffstat (limited to 'examples/09_vp_calibration/soft_edge.frag')
-rw-r--r--examples/09_vp_calibration/soft_edge.frag62
1 files changed, 62 insertions, 0 deletions
diff --git a/examples/09_vp_calibration/soft_edge.frag b/examples/09_vp_calibration/soft_edge.frag
new file mode 100644
index 0000000..1c2e35f
--- /dev/null
+++ b/examples/09_vp_calibration/soft_edge.frag
@@ -0,0 +1,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;
+}