summaryrefslogtreecommitdiff
path: root/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'shaders')
-rw-r--r--shaders/crt.f.glsl65
-rw-r--r--shaders/crt.v.glsl10
-rw-r--r--shaders/default.f.glsl7
-rw-r--r--shaders/default.v.glsl3
-rw-r--r--shaders/sharp.f.glsl16
5 files changed, 50 insertions, 51 deletions
diff --git a/shaders/crt.f.glsl b/shaders/crt.f.glsl
index 4cbc27b..db4f037 100644
--- a/shaders/crt.f.glsl
+++ b/shaders/crt.f.glsl
@@ -1,5 +1,3 @@
-#version 110
-
/* Subtle CRT shader usable in fullscreen - Anaƫl Seghezzi [anael(at)maratis3d.com]
This shader is free software distributed under the terms of the GNU General Public
License version 3 or higher. This gives you the right to redistribute and/or
@@ -10,63 +8,64 @@
#define M_PI 3.14159265358979323846
uniform sampler2D textures[2];
-uniform float width, height;
-varying vec2 texcoord;
-varying vec2 screencoord;
+uniform mediump float width, height;
+uniform mediump vec2 texsize;
+varying mediump vec2 texcoord;
+varying mediump vec2 screencoord;
-float nrand(vec2 n) {
+mediump float nrand(vec2 n) {
return fract(sin(dot(n.xy, vec2(12.9898, 78.233))) * 43758.5453);
}
-float scanline(vec2 texco)
+mediump float scanline(vec2 texco)
{
- return (1.0 - abs(cos(texco.y * 512.0 * M_PI)));
+ return (1.0 - abs(cos(texco.y * texsize.y * M_PI)));
}
-vec2 sharp_coord(vec2 texco, vec2 dim, vec2 sharpness)
+mediump vec2 sharp_coord(mediump vec2 texco, mediump vec2 dim, mediump vec2 sharpness)
{
- vec2 texcoif = texco * dim;
- vec2 texcoi = floor(texcoif);
- vec2 mu = (texcoif - 0.5) - texcoi;
- vec2 mub = pow(abs(mu) * 2.0, sharpness) * sign(mu) * 0.5;
+ mediump vec2 texcoif = texco * dim;
+ mediump vec2 texcoi = floor(texcoif);
+ mediump vec2 mu = (texcoif - 0.5) - texcoi;
+ mediump vec2 mub = pow(abs(mu) * 2.0, sharpness) * sign(mu) * 0.5;
return (texcoi + mub + 0.5) / dim;
}
void main()
{
- float v = 1.0 / 512.0;
- float yforce = 0.175;
- float vign = length(screencoord);
+ mediump float v = 1.0 / texsize.y;
+ mediump float yforce = 0.175;
+ mediump float vign = length(screencoord);
// monitor deformation
- vec2 monitorcoord = (screencoord + screencoord * vign * 0.025);
+ mediump vec2 monitorcoord = (screencoord + screencoord * vign * 0.025);
if (monitorcoord.x < -1.0 || monitorcoord.y < -1.0 || monitorcoord.x > 1.0 || monitorcoord.y > 1.0) {
gl_FragColor = vec4(0.0);
return;
}
- vec2 texco = monitorcoord * vec2(width/1024.0, height/-1024.0) + vec2(width/1024.0, height/1024.0);
+ mediump vec2 texco = monitorcoord * vec2(0.5*width/texsize.x, -0.5 * height/texsize.y) + vec2(0.5*width/texsize.x, 0.5*height/texsize.y);
// mask
- float maskx = 1.0 - pow(abs(monitorcoord.x), 200.0);
- float masky = 1.0 - pow(abs(-monitorcoord.y), 200.0);
- float mask = clamp(maskx * masky, 0.0, 1.0);
+ mediump float maskx = 1.0 - pow(abs(monitorcoord.x), 200.0);
+ mediump float masky = 1.0 - pow(abs(-monitorcoord.y), 200.0);
+ mediump float mask = clamp(maskx * masky, 0.0, 1.0);
// sharp texcoord
- vec2 texco_sharp0 = sharp_coord(texco, vec2(512.0, 512.0), vec2(4.0, 8.0));
- vec2 texco_sharp1 = sharp_coord(texco - vec2(0.0, 1.0 / 1024.0), vec2(512.0, 512.0), vec2(4.0, 8.0));
+ mediump vec2 texco_sharp0 = sharp_coord(texco, texsize, vec2(4.0, 8.0));
+ mediump vec2 texco_sharp1 = sharp_coord(texco - vec2(0.0, 0.5 / texsize.y), texsize, vec2(4.0, 8.0));
- vec4 src0 = texture2D(textures[0], texco_sharp0);
- vec4 src1 = texture2D(textures[1], texco_sharp1);
+ mediump vec4 src0 = texture2D(textures[0], texco_sharp0);
+ mediump vec4 src1 = texture2D(textures[1], texco_sharp1);
// interlace mix
- float interlace = cos((texco.y * 1024.0) * M_PI);
- vec4 src_mix = mix(src0, src1, interlace * 0.5 + 0.5);
+ mediump float interlace = cos((texco.y * 2.0 * texsize.y) * M_PI);
+ mediump vec4 src_mix = mix(src0, src1, interlace * 0.5 + 0.5);
// blur
- vec4 src_blur = mix(texture2D(textures[0], texco), texture2D(textures[1], texco), 0.5);
+ mediump vec4 src_blur = mix(texture2D(textures[0], texco), texture2D(textures[1], texco), 0.5);
#ifdef NO_SCANLINE
@@ -75,11 +74,11 @@ void main()
#else
// multisample scanline with grain
// TODO: offset grain with time (needs a "frame" uniform)
- float cosy;
- cosy = scanline(texco + vec2(0.125, v * (nrand(texcoord + vec2(0.0, 1.0)) * 0.25) + 0.3333));
- cosy += scanline(texco + vec2(0.25, v * (nrand(texcoord + vec2(0.0, 2.0)) * 0.25) + 0.25));
- cosy += scanline(texco + vec2(0.50, v * (nrand(texcoord + vec2(0.0, 3.0)) * 0.25) + 0.6666));
- cosy += scanline(texco + vec2(0.75, v * (nrand(texcoord + vec2(0.0, 4.0)) * 0.25) + 0.75));
+ mediump float cosy;
+ cosy = scanline(texco + vec2(0.125, v * (nrand(texcoord + vec2(0.0, 512.0/texsize.y)) * 0.25) + 512.0*0.3333/texsize.y));
+ cosy += scanline(texco + vec2(0.25, v * (nrand(texcoord + vec2(0.0, 1024.0/texsize.y)) * 0.25) + 512.0*0.25/texsize.y));
+ cosy += scanline(texco + vec2(0.50, v * (nrand(texcoord + vec2(0.0, 1536.0/texsize.y)) * 0.25) + 512.0*0.6666/texsize.y));
+ cosy += scanline(texco + vec2(0.75, v * (nrand(texcoord + vec2(0.0, 2048.0/texsize.y)) * 0.25) + 512.0*0.75/texsize.y));
cosy *= 0.25;
// final scanline + burn
diff --git a/shaders/crt.v.glsl b/shaders/crt.v.glsl
index 162d029..f8e8b6b 100644
--- a/shaders/crt.v.glsl
+++ b/shaders/crt.v.glsl
@@ -1,13 +1,13 @@
-#version 110
attribute vec2 pos;
-varying vec2 texcoord;
-varying vec2 screencoord;
-uniform float width, height;
+varying mediump vec2 texcoord;
+varying mediump vec2 screencoord;
+uniform mediump float width, height;
+uniform mediump vec2 texsize;
void main()
{
gl_Position = vec4(pos, 0.0, 1.0);
- texcoord = sign(pos) * vec2(width/1024.0, height/-1024.0) + vec2(width/1024.0, height/1024.0);
+ texcoord = sign(pos) * vec2(0.5*width/texsize.x, -0.5*height/texsize.y) + vec2(0.5*width/texsize.x, 0.5*height/texsize.y);
screencoord = sign(pos);
} \ No newline at end of file
diff --git a/shaders/default.f.glsl b/shaders/default.f.glsl
index 4aecdae..6cf7a5c 100644
--- a/shaders/default.f.glsl
+++ b/shaders/default.f.glsl
@@ -1,15 +1,16 @@
uniform sampler2D textures[2];
+uniform mediump vec2 texsize;
varying mediump vec2 texcoord;
void main()
{
- mediump vec2 modifiedCoord0 = vec2(texcoord.x, (floor(texcoord.y * 512.0 + 0.25) + 0.5)/512.0);
- mediump vec2 modifiedCoord1 = vec2(texcoord.x, (floor(texcoord.y * 512.0 - 0.25) + 0.5)/512.0);
+ mediump vec2 modifiedCoord0 = vec2(texcoord.x, (floor(texcoord.y * texsize.y + 0.25) + 0.5)/texsize.y);
+ mediump vec2 modifiedCoord1 = vec2(texcoord.x, (floor(texcoord.y * texsize.y - 0.25) + 0.5)/texsize.y);
gl_FragColor = mix(
texture2D(textures[1], modifiedCoord1),
texture2D(textures[0], modifiedCoord0),
- (sin(texcoord.y * 1024.0 * 3.14159265359) + 1.0) * 0.5
+ (sin(texcoord.y * texsize.y * 6.283185307) + 1.0) * 0.5
);
}
diff --git a/shaders/default.v.glsl b/shaders/default.v.glsl
index 82a2439..5609680 100644
--- a/shaders/default.v.glsl
+++ b/shaders/default.v.glsl
@@ -2,9 +2,10 @@
attribute vec2 pos;
varying mediump vec2 texcoord;
uniform mediump float width, height;
+uniform mediump vec2 texsize;
void main()
{
gl_Position = vec4(pos, 0.0, 1.0);
- texcoord = sign(pos) * vec2(width / 1024.0, height / -1024.0) + vec2(width / 1024.0, height / 1024.0);
+ texcoord = sign(pos) * vec2(0.5 * width / texsize.x, -0.5 * height / texsize.y) + vec2(0.5 * width / texsize.x, 0.5 * height / texsize.y);
}
diff --git a/shaders/sharp.f.glsl b/shaders/sharp.f.glsl
index 623e1a5..dbd934b 100644
--- a/shaders/sharp.f.glsl
+++ b/shaders/sharp.f.glsl
@@ -1,20 +1,18 @@
uniform sampler2D textures[2];
+uniform mediump vec2 texsize;
varying mediump vec2 texcoord;
void main()
{
- mediump float x0 = (floor(texcoord.x * 512.0 - 0.25) + 0.5)/512.0;
- mediump float x1 = (floor(texcoord.x * 512.0 + 0.25) + 0.5)/512.0;
- mediump float y0 = (floor(texcoord.y * 512.0 + 0.25) + 0.5)/512.0;
- mediump float y1 = (floor(texcoord.y * 512.0 - 0.25) + 0.5)/512.0;
+ mediump float x0 = (floor(texcoord.x * texsize.x - 0.25) + 0.5)/texsize.x;
+ mediump float x1 = (floor(texcoord.x * texsize.x + 0.25) + 0.5)/texsize.x;
+ mediump float y0 = (floor(texcoord.y * texsize.y + 0.25) + 0.5)/texsize.y;
+ mediump float y1 = (floor(texcoord.y * texsize.y - 0.25) + 0.5)/texsize.y;
-
- mediump vec2 modifiedCoord0 = vec2(texcoord.x, (floor(texcoord.y * 512.0 + 0.25) + 0.5)/512.0);
- mediump vec2 modifiedCoord1 = vec2(texcoord.x, (floor(texcoord.y * 512.0 - 0.25) + 0.5)/512.0);
- mediump float ymix = (sin(texcoord.y * 1024.0 * 3.14159265359) + 1.0) * 0.5;
- mediump float xmix = (sin(texcoord.x * 1024.0 * 3.14159265359) + 1.0) * 0.5;
+ mediump float ymix = (sin(texcoord.y * texsize.y * 6.283185307) + 1.0) * 0.5;
+ mediump float xmix = (sin(texcoord.x * texsize.x * 6.283185307) + 1.0) * 0.5;
gl_FragColor = mix(
mix(
texture2D(textures[1], vec2(x0, y1)),