UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

57 lines (56 loc) 2.44 kB
module.exports = [ '#pragma phaserTemplate(shaderName)', '#define DISTANCE 10.0', '#define QUALITY 10.0', '#pragma phaserTemplate(fragmentDefine)', 'precision mediump float;', 'uniform sampler2D uMainSampler;', 'varying vec2 outTexCoord;', 'uniform float outerStrength;', 'uniform float innerStrength;', 'uniform float scale;', 'uniform vec2 resolution;', 'uniform vec4 glowColor;', 'uniform bool knockout;', 'const float PI = 3.14159265358979323846264;', 'const float MAX_ALPHA = DISTANCE * (DISTANCE + 1.0) * QUALITY / 2.0;', '#pragma phaserTemplate(fragmentHeader)', 'void main ()', '{', ' vec2 px = vec2(1.0 / resolution.x, 1.0 / resolution.y) * scale;', ' float totalAlpha = 0.0;', ' float curAngle = 0.0;', ' vec2 direction;', ' vec2 displaced;', ' vec4 color;', ' for (float curDistance = 0.0; curDistance < DISTANCE; curDistance++)', ' {', ' curAngle += fract(sin(dot(vec2(curDistance, outTexCoord.x + outTexCoord.y), vec2(12.9898, 78.233))) * 43758.5453);', ' for (float i = 0.0; i < QUALITY; i++)', ' {', ' curAngle += PI * 2.0 / (QUALITY);', ' direction = vec2(cos(curAngle), sin(curAngle)) * px;', ' displaced = outTexCoord + direction * (curDistance + 1.0);', ' color = boundedSampler(uMainSampler, displaced);', ' totalAlpha += (DISTANCE - curDistance) * color.a;', ' }', ' }', ' color = boundedSampler(uMainSampler, outTexCoord);', ' float alphaRatio = (totalAlpha / MAX_ALPHA);', ' float innerGlowAlpha = (1.0 - alphaRatio) * innerStrength * color.a;', ' float innerGlowStrength = min(1.0, innerGlowAlpha);', ' vec4 innerColor = mix(color, glowColor, innerGlowStrength);', ' float outerGlowAlpha = alphaRatio * outerStrength * (1.0 - color.a);', ' float outerGlowStrength = min(1.0 - innerColor.a, outerGlowAlpha);', ' if (knockout)', ' {', ' float resultAlpha = outerGlowStrength + innerGlowStrength;', ' gl_FragColor = vec4(glowColor.rgb * resultAlpha, resultAlpha);', ' }', ' else', ' {', ' vec4 outerGlowColor = outerGlowStrength * glowColor.rgba;', ' gl_FragColor = innerColor + outerGlowColor;', ' }', '}', ].join('\n');