phaser4-rex-plugins
Version:
64 lines (48 loc) • 1.65 kB
JavaScript
// Built-in fx in phaser3
const frag = `\
precision highmedp float;
// Scene buffer
uniform sampler2D uMainSampler;
varying vec2 outTexCoord;
// Effect parameters
uniform float alpha;
uniform vec2 positionFrom;
uniform vec2 positionTo;
uniform vec3 color1;
uniform vec3 color2;
uniform int size;
float gradientNoise(in vec2 uv)
{
const vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189);
return fract(magic.z * fract(dot(uv, magic.xy)));
}
float stepped (in float s, in float scale, in int steps)
{
return steps > 0 ? floor( s / ((1.0 * scale) / float(steps))) * 1.0 / float(steps - 1) : s;
}
void main ()
{
vec2 a = positionFrom;
vec2 b = positionTo;
vec2 ba = b - a;
float d = dot(outTexCoord - a, ba) / dot(ba, ba);
float t = size > 0 ? stepped(d, 1.0, size) : d;
t = smoothstep(0.0, 1.0, clamp(t, 0.0, 1.0));
vec3 color = mix(SRGB(color1.r, color1.g, color1.b), SRGB(color2.r, color2.g, color2.b), t);
color = LINEAR_TO_SRGB(color);
color += (1.0 / 255.0) * gradientNoise(outTexCoord) - (0.5 / 255.0);
vec4 texture = texture2D(uMainSampler, outTexCoord);
gl_FragColor = vec4(mix(color.rgb, texture.rgb, alpha), 1.0) * texture.a;
}
`;
export default frag;