dotfiles/slop/crosshair.frag

44 lines
1.3 KiB
GLSL
Raw Normal View History

#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;
}