40 lines
1.0 KiB
GLSL
40 lines
1.0 KiB
GLSL
|
|
layout(pixel_center_integer) in vec4 gl_FragCoord;
|
|
|
|
#request uniform "screen" screen
|
|
uniform ivec2 screen; /* screen dimensions */
|
|
|
|
#request uniform "audio_l" audio_l
|
|
#request transform audio_l "window"
|
|
#request transform audio_l "wrange"
|
|
uniform sampler1D audio_l;
|
|
|
|
out vec4 fragment;
|
|
|
|
#include "@wave.glsl"
|
|
#include ":wave.glsl"
|
|
|
|
#define index(offset) ((texture(audio_l, (gl_FragCoord.x + offset) / screen.x).r - 0.5) * AMPLIFY) + 0.5F
|
|
|
|
void main() {
|
|
float
|
|
os = index(0),
|
|
adj0 = index(-1),
|
|
adj1 = index(1);
|
|
float
|
|
s0 = adj0 - os,
|
|
s1 = adj1 - os;
|
|
float
|
|
dmax = max(s0, s1),
|
|
dmin = min(s0, s1);
|
|
|
|
float s = (os + (screen.y * 0.5F) - 0.5F); /* center to screen coords */
|
|
float diff = gl_FragCoord.y - s;
|
|
if (abs(diff) < clamp(abs(s - (screen.y * 0.5)) * 6, MIN_THICKNESS, MAX_THICKNESS)
|
|
|| (diff <= dmax && diff >= dmin)) {
|
|
fragment = BASE_COLOR + (abs((screen.y * 0.5F) - s) * 0.02);
|
|
} else {
|
|
fragment = vec4(0, 0, 0, 0);
|
|
}
|
|
}
|