UNPKG

phaser4-rex-plugins

Version:
50 lines (40 loc) 1.24 kB
// reference : https://www.geeks3d.com/20091116/shader-library-2d-shockwave-post-processing-filter-glsl/ const frag = `\ #pragma phaserTemplate(shaderName) #ifdef GL_FRAGMENT_PRECISION_HIGH #define highmedp highp #else #define highmedp mediump #endif 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; #pragma phaserTemplate(fragmentHeader) 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;