screensaver/data/shaders/sample-effect.glsl

48 lines
1.2 KiB
GLSL

@module effect
@ctype vec2 sgp_vec2
@ctype float float
@vs vs
layout(location=0) in vec4 coord;
layout(location=1) in vec4 color;
layout(location=0) out vec2 texUV;
layout(location=1) out vec4 iColor;
void main() {
gl_Position = vec4(coord.xy, 0.0, 1.0);
texUV = coord.zw;
iColor = color;
}
@end
@fs fs
layout(binding=0) uniform texture2D iTexChannel0;
layout(binding=1) uniform texture2D iTexChannel1;
layout(binding=0) uniform sampler iSmpChannel0;
layout(binding=1) uniform sampler iSmpChannel1;
layout(binding=1) uniform fs_uniforms {
vec2 iVelocity;
float iPressure;
float iTime;
float iWarpiness;
float iRatio;
float iZoom;
float iLevel;
};
layout(location=0) in vec2 texUV;
layout(location=1) in vec4 iColor;
layout(location=0) out vec4 fragColor;
float noise(vec2 p) {
return texture(sampler2D(iTexChannel1, iSmpChannel1), p).r;
}
void main() {
vec3 tex_col = texture(sampler2D(iTexChannel0, iSmpChannel0), texUV).rgb;
vec2 fog_uv = (texUV * vec2(iRatio, 1.0)) * iZoom;
float f = noise(fog_uv - iVelocity*iTime);
f = noise(fog_uv + f*iWarpiness);
vec3 col = mix(tex_col, vec3(f) * iColor.rgb, iPressure);
fragColor = vec4(col, 1.0);
}
@end
@program program vs fs