fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
3 lines (2 loc) • 1.88 kB
JavaScript
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as e}from"./BaseFilter.min.mjs";import{isWebGLPipelineState as s}from"./utils.min.mjs";import{classRegistry as o}from"../ClassRegistry.min.mjs";import{fragmentSource as r}from"./shaders/blur.min.mjs";const i={blur:0};class a extends e{getFragmentSource(){return r}applyTo(t){s(t)?(this.aspectRatio=t.sourceWidth/t.sourceHeight,t.passes++,this._setupFrameBuffer(t),this.horizontal=!0,this.applyToWebGL(t),this._swapTextures(t),this._setupFrameBuffer(t),this.horizontal=!1,this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)}applyTo2d(t){let{imageData:{data:e,width:s,height:o}}=t;this.aspectRatio=s/o,this.horizontal=!0;let r=this.getBlurValue()*s;const i=new Uint8ClampedArray(e),a=15,l=4*s;for(let t=0;t<e.length;t+=4){let s=0,o=0,h=0,n=0,u=0;const p=t-t%l,m=p+l;for(let i=-14;i<a;i++){const l=i/a,c=4*Math.floor(r*l),f=1-Math.abs(l);let g=t+c;g<p?g=p:g>m&&(g=m);const d=e[g+3]*f;s+=e[g]*d,o+=e[g+1]*d,h+=e[g+2]*d,n+=d,u+=f}i[t]=s/n,i[t+1]=o/n,i[t+2]=h/n,i[t+3]=n/u}this.horizontal=!1,r=this.getBlurValue()*o;for(let t=0;t<i.length;t+=4){let s=0,o=0,h=0,n=0,u=0;const p=t%l,m=i.length-l+p;for(let e=-14;e<a;e++){const c=e/a,f=Math.floor(r*c)*l,g=1-Math.abs(c);let d=t+f;d<p?d=p:d>m&&(d=m);const b=i[d+3]*g;s+=i[d]*b,o+=i[d+1]*b,h+=i[d+2]*b,n+=b,u+=g}e[t]=s/n,e[t+1]=o/n,e[t+2]=h/n,e[t+3]=n/u}}sendUniformData(t,e){const s=this.chooseRightDelta();t.uniform2fv(e.uDelta,s)}isNeutralState(){return 0===this.blur}getBlurValue(){let t=1;const{horizontal:e,aspectRatio:s}=this;return e?s>1&&(t=1/s):s<1&&(t=s),t*this.blur*.12}chooseRightDelta(){const t=this.getBlurValue();return this.horizontal?[t,0]:[0,t]}}t(a,"type","Blur"),t(a,"defaults",i),t(a,"uniformLocations",["uDelta"]),o.setClass(a);export{a as Blur,i as blurDefaultValues};
//# sourceMappingURL=Blur.min.mjs.map