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
|
#version 130
varying vec4 passColour;
varying vec3 passNormal;
uniform sampler2D textureIn;
varying vec4 passPosition;
uniform vec2 screensize;
uniform int millis;
//Algorithm by hughsk
vec3 hsv2rgb(vec3 c) {
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
}
void main() {
vec2 viewportCoord1 = (gl_FragCoord.xy+vec2(-millis/100.0f, 70)/5.0f)/screensize.yy;
vec4 texture1 = texture2D(textureIn, viewportCoord1);
vec2 viewportCoord2 = (gl_FragCoord.xy/2.0f+vec2(50, millis/100.0f)/3.0f)/screensize.yy;
vec4 texture2 = texture2D(textureIn, viewportCoord2);
vec2 viewportCoord3 = (gl_FragCoord.xy/3.0f+vec2(-millis/100.0f+30, millis/100.0f+90)/2.0f)/screensize.yy;
vec4 texture3 = texture2D(textureIn, viewportCoord3);
vec2 viewportCoord4 = (gl_FragCoord.xy/3.0f+vec2(-millis/100.0f+50, -millis/100.0f+10)/2.0f)/screensize.yy;
vec4 texture4 = texture2D(textureIn, viewportCoord4);
float r = texture1.r + texture2.r + texture3.r + texture4.r;
float g = texture1.g + texture2.g + texture3.g + texture4.g;
float b = texture1.b + texture2.b + texture3.b + texture4.b;
if(r > 1) r = 1;
if(g > 1) g = 1;
if(b > 1) b = 1;
vec4 colour = vec4(hsv2rgb(vec3(mod(millis/50000.0f+gl_FragCoord.x/screensize.x/3.0f, 1.0f), 0.35f, 1.0f)), 1.0f);
gl_FragColor = vec4(r, g, b, 1) * passColour * colour;
}
|