mirror of
https://github.com/foo-dogsquared/dotfiles.git
synced 2025-01-31 04:57:57 +00:00
44 lines
1.3 KiB
GLSL
44 lines
1.3 KiB
GLSL
|
#version 120
|
||
|
|
||
|
uniform sampler2D texture;
|
||
|
uniform sampler2D desktop;
|
||
|
uniform vec2 screenSize;
|
||
|
uniform vec2 mouse;
|
||
|
|
||
|
varying vec2 uvCoord;
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
// adjustable parameters
|
||
|
float circleSize = 28;
|
||
|
float borderSize = 2;
|
||
|
// The smaller this value is, the more intense the magnification!
|
||
|
float magnifyNerf = 1.5;
|
||
|
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 = mix( texture2D( desktop, vec2(upsideDown.x, -upsideDown.y) ), textureColor, textureColor.a );
|
||
|
}
|
||
|
} else if ( dr < circleSize+borderSize ) {
|
||
|
color = borderColor;
|
||
|
}
|
||
|
gl_FragColor = color;
|
||
|
}
|