From bdae26678d39c83280ed5e353986705da6f423c5 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 19 Mar 2015 23:06:26 +0000 Subject: Gem 4990e2aec04f67a68fbd2878f4d99bb8042f68fa osx/x86_64 built 'master:4990e2aec04f67a68fbd2878f4d99bb8042f68fa' for osx/x86_64 --- .../12.multi_screen_projection/soft_edge.frag | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Gem/examples/12.multi_screen_projection/soft_edge.frag (limited to 'Gem/examples/12.multi_screen_projection/soft_edge.frag') diff --git a/Gem/examples/12.multi_screen_projection/soft_edge.frag b/Gem/examples/12.multi_screen_projection/soft_edge.frag new file mode 100644 index 0000000..1c2e35f --- /dev/null +++ b/Gem/examples/12.multi_screen_projection/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; +} -- cgit v1.2.1