12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #version 120
-
- uniform sampler2D texture;
- uniform sampler2D desktop;
- uniform vec2 screenSize;
- uniform vec2 mouse;
-
- varying vec2 uvCoord;
-
- void main()
- {
- // adjustable parameters
- float circleSize = 128;
- float borderSize = 2;
- // The smaller this value is, the more intense the magnification!
- float magnifyNerf = 1.1;
- vec4 borderColor = vec4(0,0,0,1);
- bool crosshair = true;
-
- // actual code
- vec2 mUV = vec2(mouse.x, -mouse.y)/screenSize + vec2(0,1);
- float du = distance(mUV,uvCoord);
- float dr = distance(mUV*screenSize,uvCoord*screenSize);
- vec4 color = vec4(0);
- if ( dr > circleSize+borderSize ) {
- color = texture2D( texture, uvCoord );
- } else if ( dr < circleSize ) {
- if ( crosshair && (distance(mUV.x, uvCoord.x)<1/screenSize.x || distance(mUV.y,uvCoord.y)<1/screenSize.y) ) {
- color = borderColor;
- } else {
- float t = 1-du;
- vec2 b = uvCoord;
- vec2 c = (mUV-uvCoord);
- vec2 upsideDown = c/magnifyNerf*t*t+b;
-
- vec4 textureColor = texture2D( texture, upsideDown );
- color = texture2D( desktop, vec2(upsideDown.x, -upsideDown.y) )*(1-textureColor.a) + textureColor;
- }
- } else if ( dr < circleSize+borderSize ) {
- color = borderColor;
- }
- gl_FragColor = color;
- }
|