48 lines
1.2 KiB
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
|