webgl2-sdf 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/browser/index.min.js +1 -1
  2. package/node/generate-sdf.d.ts +3 -2
  3. package/node/generate-sdf.js +5 -6
  4. package/node/generate-sdf.js.map +1 -1
  5. package/node/index.d.ts +2 -0
  6. package/node/index.js +2 -0
  7. package/node/index.js.map +1 -1
  8. package/node/main-program.js +0 -1
  9. package/node/main-program.js.map +1 -1
  10. package/node/prepare-buffers.js +4 -6
  11. package/node/prepare-buffers.js.map +1 -1
  12. package/node/shaders/main.vertex.d.ts +1 -1
  13. package/node/shaders/main.vertex.js +0 -1
  14. package/node/shaders/main.vertex.js.map +1 -1
  15. package/node/types/gl-context.d.ts +0 -1
  16. package/node/types/program.d.ts +2 -0
  17. package/node/utils/calc-circs.js.map +1 -1
  18. package/node/utils/clip-line-segment-to-grid.d.ts +1 -1
  19. package/node/utils/clip-line-segment-to-grid.js +1 -4
  20. package/node/utils/clip-line-segment-to-grid.js.map +1 -1
  21. package/node/utils/clip-line-segment-to-strips.d.ts +2 -3
  22. package/node/utils/clip-line-segment-to-strips.js +5 -57
  23. package/node/utils/clip-line-segment-to-strips.js.map +1 -1
  24. package/node/utils/find-close-cells.js +14 -70
  25. package/node/utils/find-close-cells.js.map +1 -1
  26. package/node/utils/find-crossing-cells.js +0 -15
  27. package/node/utils/find-crossing-cells.js.map +1 -1
  28. package/node/utils/jump-idx.js +20 -18
  29. package/node/utils/jump-idx.js.map +1 -1
  30. package/node/webgl-utils/free-gl-context.d.ts +3 -0
  31. package/node/webgl-utils/free-gl-context.js +26 -0
  32. package/node/webgl-utils/free-gl-context.js.map +1 -0
  33. package/node/webgl-utils/get-gl-context.d.ts +2 -2
  34. package/node/webgl-utils/get-gl-context.js +6 -9
  35. package/node/webgl-utils/get-gl-context.js.map +1 -1
  36. package/node/webgl-utils/set-attribute.js +1 -1
  37. package/node/webgl-utils/set-attribute.js.map +1 -1
  38. package/node/webgl-utils/set-uniform-block.js +1 -3
  39. package/node/webgl-utils/set-uniform-block.js.map +1 -1
  40. package/node/webgl-utils/use-program.js +13 -3
  41. package/node/webgl-utils/use-program.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/generate-sdf.ts +7 -5
  44. package/src/index.ts +2 -0
  45. package/src/main-program.ts +0 -1
  46. package/src/prepare-buffers.ts +5 -6
  47. package/src/shaders/main.vertex.ts +0 -1
  48. package/src/types/gl-context.ts +0 -1
  49. package/src/types/program.ts +2 -0
  50. package/src/utils/calc-circs.ts +0 -2
  51. package/src/utils/clip-line-segment-to-grid.ts +1 -5
  52. package/src/utils/clip-line-segment-to-strips.ts +6 -73
  53. package/src/utils/find-close-cells.ts +27 -87
  54. package/src/utils/find-crossing-cells.ts +1 -18
  55. package/src/utils/jump-idx.ts +25 -20
  56. package/src/webgl-utils/free-gl-context.ts +35 -0
  57. package/src/webgl-utils/get-gl-context.ts +6 -9
  58. package/src/webgl-utils/set-attribute.ts +1 -1
  59. package/src/webgl-utils/set-uniform-block.ts +1 -3
  60. package/src/webgl-utils/use-program.ts +14 -3
  61. package/node/debug-shaders.d.ts +0 -9
  62. package/node/types/strip.d.ts +0 -8
  63. package/node/types/strip.js +0 -2
  64. package/node/types/strip.js.map +0 -1
  65. package/node/utils/create-empty-strips.d.ts +0 -7
  66. package/node/utils/create-empty-strips.js +0 -16
  67. package/node/utils/create-empty-strips.js.map +0 -1
  68. package/node/utils/distance-seg-to-p.d.ts +0 -5
  69. package/node/utils/distance-seg-to-p.js +0 -35
  70. package/node/utils/distance-seg-to-p.js.map +0 -1
  71. package/node/webgl2.d.ts +0 -2
  72. package/src/types/strip.ts +0 -11
  73. package/src/utils/create-empty-strips.ts +0 -21
