45 lines
1.0 KiB
GLSL
45 lines
1.0 KiB
GLSL
#version 110
|
|
|
|
varying vec2 vTexCoord;
|
|
|
|
uniform vec2 resolution; // Screen resolution
|
|
uniform sampler2D tex0; // scene buffer
|
|
|
|
uniform float xoff;
|
|
uniform float yoff;
|
|
uniform float scale;
|
|
uniform bool tile;
|
|
uniform bool hide_edges;
|
|
uniform bool stretch;
|
|
|
|
void main(void) {
|
|
vec2 texCoord = vTexCoord;
|
|
|
|
vec2 offset = vec2(1.0);
|
|
|
|
if (!stretch) {
|
|
if (resolution.x > resolution.y) {
|
|
offset.x = (resolution.x/resolution.y);
|
|
texCoord.x *= offset.x;
|
|
} else {
|
|
offset.y = (resolution.y/resolution.x);
|
|
texCoord.y *= offset.y;
|
|
}
|
|
}
|
|
|
|
vec2 p = 2.0 * texCoord - offset;
|
|
vec2 adj_tc = 2.0 * vTexCoord - 1.0;
|
|
float r = dot(p,p);
|
|
if (r > 1.0) discard;
|
|
float f = (1.0-sqrt(1.0-r))/(r);
|
|
vec2 uv;
|
|
uv.x = (adj_tc.x*(1.5-scale*0.01))*f+0.5-(xoff*0.01);
|
|
uv.y = (adj_tc.y*(1.5-scale*0.01))*f+0.5-(yoff*0.01);
|
|
if (tile) {
|
|
uv.x = mod(uv.x, 1.0);
|
|
uv.y = mod(uv.y, 1.0);
|
|
} else if (hide_edges && (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)) {
|
|
discard;
|
|
}
|
|
gl_FragColor = vec4(texture2D(tex0,uv));
|
|
} |