Files
forge-steel/sample/frag1.glsl
T

65 lines
1.9 KiB
GLSL

#version 460
#define PI 3.1415927
in vec2 vUV;
out vec4 fragColor;
uniform float iTime; // elapsed time in seconds
uniform float iTempo; // current tempo in bpm
uniform float iBeats; // elapsed beats since last tempo reset
uniform int iFPS; // output window frames per seconds
uniform int iDemo; // 0/1 if demo mode
uniform int iSeed1; // a random seed assigned at start
uniform vec2 iResolution; // output window resolution in pixels
uniform vec3 iMidi1_1[20]; // all midi inputs defined
uniform sampler2D iTex0; // available texture (this code output, so feedback)
void main() {
// all available buttons and faders
vec3 b1 = iMidi1_1[0];
vec2 f1 = iMidi1_1[1].xy;
vec3 b2 = iMidi1_1[2];
vec2 f2 = iMidi1_1[3].xy;
vec3 b3 = iMidi1_1[4];
vec2 f3 = iMidi1_1[5].xy;
vec3 b4 = iMidi1_1[6];
vec2 f4 = iMidi1_1[7].xy;
vec3 b5 = iMidi1_1[8];
vec2 f5 = iMidi1_1[9].xy;
vec3 b6 = iMidi1_1[10];
vec2 f6 = iMidi1_1[11].xy;
vec3 b7 = iMidi1_1[12];
vec2 f7 = iMidi1_1[13].xy;
vec3 b8 = iMidi1_1[14];
vec2 f8 = iMidi1_1[15].xy;
vec3 b9 = iMidi1_1[16];
vec3 b10 = iMidi1_1[17];
vec3 b11 = iMidi1_1[18];
vec3 b12 = iMidi1_1[19];
// center UV and scale it to ratio
vec2 uv0 = vUV.st;
float ratio = iResolution.x / iResolution.y;
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
// make small circle controlled by fader 1 and 2
float circle_dist = 0.1 + 0.9 * f1.x;
float circle_size = 0.1 + 0.9 * f2.x;
vec2 circle_pos = circle_dist * vec2(
sin(iBeats * 2 * PI),
cos(iBeats * 2 * PI)
);
float circle = 1 - step(circle_size, length(uv1 - circle_pos));
// fader 3, 4 and 5 controls the color
vec3 color = vec3(
f3.x,
f4.x,
f5.x
);
vec3 out_color = mix(color, 1 - color, circle);
// fader 8 controls the feedback value
fragColor = mix(vec4(out_color, 1), texture(iTex0, vUV.st), f8.x);
}