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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#version 450 core
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 resolution;
uniform float time;
uniform float ticks;
uniform int program;
uniform sampler2D images[8];
layout (binding = 0,rgba32f) uniform image2D backbuffer;
uniform float params[4];
out vec4 fragColor;
float random (in float x) {
return fract(sin(x)*43758.5453123)-0.5;
}
vec2 st() {
return gl_FragCoord.xy/resolution.xy;
}
ivec2 ist() {
return ivec2(gl_FragCoord.xy/resolution.xy*resolution);
}
vec2 zoom(vec2 st, float amount) {
st -= 0.5;
st *= amount;
st += 0.5;
return st;
}
vec2 translate(vec2 st, vec2 amount) {
st -= 0.5;
st += amount;
st += 0.5;
return st;
}
mat2 rotate2d(float _angle){
return mat2(cos(_angle),-sin(_angle), sin(_angle),cos(_angle));
}
void main (void) {
vec4 img;
vec2 coord;
if (program == 0) {
//coord = zoom(st(),0.5*(1.0-params[0]));
coord = zoom(st(),sin(time));
img = texture2D(images[0],coord);
img -= params[1]*(1.0-texture2D(images[1],st()));
}
else if (program == 1) {
coord = zoom(st(),(1.0-1.5*params[0]));
img = texture2D(images[3],coord);
coord = zoom(st(),0.5*(1.0-0.5*params[2]));
vec3 i2 = texture2D(images[2],coord).rgb;
img.rgb = pow(img.rgb,5*i2);
}
else if (program == 2) {
coord = zoom(st(),(1.0-1.5*params[0]));
img = texture2D(images[3],coord);
coord = zoom(st(),0.5*(1.0-0.5*params[2]));
coord *= rotate2d(ticks);
vec3 i2 = texture2D(images[2],coord).rgb;
img.rgb = pow(img.rgb,5*i2);
}
vec4 feedback = imageLoad(backbuffer,ist());
img = mix(img,feedback,0.5);
imageStore(backbuffer,ist(),img);
fragColor = img;
/*
fragColor = vec4(params[1]);
feedback.b += 0.01*cos(time/4.);
color.r = max(i.r,feedback.r);
*/
}
|