123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #version 120
-
- uniform sampler2D texture;
- uniform sampler2D desktop;
- uniform vec2 screenSize;
- uniform vec2 mouse;
-
- varying vec2 uvCoord;
-
- void main()
- {
- // Adjustable parameters -------
- vec2 boxOffset = vec2(-64,-64);
- vec2 boxSize = vec2(128,128);
- float magstrength = 5;
- vec2 borderSize = vec2(1,1);
- vec4 borderColor = vec4(0,0,0,1);
- bool crosshair = true;
- //------------------------------
-
- // actual code (don't touch unless you're brave)
-
- // convert to UV space
- boxOffset = boxOffset/screenSize;
- boxSize = boxSize/screenSize;
- borderSize = borderSize/screenSize;
- // get mouse position in UV space
- vec2 mpos = vec2(mouse.x, -mouse.y)/screenSize + vec2(0,1);
- vec4 color;
-
- // Check if our current UV is inside our box.
- if ( uvCoord.x < mpos.x+boxOffset.x+boxSize.x &&
- uvCoord.x > mpos.x+boxOffset.x &&
- uvCoord.y > mpos.y+boxOffset.y &&
- uvCoord.y < mpos.y+boxOffset.y+boxSize.y ) {
- // Check if we're actually inside the crosshair area.
- if ( (distance(uvCoord.x, mpos.x+boxOffset.x+boxSize.x/2) <= borderSize.x ||
- distance(uvCoord.y, mpos.y+boxOffset.y+boxSize.y/2) <= borderSize.y) && crosshair ) {
- color = borderColor;
- } else {
- // Calculate where the UV should be.
- vec2 zoomedUV = ((uvCoord-mpos)-(boxOffset+boxSize/2))/magstrength+mpos;
- // The desktop texture is upside-down due to X11
- vec2 zoomedUVFlipped = vec2( zoomedUV.x, -zoomedUV.y );
- // Then change the color to the desktop color to draw, then add on our rectangle on top.
- vec4 rectColor = texture2D( texture, zoomedUV );
- color = mix( texture2D( desktop, zoomedUVFlipped ), rectColor, rectColor.a );
- }
- // Then check if we're in our border size.
- } else if( uvCoord.x <= mpos.x+boxOffset.x+boxSize.x+borderSize.x &&
- uvCoord.x >= mpos.x+boxOffset.x-borderSize.x &&
- uvCoord.y >= mpos.y+boxOffset.y-borderSize.y &&
- uvCoord.y <= mpos.y+boxOffset.y+boxSize.y+borderSize.y ) {
- color = borderColor;
- } else {
- color = texture2D( texture, uvCoord );
- }
-
- gl_FragColor = color;
- }
|