2 lines
10 KiB
JavaScript
2 lines
10 KiB
JavaScript
|
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).webgl_sdf_generator=t()}(this,(function(){"use strict";return function(){var e=function(e){function t(e,t,n,r,a,i,o,l,c,u){var s=1-c;u.x=s*s*s*e+3*s*s*c*n+3*s*c*c*a+c*c*c*o,u.y=s*s*s*t+3*s*s*c*r+3*s*c*c*i+c*c*c*l}function n(e,t){for(var n,r,a,i,o,l=/([MLQCZ])([^MLQCZ]*)/g;n=l.exec(e);){var c=n[2].replace(/^\s*|\s*$/g,"").split(/[,\s]+/).map((function(e){return parseFloat(e)}));switch(n[1]){case"M":i=r=c[0],o=a=c[1];break;case"L":c[0]===i&&c[1]===o||t("L",i,o,i=c[0],o=c[1]);break;case"Q":t("Q",i,o,i=c[2],o=c[3],c[0],c[1]);break;case"C":t("C",i,o,i=c[4],o=c[5],c[0],c[1],c[2],c[3]);break;case"Z":i===r&&o===a||t("L",i,o,r,a)}}}function r(e,r,a){void 0===a&&(a=16);var i={x:0,y:0};n(e,(function(e,n,o,l,c,u,s,f,v){switch(e){case"L":r(n,o,l,c);break;case"Q":for(var d=n,g=o,p=1;p<a;p++)E=o,b=s,y=c,_=void 0,_=1-(T=p/(a-1)),(A=i).x=_*_*n+2*_*T*u+T*T*l,A.y=_*_*E+2*_*T*b+T*T*y,r(d,g,i.x,i.y),d=i.x,g=i.y;break;case"C":for(var m=n,h=o,x=1;x<a;x++)t(n,o,u,s,f,v,l,c,x/(a-1),i),r(m,h,i.x,i.y),m=i.x,h=i.y}var E,b,y,T,A,_}))}var a="precision highp float;attribute vec2 aUV;varying vec2 vUV;void main(){vUV=aUV;gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}",i=new WeakMap,o={premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1};function l(e,t){var n=e.getContext?e.getContext("webgl",o):e,r=i.get(n);if(!r){var a="undefined"!=typeof WebGL2RenderingContext&&n instanceof WebGL2RenderingContext,l={},c={},u={},s=-1,f=[];function e(e){var t=l[e];if(!t&&!(t=l[e]=n.getExtension(e)))throw new Error(e+" not supported");return t}function t(e,t){var r=n.createShader(t);return n.shaderSource(r,e),n.compileShader(r),r}function o(r,i,o,l){if(!c[r]){var u={},s={},f=n.createProgram();n.attachShader(f,t(i,n.VERTEX_SHADER)),n.attachShader(f,t(o,n.FRAGMENT_SHADER)),n.linkProgram(f),c[r]={program:f,transaction:function(t){n.useProgram(f),t({setUniform:function(e,t){for(var r=[],a=arguments.length-2;a-- >0;)r[a]=arguments[a+2];var i=s[t]||(s[t]=n.getUniformLocation(f,t));n["uniform"+e].apply(n,[i].concat(r))},setAttribute:function(t,r,i,o,l){var c=u[t];c||(c=u[t]={buf:n.createBuffer(),loc:n.getAttribLocation(f,t),data:null}),n.bindBuffer(n.ARRAY_BUFFER,c.buf),n.vertexAttribPointer(c.loc,r,n.FLOAT,!1,0,0),n.enableVertexAttribArray(c.loc),a?n.vertexAttribDivisor(c.loc,o):e("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(c.loc,o),l!==c.data&&(n.bufferData(n.ARRAY_BUFFER,l,i),c.data=l)}})}}}c[r].transaction(l)}function v(e,t){s++;try{n.activeTexture(n.TEXTURE0+s);var r=u[e];r||(r=u[e]=n.createTexture(),n.bindTexture(n.TEXTURE_2D,r),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST)),n.bindTexture(n.TEXTURE_2D,r),t(r,s)}finally{s--}}function d(e,t,r){var a=n.createFramebuffer();f.push(a),n.bindFramebuffer(n.FRAMEBUFFER,a),n.activeTexture(n.TEXTURE0+t),n.bindTexture(n.TEXTURE_2D,e),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,e,0);try{r(a)}finally{n.deleteFramebuffer(a),n.bindFramebuffer(n.FRAMEBUFFER,f[--f.length-1]||null)}}function g(){l={},c={},u={},s=-1,f.length=0}n.canvas.addEventListener("webglcontextlost",(function(e){g(),e.preventDefault()}),!1),i.set(n,r={gl:n,isWebGL2:a,getExtension:e,withProgram:o,withTexture:v,withTextureFramebuffer:d,handleContextLoss:g})}t(r)}function c(e,t,n,r,i,o,c,u){void 0===c&&(c=15),void 0===u&&(u=null),l(e,(function(e){var l=e.gl,s=e.withProgram;(0,e.withTexture)("copy",(function(e,f){l.texImage2D(l.TEXTURE_2D,0,l.RGBA,i,o,0,l.RGBA,l.UNSIGNED_BYTE,t),s("copy",a,"precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){gl_FragColor=texture2D(tex,vUV);}",(function(e){var t=e.setUniform;(0,e.setAttribute)("aUV",2,l.STATIC_DRAW,0,new Float32Array([0,0,2,0,0,2])),t("1i","image",f),l.bindFramebuffer(l.FRAMEBUFFER,u||null),l.disable(l.BLEND),l.colorMask(8&c,4&c,2&c,1&c),l.viewport(n,r,i,o),l.scissor(n,r,i,o),l.drawA
|