1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#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));
}
|