@@ -1 +1 @@
1
- const n=new WeakMap;function e(n){Object.keys(n).forEach(e=>{delete n[e]})}const t=32,r={};function o(n,e,t){const r=n.createShader(t);return n.shaderSource(r,e),n.compileShader(r),r}function s(n,e,t){const{gl:r,textures:o}=n;r.activeTexture(r.TEXTURE0+e);let s=o[t];return s?r.bindTexture(r.TEXTURE_2D,s.tex):(s=o[t]={tex:r.createTexture()},r.bindTexture(r.TEXTURE_2D,s.tex),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),s}const{BYTE:i,UNSIGNED_BYTE:c,SHORT:l,UNSIGNED_SHORT:u,INT:a,UNSIGNED_INT:d,FLOAT:f,HALF_FLOAT:g,INT_2_10_10_10_REV:h,UNSIGNED_INT_2_10_10_10_REV:I}=WebGL2RenderingContext;function x(n){return(e,t,r)=>{const{gl:o,uniformBlocks:s,program:i}=n;let c=s[e];if(void 0===s[e]){const n=o.getUniformBlockIndex(i,e);o.uniformBlockBinding(i,n,t);const r=o.createBuffer();o.bindBuffer(o.UNIFORM_BUFFER,r),c={blockName:e,blockIndex:n,buf:r},s[e]=c}else o.bindBuffer(o.UNIFORM_BUFFER,c.buf);const{buf:l}=c;o.bufferData(o.UNIFORM_BUFFER,r,o.DYNAMIC_DRAW),o.bindBufferBase(o.UNIFORM_BUFFER,t,l)}}function _(n){const e=n[0][0],t=n[0][1];for(let r=1;r<n.length;r++)if(e!==n[r][0]||t!==n[r][1])return!1;return!0}function p(n,e){if(0===e)return n[0];if(1===e)return n[n.length-1];if(4===n.length){const[[t,r],[o,s],[i,c],[l,u]]=n,a=t+(o-t)*e,d=o+(i-o)*e,f=a+(d-a)*e,g=r+(s-r)*e,h=s+(c-s)*e,I=g+(h-g)*e;return[f+(d+(i+(l-i)*e-d)*e-f)*e,I+(h+(c+(u-c)*e-h)*e-I)*e]}if(3===n.length){const[[t,r],[o,s],[i,c]]=n,l=t+(o-t)*e,u=r+(s-r)*e;return[l+(o+(i-o)*e-l)*e,u+(s+(c-s)*e-u)*e]}if(2===n.length){const[[t,r],[o,s]]=n;return[t+(o-t)*e,r+(s-r)*e]}if(1===n.length)return n[0];throw new Error("The given bezier curve must be of order <= 3.")}const{sqrt:v}=Math;function m(n,e){const t=n[0],r=n[1],o=e[0],s=e[1],i=r-s,c=o-t,l=t*s-o*r,u=v(i*i+c*c);return function(n){const e=n[0],o=n[1];return 0!==u?(i*e+c*o+l)/u:v((e-t)**2+(o-r)**2)}}{const n=[10,1];m([6,2],[6,2])(n)}function C(n,e,t){if(4===n.length)return function(n,e,t){return 0===e?1===t?n:function(n,e){const t=n[0],r=n[1],o=n[2],s=n[3],i=t[0],c=t[1],l=r[0],u=r[1],a=o[0],d=o[1],f=i-e*(i-l),g=l-e*(l-a),h=f-e*(f-g),I=c-e*(c-u),x=u-e*(u-d),_=I-e*(I-x);return[t,[f,I],[h,_],[h-e*(h-(g-e*(g-(a-e*(a-s[0]))))),_-e*(_-(x-e*(x-(d-e*(d-s[1])))))]]}(n,t):1===t?function(n,e){const t=n[0],r=n[1],o=n[2],s=n[3],i=t[0],c=t[1],l=r[0],u=r[1],a=o[0],d=o[1],f=i-e*(i-l),g=l-e*(l-a),h=a-e*(a-s[0]),I=f-e*(f-g),x=g-e*(g-h),_=c-e*(c-u),p=u-e*(u-d),v=d-e*(d-s[1]),m=_-e*(_-p),C=p-e*(p-v);return[[I-e*(I-x),m-e*(m-C)],[x,C],[h,v],s]}(n,e):function(n,e,t){const r=n[0],o=n[1],s=n[2],i=n[3],c=r[0],l=r[1],u=o[0],a=o[1],d=s[0],f=s[1],g=e*e,h=e*g,I=t*t,x=t*I,_=e*t,p=c-u,v=d-u,m=p+v,C=e*p,S=t*p,R=i[0]-c-3*v,E=l-a,T=f-a,b=E+T,w=e*E,P=t*E,A=i[1]-l-3*T;return[[h*R+(3*e*(e*m-p)+c),h*A+(3*e*(e*b-E)+l)],[_*(e*R+2*m)+(g*m+c-(S+2*C)),_*(e*A+2*b)+(g*b+l-(P+2*w))],[_*(t*R+2*m)+(I*m+c-(2*S+C)),_*(t*A+2*b)+(I*b+l-(2*P+w))],[x*R+(3*t*(t*m-p)+c),x*A+(3*t*(t*b-E)+l)]]}(n,e,t)}(n,e,t);if(3===n.length)return function(n,e,t){return 0===e?1===t?n:function(n,e){const t=n[0],r=n[1],o=n[2],s=t[0],i=t[1],c=r[0],l=r[1],u=e*e,a=s-c,d=i-l;return[t,[-e*a+s,-e*d+i],[u*(a+(o[0]-c))-(2*e*a-s),u*(d+(o[1]-l))-(2*e*d-i)]]}(n,t):1===t?function(n,e){const t=n[0],r=n[1],o=n[2],s=t[0],i=t[1],c=r[0],l=r[1],u=e*e,a=s-c,d=o[0]-c,f=i-l,g=o[1]-l;return[[u*(a+d)-(2*e*a-s),u*(f+g)-(2*e*f-i)],[e*d+c,e*g+l],o]}(n,e):function(n,e,t){const r=n[0],o=n[1],s=n[2],i=r[0],c=r[1],l=o[0],u=o[1],a=e*e,d=t*t,f=e*t,g=i-l,h=g+(s[0]-l),I=c-u,x=I+(s[1]-u);return[[a*h-(2*e*g-i),a*x-(2*e*I-c)],[f*h-(g*(t+e)-i),f*x-(I*(t+e)-c)],[d*h-(2*t*g-i),d*x-(2*t*I-c)]]}(n,e,t)}(n,e,t);throw new Error("The given bezier curve must be of order 2 or 3.")}function S(n,e){return[e[0]-n[0],e[1]-n[1]]}function R(n,e){return n[0]*e[0]+n[1]*e[1]}function E(n){const e=S(n[0],n[1]),t=S(n[1],n[3]),r=S(n[3],n[0]),o=S(n[0],n[2]),s=S(n[2],n[3]);return R(r,e)>0||R(t,r)>0||R(r,o)>0||R(s,r)>0}const{abs:T,max:b}=Math;function w(n){const e=m(n[0],n[3]),t=e(n[1]),r=e(n[2]);return(t*r<=0?4/9:3/4)*b(T(t),T(r))}function P(n){const e=S(n[0],n[1]),t=S(n[1],n[2]),r=S(n[2],n[0]);return R(r,e)>0||R(t,r)>0}const{abs:A}=Math;function D(n){if(n[0][0]===n[1][0]&&n[0][1]===n[1][1])return 0;const e=p(n,.5),t=m(n[0],n[2]);return A(t(e))}function y(n,e){const t=3===n.length?function(n,e){const t=[0],r=[1];for(;;){const o=t[t.length-1],s=r[r.length-1],i=C(n,o,s);if(!P(i)&&D(i)<=e){if(t.push(r.pop()),1===s)return t;continue}const c=(o+s)/2;r.push(c)}}(n,e):function(n,e){const t=[0],r=[1];for(;;){const o=t[t.length-1],s=r[r.length-1],i=C(n,o,s);if(!E(i)&&w(i)<=e){if(t.push(r.pop()),1===s)return t;continue}const c=(o+s)/2;r.push(c)}}(n,e),r=[];for(let e=0;e<t.length-1;e++){const o=p(n,t[e]),s=p(n,t[e+1]);r.push([o,s])}return r}function F(n){return Math.sqrt(n[0]*n[0]+n[1]*n[1])}const N=function(){const n=[{from:0,u:0,v:0}];for(let e=0;e<128;e++){n.push({from:e+.5,u:e+1,v:0}),n.push({from:e+.5,u:-e-1,v:0}),n.push({from:e+.5,u:0,v:e+1}),n.push({from:e+.5,u:0,v:-e-1});for(let r=0;r<t;r++){const t=F([.5+e,.5+r]),o=e+1,s=r+1;n.push({from:t,u:o,v:s}),0!==o&&n.push({from:t,u:-o,v:s}),0!==s&&n.push({from:t,u:o,v:-s}),0!==o&&0!==s&&n.push({from:t,u:-o,v:-s})}n.sort((n,e)=>n.from-e.from)}return n}(),{min:U,max:M,sqrt:L}=Math;function k(n,e){const t=n[0],r=n[1],o=t[0],s=t[1],i=r[0],c=r[1],l=e[0],u=e[1],a=o-l,d=s-u,f=i-l-a,g=c-u-d,h=M(0,U(1,-(a*f+d*g)/(f*f+g*g))),I=a+h*f,x=d+h*g;return L(I*I+x*x)}const{trunc:O,max:B,E:X}=Math;function Y(n){let e=function(n){let e=0,t=N.length-1,r=0;for(;e<=t;){r=e+t>>>1;const o=N[r].from;if(o===n)return r;n>o?e=r+1:t=r-1}return r}(n);for(n=B(0,n);0!==e&&N[e].from>=n;)e--;for(;e<N.length-2&&N[e+1].from<n;)e++;return e}const{min:G,SQRT2:j}=Math;const{floor:V,ceil:Q}=Math;function z(n,e,t,r,o,s,i){const c=o*i,[[l,u],[a,d]]=s,f=e+c,g=t+c,h=function(n,e){const[t,r]=n,[o,s]=t,[i,c]=r,[[l,u],[a,d]]=e,f=i-o,g=c-s,h=[],I=[];if(0!==f){const n=(l-o)/f;if(n>=0&&n<=1){const e=s+n*g;e>=u&&e<=d&&(h.push(n),I.push([l,e]))}const e=(a-o)/f;if(e>=0&&e<=1){const n=s+e*g;n>=u&&n<=d&&(h.push(e),I.push([a,n]))}}if(0!==g){const n=(u-s)/g;if(n>=0&&n<=1){const e=o+n*f;e>=l&&e<=a&&(h.push(n),I.push([e,u]))}const e=(d-s)/g;if(e>=0&&e<=1){const n=o+e*f;n>=l&&n<=a&&(h.push(e),I.push([n,d]))}}return 2===h.length?h[0]<h[1]?I:[I[1],I[0]]:I}(s,[[-c,-c],[f,g]]),I=l>-c&&l<f&&u>-c&&u<g,x=a>-c&&a<f&&d>-c&&d<g;if(h.length<2&&!I&&!x)return;const _=a-l,p=d-u,v=a>l?o:-o,m=d>u?o:-o;let C=l,S=u,R=0;const E=v>0,T=m>0,b=E?V:Q,w=T?V:Q;for(;;){let e=o*b((C+v)/o),t=o*w((S+m)/o);const r=(e-l)/_,s=(t-u)/p,x=r<s&&0!==_||0===p,P=x?e:l+s*_,A=x?u+r*p:t;if((r>1||0===_)&&(s>1||0===p)){const e=V(a/o)+i,t=V(d/o)+i;n[e]?.[t]?.lineSegs.push([[C,S],[a,d]]);break}if(P<=-c||A<=-c||P>=f||A>=g){if(!I&&0===R){[C,S]=h[0],R++;continue}{const e=b(C/o)-(E?0:1)+i,t=w(S/o)-(T?0:1)+i,r=[[C,S],h[R]];n[e]?.[t]?.lineSegs.push(r);break}}const D=b(C/o)-(E?0:1)+i,y=w(S/o)-(T?0:1)+i;n[D]?.[y]?.lineSegs.push([[C,S],[P,A]]),C=P,S=A}}const W=256,{floor:H,ceil:q}=Math;function Z(n,e,t){const r=e/n.length,[o,s]=t,i=function(n,e){const[t,r]=n,[o,s]=t,[i,c]=r,[l,u,a]=e,d=i-o,f=c-s,g=[],h=[];if(0!==d){const n=(l-o)/d;if(n>=0&&n<=1){const e=s+n*f;e>=u&&e<=a&&(g.push(n),h.push([l,e]))}}if(0!==f){const n=(u-s)/f;if(n>=0&&n<=1){const e=o+n*d;e<=l&&(g.push(n),h.push([e,u]))}const e=(a-s)/f;if(e>=0&&e<=1){const n=o+e*d;n<=l&&(g.push(e),h.push([n,a]))}}return 2===g.length?g[0]<g[1]?h:[h[1],h[0]]:h}(t,[0,0,e]),[c,l]=o,[u,a]=s,d=u-c,f=a-l,g=c<0&&l>0&&l<e,h=u<0&&a>0&&a<e;if(i.length<2&&!g&&!h&&(0!==c||0!==d||l<=0&&a<=0||l>=e&&a>=e))return;if(0===f)return;const I=a>l?r:-r;let x=c,_=l,p=0;const v=u>c,m=a>l,C=m?H:q;for(;;){let t=v&&x<0||!v&&x>0?0:Number.NEGATIVE_INFINITY,o=r*C((_+I)/r);const u=(t-c)/d,a=(o-l)/f,h=u<a&&0!==d,S=h?0:c+a*d,R=h?l+u*f:o;if((u>1||0===d)&&a>1){const e=H(s[1]/r);n[e]?.lineSegs.push([[x,_],s]);break}if(S>=0&&(0!==c||0!==d)||R<=0||R>=e){if(!g&&0===p){[x,_]=i[0],p++;continue}{const e=C(_/r)-(m?0:1),t=[[x,_],i[p]];n[e]?.lineSegs.push(t);break}}const E=C(_/r)-(m?0:1);n[E]?.lineSegs.push([[x,_],[S,R]]),x=S,_=R}}function $(n,e,r,o,s,i,c,l=.5,u=[0,0,e,r],a=1){const d=function(n,e,t,r){if(0===n[0]&&0===n[1]&&n[2]===e&&n[3]===t)return r;const[o,s,i,c]=n,l=e/i,u=t/c,a=[];for(let n=0;n<r.length;n++){const e=r[n],t=[];for(let n=0;n<e.length;n++){const r=e[n],i=[];for(let n=0;n<r.length;n++){const[e,t]=r[n],c=l*e-o,a=u*t-s;i.push([c,a])}t.push(i)}a.push(t)}return a}(u,e,r/a,n),f=function(n,e){let t=[];for(let r=0;r<n.length;r++){const o=n[r];for(let n=0;n<o.length;n++){const r=o[n];if(_(r))continue;if(2===r.length){t.push(r);continue}const s=y(r,e);t.push(...s.filter(n=>!_(n)))}}return t}(d,l),g=function(n,e){const r=[];for(let o=0;o<n+2*e;o++){const n=[];for(let r=0;r<t+2*e;r++)n.push({lineSegs:[],closeCells:[],crossingCells:[]});r.push(n)}return r}(o,c),h=function(){const n=[];for(let e=0;e<t;e++)n.push({lineSegs:[]});return n}();for(let n=0;n<f.length;n++){const t=f[n];z(g,e,r,0,s,t,c),Z(h,r,t)}(function(n,e,r,o,s){const i=function(n,e,r,o,s){return function(i,c,l){let u=Y((l-j*r)/r),a=Number.POSITIVE_INFINITY;for(;u<N.length;){const l=N[u].from;if(r*l>o+j*r)break;const{u:d,v:f}=N[u],g=d+i,h=f+c;if(g<0||g>=e+2*s||h<0||h>=t+2*s){u++;continue}const{lineSegs:I}=n[g][h];for(let n=0;n<I.length;n++){const e=[(i-s+.5)*r,(c-s+.5)*r],t=k(I[n],e);t<a&&(a=t)}if(u++,a!==Number.POSITIVE_INFINITY)break}if(a===Number.POSITIVE_INFINITY)return G(o+j*r,r*N[N.length-1].from);const{closeCells:d}=n[i][c];let f=Y((l-2*j*r)/r);for(;f<N.length;){const{from:l,u,v:g}=N[f];if(r*l>G(a,o)+j*r)break;const h=u+i,I=g+c;if(h<0||h>=e+2*s||I<0||I>=t+2*s){f++;continue}const{lineSegs:x}=n[h][I];x.length>0&&d.push((2*s+t)*h+I),f++}return a}}(n,e,r,o,s);let c=0,l=0;for(let n=s;n<e+s;n++){l=c;for(let e=s;e<t+s;e++)l=i(n,e,l),e===s&&(c=l)}})(g,o,s,i,c),function(n,e,r){for(let o=r;o<e+r;o++)for(let e=r;e<t+r;e++){const s=n[o][e].crossingCells;for(let i=r;i<=o;i++)0!==n[i][e].lineSegs.length&&s.push((t+2*r)*i+e)}}(g,o,c);const I=[],x=[],p=[],v=[],m=[],C=[];let S=0,R=0,E=0;for(let n=0;n<o+2*c;n++)for(let e=0;e<t+2*c;e++){const r=g[n][e];if(n>=c&&n<o+c&&e>=c&&e<t+c){const{closeCells:n,crossingCells:e}=r,t=e.length;m.push(...e),C.push([S,t]),S+=t;const o=n.length;p.push(...n),v.push([R,o]),R+=o}const{lineSegs:s}=r,i=s.length;x.push([E,i]),E+=i,I.push(...s)}for(;p.length%W!==0;)p.push(0);for(;m.length%W!==0;)m.push(0);const T=[];for(let n=0;n<t;n++){const e=h[n],{lineSegs:t}=e,r=t.length;T.push([E,r]),E+=r,I.push(...t)}const b=new Float32Array(I.flat(2)),w=new Int32Array(x.flat()),P=new Int32Array(v.flat());return{lineSegPtCoords_Arr:b,segIdxs_PerCell_Range_Arr:w,closeCellIdxs_PerCell_Arr:new Int32Array(p),closeCellIdxs_PerCell_Range_Arr:P,crossCellIdxs_PerCell_Arr:new Int32Array(m),crossCellIdxs_perCell_Range_Arr:new Int32Array(C.flat()),segIdxs_PerStrip_Range_Arr:new Int32Array(T.flat())}}function J(n){const e=[n.p,n.initialPoint];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e}const K={c:function(n){const e=[n.p,[n.vals[0],n.vals[1]],[n.vals[2],n.vals[3]],[n.vals[4],n.vals[5]]];return n.prev2ndCubicControlPoint=e[2],n.prev2ndQuadraticControlPoint=void 0,e},h:function(n){const e=[n.p,[n.vals[0],n.p[1]]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e},l:function(n){const e=[n.p,n.vals];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e},q:function(n){const e=[n.vals[0],n.vals[1]],t=[n.vals[2],n.vals[3]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=e,[n.p,e,t]},s:function(n){const e=n.prev2ndCubicControlPoint?[n.p[0]-n.prev2ndCubicControlPoint[0]+n.p[0],n.p[1]-n.prev2ndCubicControlPoint[1]+n.p[1]]:n.p,t=[n.p,e,[n.vals[0],n.vals[1]],[n.vals[2],n.vals[3]]];return n.prev2ndCubicControlPoint=t[2],n.prev2ndQuadraticControlPoint=void 0,t},t:function(n){const e=n.prev2ndQuadraticControlPoint?[n.p[0]-n.prev2ndQuadraticControlPoint[0]+n.p[0],n.p[1]-n.prev2ndQuadraticControlPoint[1]+n.p[1]]:n.p,t=[n.vals[0],n.vals[1]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=e,[n.p,e,t]},v:function(n){const e=[n.p,[n.p[0],n.vals[0]]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e},z:J};function nn(n){let e=0,t=0,r=1,o=0,s=1,i=1;const c=n._currentIndex;if(n._skipOptionalSpaces(),n._currentIndex<n._endIndex&&"+"===n._string[n._currentIndex]?n._currentIndex+=1:n._currentIndex<n._endIndex&&"-"===n._string[n._currentIndex]&&(n._currentIndex+=1,s=-1),n._currentIndex===n._endIndex||(n._string[n._currentIndex]<"0"||n._string[n._currentIndex]>"9")&&"."!==n._string[n._currentIndex])throw new Error("The first character of a number must be one of [0-9+-.].");const l=n._currentIndex;for(;n._currentIndex<n._endIndex&&n._string[n._currentIndex]>="0"&&n._string[n._currentIndex]<="9";)n._currentIndex+=1;if(n._currentIndex!==l){let e=n._currentIndex-1,r=1;for(;e>=l;)t+=r*(Number(n._string[e])-0),e-=1,r*=10}if(n._currentIndex<n._endIndex&&"."===n._string[n._currentIndex]){if(n._currentIndex+=1,n._currentIndex>=n._endIndex||n._string[n._currentIndex]<"0"||n._string[n._currentIndex]>"9")throw new Error("There must be a least one digit following the .");for(;n._currentIndex<n._endIndex&&n._string[n._currentIndex]>="0"&&n._string[n._currentIndex]<="9";)r*=10,o+=Number(n._string.charAt(n._currentIndex))/r,n._currentIndex+=1}if(n._currentIndex!==c&&n._currentIndex+1<n._endIndex&&("e"===n._string[n._currentIndex]||"E"===n._string[n._currentIndex])&&"x"!==n._string[n._currentIndex+1]&&"m"!==n._string[n._currentIndex+1]){if(n._currentIndex+=1,"+"===n._string[n._currentIndex]?n._currentIndex+=1:"-"===n._string[n._currentIndex]&&(n._currentIndex+=1,i=-1),n._currentIndex>=n._endIndex||n._string[n._currentIndex]<"0"||n._string[n._currentIndex]>"9")throw new Error("There must be an exponent.");for(;n._currentIndex<n._endIndex&&n._string[n._currentIndex]>="0"&&n._string[n._currentIndex]<="9";)e*=10,e+=Number(n._string[n._currentIndex]),n._currentIndex+=1}let u=t+o;if(u*=s,e&&(u*=Math.pow(10,i*e)),c===n._currentIndex)throw new Error("Internal error: startIndex === source._currentIndex");return n._skipOptionalSpacesOrDelimiter(),u}const en={Z:"Z",M:"M",L:"L",C:"C",Q:"Q",A:"A",H:"H",V:"V",S:"S",T:"T",z:"Z",m:"m",l:"l",c:"c",q:"q",a:"a",h:"h",v:"v",s:"s",t:"t"};class tn{_string;_currentIndex;_endIndex;_prevCommand;constructor(n){this._string=n,this._currentIndex=0,this._endIndex=this._string.length,this._prevCommand=void 0,this._skipOptionalSpaces()}parseSegment(){const n=this._string[this._currentIndex];let e,t=en[n];if(void 0===t){if(void 0===this._prevCommand)throw new Error("Implicit command not allowed for first commands.");if(!("+"===n||"-"===n||"."===n||n>="0"&&n<="9")||"Z"===this._prevCommand)throw new Error("Remaining coordinates not found for implicit command");t="M"===this._prevCommand?"L":"m"===this._prevCommand?"l":this._prevCommand}else this._currentIndex+=1;this._prevCommand=t;const r=t.toUpperCase();if("H"===r||"V"===r?e=[nn(this)]:"M"===r||"L"===r||"T"===r?e=[nn(this),nn(this)]:"S"===r||"Q"===r?e=[nn(this),nn(this),nn(this),nn(this)]:"C"===r?e=[nn(this),nn(this),nn(this),nn(this),nn(this),nn(this)]:"A"===r?e=[nn(this),nn(this),nn(this),this._parseArcFlag(),this._parseArcFlag(),nn(this),nn(this)]:"Z"===r&&(this._skipOptionalSpaces(),e=[]),void 0===e)throw new Error("Unknown command");return{type:t,values:e}}hasMoreData(){return this._currentIndex<this._endIndex}initialCommandIsMoveTo(){if(!this.hasMoreData())return!0;const n=en[this._string[this._currentIndex]];return"M"===n||"m"===n}_isCurrentSpace(){const n=this._string[this._currentIndex];return n<=" "&&(" "===n||"\n"===n||"\t"===n||"\r"===n||"\f"===n)}_skipOptionalSpaces(){for(;this._currentIndex<this._endIndex&&this._isCurrentSpace();)this._currentIndex+=1;return this._currentIndex<this._endIndex}_skipOptionalSpacesOrDelimiter(){return!(this._currentIndex<this._endIndex&&!this._isCurrentSpace()&&","!==this._string[this._currentIndex])&&(this._skipOptionalSpaces()&&this._currentIndex<this._endIndex&&","===this._string[this._currentIndex]&&(this._currentIndex+=1,this._skipOptionalSpaces()),this._currentIndex<this._endIndex)}_parseArcFlag(){if(this._currentIndex>=this._endIndex)throw new Error("Unable to parse arc flag");let n;const e=this._string[this._currentIndex];if(this._currentIndex+=1,"0"===e)n=0;else{if("1"!==e)throw new Error("Unable to parse arc flag - arc flag must be 0 or 1");n=1}return this._skipOptionalSpacesOrDelimiter(),n}}const{ceil:rn,min:on,max:sn}=Math;function cn(i,c,l,u,a,d,h=1,I=!0,_=!0,p=0,v=0,m=0,C=.5){const S="string"==typeof c?function(n){if(0===n.length)return[];if("m"!==n[0].type.toLowerCase())throw new Error("Invalid SVG - every new path must start with an M or m.");const e={p:[0,0]},t=[];let r,o=[];for(let s=0;s<n.length;s++){const i=n[s],c=i.type.toLowerCase();if(e.vals=i.values,i.type===c)if("v"===c)e.vals[0]+=e.p[1];else if("a"===c)e.vals[5]+=e.p[0],e.vals[6]+=e.p[1];else for(let n=0;n<e.vals.length;n++)e.vals[n]+=e.p[n%2];if("m"===c){o.length&&("z"!==r&&o.push(J(e)),t.push(o),o=[]),e.initialPoint=e.p=e.vals,r=c;continue}const l=K[c];if(!l)throw new Error("Invalid SVG - command not recognized.");const u=l(e);e.p=u[u.length-1],o.push(u),r=c}return o.length>0&&("z"!==r&&o.push(J(e)),t.push(o)),t}(function(n){if(!n.length)return[];const e=new tn(n),t=[];if(!e.initialCommandIsMoveTo())throw new Error("Path must start with m or M");for(;e.hasMoreData();)t.push(e.parseSegment());return t}(c)):c,R=function(t){{const e=n.get(t);if(e)return e}const r={},o={},s=[];t.canvas.addEventListener("webglcontextlost",n=>{c(),n.preventDefault()},!1);const i={gl:t,onContextLoss:c,textures:o,programs:r,framebufferStack:s};return n.set(t,i),i;function c(){e(r),e(o),s.length=0}}(i),{onContextLoss:E}=R;let T=1;if(l/u>4){const n=l/4;T=n/u,u=n}const b=u/t,w=sn(l,u),P=rn(l/b),A=2*rn(on(d,w)/b/2),D=function(n,e,t,r){const{gl:s,programs:i}=n;if(i[e])return i[e];const c=s.createProgram();return s.attachShader(c,o(s,"#version 300 es\n\nprecision highp float;\n\nuniform vec2 uWidthHeight;\nuniform float uStretch;\nin vec2 aUV;\nin ivec2 aCloseCellIdxRangePerCell;\nin ivec2 aCrossIdxRangePerCell;\nout vec2 vXY;\nflat out int instanceId;\nflat out ivec2 closeCellIdxRange;\nflat out ivec2 crossCellIdxRange;\n\n\nvoid main() {\n instanceId = gl_InstanceID;\n closeCellIdxRange = aCloseCellIdxRangePerCell;\n crossCellIdxRange = aCrossIdxRangePerCell;\n\n // drawn column-by-column\n float i = float(instanceId / 32); // column index\n float j = float(instanceId % 32); // row index\n\n vec2 trans = vec2(\n i / float(32),\n j / float(32)\n );\n\n vec2 uv = aUV + trans;\n\n float width = uWidthHeight.x;\n float height = uWidthHeight.y;\n\n vXY = vec2(\n height * uv.x,\n height * uv.y\n );\n\n float aspectRatio = width / height;\n\n gl_Position = vec4(\n vec2(\n (2.0*(uv.x / aspectRatio) - 1.0),\n 2.0*uv.y - 1.0\n ),\n 0.0, 1.0\n );\n}\n",s.VERTEX_SHADER)),s.attachShader(c,o(s,r,s.FRAGMENT_SHADER)),s.linkProgram(c),i[e]={gl:s,program:c,attributes:{},uniforms:{},uniformBlocks:{}},i[e]}(R,`main${P}-${A}`,0,function(n,e){const o=r[1024*n+e];if(void 0!==o)return o;const s=`#version 300 es\n\nprecision highp float;\n\nuniform float uMaxDistance;\nuniform float uExponent;\nuniform highp sampler2D uSegs;\nuniform highp isampler2D uCloseCellIdxs;\nuniform highp isampler2D uCrossCellIdxs;\nuniform int uIncl; // bit 0 -> incl inside, bit 1 -> incl outside\n\nuniform SegIdxRangePerCellBlock {\n ivec4 uSegIdxRangePerCell[${(t+2*e)*(n+2*e)/2}];\n};\nuniform SegIdxRangePerStripBlock {\n ivec4 uSegIdxRangePerStrip[16];\n};\n\nin vec2 vXY;\nflat in int instanceId;\nflat in ivec2 closeCellIdxRange;\nflat in ivec2 crossCellIdxRange;\nout vec4 FragColor;\n\n\nfloat absDistToSegment(vec2 point, vec2 lineA, vec2 lineB) {\n vec2 lineDir = lineB - lineA;\n float lenSq = dot(lineDir, lineDir);\n float t = clamp(dot(point - lineA, lineDir) / lenSq, 0.0, 1.0);\n vec2 linePt = lineA + t * lineDir;\n\n return distance(point, linePt);\n}\n\n\nvoid main() {\n ///////////////////////////////////////////////////////////////////////////\n // Project a ray to the left to check if it crosses the segment in order\n // to find the fragment's winding number to determine whether fragment\n // is inside or outside the shape.\n\n int crossIdxS = crossCellIdxRange.x;\n int crossLen = crossCellIdxRange.y;\n float winds = 0.0;\n // Iterate over all relevant cell indexes\n for (int i = crossIdxS; i < crossIdxS + crossLen; i++) {\n int crossIdx = texelFetch(uCrossCellIdxs, ivec2(i%256, i/256), 0).x;\n\n bool isEven = crossIdx % 2 == 0;\n\n ivec4 uSegIdxRange = uSegIdxRangePerCell[crossIdx / 2];\n int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;\n int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;\n\n for (int j = segIdx; j < segIdx + segLen; j++) {\n // Fetch segment from texture\n vec4 seg = texelFetch(uSegs, ivec2(j, 0), 0);\n\n // line segment's min-y is excluded\n bool crossing =\n (seg.y > vXY.y != seg.w > vXY.y) &&\n (vXY.x > (seg.z - seg.x)*(vXY.y - seg.y) / (seg.w - seg.y) + seg.x);\n\n bool crossingUp = seg.y < seg.w;\n\n winds += crossing ? (crossingUp ? 1.0 : -1.0) : 0.0;\n }\n }\n\n {\n bool isEven = (instanceId % 32) % 2 == 0;\n\n ivec4 uSegIdxRange = uSegIdxRangePerStrip[(instanceId % 32) / 2];\n int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;\n int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;\n\n for (int j = segIdx; j < segIdx + segLen; j++) {\n // Fetch segment from texture\n vec4 seg = texelFetch(uSegs, ivec2(j, 0), 0);\n\n // line segment's min-y is excluded\n bool crossing =\n (seg.y > vXY.y != seg.w > vXY.y) &&\n (vXY.x > (seg.z - seg.x)*(vXY.y - seg.y) / (seg.w - seg.y) + seg.x);\n\n bool crossingUp = seg.y < seg.w;\n\n winds += crossing ? (crossingUp ? 1.0 : -1.0) : 0.0;\n }\n }\n\n\n bool inside = winds != 0.0;\n ///////////////////////////////////////////////////////////////////////////\n\n ///////////////////////////////////////////////////////////////////////////\n float res = 1.0; // sdf result\n\n if ((inside && (uIncl % 2 != 0)) || (!inside && (uIncl > 1))) {\n int cellIdxS = closeCellIdxRange.x;\n int cellLen = closeCellIdxRange.y;\n // Iterate over all relevant cell indexes\n for (int i = cellIdxS; i < cellIdxS + cellLen; i++) {\n int cellIdx = texelFetch(uCloseCellIdxs, ivec2(i%256, i/256), 0).x;\n\n bool isEven = cellIdx % 2 == 0;\n ivec4 uSegIdxRange = uSegIdxRangePerCell[cellIdx / 2];\n int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;\n int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;\n\n for (int j = segIdx; j < segIdx + segLen; j++) {\n // Fetch segment from texture\n vec4 seg = texelFetch(uSegs, ivec2(j, 0), 0);\n\n // Find unsigned distance to the segment; only the nearest will be kept\n float d = absDistToSegment(vXY, seg.xy, seg.zw);\n // Apply exponential transform TODO\n // val = pow(1.0 - clamp(d / uMaxDistance, 0.0, 1.0), uExponent) * 0.5;\n float val = clamp(d / uMaxDistance, 0.0, 1.0);\n res = min(res, val);\n }\n }\n }\n ///////////////////////////////////////////////////////////////////////////\n\n // DEBUG!\n float alpha = ((instanceId + instanceId/32) % 2 == 0 ? 0.3 : 0.5);\n\n float red = inside ? 0.2 : 0.8;\n float green = abs(sin(50.0 * res));\n float blue = 0.5;\n // float alpha = inside ? 0.5 : 0.0;\n\n FragColor = vec4(red, green, blue, alpha);\n}\n`;return r[1024*n+e]=s,s}(P,A));if(i.useProgram(D.program),function(n,e,r,o,i,c,l=1,u,a,d,h,I,_,p,v){const{gl:m}=n,C=[],S=.03125,R=.03125;C.push(0,0,S,0,0,R),C.push(S,0,S,R,0,R);const E=new Float32Array(C),T=(b=e,(n,e,...t)=>{const{gl:r,uniforms:o}=b,s=o[e]||(o[e]=r.getUniformLocation(b.program,e));r[`uniform${n}`](s,...t)});var b;const w=function(n){return(e,t,r,o,s,i=0,c=0,l=0)=>{const{gl:u,attributes:a}=n,d=a[e]=a[e]??{buf:u.createBuffer(),loc:u.getAttribLocation(n.program,e),data:null},{loc:h,buf:I}=d;u.bindBuffer(u.ARRAY_BUFFER,I),r===f||r===g?u.vertexAttribPointer(h,t,r,!1,c,l):u.vertexAttribIPointer(h,t,r,c,l),u.enableVertexAttribArray(h),0!==i&&u.vertexAttribDivisor(h,i),s!==d.data&&(u.bufferData(u.ARRAY_BUFFER,s,o),d.data=s)}}(e),{lineSegPtCoords_Arr:P,segIdxs_PerCell_Range_Arr:A,closeCellIdxs_PerCell_Arr:D,closeCellIdxs_PerCell_Range_Arr:y,crossCellIdxs_PerCell_Arr:F,crossCellIdxs_perCell_Range_Arr:N,segIdxs_PerStrip_Range_Arr:U}=$(o,u,a,d,h,c,p,r,i,v);w("aUV",2,m.FLOAT,m.STATIC_DRAW,E),w("aCrossIdxRangePerCell",2,m.INT,m.STATIC_DRAW,N,1),w("aCloseCellIdxRangePerCell",2,m.INT,m.STATIC_DRAW,y,1),T("2f","uWidthHeight",u,a),T("1f","uMaxDistance",c),T("1f","uExponent",l),T("1i","uIncl",(I?1:0)+(_?2:0)),T("1f","uStretch",v),x(e)("SegIdxRangePerCellBlock",0,A),x(e)("SegIdxRangePerStripBlock",1,U),s(n,0,"segs"),m.texImage2D(m.TEXTURE_2D,0,m.RGBA32F,P.length/4,1,0,m.RGBA,m.FLOAT,P);const M=m.getUniformLocation(e.program,"uSegs");m.uniform1i(M,0),s(n,1,"closeCellIdxsPerCell"),m.texImage2D(m.TEXTURE_2D,0,m.R32I,W,D.length/W,0,m.RED_INTEGER,m.INT,D);const L=m.getUniformLocation(e.program,"uCloseCellIdxs");m.uniform1i(L,1),s(n,2,"crossCellIdxsPerCell"),m.texImage2D(m.TEXTURE_2D,0,m.R32I,W,F.length/W,0,m.RED_INTEGER,m.INT,F);const k=m.getUniformLocation(e.program,"uCrossCellIdxs");m.uniform1i(k,2),v>1&&(m.enable(m.SCISSOR_TEST),m.scissor(0,0,u,a/v)),m.viewport(0,0,u,a),m.drawArraysInstanced(m.TRIANGLES,0,6,d*t),v>1&&m.disable(m.SCISSOR_TEST)}(R,D,C,S,a,d,h,l,u,P,b,I,_,A,T),i.isContextLost())throw E(),new Error("Webgl2 context lost.")}export{cn as generateIntoFramebuffer};
1
+ const n=32,e={};function t(n,e,t){const r=n.createShader(t);return n.shaderSource(r,e),n.compileShader(r),r}function r(n,e,t){const{gl:r,textures:o}=n;r.activeTexture(r.TEXTURE0+e);let s=o[t];return s?r.bindTexture(r.TEXTURE_2D,s.tex):(s=o[t]={tex:r.createTexture()},r.bindTexture(r.TEXTURE_2D,s.tex),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),s}const{BYTE:o,UNSIGNED_BYTE:s,SHORT:i,UNSIGNED_SHORT:c,INT:l,UNSIGNED_INT:u,FLOAT:a,HALF_FLOAT:d,INT_2_10_10_10_REV:f,UNSIGNED_INT_2_10_10_10_REV:g}=WebGL2RenderingContext;function h(n){return(e,t,r)=>{const{gl:o,uniformBlocks:s,program:i}=n;let c=s[e];if(void 0===s[e]){const n=o.getUniformBlockIndex(i,e);o.uniformBlockBinding(i,n,t);const r=o.createBuffer();o.bindBuffer(o.UNIFORM_BUFFER,r),c={blockName:e,blockIndex:n,buf:r},s[e]=c}else o.bindBuffer(o.UNIFORM_BUFFER,c.buf);const{buf:l}=c;o.bufferData(o.UNIFORM_BUFFER,r,o.STATIC_DRAW),o.bindBufferBase(o.UNIFORM_BUFFER,t,l)}}function x(n){const e=n[0][0],t=n[0][1];for(let r=1;r<n.length;r++)if(e!==n[r][0]||t!==n[r][1])return!1;return!0}function I(n,e){if(0===e)return n[0];if(1===e)return n[n.length-1];if(4===n.length){const[[t,r],[o,s],[i,c],[l,u]]=n,a=t+(o-t)*e,d=o+(i-o)*e,f=a+(d-a)*e,g=r+(s-r)*e,h=s+(c-s)*e,x=g+(h-g)*e;return[f+(d+(i+(l-i)*e-d)*e-f)*e,x+(h+(c+(u-c)*e-h)*e-x)*e]}if(3===n.length){const[[t,r],[o,s],[i,c]]=n,l=t+(o-t)*e,u=r+(s-r)*e;return[l+(o+(i-o)*e-l)*e,u+(s+(c-s)*e-u)*e]}if(2===n.length){const[[t,r],[o,s]]=n;return[t+(o-t)*e,r+(s-r)*e]}if(1===n.length)return n[0];throw new Error("The given bezier curve must be of order <= 3.")}const{sqrt:_}=Math;function p(n,e){const t=n[0],r=n[1],o=e[0],s=e[1],i=r-s,c=o-t,l=t*s-o*r,u=_(i*i+c*c);return function(n){const e=n[0],o=n[1];return 0!==u?(i*e+c*o+l)/u:_((e-t)**2+(o-r)**2)}}{const n=[10,1];p([6,2],[6,2])(n)}function v(n,e,t){if(4===n.length)return function(n,e,t){return 0===e?1===t?n:function(n,e){const t=n[0],r=n[1],o=n[2],s=n[3],i=t[0],c=t[1],l=r[0],u=r[1],a=o[0],d=o[1],f=i-e*(i-l),g=l-e*(l-a),h=f-e*(f-g),x=c-e*(c-u),I=u-e*(u-d),_=x-e*(x-I);return[t,[f,x],[h,_],[h-e*(h-(g-e*(g-(a-e*(a-s[0]))))),_-e*(_-(I-e*(I-(d-e*(d-s[1])))))]]}(n,t):1===t?function(n,e){const t=n[0],r=n[1],o=n[2],s=n[3],i=t[0],c=t[1],l=r[0],u=r[1],a=o[0],d=o[1],f=i-e*(i-l),g=l-e*(l-a),h=a-e*(a-s[0]),x=f-e*(f-g),I=g-e*(g-h),_=c-e*(c-u),p=u-e*(u-d),v=d-e*(d-s[1]),m=_-e*(_-p),C=p-e*(p-v);return[[x-e*(x-I),m-e*(m-C)],[I,C],[h,v],s]}(n,e):function(n,e,t){const r=n[0],o=n[1],s=n[2],i=n[3],c=r[0],l=r[1],u=o[0],a=o[1],d=s[0],f=s[1],g=e*e,h=e*g,x=t*t,I=t*x,_=e*t,p=c-u,v=d-u,m=p+v,C=e*p,S=t*p,R=i[0]-c-3*v,E=l-a,T=f-a,b=E+T,w=e*E,A=t*E,P=i[1]-l-3*T;return[[h*R+(3*e*(e*m-p)+c),h*P+(3*e*(e*b-E)+l)],[_*(e*R+2*m)+(g*m+c-(S+2*C)),_*(e*P+2*b)+(g*b+l-(A+2*w))],[_*(t*R+2*m)+(x*m+c-(2*S+C)),_*(t*P+2*b)+(x*b+l-(2*A+w))],[I*R+(3*t*(t*m-p)+c),I*P+(3*t*(t*b-E)+l)]]}(n,e,t)}(n,e,t);if(3===n.length)return function(n,e,t){return 0===e?1===t?n:function(n,e){const t=n[0],r=n[1],o=n[2],s=t[0],i=t[1],c=r[0],l=r[1],u=e*e,a=s-c,d=i-l;return[t,[-e*a+s,-e*d+i],[u*(a+(o[0]-c))-(2*e*a-s),u*(d+(o[1]-l))-(2*e*d-i)]]}(n,t):1===t?function(n,e){const t=n[0],r=n[1],o=n[2],s=t[0],i=t[1],c=r[0],l=r[1],u=e*e,a=s-c,d=o[0]-c,f=i-l,g=o[1]-l;return[[u*(a+d)-(2*e*a-s),u*(f+g)-(2*e*f-i)],[e*d+c,e*g+l],o]}(n,e):function(n,e,t){const r=n[0],o=n[1],s=n[2],i=r[0],c=r[1],l=o[0],u=o[1],a=e*e,d=t*t,f=e*t,g=i-l,h=g+(s[0]-l),x=c-u,I=x+(s[1]-u);return[[a*h-(2*e*g-i),a*I-(2*e*x-c)],[f*h-(g*(t+e)-i),f*I-(x*(t+e)-c)],[d*h-(2*t*g-i),d*I-(2*t*x-c)]]}(n,e,t)}(n,e,t);throw new Error("The given bezier curve must be of order 2 or 3.")}function m(n,e){return[e[0]-n[0],e[1]-n[1]]}function C(n,e){return n[0]*e[0]+n[1]*e[1]}function S(n){const e=m(n[0],n[1]),t=m(n[1],n[3]),r=m(n[3],n[0]),o=m(n[0],n[2]),s=m(n[2],n[3]);return C(r,e)>0||C(t,r)>0||C(r,o)>0||C(s,r)>0}const{abs:R,max:E}=Math;function T(n){const e=p(n[0],n[3]),t=e(n[1]),r=e(n[2]);return(t*r<=0?4/9:3/4)*E(R(t),R(r))}function b(n){const e=m(n[0],n[1]),t=m(n[1],n[2]),r=m(n[2],n[0]);return C(r,e)>0||C(t,r)>0}const{abs:w}=Math;function A(n){if(n[0][0]===n[1][0]&&n[0][1]===n[1][1])return 0;const e=I(n,.5),t=p(n[0],n[2]);return w(t(e))}function P(n,e){const t=3===n.length?function(n,e){const t=[0],r=[1];for(;;){const o=t[t.length-1],s=r[r.length-1],i=v(n,o,s);if(!b(i)&&A(i)<=e){if(t.push(r.pop()),1===s)return t;continue}const c=(o+s)/2;r.push(c)}}(n,e):function(n,e){const t=[0],r=[1];for(;;){const o=t[t.length-1],s=r[r.length-1],i=v(n,o,s);if(!S(i)&&T(i)<=e){if(t.push(r.pop()),1===s)return t;continue}const c=(o+s)/2;r.push(c)}}(n,e),r=[];for(let e=0;e<t.length-1;e++){const o=I(n,t[e]),s=I(n,t[e+1]);r.push([o,s])}return r}function D(n){return Math.sqrt(n[0]*n[0]+n[1]*n[1])}const y=function(){const e=[{from:0,u:0,v:0}];for(let t=0;t<128;t++){e.push({from:t+.5,u:t+1,v:0}),e.push({from:t+.5,u:-t-1,v:0}),e.push({from:t+.5,u:0,v:t+1}),e.push({from:t+.5,u:0,v:-t-1});for(let r=0;r<n;r++){const n=D([.5+t,.5+r]),o=t+1,s=r+1;e.push({from:n,u:o,v:s}),0!==o&&e.push({from:n,u:-o,v:s}),0!==s&&e.push({from:n,u:o,v:-s}),0!==o&&0!==s&&e.push({from:n,u:-o,v:-s})}e.sort((n,e)=>n.from-e.from)}return e}(),{max:U,E:F}=Math;const{min:N,max:L,SQRT2:M}=Math;function k(e,t,r,o,s){const i=function(e,t,r,o,s){return function(i,c,l){let u=function(n){let e=function(n){let e=0,t=y.length-1,r=0;for(;e<=t;){r=e+t>>>1;const o=y[r].from;if(o===n)return r;n>o?e=r+1:t=r-1}return r}(n);if(n=U(0,n),0===e)return 0;for(;y[e].from===y[e-1].from;)e--;return e}((l-M*r)/r),a=Number.POSITIVE_INFINITY;for(;;){if(u>=y.length){a=r*(y[y.length-1].from-M);break}const{u:l,v:d,from:f}=y[u];if(r*f>o+M*r){a=r*(f-2*M);break}const g=l+i,h=d+c;if(g<0||g>=t+2*s||h<0||h>=n+2*s){u++;continue}const{lineSegs:x}=e[g][h];if(x.length>0){a=r*(f-M);break}u++}const{closeCells:d}=e[i][c];let f=L(0,u-1);for(;f<y.length;){const{from:l,u,v:g}=y[f];if(r*l>N(a,o)+2*M*r)break;const h=u+i,x=g+c;if(h<0||h>=t+2*s||x<0||x>=n+2*s){f++;continue}const{lineSegs:I}=e[h][x];I.length>0&&d.push((2*s+n)*h+x),f++}return a}}(e,t,r,o,s);let c=0,l=0;for(let e=s;e<t+s;e++){l=c;for(let t=s;t<n+s;t++)l=i(e,t,l),t===s&&(c=l)}}const{floor:B,ceil:O}=Math;function X(n,e,t,r,o,s){const i=r*s,[[c,l],[u,a]]=o,d=e+i,f=t+i,g=function(n,e){const[t,r]=n,[o,s]=t,[i,c]=r,[[l,u],[a,d]]=e,f=i-o,g=c-s,h=[],x=[];if(0!==f){const n=(l-o)/f;if(n>=0&&n<=1){const e=s+n*g;e>=u&&e<=d&&(h.push(n),x.push([l,e]))}const e=(a-o)/f;if(e>=0&&e<=1){const n=s+e*g;n>=u&&n<=d&&(h.push(e),x.push([a,n]))}}if(0!==g){const n=(u-s)/g;if(n>=0&&n<=1){const e=o+n*f;e>=l&&e<=a&&(h.push(n),x.push([e,u]))}const e=(d-s)/g;if(e>=0&&e<=1){const n=o+e*f;n>=l&&n<=a&&(h.push(e),x.push([n,d]))}}return 2===h.length?h[0]<h[1]?x:[x[1],x[0]]:x}(o,[[-i,-i],[d,f]]),h=c>-i&&c<d&&l>-i&&l<f,x=u>-i&&u<d&&a>-i&&a<f;if(g.length<2&&!h&&!x)return;const I=u-c,_=a-l,p=u>c?r:-r,v=a>l?r:-r;let m=c,C=l,S=0;const R=p>0,E=v>0,T=R?B:O,b=E?B:O;for(;;){let e=r*T((m+p)/r),t=r*b((C+v)/r);const o=(e-c)/I,x=(t-l)/_,w=o<x&&0!==I||0===_,A=w?e:c+x*I,P=w?l+o*_:t;if((o>1||0===I)&&(x>1||0===_)){const e=B(u/r)+s,t=B(a/r)+s;n[e]?.[t]?.lineSegs.push([[m,C],[u,a]]);break}if(A<=-i||P<=-i||A>=d||P>=f){if(!h&&0===S){[m,C]=g[0],S++;continue}{const e=T(m/r)-(R?0:1)+s,t=b(C/r)-(E?0:1)+s,o=[[m,C],g[S]];n[e]?.[t]?.lineSegs.push(o);break}}const D=T(m/r)-(R?0:1)+s,y=b(C/r)-(E?0:1)+s;n[D]?.[y]?.lineSegs.push([[m,C],[A,P]]),m=A,C=P}}const G=256,{floor:Y,ceil:j}=Math;function Q(n,e,t){const r=e/n.length,[o,s]=t,i=function(n,e){const[t,r]=n,[o,s]=t,[i,c]=r,[l,u,a]=e,d=i-o,f=c-s,g=[],h=[];if(0!==d){const n=(l-o)/d;if(n>=0&&n<=1){const e=s+n*f;e>=u&&e<=a&&(g.push(n),h.push([l,e]))}}if(0!==f){const n=(u-s)/f;if(n>=0&&n<=1){const e=o+n*d;e<=l&&(g.push(n),h.push([e,u]))}const e=(a-s)/f;if(e>=0&&e<=1){const n=o+e*d;n<=l&&(g.push(e),h.push([n,a]))}}return 2===g.length?g[0]<g[1]?h:[h[1],h[0]]:h}(t,[0,0,e]),[c,l]=o,[u,a]=s,d=u-c,f=a-l,g=c<0&&l>0&&l<e,h=u<0&&a>0&&a<e;if(i.length<2&&!g&&!h&&(0!==c||0!==d||l<=0&&a<=0||l>=e&&a>=e))return;if(0===f)return;const x=a>l?r:-r;let I=c,_=l,p=0;const v=u>c,m=a>l,C=m?Y:j;for(;;){let t=v&&I<0||!v&&I>0?0:Number.NEGATIVE_INFINITY,o=r*C((_+x)/r);const u=(t-c)/d,a=(o-l)/f,h=u<a&&0!==d,S=h?0:c+a*d,R=h?l+u*f:o;if((u>1||0===d)&&a>1){const e=Y(s[1]/r);n[e]?.push([[I,_],s]);break}if(S>=0&&(0!==c||0!==d)||R<=0||R>=e){if(!g&&0===p){[I,_]=i[0],p++;continue}{const e=C(_/r)-(m?0:1),t=[[I,_],i[p]];n[e]?.push(t);break}}const E=C(_/r)-(m?0:1);n[E]?.push([[I,_],[S,R]]),I=S,_=R}}function V(e,t,o,s,i,c,l=1,u,f,g,I,_,p,v,m){const{gl:C}=e,S=[],R=.03125,E=.03125;S.push(0,0,R,0,0,E),S.push(R,0,R,E,0,E);const T=new Float32Array(S),b=(w=t,(n,e,...t)=>{const{gl:r,uniforms:o}=w,s=o[e]||(o[e]=r.getUniformLocation(w.program,e));r[`uniform${n}`](s,...t)});var w;const A=function(n){return(e,t,r,o,s,i=0,c=0,l=0)=>{const{gl:u,attributes:f}=n,g=f[e]=f[e]??{buf:u.createBuffer(),loc:u.getAttribLocation(n.program,e),data:null},{loc:h,buf:x}=g;u.bindBuffer(u.ARRAY_BUFFER,x),r===a||r===d?u.vertexAttribPointer(h,t,r,!1,c,l):u.vertexAttribIPointer(h,t,r,c,l),u.enableVertexAttribArray(h),0!==i&&u.vertexAttribDivisor(h,i),s!==g.data&&(u.bufferData(u.ARRAY_BUFFER,s,o),g.data=s)}}(t),{lineSegPtCoords_Arr:D,segIdxs_PerCell_Range_Arr:y,closeCellIdxs_PerCell_Arr:U,closeCellIdxs_PerCell_Range_Arr:F,crossCellIdxs_PerCell_Arr:N,crossCellIdxs_perCell_Range_Arr:L,segIdxs_PerStrip_Range_Arr:M}=function(e,t,r,o,s,i,c,l=.5,u=[0,0,t,r],a=1){const d=function(n,e,t,r){if(0===n[0]&&0===n[1]&&n[2]===e&&n[3]===t)return r;const[o,s,i,c]=n,l=e/i,u=t/c,a=[];for(let n=0;n<r.length;n++){const e=r[n],t=[];for(let n=0;n<e.length;n++){const r=e[n],i=[];for(let n=0;n<r.length;n++){const[e,t]=r[n],c=l*e-o,a=u*t-s;i.push([c,a])}t.push(i)}a.push(t)}return a}(u,t,r/a,e),f=function(n,e){let t=[];for(let r=0;r<n.length;r++){const o=n[r];for(let n=0;n<o.length;n++){const r=o[n];if(x(r))continue;if(2===r.length){t.push(r);continue}const s=P(r,e);t.push(...s.filter(n=>!x(n)))}}return t}(d,l),g=function(e,t){const r=[];for(let o=0;o<e+2*t;o++){const e=[];for(let r=0;r<n+2*t;r++)e.push({lineSegs:[],closeCells:[],crossingCells:[]});r.push(e)}return r}(o,c),h=new Array(n).fill(void 0).map(n=>[]);for(let n=0;n<f.length;n++){const e=f[n];X(g,t,r,s,e,c),Q(h,r,e)}k(g,o,s,i,c),function(e,t,r){for(let o=r;o<t+r;o++)for(let t=r;t<n+r;t++){const s=e[o][t].crossingCells;for(let i=r;i<=o;i++)0!==e[i][t].lineSegs.length&&s.push((n+2*r)*i+t)}}(g,o,c);const I=[],_=[],p=[],v=[],m=[],C=[];let S=0,R=0,E=0;for(let e=0;e<o+2*c;e++)for(let t=0;t<n+2*c;t++){const r=g[e][t];if(e>=c&&e<o+c&&t>=c&&t<n+c){const{closeCells:n,crossingCells:e}=r,t=e.length;m.push(...e),C.push([S,t]),S+=t;const o=n.length;p.push(...n),v.push([R,o]),R+=o}const{lineSegs:s}=r,i=s.length;_.push([E,i]),E+=i,I.push(...s)}for(;p.length%G!==0;)p.push(0);for(;m.length%G!==0;)m.push(0);const T=[];for(let e=0;e<n;e++){const n=h[e],t=n.length;T.push([E,t]),E+=t,I.push(...n)}const b=new Float32Array(I.flat(2)),w=new Int32Array(_.flat()),A=new Int32Array(v.flat());return{lineSegPtCoords_Arr:b,segIdxs_PerCell_Range_Arr:w,closeCellIdxs_PerCell_Arr:new Int32Array(p),closeCellIdxs_PerCell_Range_Arr:A,crossCellIdxs_PerCell_Arr:new Int32Array(m),crossCellIdxs_perCell_Range_Arr:new Int32Array(C.flat()),segIdxs_PerStrip_Range_Arr:new Int32Array(T.flat())}}(s,u,f,g,I,c,v,o,i,m);A("aUV",2,C.FLOAT,C.STATIC_DRAW,T),A("aCrossIdxRangePerCell",2,C.INT,C.STATIC_DRAW,L,1),A("aCloseCellIdxRangePerCell",2,C.INT,C.STATIC_DRAW,F,1),b("2f","uWidthHeight",u,f),b("1f","uMaxDistance",c),b("1f","uExponent",l),b("1i","uIncl",(_?1:0)+(p?2:0)),h(t)("SegIdxRangePerCellBlock",0,y),h(t)("SegIdxRangePerStripBlock",1,M),r(e,0,"segs"),C.texImage2D(C.TEXTURE_2D,0,C.RGBA32F,D.length/4,1,0,C.RGBA,C.FLOAT,D);const B=C.getUniformLocation(t.program,"uSegs");C.uniform1i(B,0),r(e,1,"closeCellIdxsPerCell"),C.texImage2D(C.TEXTURE_2D,0,C.R32I,G,U.length/G,0,C.RED_INTEGER,C.INT,U);const O=C.getUniformLocation(t.program,"uCloseCellIdxs");C.uniform1i(O,1),r(e,2,"crossCellIdxsPerCell"),C.texImage2D(C.TEXTURE_2D,0,C.R32I,G,N.length/G,0,C.RED_INTEGER,C.INT,N);const Y=C.getUniformLocation(t.program,"uCrossCellIdxs");C.uniform1i(Y,2),m>1&&(C.enable(C.SCISSOR_TEST),C.scissor(0,0,u,f/m)),C.viewport(0,0,u,f),C.drawArraysInstanced(C.TRIANGLES,0,6,g*n),m>1&&C.disable(C.SCISSOR_TEST)}function z(n){const e=[n.p,n.initialPoint];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e}const W={c:function(n){const e=[n.p,[n.vals[0],n.vals[1]],[n.vals[2],n.vals[3]],[n.vals[4],n.vals[5]]];return n.prev2ndCubicControlPoint=e[2],n.prev2ndQuadraticControlPoint=void 0,e},h:function(n){const e=[n.p,[n.vals[0],n.p[1]]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e},l:function(n){const e=[n.p,n.vals];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e},q:function(n){const e=[n.vals[0],n.vals[1]],t=[n.vals[2],n.vals[3]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=e,[n.p,e,t]},s:function(n){const e=n.prev2ndCubicControlPoint?[n.p[0]-n.prev2ndCubicControlPoint[0]+n.p[0],n.p[1]-n.prev2ndCubicControlPoint[1]+n.p[1]]:n.p,t=[n.p,e,[n.vals[0],n.vals[1]],[n.vals[2],n.vals[3]]];return n.prev2ndCubicControlPoint=t[2],n.prev2ndQuadraticControlPoint=void 0,t},t:function(n){const e=n.prev2ndQuadraticControlPoint?[n.p[0]-n.prev2ndQuadraticControlPoint[0]+n.p[0],n.p[1]-n.prev2ndQuadraticControlPoint[1]+n.p[1]]:n.p,t=[n.vals[0],n.vals[1]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=e,[n.p,e,t]},v:function(n){const e=[n.p,[n.p[0],n.vals[0]]];return n.prev2ndCubicControlPoint=void 0,n.prev2ndQuadraticControlPoint=void 0,e},z};function H(n){let e=0,t=0,r=1,o=0,s=1,i=1;const c=n._currentIndex;if(n._skipOptionalSpaces(),n._currentIndex<n._endIndex&&"+"===n._string[n._currentIndex]?n._currentIndex+=1:n._currentIndex<n._endIndex&&"-"===n._string[n._currentIndex]&&(n._currentIndex+=1,s=-1),n._currentIndex===n._endIndex||(n._string[n._currentIndex]<"0"||n._string[n._currentIndex]>"9")&&"."!==n._string[n._currentIndex])throw new Error("The first character of a number must be one of [0-9+-.].");const l=n._currentIndex;for(;n._currentIndex<n._endIndex&&n._string[n._currentIndex]>="0"&&n._string[n._currentIndex]<="9";)n._currentIndex+=1;if(n._currentIndex!==l){let e=n._currentIndex-1,r=1;for(;e>=l;)t+=r*(Number(n._string[e])-0),e-=1,r*=10}if(n._currentIndex<n._endIndex&&"."===n._string[n._currentIndex]){if(n._currentIndex+=1,n._currentIndex>=n._endIndex||n._string[n._currentIndex]<"0"||n._string[n._currentIndex]>"9")throw new Error("There must be a least one digit following the .");for(;n._currentIndex<n._endIndex&&n._string[n._currentIndex]>="0"&&n._string[n._currentIndex]<="9";)r*=10,o+=Number(n._string.charAt(n._currentIndex))/r,n._currentIndex+=1}if(n._currentIndex!==c&&n._currentIndex+1<n._endIndex&&("e"===n._string[n._currentIndex]||"E"===n._string[n._currentIndex])&&"x"!==n._string[n._currentIndex+1]&&"m"!==n._string[n._currentIndex+1]){if(n._currentIndex+=1,"+"===n._string[n._currentIndex]?n._currentIndex+=1:"-"===n._string[n._currentIndex]&&(n._currentIndex+=1,i=-1),n._currentIndex>=n._endIndex||n._string[n._currentIndex]<"0"||n._string[n._currentIndex]>"9")throw new Error("There must be an exponent.");for(;n._currentIndex<n._endIndex&&n._string[n._currentIndex]>="0"&&n._string[n._currentIndex]<="9";)e*=10,e+=Number(n._string[n._currentIndex]),n._currentIndex+=1}let u=t+o;if(u*=s,e&&(u*=Math.pow(10,i*e)),c===n._currentIndex)throw new Error("Internal error: startIndex === source._currentIndex");return n._skipOptionalSpacesOrDelimiter(),u}const q={Z:"Z",M:"M",L:"L",C:"C",Q:"Q",A:"A",H:"H",V:"V",S:"S",T:"T",z:"Z",m:"m",l:"l",c:"c",q:"q",a:"a",h:"h",v:"v",s:"s",t:"t"};class Z{_string;_currentIndex;_endIndex;_prevCommand;constructor(n){this._string=n,this._currentIndex=0,this._endIndex=this._string.length,this._prevCommand=void 0,this._skipOptionalSpaces()}parseSegment(){const n=this._string[this._currentIndex];let e,t=q[n];if(void 0===t){if(void 0===this._prevCommand)throw new Error("Implicit command not allowed for first commands.");if(!("+"===n||"-"===n||"."===n||n>="0"&&n<="9")||"Z"===this._prevCommand)throw new Error("Remaining coordinates not found for implicit command");t="M"===this._prevCommand?"L":"m"===this._prevCommand?"l":this._prevCommand}else this._currentIndex+=1;this._prevCommand=t;const r=t.toUpperCase();if("H"===r||"V"===r?e=[H(this)]:"M"===r||"L"===r||"T"===r?e=[H(this),H(this)]:"S"===r||"Q"===r?e=[H(this),H(this),H(this),H(this)]:"C"===r?e=[H(this),H(this),H(this),H(this),H(this),H(this)]:"A"===r?e=[H(this),H(this),H(this),this._parseArcFlag(),this._parseArcFlag(),H(this),H(this)]:"Z"===r&&(this._skipOptionalSpaces(),e=[]),void 0===e)throw new Error("Unknown command");return{type:t,values:e}}hasMoreData(){return this._currentIndex<this._endIndex}initialCommandIsMoveTo(){if(!this.hasMoreData())return!0;const n=q[this._string[this._currentIndex]];return"M"===n||"m"===n}_isCurrentSpace(){const n=this._string[this._currentIndex];return n<=" "&&(" "===n||"\n"===n||"\t"===n||"\r"===n||"\f"===n)}_skipOptionalSpaces(){for(;this._currentIndex<this._endIndex&&this._isCurrentSpace();)this._currentIndex+=1;return this._currentIndex<this._endIndex}_skipOptionalSpacesOrDelimiter(){return!(this._currentIndex<this._endIndex&&!this._isCurrentSpace()&&","!==this._string[this._currentIndex])&&(this._skipOptionalSpaces()&&this._currentIndex<this._endIndex&&","===this._string[this._currentIndex]&&(this._currentIndex+=1,this._skipOptionalSpaces()),this._currentIndex<this._endIndex)}_parseArcFlag(){if(this._currentIndex>=this._endIndex)throw new Error("Unable to parse arc flag");let n;const e=this._string[this._currentIndex];if(this._currentIndex+=1,"0"===e)n=0;else{if("1"!==e)throw new Error("Unable to parse arc flag - arc flag must be 0 or 1");n=1}return this._skipOptionalSpacesOrDelimiter(),n}}const{ceil:$,min:J,max:K}=Math;function nn(r,o,s,i,c,l,u=1,a=!0,d=!0,f=0,g=0,h=0,x=.5){const I="string"==typeof o?function(n){if(0===n.length)return[];if("m"!==n[0].type.toLowerCase())throw new Error("Invalid SVG - every new path must start with an M or m.");const e={p:[0,0]},t=[];let r,o=[];for(let s=0;s<n.length;s++){const i=n[s],c=i.type.toLowerCase();if(e.vals=i.values,i.type===c)if("v"===c)e.vals[0]+=e.p[1];else if("a"===c)e.vals[5]+=e.p[0],e.vals[6]+=e.p[1];else for(let n=0;n<e.vals.length;n++)e.vals[n]+=e.p[n%2];if("m"===c){o.length&&("z"!==r&&o.push(z(e)),t.push(o),o=[]),e.initialPoint=e.p=e.vals,r=c;continue}const l=W[c];if(!l)throw new Error("Invalid SVG - command not recognized.");const u=l(e);e.p=u[u.length-1],o.push(u),r=c}return o.length>0&&("z"!==r&&o.push(z(e)),t.push(o)),t}(function(n){if(!n.length)return[];const e=new Z(n),t=[];if(!e.initialCommandIsMoveTo())throw new Error("Path must start with m or M");for(;e.hasMoreData();)t.push(e.parseSegment());return t}(o)):o,{onContextLoss:_}=r;let p=1;if(s/i>4){const n=s/4;p=n/i,i=n}const v=i/n,m=K(s,i),C=$(s/v),S=2*$(J(l,m)/v/2),R=function(n,e,r,o){const{gl:s,programs:i}=n;if(i[e])return i[e];const c=s.createProgram(),l=t(s,"#version 300 es\n\nprecision highp float;\n\nuniform vec2 uWidthHeight;\nin vec2 aUV;\nin ivec2 aCloseCellIdxRangePerCell;\nin ivec2 aCrossIdxRangePerCell;\nout vec2 vXY;\nflat out int instanceId;\nflat out ivec2 closeCellIdxRange;\nflat out ivec2 crossCellIdxRange;\n\n\nvoid main() {\n instanceId = gl_InstanceID;\n closeCellIdxRange = aCloseCellIdxRangePerCell;\n crossCellIdxRange = aCrossIdxRangePerCell;\n\n // drawn column-by-column\n float i = float(instanceId / 32); // column index\n float j = float(instanceId % 32); // row index\n\n vec2 trans = vec2(\n i / float(32),\n j / float(32)\n );\n\n vec2 uv = aUV + trans;\n\n float width = uWidthHeight.x;\n float height = uWidthHeight.y;\n\n vXY = vec2(\n height * uv.x,\n height * uv.y\n );\n\n float aspectRatio = width / height;\n\n gl_Position = vec4(\n vec2(\n (2.0*(uv.x / aspectRatio) - 1.0),\n 2.0*uv.y - 1.0\n ),\n 0.0, 1.0\n );\n}\n",s.VERTEX_SHADER),u=t(s,o,s.FRAGMENT_SHADER);return s.attachShader(c,l),s.attachShader(c,u),s.linkProgram(c),i[e]={gl:s,program:c,attributes:{},uniforms:{},uniformBlocks:{},vertexShader:l,fragmentShader:u},i[e]}(r,`main${C}-${S}`,0,function(t,r){const o=e[1024*t+r];if(void 0!==o)return o;const s=`#version 300 es\n\nprecision highp float;\n\nuniform float uMaxDistance;\nuniform float uExponent;\nuniform highp sampler2D uSegs;\nuniform highp isampler2D uCloseCellIdxs;\nuniform highp isampler2D uCrossCellIdxs;\nuniform int uIncl; // bit 0 -> incl inside, bit 1 -> incl outside\n\nuniform SegIdxRangePerCellBlock {\n ivec4 uSegIdxRangePerCell[${(n+2*r)*(t+2*r)/2}];\n};\nuniform SegIdxRangePerStripBlock {\n ivec4 uSegIdxRangePerStrip[16];\n};\n\nin vec2 vXY;\nflat in int instanceId;\nflat in ivec2 closeCellIdxRange;\nflat in ivec2 crossCellIdxRange;\nout vec4 FragColor;\n\n\nfloat absDistToSegment(vec2 point, vec2 lineA, vec2 lineB) {\n vec2 lineDir = lineB - lineA;\n float lenSq = dot(lineDir, lineDir);\n float t = clamp(dot(point - lineA, lineDir) / lenSq, 0.0, 1.0);\n vec2 linePt = lineA + t * lineDir;\n\n return distance(point, linePt);\n}\n\n\nvoid main() {\n ///////////////////////////////////////////////////////////////////////////\n // Project a ray to the left to check if it crosses the segment in order\n // to find the fragment's winding number to determine whether fragment\n // is inside or outside the shape.\n\n int crossIdxS = crossCellIdxRange.x;\n int crossLen = crossCellIdxRange.y;\n float winds = 0.0;\n // Iterate over all relevant cell indexes\n for (int i = crossIdxS; i < crossIdxS + crossLen; i++) {\n int crossIdx = texelFetch(uCrossCellIdxs, ivec2(i%256, i/256), 0).x;\n\n bool isEven = crossIdx % 2 == 0;\n\n ivec4 uSegIdxRange = uSegIdxRangePerCell[crossIdx / 2];\n int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;\n int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;\n\n for (int j = segIdx; j < segIdx + segLen; j++) {\n // Fetch segment from texture\n vec4 seg = texelFetch(uSegs, ivec2(j, 0), 0);\n\n // line segment's min-y is excluded\n bool crossing =\n (seg.y > vXY.y != seg.w > vXY.y) &&\n (vXY.x > (seg.z - seg.x)*(vXY.y - seg.y) / (seg.w - seg.y) + seg.x);\n\n bool crossingUp = seg.y < seg.w;\n\n winds += crossing ? (crossingUp ? 1.0 : -1.0) : 0.0;\n }\n }\n\n {\n bool isEven = (instanceId % 32) % 2 == 0;\n\n ivec4 uSegIdxRange = uSegIdxRangePerStrip[(instanceId % 32) / 2];\n int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;\n int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;\n\n for (int j = segIdx; j < segIdx + segLen; j++) {\n // Fetch segment from texture\n vec4 seg = texelFetch(uSegs, ivec2(j, 0), 0);\n\n // line segment's min-y is excluded\n bool crossing =\n (seg.y > vXY.y != seg.w > vXY.y) &&\n (vXY.x > (seg.z - seg.x)*(vXY.y - seg.y) / (seg.w - seg.y) + seg.x);\n\n bool crossingUp = seg.y < seg.w;\n\n winds += crossing ? (crossingUp ? 1.0 : -1.0) : 0.0;\n }\n }\n\n\n bool inside = winds != 0.0;\n ///////////////////////////////////////////////////////////////////////////\n\n ///////////////////////////////////////////////////////////////////////////\n float res = 1.0; // sdf result\n\n if ((inside && (uIncl % 2 != 0)) || (!inside && (uIncl > 1))) {\n int cellIdxS = closeCellIdxRange.x;\n int cellLen = closeCellIdxRange.y;\n // Iterate over all relevant cell indexes\n for (int i = cellIdxS; i < cellIdxS + cellLen; i++) {\n int cellIdx = texelFetch(uCloseCellIdxs, ivec2(i%256, i/256), 0).x;\n\n bool isEven = cellIdx % 2 == 0;\n ivec4 uSegIdxRange = uSegIdxRangePerCell[cellIdx / 2];\n int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;\n int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;\n\n for (int j = segIdx; j < segIdx + segLen; j++) {\n // Fetch segment from texture\n vec4 seg = texelFetch(uSegs, ivec2(j, 0), 0);\n\n // Find unsigned distance to the segment; only the nearest will be kept\n float d = absDistToSegment(vXY, seg.xy, seg.zw);\n // Apply exponential transform TODO\n // val = pow(1.0 - clamp(d / uMaxDistance, 0.0, 1.0), uExponent) * 0.5;\n float val = clamp(d / uMaxDistance, 0.0, 1.0);\n res = min(res, val);\n }\n }\n }\n ///////////////////////////////////////////////////////////////////////////\n\n // DEBUG!\n float alpha = ((instanceId + instanceId/32) % 2 == 0 ? 0.3 : 0.5);\n\n float red = inside ? 0.2 : 0.8;\n float green = abs(sin(50.0 * res));\n float blue = 0.5;\n // float alpha = inside ? 0.5 : 0.0;\n\n FragColor = vec4(red, green, blue, alpha);\n}\n`;return e[1024*t+r]=s,s}(C,S)),{gl:E}=r;if(E.useProgram(R.program),V(r,R,x,I,c,l,u,s,i,C,v,a,d,S,p),E.isContextLost())throw _(),new Error("Webgl2 context lost.")}function en(n){if(void 0===n)return;const{gl:e,programs:t,textures:r}=n;for(let n in t){const{attributes:r,fragmentShader:o,vertexShader:s,uniformBlocks:i,program:c}=t[n];for(let n in i){const{buf:t}=i[n];e.deleteBuffer(t)}for(let n in r){const{buf:t}=r[n];e.deleteBuffer(t)}e.deleteShader(o),e.deleteShader(s),e.deleteProgram(c)}for(let n in r){const{tex:t}=r[n];e.deleteTexture(t)}}const tn=new WeakMap;function rn(n){{const e=tn.get(n);if(e)return e}const e={},t={};n.canvas.addEventListener("webglcontextlost",n=>{o(),n.preventDefault()},!1);const r={gl:n,onContextLoss:o,textures:t,programs:e};return tn.set(n,r),r;function o(){on(e),on(t)}}function on(n){Object.keys(n).forEach(e=>{delete n[e]})}export{en as freeGlContext,nn as generateIntoFramebuffer,rn as getWebGlContext};
@@ -1,5 +1,6 @@
1
+ import { GlContext } from './types/gl-context.js';
1
2
  /**
2
- *
3
+ * TODO
3
4
  * @param gl
4
5
  * @param psss
5
6
  * @param width
@@ -14,5 +15,5 @@
14
15
  * @param channel
15
16
  * @param resolution
16
17
  */
17
- declare function generateIntoFramebuffer(gl: WebGL2RenderingContext, psss: (number[][])[][] | string, width: number, height: number, viewbox: [number, number, number, number], maxDistance: number, sdfExponent?: number, inclInside?: boolean, inclOutside?: boolean, x?: number, y?: number, channel?: number, resolution?: 0.5 | 1): void;
18
+ declare function generateIntoFramebuffer(glContext: GlContext, psss: (number[][])[][] | string, width: number, height: number, viewbox: [number, number, number, number], maxDistance: number, sdfExponent?: number, inclInside?: boolean, inclOutside?: boolean, x?: number, y?: number, channel?: number, resolution?: 0.5 | 1): void;
18
19
  export { generateIntoFramebuffer };
@@ -1,4 +1,4 @@
1
- import { getWebGLContext } from './webgl-utils/get-gl-context.js';
1
+ // import { getWebGLContext } from './webgl-utils/get-gl-context.js';
2
2
  import { main_Vertex } from './shaders/main.vertex.js';
3
3
  import { getMainFragment } from './shaders/main.fragment.js';
4
4
  import { initProgram } from './webgl-utils/use-program.js';
@@ -9,7 +9,7 @@ import { MAX_ASPECT_RATIO_BEFORE_STRETCH } from './max-aspect-ratio-before-stret
9
9
  // import { debugShaders } from './debug-shaders.js';
10
10
  const { ceil, min, max } = Math;
11
11
  /**
12
- *
12
+ * TODO
13
13
  * @param gl
14
14
  * @param psss
15
15
  * @param width
@@ -24,14 +24,12 @@ const { ceil, min, max } = Math;
24
24
  * @param channel
25
25
  * @param resolution
26
26
  */
27
- function generateIntoFramebuffer(gl, psss, width, height, viewbox, maxDistance, sdfExponent = 1, inclInside = true, inclOutside = true,
28
- // framebuffer: WebGLFramebuffer | null,
29
- x = 0, y = 0, channel = 0, resolution = 0.5) {
27
+ function generateIntoFramebuffer(glContext, psss, width, height, viewbox, maxDistance, sdfExponent = 1, inclInside = true, inclOutside = true, x = 0, y = 0, channel = 0, resolution = 0.5) {
30
28
  // debugShaders(gl); // comment for production
31
29
  const psss_ = typeof psss === 'string'
32
30
  ? getPathsFromStr(psss)
33
31
  : psss;
34
- const glContext = getWebGLContext(gl);
32
+ // const glContext = getWebGLContext(gl);
35
33
  const { onContextLoss } = glContext;
36
34
  let stretch = 1;
37
35
  const aspectRatio = width / height;
@@ -45,6 +43,7 @@ x = 0, y = 0, channel = 0, resolution = 0.5) {
45
43
  const colCount = ceil(width / cellSize);
46
44
  const padCount = 2 * ceil(min(maxDistance, maxDim) / cellSize / 2);
47
45
  const programMain = initProgram(glContext, `main${colCount}-${padCount}`, main_Vertex, getMainFragment(colCount, padCount));
46
+ const { gl } = glContext;
48
47
  gl.useProgram(programMain.program);
49
48
  mainProgram(glContext, programMain, resolution, psss_, viewbox, maxDistance, sdfExponent, width, height, colCount, cellSize, inclInside, inclOutside, padCount, stretch);
50
49
  // Handle context loss occurring during any of the above calls
@@ -1 +1 @@
1
- {"version":3,"file":"generate-sdf.js","sourceRoot":"","sources":["../src/generate-sdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,qDAAqD;AAErD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAGhC;;;;;;;;;;;;;;;GAeG;AACH,SAAS,uBAAuB,CACxB,EAA0B,EAC1B,IAA+B,EAC/B,KAAa,EACb,MAAc,EACd,OAAsC,EACtC,WAAmB,EACnB,WAAW,GAAG,CAAC,EACf,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,IAAI;AAClB,wCAAwC;AACxC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EACZ,OAAO,GAAG,CAAC,EACX,aAAoB,GAAG;IAE3B,+CAA+C;IAE/C,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ;QAClC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAEpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,WAAW,GAAG,KAAK,GAAC,MAAM,CAAC;IACjC,IAAI,WAAW,GAAG,+BAA+B,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,GAAC,+BAA+B,CAAC;QAChD,OAAO,GAAG,CAAC,GAAC,MAAM,CAAC;QACnB,MAAM,GAAG,CAAC,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,GAAC,SAAS,CAAC;IAElC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAC,QAAQ,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAC,QAAQ,GAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,WAAW,CAC3B,SAAS,EAAE,OAAO,QAAQ,IAAI,QAAQ,EAAE,EACxC,WAAW,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACnD,CAAC;IAEF,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,WAAW,CACP,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EACzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAC1D,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CACvD,CAAC;IAEF,8DAA8D;IAC9D,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAEhB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC;AAGD,OAAO,EAAE,uBAAuB,EAAE,CAAA"}
1
+ {"version":3,"file":"generate-sdf.js","sourceRoot":"","sources":["../src/generate-sdf.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF,qDAAqD;AAErD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAGhC;;;;;;;;;;;;;;;GAeG;AACH,SAAS,uBAAuB,CACxB,SAAoB,EACpB,IAA+B,EAC/B,KAAa,EACb,MAAc,EACd,OAAsC,EACtC,WAAmB,EACnB,WAAW,GAAG,CAAC,EACf,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,IAAI,EAClB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EACZ,OAAO,GAAG,CAAC,EACX,aAAoB,GAAG;IAE3B,+CAA+C;IAE/C,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ;QAClC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,IAAI,CAAC;IAEX,yCAAyC;IAEzC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAEpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,WAAW,GAAG,KAAK,GAAC,MAAM,CAAC;IACjC,IAAI,WAAW,GAAG,+BAA+B,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,GAAC,+BAA+B,CAAC;QAChD,OAAO,GAAG,CAAC,GAAC,MAAM,CAAC;QACnB,MAAM,GAAG,CAAC,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,GAAC,SAAS,CAAC;IAElC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAC,QAAQ,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAC,QAAQ,GAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,WAAW,CAC3B,SAAS,EAAE,OAAO,QAAQ,IAAI,QAAQ,EAAE,EACxC,WAAW,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACnD,CAAC;IAEF,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;IAEzB,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,WAAW,CACP,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EACzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAC1D,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CACvD,CAAC;IAEF,8DAA8D;IAC9D,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAEhB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC;AAGD,OAAO,EAAE,uBAAuB,EAAE,CAAA"}
package/node/index.d.ts CHANGED
@@ -1 +1,3 @@
1
1
  export { generateIntoFramebuffer } from './generate-sdf.js';
2
+ export { freeGlContext } from './webgl-utils/free-gl-context.js';
3
+ export { getWebGlContext } from './webgl-utils/get-gl-context.js';
package/node/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export { generateIntoFramebuffer } from './generate-sdf.js';
2
+ export { freeGlContext } from './webgl-utils/free-gl-context.js';
3
+ export { getWebGlContext } from './webgl-utils/get-gl-context.js';
2
4
  //# sourceMappingURL=index.js.map
package/node/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC"}
@@ -35,7 +35,6 @@ function mainProgram(glContext, programMain, resolution, psss, viewbox, maxDista
35
35
  setUniform_('1f', 'uMaxDistance', maxDistance);
36
36
  setUniform_('1f', 'uExponent', sdfExponent); // TODO
37
37
  setUniform_('1i', 'uIncl', (inclInside ? 1 : 0) + (inclOutside ? 2 : 0));
38
- setUniform_('1f', 'uStretch', stretch); // TODO
39
38
  setUniformBlock(programMain)('SegIdxRangePerCellBlock', 0, segIdxs_PerCell_Range_Arr);
40
39
  setUniformBlock(programMain)('SegIdxRangePerStripBlock', 1, segIdxs_PerStrip_Range_Arr);
41
40
  ///////////////////////////////////////
@@ -1 +1 @@
1
- {"version":3,"file":"main-program.js","sourceRoot":"","sources":["../src/main-program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main-program.js","sourceRoot":"","sources":["../src/main-program.ts"],"names":[],"mappings":"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"}
@@ -5,20 +5,19 @@ import { createEmptyGrid } from './utils/create-empty-grid.js';
5
5
  import { findCrossingCells } from './utils/find-crossing-cells.js';
6
6
  import { TEX_WIDTH } from './tex-width.js';
7
7
  import { ROW_COUNT } from './row-count.js';
8
- import { createEmptyStrips } from './utils/create-empty-strips.js';
9
8
  import { clipLineSegmentToStrips } from './utils/clip-line-segment-to-strips.js';
10
9
  import { mapToViewbox } from './utils/map-to-viewbox.js';
11
- // import { sum } from './utils/sum.js';
10
+ // import { sum } from './utils/sum.js'; // testing
12
11
  function prepareBuffers(psss, width, height, colCount, cellSize, maxDistance, padCount, resolution = 0.5, viewbox = [0, 0, width, height], stretch = 1) {
13
12
  ////////////////////////////////////////////////////////////////////////////
14
13
  const psss_ = mapToViewbox(viewbox, width, height / stretch, psss);
15
14
  const lineSegs = bezierCurvesToLineSegs(psss_, resolution);
16
15
  const grid = createEmptyGrid(colCount, padCount);
17
- const strips = createEmptyStrips();
16
+ const strips = new Array(ROW_COUNT).fill(undefined).map(v => []);
18
17
  for (let i = 0; i < lineSegs.length; i++) {
19
18
  const seg = lineSegs[i];
20
19
  // Split the line segment into multiple segments that fit within grid cells
21
- clipLineSegmentToGrid(grid, width, height, colCount, cellSize, seg, padCount); // add segments to grid
20
+ clipLineSegmentToGrid(grid, width, height, cellSize, seg, padCount); // add segments to grid
22
21
  clipLineSegmentToStrips(strips, height, seg); // add segments to strips
23
22
  }
24
23
  findCloseCells(grid, colCount, cellSize, maxDistance, padCount); // add close cells
@@ -71,8 +70,7 @@ function prepareBuffers(psss, width, height, colCount, cellSize, maxDistance, pa
71
70
  // Add line segs from strips
72
71
  const segIdxs_PerStrip_Range = [];
73
72
  for (let i = 0; i < ROW_COUNT; i++) {
74
- const strip = strips[i];
75
- const { lineSegs } = strip;
73
+ const lineSegs = strips[i];
76
74
  //////////
77
75
  const L = lineSegs.length;
78
76
  segIdxs_PerStrip_Range.push([S3, L]);
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-buffers.js","sourceRoot":"","sources":["../src/prepare-buffers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare-buffers.js","sourceRoot":"","sources":["../src/prepare-buffers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,oDAAoD;AAGpD,SAAS,cAAc,CACf,IAAsB,EACtB,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,QAAgB,EAChB,WAAmB,EACnB,QAAgB,EAChB,aAAoB,GAAG,EACvB,UAAyC,CAAC,CAAC,EAAC,CAAC,EAAC,KAAK,EAAC,MAAM,CAAC,EAC3D,OAAO,GAAG,CAAC;IAEf,4EAA4E;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjE,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,2EAA2E;QAC3E,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAE,uBAAuB;QAC7F,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAE,yBAAyB;IAC5E,CAAC;IAED,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAE,kBAAkB;IACpF,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAE,qBAAqB;IACnE,4EAA4E;IAE5E,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,qBAAqB,GAAsB,EAAE,CAAC;IAEpD,cAAc;IACd,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAC3C,MAAM,2BAA2B,GAAsB,EAAE,CAAC;IAE1D,iBAAiB;IACjB,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAC3C,MAAM,2BAA2B,GAAsB,EAAE,CAAC;IAE1D,4DAA4D;IAE5D,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,GAAG,CAAC,GAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,SAAS,GAAG,CAAC,GAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExB,WAAW;YACX,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ;gBACxC,CAAC,IAAI,QAAQ,IAAI,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;gBAE5C,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;gBAE3C,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC;gBAChC,qBAAqB,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;gBAC7C,2BAA2B,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3C,EAAE,IAAI,EAAE,CAAC;gBAET,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC7B,qBAAqB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC1C,2BAA2B,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3C,EAAE,IAAI,EAAE,CAAC;gBAET,sDAAsD;YAC1D,CAAC;YAED,UAAU;YACV,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YAE1B,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC3B,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACrC,EAAE,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,0DAA0D;IAC1D,OAAO,qBAAqB,CAAC,MAAM,GAAG,SAAS,KAAK,CAAC,EAAE,CAAC;QAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACzF,OAAO,qBAAqB,CAAC,MAAM,GAAG,SAAS,KAAK,CAAC,EAAE,CAAC;QAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEzF,4BAA4B;IAC5B,MAAM,sBAAsB,GAAsB,EAAE,CAAC;IACrD,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAE3B,UAAU;QACV,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC1B,sBAAsB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,EAAE,IAAI,CAAC,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAGD,8DAA8D;IAC9D,MAAM,mBAAmB,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,yBAAyB,GAAG,IAAI,UAAU,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/E,4BAA4B;IAC5B,MAAM,+BAA+B,GAAG,IAAI,UAAU,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3F,MAAM,yBAAyB,GAAG,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAExE,4BAA4B;IAC5B,MAAM,yBAAyB,GAAG,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACxE,MAAM,+BAA+B,GAAG,IAAI,UAAU,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3F,iCAAiC;IACjC,MAAM,0BAA0B,GAAG,IAAI,UAAU,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjF,UAAU;IACV,6DAA6D;IAC7D,mBAAmB;IACnB,uCAAuC;IACvC,4BAA4B;IAC5B,gEAAgE;IAChE,oDAAoD;IAEpD,6CAA6C;IAC7C,QAAQ;IACR,kBAAkB;IAClB,OAAO;IACP,wCAAwC;IAExC,OAAO;QACH,mBAAmB;QACnB,yBAAyB;QACzB,yBAAyB,EAAE,+BAA+B;QAC1D,yBAAyB,EAAE,+BAA+B;QAC1D,0BAA0B;KAC7B,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -1,2 +1,2 @@
1
- declare const main_Vertex = "#version 300 es\n\nprecision highp float;\n\nuniform vec2 uWidthHeight;\nuniform float uStretch;\nin vec2 aUV;\nin ivec2 aCloseCellIdxRangePerCell;\nin ivec2 aCrossIdxRangePerCell;\nout vec2 vXY;\nflat out int instanceId;\nflat out ivec2 closeCellIdxRange;\nflat out ivec2 crossCellIdxRange;\n\n\nvoid main() {\n instanceId = gl_InstanceID;\n closeCellIdxRange = aCloseCellIdxRangePerCell;\n crossCellIdxRange = aCrossIdxRangePerCell;\n\n // drawn column-by-column\n float i = float(instanceId / 32); // column index\n float j = float(instanceId % 32); // row index\n\n vec2 trans = vec2(\n i / float(32),\n j / float(32)\n );\n\n vec2 uv = aUV + trans;\n\n float width = uWidthHeight.x;\n float height = uWidthHeight.y;\n\n vXY = vec2(\n height * uv.x,\n height * uv.y\n );\n\n float aspectRatio = width / height;\n\n gl_Position = vec4(\n vec2(\n (2.0*(uv.x / aspectRatio) - 1.0),\n 2.0*uv.y - 1.0\n ),\n 0.0, 1.0\n );\n}\n";
1
+ declare const main_Vertex = "#version 300 es\n\nprecision highp float;\n\nuniform vec2 uWidthHeight;\nin vec2 aUV;\nin ivec2 aCloseCellIdxRangePerCell;\nin ivec2 aCrossIdxRangePerCell;\nout vec2 vXY;\nflat out int instanceId;\nflat out ivec2 closeCellIdxRange;\nflat out ivec2 crossCellIdxRange;\n\n\nvoid main() {\n instanceId = gl_InstanceID;\n closeCellIdxRange = aCloseCellIdxRangePerCell;\n crossCellIdxRange = aCrossIdxRangePerCell;\n\n // drawn column-by-column\n float i = float(instanceId / 32); // column index\n float j = float(instanceId % 32); // row index\n\n vec2 trans = vec2(\n i / float(32),\n j / float(32)\n );\n\n vec2 uv = aUV + trans;\n\n float width = uWidthHeight.x;\n float height = uWidthHeight.y;\n\n vXY = vec2(\n height * uv.x,\n height * uv.y\n );\n\n float aspectRatio = width / height;\n\n gl_Position = vec4(\n vec2(\n (2.0*(uv.x / aspectRatio) - 1.0),\n 2.0*uv.y - 1.0\n ),\n 0.0, 1.0\n );\n}\n";
2
2
  export { main_Vertex };
@@ -4,7 +4,6 @@ const main_Vertex = /*glsl*/ `#version 300 es
4
4
  precision highp float;
5
5
 
6
6
  uniform vec2 uWidthHeight;
7
- uniform float uStretch;
8
7
  in vec2 aUV;
9
8
  in ivec2 aCloseCellIdxRangePerCell;
10
9
  in ivec2 aCrossIdxRangePerCell;
@@ -1 +1 @@
1
- {"version":3,"file":"main.vertex.js","sourceRoot":"","sources":["../../src/shaders/main.vertex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,GAAG,QAAQ,CAAA;;;;;;;;;;;;;;;;;;;;;mCAqBO,SAAS;mCACT,SAAS;;;oBAGxB,SAAS;oBACT,SAAS;;;;;;;;;;;;;;;;;;;;;;;CAuB5B,CAAC;AAGF,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"main.vertex.js","sourceRoot":"","sources":["../../src/shaders/main.vertex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,GAAG,QAAQ,CAAA;;;;;;;;;;;;;;;;;;;;mCAoBO,SAAS;mCACT,SAAS;;;oBAGxB,SAAS;oBACT,SAAS;;;;;;;;;;;;;;;;;;;;;;;CAuB5B,CAAC;AAGF,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -22,7 +22,6 @@ interface GlContext {
22
22
  readonly programs: {
23
23
  [index: string]: Program;
24
24
  };
25
- readonly framebufferStack: WebGLFramebuffer[];
26
25
  readonly onContextLoss: () => void;
27
26
  }
28
27
  export type { GlContext };
@@ -12,5 +12,7 @@ interface Program {
12
12
  readonly uniformBlocks: {
13
13
  [index: string]: UniformBlock;
14
14
  };
15
+ readonly vertexShader: WebGLShader;
16
+ readonly fragmentShader: WebGLShader;
15
17
  }
16
18
  export { Program };
@@ -1 +1 @@
1
- {"version":3,"file":"calc-circs.js","sourceRoot":"","sources":["../../src/utils/calc-circs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calc-circs.js","sourceRoot":"","sources":["../../src/utils/calc-circs.ts"],"names":[],"mappings":"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"}
@@ -10,5 +10,5 @@ import type { Cell } from "../types/cell.js";
10
10
  * @param height
11
11
  * @param seg the line segment (array of 2 points)
12
12
  */
13
- declare function clipLineSegmentToGrid(grid: Cell[][], width: number, height: number, colCount: number, cellSize: number, seg: number[][], padCount: number): void;
13
+ declare function clipLineSegmentToGrid(grid: Cell[][], width: number, height: number, cellSize: number, seg: number[][], padCount: number): void;
14
14
  export { clipLineSegmentToGrid };
@@ -11,14 +11,11 @@ const { floor, ceil } = Math;
11
11
  * @param height
12
12
  * @param seg the line segment (array of 2 points)
13
13
  */
14
- function clipLineSegmentToGrid(grid, width, height, colCount, cellSize, seg, padCount) {
15
- /** `cellSize` *must* be a power of two */
16
- // const cellSize = width/ROW_COUNT;
14
+ function clipLineSegmentToGrid(grid, width, height, cellSize, seg, padCount) {
17
15
  const padding = cellSize * padCount;
18
16
  const [[x0, y0], [x1, y1]] = seg;
19
17
  const paddedWidth = width + padding;
20
18
  const paddedHeight = height + padding;
21
- // TODO - investigate lines on edge and corners - ps could be length 4!!
22
19
  const ps = segBoxX(seg, [[-padding, -padding], [paddedWidth, paddedHeight]]);
23
20
  const p0IsInBox = x0 > -padding && x0 < paddedWidth && y0 > -padding && y0 < paddedHeight;
24
21
  const p1IsInBox = x1 > -padding && x1 < paddedWidth && y1 > -padding && y1 < paddedHeight;
@@ -1 +1 @@
1
- {"version":3,"file":"clip-line-segment-to-grid.js","sourceRoot":"","sources":["../../src/utils/clip-line-segment-to-grid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clip-line-segment-to-grid.js","sourceRoot":"","sources":["../../src/utils/clip-line-segment-to-grid.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,12 @@
1
- import type { Strip } from "../types/strip.js";
2
1
  /**
3
2
  * Clips a line segment to strip boundaries and returns multiple segments.
4
3
  *
5
4
  * * modifies strips by adding line segments to each strip
6
5
  * * size/count *must* be a power of 2
7
6
  *
8
- * @param count the number of strips
7
+ * @param strips array of strips - each contains an array line segments
9
8
  * @param height the height of a strip
10
9
  * @param seg the line segment (array of 2 points)
11
10
  */
12
- declare function clipLineSegmentToStrips(strips: Strip[], height: number, seg: number[][]): void;
11
+ declare function clipLineSegmentToStrips(strips: number[][][][], height: number, seg: number[][]): void;
13
12
  export { clipLineSegmentToStrips };
@@ -6,7 +6,7 @@ const { floor, ceil } = Math;
6
6
  * * modifies strips by adding line segments to each strip
7
7
  * * size/count *must* be a power of 2
8
8
  *
9
- * @param count the number of strips
9
+ * @param strips array of strips - each contains an array line segments
10
10
  * @param height the height of a strip
11
11
  * @param seg the line segment (array of 2 points)
12
12
  */
@@ -66,7 +66,7 @@ function clipLineSegmentToStrips(strips, height, seg) {
66
66
  // if we're past the line endpoint
67
67
  if ((tX > 1 || dX === 0) && tY > 1) {
68
68
  const v = floor(p1[1] / cellSize);
69
- strips[v]?.lineSegs.push([[x, y], p1]);
69
+ strips[v]?.push([[x, y], p1]);
70
70
  break;
71
71
  }
72
72
  if (((xX >= 0 && (x0 !== 0 || dX !== 0)) || xY <= 0 || xY >= height)) {
@@ -81,70 +81,18 @@ function clipLineSegmentToStrips(strips, height, seg) {
81
81
  else {
82
82
  const v = fY(y / cellSize) - (btt ? 0 : 1); // previous v
83
83
  const seg_ = [[x, y], ps[i]];
84
- strips[v]?.lineSegs.push(seg_);
84
+ strips[v]?.push(seg_);
85
85
  break;
86
86
  }
87
87
  }
88
88
  // previous v
89
89
  const v = fY(y / cellSize) - (btt ? 0 : 1);
90
- strips[v]?.lineSegs.push([[x, y], [xX, xY]]);
90
+ strips[v]?.push([[x, y], [xX, xY]]);
91
91
  // update current position
92
92
  x = xX;
93
93
  y = xY;
94
94
  }
95
95
  }
96
96
  export { clipLineSegmentToStrips };
97
- // Quokka tests - https://www.desmos.com/calculator/uyqsdkviih
98
- // import { createEmptyStrips } from "./create-empty-strips";
99
- // {
100
- // const strips = createEmptyStrips(8);
101
- // const seg = [[0, 100], [0, 400]];
102
- // toDesmosStr(seg);
103
- // clipLineSegmentToStrips(strips, 512, seg);
104
- // testAllEmptyExcept(strips,[1,2,3,4,5,6]);
105
- // }
106
- // {
107
- // const strips = createEmptyStrips(8);
108
- // const seg = [[83, 166], [-90, 440]];
109
- // toDesmosStr(seg);
110
- // clipLineSegmentToStrips(strips, 512, seg);
111
- // testAllEmptyExcept(strips,[4,5,6]);
112
- // }
113
- // {
114
- // const strips = createEmptyStrips(8);
115
- // const seg = [[-570, 236], [-392, 546]];
116
- // toDesmosStr(seg);
117
- // clipLineSegmentToStrips(strips, 512, seg);
118
- // testAllEmptyExcept(strips,[3,4,5,6,7]);
119
- // }
120
- // {
121
- // const strips = createEmptyStrips(8);
122
- // const seg = [[-462, 632], [-152, 611]];
123
- // toDesmosStr(seg);
124
- // clipLineSegmentToStrips(strips, 512, seg);
125
- // testAllEmptyExcept(strips,[]);
126
- // }
127
- // function toDesmosStr(seg: number[][]) {
128
- // const [[x0,y0],[x1,y1]] = seg;
129
- // return `\\left(\\left(1-t\\right)\\cdot${x0.toFixed(2)}+t\\cdot\\left(${x1.toFixed(2)}\\right),\\left(1-t\\right)\\cdot${y0.toFixed(2)}+t\\cdot${y1.toFixed(2)}\\right)`;
130
- // }
131
- // function testAllEmptyExcept(
132
- // strips: Strip[],
133
- // exceptions: number[]) {
134
- // for (let i=0; i<strips.length; i++) {
135
- // const strip = strips[i];
136
- // const idx = exceptions.findIndex(v => v === i);
137
- // const exception = exceptions[idx];
138
- // const len = strip.lineSegs.length;
139
- // if (exception === undefined) {
140
- // if (len !== 0) {
141
- // throw new Error(`Strip ${i} must be empty`);
142
- // }
143
- // } else {
144
- // if (len !== 1) {
145
- // throw new Error(`Strip ${i} must contain 1 segments, found ${len}`);
146
- // }
147
- // }
148
- // }
149
- // }
97
+ var a = [[1, 1], [1, 1]];
150
98
  //# sourceMappingURL=clip-line-segment-to-strips.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clip-line-segment-to-strips.js","sourceRoot":"","sources":["../../src/utils/clip-line-segment-to-strips.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clip-line-segment-to-strips.js","sourceRoot":"","sources":["../../src/utils/clip-line-segment-to-strips.ts"],"names":[],"mappings":"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"}