phaser4-rex-plugins
Version:
50 lines (40 loc) • 1.24 kB
JavaScript
// reference : https://www.geeks3d.com/20091116/shader-library-2d-shockwave-post-processing-filter-glsl/
const frag = `\
precision highmedp float;
// Scene buffer
uniform sampler2D uMainSampler;
varying vec2 outTexCoord;
// Effect parameters
uniform vec2 texSize;
uniform vec2 center;
uniform vec2 waveConfig;
uniform vec2 powConfig;
void main (void) {
float waveRadius = waveConfig.x;
float waveHalfWidth = waveConfig.y;
float powBaseScale = powConfig.x;
float powExponent = powConfig.y;
if (waveHalfWidth > 0.0) {
vec2 tc = outTexCoord * texSize;
tc -= center;
float diff = length(tc) - waveRadius;
if ((diff <= waveHalfWidth) && (diff >= -waveHalfWidth)) {
diff /= max(texSize.x, texSize.y);
float powDiff = 1.0 - pow(abs(diff*powBaseScale), powExponent);
tc += texSize * diff * powDiff;
}
tc += center;
gl_FragColor = texture2D(uMainSampler, tc / texSize);
} else {
gl_FragColor = texture2D(uMainSampler, outTexCoord);
}
}
`;
export default frag;