phaser4-rex-plugins
Version:
51 lines (40 loc) • 1.34 kB
JavaScript
// Reference: https://github.com/pixijs/pixi-filters/blob/master/filters/outline/src/outline.frag
const frag = `\
precision highmedp float;
// Scene buffer
uniform sampler2D uMainSampler;
varying vec2 outTexCoord;
// Effect parameters
uniform vec2 texSize;
uniform float thickness;
uniform vec3 outlineColor;
const float DOUBLE_PI = 3.14159265358979323846264 * 2.;
void main() {
vec4 front = boundedSampler(uMainSampler, outTexCoord);
if (thickness > 0.0) {
vec2 mag = vec2(thickness/texSize.x, thickness/texSize.y);
vec4 curColor;
float maxAlpha = front.a;
vec2 offset;
for (float angle = 0.; angle < DOUBLE_PI; angle += ANGLESTEP) {
offset = vec2(mag.x * cos(angle), mag.y * sin(angle));
curColor = boundedSampler(uMainSampler, outTexCoord + offset);
maxAlpha = max(maxAlpha, curColor.a);
}
vec3 resultColor = front.rgb + (outlineColor.rgb * (1. - front.a)) * maxAlpha;
gl_FragColor = vec4(resultColor, maxAlpha);
} else {
gl_FragColor = front;
}
}
`;
export default frag;