const GL = require("gl-react"); const React = GL.React; const { PropTypes } = React; const Blur1D = require("./Blur1D"); const NORM = Math.sqrt(2)/2; function directionForPass (p, factor, total) { const f = factor * p / total; switch (p%4) { case 0: return [f,0]; case 1: return [0,f]; case 2: return [f*NORM,f*NORM]; case 3: return [f*NORM,-f*NORM]; } return p%2 ? [f,0] : [0,f]; } /** Usages: - Small blur: {url} - Medium blur: {url} - Powerful blur: {url} */ module.exports = GL.createComponent( ({ width, height, factor, children, passes }) => { const rec = p => p <= 0 ? children : {rec(p-1)} ; return rec(passes); }, { displayName: "Blur", defaultProps: { passes: 2 }, propTypes: { width: PropTypes.number, height: PropTypes.number, factor: PropTypes.number.isRequired, children: PropTypes.any.isRequired, passes: PropTypes.number } });