UNPKG

phaser

Version:

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

88 lines (87 loc) 2.59 kB
module.exports = [ '#pragma phaserTemplate(shaderName)', 'precision highp float;', 'uniform sampler2D uMainSampler;', 'uniform vec4 uSteps;', 'uniform vec4 uGamma;', 'uniform vec4 uOffset;', 'uniform int uMode;', 'uniform bool uDither;', 'varying vec2 outTexCoord;', 'vec4 rgbaToHsva(vec4 rgba)', '{', ' float r = rgba.r;', ' float g = rgba.g;', ' float b = rgba.b;', ' float a = rgba.a;', ' float min = min(min(r, g), b);', ' float max = max(max(r, g), b);', ' float d = max - min;', ' float h = 0.0;', ' float s = (max == 0.0) ? 0.0 : d / max;', ' float v = max;', ' if (max != min)', ' {', ' if (max == r)', ' {', ' h = (g - b) / d + ((g < b) ? 6.0 : 0.0);', ' }', ' else if (max == g)', ' {', ' h = (b - r) / d + 2.0;', ' }', ' else', ' {', ' h = (r - g) / d + 4.0;', ' }', ' h /= 6.0;', ' }', ' return vec4(h, s, v, a);', '}', 'float hsvaToRgbaConvert(float n, vec4 hsva)', '{', ' float k = mod(n + hsva.x * 6.0, 6.0);', ' float min = min(min(k, 4.0 - k), 1.0);', ' return hsva.z - hsva.z * hsva.y * max(0.0, min);', '}', 'vec4 hsvaToRgba(vec4 hsva)', '{', ' return vec4(', ' hsvaToRgbaConvert(5.0, hsva),', ' hsvaToRgbaConvert(3.0, hsva),', ' hsvaToRgbaConvert(1.0, hsva),', ' hsva.a', ' );', '}', 'vec4 ditherIGN(vec4 value)', '{', ' value += fract(52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y)) - 0.5;', ' return value;', '}', 'void main ()', '{', ' vec4 sample = texture2D(uMainSampler, outTexCoord);', ' if (uMode == 1)', ' {', ' sample = rgbaToHsva(sample);', ' }', ' sample = pow(sample, uGamma);', ' sample -= uOffset;', ' vec4 steps = max(uSteps - 1.0, 1.0);', ' sample *= steps;', ' if (uDither)', ' {', ' sample = ditherIGN(sample);', ' }', ' sample = ceil(sample - 0.5);', ' sample /= steps;', ' sample += uOffset;', ' sample = pow(sample, 1.0 / uGamma);', ' if (uMode == 1)', ' {', ' sample.x = mod(sample.x, 1.0);', ' sample = hsvaToRgba(clamp(sample, 0.0, 1.0));', ' }', ' gl_FragColor = sample;', '}', ].join('\n');