UNPKG

kriging-webgl

Version:
205 lines (183 loc) 19.3 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Q=require("lru-cache");function w(t,e){return new Array(e).fill(t)}function G(t,e){const r=w(0,e*e);for(let o=0;o<e;o++)r[o*e+o]=t;return r}function J(t,e,r){const o=Array(r*e);for(let n=0;n<e;n++)for(let f=0;f<r;f++)o[f*e+n]=t[n*r+f];return o}function M(t,e,r,o){const n=Array(r*o);for(let f=0;f<r;f++)for(let l=0;l<o;l++){const u=f*o+l;n[u]=t[u]+e[u]}return n}function v(t,e,r,o,n){const f=Array(r*n).fill(0);for(let l=0;l<r;l++)for(let u=0;u<n;u++)for(let i=0,s=l*n+u;i<o;i++)f[s]+=t[l*o+i]*e[i*n+u];return f}function O(t,e){const r=Array(e);for(let o=0;o<e;o++)r[o]=t[o*e+o];for(let o=0;o<e;o++){for(let n=0;n<o;n++)r[o]-=t[o*e+n]**2;if(r[o]<=0)return!1;r[o]=Math.sqrt(r[o]);for(let n=o+1;n<e;n++){for(let f=0;f<o;f++)t[n*e+o]-=t[n*e+f]*t[o*e+f];t[n*e+o]/=r[o]}}for(let o=0;o<e;o++)t[o*e+o]=r[o];return!0}function X(t,e){let r,o,n,f;for(r=0;r<e;r++)for(t[r*e+r]=1/t[r*e+r],o=r+1;o<e;o++){for(f=0,n=r;n<o;n++)f-=t[o*e+n]*t[n*e+r];t[o*e+r]=f/t[o*e+o]}for(r=0;r<e;r++)for(o=r+1;o<e;o++)t[r*e+o]=0;for(r=0;r<e;r++){for(t[r*e+r]*=t[r*e+r],n=r+1;n<e;n++)t[r*e+r]+=t[n*e+r]*t[n*e+r];for(o=r+1;o<e;o++)for(n=o;n<e;n++)t[r*e+o]+=t[n*e+r]*t[n*e+o]}for(r=0;r<e;r++)for(o=0;o<r;o++)t[r*e+o]=t[o*e+r]}function z(t,e){let r=e,o=Array(e*e),n=Array(e),f=Array(e),l=Array(e),u,i,s,c,_,a,m,d,g,p,E;for(u=0;u<e;u++)for(c=0;c<e;c++)u==c?o[u*e+c]=1:o[u*e+c]=0;for(c=0;c<e;c++)l[c]=0;for(u=0;u<e;u++){for(d=0,c=0;c<e;c++)if(l[c]!=1)for(_=0;_<e;_++)l[_]==0&&Math.abs(t[c*e+_])>=d&&(d=Math.abs(t[c*e+_]),s=c,i=_);if(++l[i],s!=i){for(a=0;a<e;a++)E=t[s*e+a],t[s*e+a]=t[i*e+a],t[i*e+a]=E;for(a=0;a<r;a++)E=o[s*e+a],o[s*e+a]=o[i*e+a],o[i*e+a]=E}if(f[u]=s,n[u]=i,t[i*e+i]==0)return!1;for(p=1/t[i*e+i],t[i*e+i]=1,a=0;a<e;a++)t[i*e+a]*=p;for(a=0;a<r;a++)o[i*e+a]*=p;for(m=0;m<e;m++)if(m!=i){for(g=t[m*e+i],t[m*e+i]=0,a=0;a<e;a++)t[m*e+a]-=t[i*e+a]*g;for(a=0;a<r;a++)o[m*e+a]-=o[i*e+a]*g}}for(a=e-1;a>=0;a--)if(f[a]!=n[a])for(_=0;_<e;_++)E=t[_*e+f[a]],t[_*e+f[a]]=t[_*e+n[a]],t[_*e+n[a]]=E;return!0}function ee(t,e,r,o,n){return e+(o-e)/r*(1-Math.exp(-(1/n)*Math.pow(t/r,2)))}function te(t,e,r,o,n){return e+(o-e)/r*(1-Math.exp(-(1/n)*(t/r)))}function re(t,e,r,o,n){return t>r?e+(o-e)/r:e+(o-e)/r*(1.5*(t/r)-.5*Math.pow(t/r,3))}function W(t){switch(t){case"gaussian":return ee;case"exponential":return te;case"spherical":return re}}function oe(t,e,r,o,n,f){const l={t,x:e,y:r,nugget:0,range:0,sill:0,A:.3333333333333333,n:0,model:o},u=W(o);var i,s,c,_,a=t.length,m=Array((a*a-a)/2);for(i=0,c=0;i<a;i++)for(s=0;s<i;s++,c++)m[c]=Array(2),m[c][0]=Math.pow(Math.pow(e[i]-e[s],2)+Math.pow(r[i]-r[s],2),.5),m[c][1]=Math.abs(t[i]-t[s]);m.sort(function(q,Z){return q[0]-Z[0]}),l.range=m[(a*a-a)/2-1][0];var d=(a*a-a)/2>30?30:(a*a-a)/2,g=l.range/d,p=w(0,d),E=w(0,d);if(d<30)for(_=0;_<d;_++)p[_]=m[_][0],E[_]=m[_][1];else{for(i=0,s=0,c=0,_=0;i<d&&s<(a*a-a)/2;i++,c=0){for(;m[s][0]<=(i+1)*g&&(p[_]+=m[s][0],E[_]+=m[s][1],s++,c++,!(s>=(a*a-a)/2)););c>0&&(p[_]/=c,E[_]/=c,_++)}if(_<2)return l}a=_,l.range=p[a-1]-p[0];var b=w(1,2*a),D=Array(a),P=l.A;for(i=0;i<a;i++){switch(o){case"gaussian":b[i*2+1]=1-Math.exp(-(1/P)*Math.pow(p[i]/l.range,2));break;case"exponential":b[i*2+1]=1-Math.exp(-(1/P)*p[i]/l.range);break;case"spherical":b[i*2+1]=1.5*(p[i]/l.range)-.5*Math.pow(p[i]/l.range,3);break}D[i]=E[i]}var B=J(b,a,2),x=v(B,b,2,a,2);x=M(x,G(1/f,2),2,2);var L=x.slice(0);O(x,2)?X(x,2):(z(L,2),x=L);var I=v(v(x,B,2,2,a),D,2,a,1);l.nugget=I[0],l.sill=I[1]*l.range+l.nugget,l.n=e.length,a=e.length;var R=Array(a*a);for(i=0;i<a;i++){for(s=0;s<i;s++)R[i*a+s]=u(Math.pow(Math.pow(e[i]-e[s],2)+Math.pow(r[i]-r[s],2),.5),l.nugget,l.range,l.sill,l.A),R[s*a+i]=R[i*a+s];R[i*a+i]=u(0,l.nugget,l.range,l.sill,l.A)}var h=M(R,G(n,a),a,a),N=h.slice(0);O(h,a)?X(h,a):(z(N,a),h=N);var R=h.slice(0),H=v(h,t,a,a,1);return l.K=R,l.M=H,l}function ae(t,e,r){const o=Array(r.n),n=W(r.model);for(let f=0;f<r.n;f++)o[f]=n(Math.hypot(t-r.x[f],e-r.y[f]),r.nugget,r.range,r.sill,r.A);return v(o,r.M,1,r.n,1)[0]}const j=typeof importScripts<"u",S=typeof OffscreenCanvas<"u",F={gaussian:1,exponential:2,spherical:3},U={"packed-imagebitmap":1,"value-buffer":2,imagebitmap:3},A=256;class k{_model;_n;_params;_texture;_textureSize;dispose}class y{_texture;_textureSize;_stopCount;dispose}const ie=(()=>{let t=!1,e,r;const o={};return n=>{if(t||(e=j?new OffscreenCanvas(1,1):document.createElement("canvas"),e.width=e.height=1,r=e.getContext("2d",{willReadFrequently:!0}),t=!0),!o[n]){r.fillStyle=n,r.fillRect(0,0,1,1);const[f,l,u,i]=r.getImageData(0,0,1,1).data;o[n]=[f,l,u,i]}return o[n]}})();function ne(){let t,e;return{promise:new Promise((o,n)=>{t=o,e=n}),resolve:t,reject:e}}function le(t){return t&7?t&3?t&1?1:2:4:8}function ue(t){if(!t)throw new Error("长度不存在!");const e=fe(Math.ceil(t)),r=Math.log2(e),o=Math.ceil(r/2),n=r-o;return[2**o,2**n]}function fe(t){return t&t-1?(t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t+1):t===0?1:t}function T(t,e){if(!t)throw new Error(e)}const $=` vec4 packNormalizeFloatToRGBA( in float v ) { vec4 enc = vec4(v, fract(vec3(255.0, 65025.0, 16581375.0) * v)); enc.xyz -= enc.yzw / 255.0; return enc; } float unpackRGBAToNormalizeFloat( const in vec4 v ) { return dot(v, vec4(1, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)); } vec3 packNormalizeFloatToRGB( in float v ) { return packNormalizeFloatToRGBA( v ).xyz; } float unpackRGBToNormalizeFloat( const in vec3 v ) { return unpackRGBAToNormalizeFloat( vec4( v, 0 ) ); } `,ce=` #define MODEL_GAUSSIAN ${F.gaussian.toFixed(1)} #define MODEL_EXPONENTIAL ${F.exponential.toFixed(1)} #define MODEL_SPHERICAL ${F.spherical.toFixed(1)} struct Variogram { float nugget; float range; float sill; float A; }; float variogram_gaussian(float h, const Variogram p){ float i = -(1.0 / p.A) * pow(h / p.range, 2.0); return p.nugget + ((p.sill - p.nugget) / p.range) * (1.0 - exp(i)); } float variogram_exponential(float h, const Variogram p){ float i = -(1.0 / p.A) * (h / p.range); return p.nugget + ((p.sill - p.nugget) / p.range) * (1.0 - exp(i)); } float variogram_spherical(float h, const Variogram p){ if (h > p.range) return p.nugget + (p.sill - p.nugget) / p.range; return p.nugget + ((p.sill - p.nugget) / p.range) * (1.5 * (h / p.range) - 0.5 * pow(h / p.range, 3.0)); } float modelValue(float model, float h, const Variogram p){ return model == MODEL_GAUSSIAN ? variogram_gaussian(h, p) : model == MODEL_EXPONENTIAL ? variogram_exponential(h, p) : variogram_spherical(h, p); }`,se=` struct Node { float min; float max; vec4 color; }; Node decode_classbreak(vec4 data){ float pack_rg = data.b; float pack_ba = data.a; vec4 color = vec4( floor(pack_rg), clamp(fract(pack_rg) * 1000.0, 0.0, 255.0), floor(pack_ba), clamp(fract(pack_ba) * 1000.0, 0.0, 255.0) ) / 255.0; return Node(data.r, data.g, color); } vec4 mappingColor( sampler2D map, int stopCount, float value ){ int left = 0; int right = stopCount - 1; vec4 headColor = vec4(0); vec4 tailColor = vec4(0); for(int i = 0; i < ${Math.log2(A)}; i++){ if(left > right) break; int middle = (left + right) / 2; float x = (float(middle) + 0.5) / ${A.toFixed(1)}; vec4 encodeData = texture2D(map, vec2(x, 0.5)); Node node = decode_classbreak(encodeData); if(middle == 0) headColor = node.color; if(middle == ${A} - 1) tailColor = node.color; if(node.min > value){ right = middle - 1; }else if(node.max <= value){ left = middle + 1; }else{ return node.color; } } if(right < 0) return headColor; if(left >= stopCount) return tailColor; } `,_e=` #define PACKED_IMAGEBITMAP ${U["packed-imagebitmap"].toFixed(1)} #define VALUE_BUFFER ${U["value-buffer"].toFixed(1)} #define IMAGEBITMA ${U.imagebitmap.toFixed(1)} #ifdef webgl2 layout(std140) uniform DefaultUBO { vec3 u_gridInfo; float u_dimension; vec2 u_variogramMxySize; vec2 u_packValueRange; vec4 u_variogramParam; float u_model; float u_classbreakCount; float u_outputFormat; }; #else uniform vec3 u_gridInfo; // xmin, ymin, cellSize uniform float u_dimension; uniform vec2 u_variogramMxySize; uniform vec2 u_packValueRange; uniform vec4 u_variogramParam; //nugget, range, sill, A uniform float u_model; uniform float u_classbreakCount; uniform float u_outputFormat; #endif uniform sampler2D u_variogramMxyTexture; uniform sampler2D u_colormappingTexture; ${$} ${ce} ${se} vec3 lookup(float index){ float col = mod(index, u_variogramMxySize.x); float row = floor(index / u_variogramMxySize.x); vec2 pixel = 1.0 / u_variogramMxySize; vec2 uv = vec2(col, row) * pixel + pixel * 0.5; return texture2D(u_variogramMxyTexture, uv).xyz; } float hypot(float a, float b){ return pow(pow(a,2.0) + pow(b,2.0), 0.5); } void main(){ Variogram variogram = Variogram( u_variogramParam.x, u_variogramParam.y, u_variogramParam.z, u_variogramParam.w ); vec2 inputCoord = gl_FragCoord.xy * u_gridInfo.z + u_gridInfo.xy; int max_i = int(u_dimension); float sum = 0.0; for(int i = 0; i < 1024; i++){ if(i == max_i) break; vec3 mxy = lookup(float(i)); sum += modelValue( u_model, hypot(inputCoord.x - mxy[1], inputCoord.y - mxy[2]), variogram ) * mxy[0]; } if(u_outputFormat == PACKED_IMAGEBITMAP){ float normalizedSum = (sum - u_packValueRange.x) / (u_packValueRange.y - u_packValueRange.x); gl_FragColor.rgb = packNormalizeFloatToRGB(normalizedSum); gl_FragColor.a = 1.0; }else if(u_outputFormat == VALUE_BUFFER){ gl_FragColor = vec4(sum, 0, 0, 1); }else{ gl_FragColor = mappingColor(u_colormappingTexture, int(u_classbreakCount), sum); } } `;function me(){let t;j?(T(S,"OffscreenCanvas unsupport"),t=new OffscreenCanvas(1,1)):t=S?new OffscreenCanvas(1,1):document.createElement("canvas");const e={alpha:!1,depth:!1,stencil:!1},r=t.getContext("webgl2",e)||t.getContext("webgl",e);T(!!r,"webgl unsupport");const o=typeof WebGL2RenderingContext<"u"&&r instanceof WebGL2RenderingContext,n={};return{canvas:t,gl:r,isWEBGL2:o,getExtension:l=>n[l]??=r.getExtension(l)??!1}}let ge;function C(){return ge??=me()}function V(t,e,r){const o=t.createShader(e);if(t.shaderSource(o,r),t.compileShader(o),t.getShaderParameter(o,t.COMPILE_STATUS))return o;const f=t.getShaderInfoLog(o);throw t.deleteShader(o),new Error(f)}function pe(t,[e,r]){const o=t.createProgram(),n=V(t,t.VERTEX_SHADER,e),f=V(t,t.FRAGMENT_SHADER,r);t.attachShader(o,n),t.attachShader(o,f),t.linkProgram(o);const l=t.getProgramParameter(o,t.LINK_STATUS);if(t.deleteShader(n),t.deleteShader(f),l)return o;const u=t.getProgramInfoLog(o);throw t.deleteProgram(o),new Error(u)}function K(t){const{gl:e,getExtension:r,isWEBGL2:o}=C();T(t?.length&&t.length<=256,"stops length must in [1, 256]");for(let u=0;u<t.length;u++){const{min:i,max:s,color:c}=t[u];if(T(i<s,"stop not satisify: min < max"),T(!!c,"stop color not exist"),u===0)continue;const _=t[u-1];T(_.max===i,"stop not satisify item[i].max == item[i+1].min")}const n=new Float32Array(A*4);for(let u=0;u<t.length;u++){const{min:i,max:s,color:c}=t[u],[_,a,m,d]=ie(c),g=u*4;n[g]=i,n[g+1]=s,n[g+2]=_+a/1e3,n[g+3]=m+d/1e3}o||T(r("OES_texture_float"),"webgl float texture unsupport");const f=e.createTexture();e.bindTexture(e.TEXTURE_2D,f),e.pixelStorei(e.UNPACK_ALIGNMENT,8),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texImage2D(e.TEXTURE_2D,0,o?e.RGBA32F:e.RGBA,A,1,0,e.RGBA,e.FLOAT,n),e.bindTexture(e.TEXTURE_2D,null);const l=new y;return l._texture=f,l._textureSize=[A,1],l._stopCount=t.length,l.dispose=()=>e.deleteTexture(f),l}function Y(t){const{gl:e,getExtension:r,isWEBGL2:o}=C();T(t.n<=1024,"Supports up to 1024 points");const[n,f]=ue(t.n),{M:l,x:u,y:i}=t,s=new Float32Array(n*f*4);for(let a=0;a<t.n;a++){const m=a*4;s[m]=l[a],s[m+1]=u[a],s[m+2]=i[a]}o||T(r("OES_texture_float"),"webgl float texture unsupport");const c=e.createTexture();e.bindTexture(e.TEXTURE_2D,c),e.pixelStorei(e.UNPACK_ALIGNMENT,le(n)),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texImage2D(e.TEXTURE_2D,0,o?e.RGBA32F:e.RGBA,n,f,0,e.RGBA,e.FLOAT,s),e.bindTexture(e.TEXTURE_2D,null);const _=new k;return _._model=t.model,_._n=t.n,_._params=[t.nugget,t.range,t.sill,t.A],_._texture=c,_._textureSize=[n,f],_.dispose=()=>e.deleteTexture(c),_}let de;function Ee(){return de??=Te()}function Te(){const{gl:t,isWEBGL2:e,getExtension:r}=C(),o=e?`#version 300 es #define attribute in #define varying out #define webgl2 `:"",n=e?`#version 300 es #define varying in #define webgl2 #define texture2D texture #define gl_FragColor out_color precision highp float; precision highp sampler2D; out vec4 out_color; `:` #ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; precision highp sampler2D; #else precision mediump float; precision mediump sampler2D; #endif `,f=o+` attribute vec2 position; void main(){ gl_Position = vec4(position * 2.0 - 1.0, 0, 1); } `,l=n+_e,u=pe(t,[f,l]);t.useProgram(u);const i=t.getAttribLocation(u,"position"),s=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,s),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,1,0,1,1,0,0,1,1,0,1]),t.STATIC_DRAW),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,2,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,null);const c=new Q.LRUCache({max:10,dispose:({fbo:a,attachment:m})=>{t.deleteFramebuffer(a),t.deleteTexture(m)}});return{setUniforms:xe(u),createBufferRT:_};function _(a,m){const d=`${a}-${m}`;if(c.has(d))return c.get(d);const g=t.createTexture();t.bindTexture(t.TEXTURE_2D,g),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e?T(r("EXT_color_buffer_float"),"webgl2 EXT_color_buffer_float unsupport"):T(r("OES_texture_float"),"webgl float texture unsupport"),t.texImage2D(t.TEXTURE_2D,0,e?t.R32F:t.RGBA,a,m,0,e?t.RED:t.RGBA,t.FLOAT,null);const p=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,p),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,g,0),t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null);const E={fbo:p,attachment:g};return c.set(d,E),E}}function xe(t){const{gl:e,isWEBGL2:r}=C(),o=e.getUniformLocation(t,"u_variogramMxyTexture"),n=e.getUniformLocation(t,"u_colormappingTexture");if(e.uniform1i(o,0),e.uniform1i(n,1),r){const f=e.createBuffer();e.bindBuffer(e.UNIFORM_BUFFER,f),e.bufferData(e.UNIFORM_BUFFER,16*Float32Array.BYTES_PER_ELEMENT,e.DYNAMIC_DRAW);const l=e.getUniformBlockIndex(t,"DefaultUBO");return e.uniformBlockBinding(t,l,0),e.bindBufferBase(e.UNIFORM_BUFFER,0,f),({outputFormat:u,variogram:i,packValueRange:s,llCorner:c,cellSize:_,colorMapping:a})=>{e.bindBuffer(e.UNIFORM_BUFFER,f),e.bufferSubData(e.UNIFORM_BUFFER,0,new Float32Array([c[0],c[1],_,i._n,i._textureSize[0],i._textureSize[1],u==="packed-imagebitmap"?s[0]:NaN,u==="packed-imagebitmap"?s[1]:NaN,i._params[0],i._params[1],i._params[2],i._params[3],F[i._model],u==="imagebitmap"?a._stopCount:NaN,U[u],NaN])),e.bindBuffer(e.UNIFORM_BUFFER,null),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,i._texture),u==="imagebitmap"&&(e.activeTexture(e.TEXTURE0+1),e.bindTexture(e.TEXTURE_2D,a._texture))}}else{const l=["outputFormat","gridInfo","dimension","variogramMxySize","packValueRange","variogramParam","model","classbreakCount"].reduce((u,i)=>(u[i]=e.getUniformLocation(t,"u_"+i),u),{});return({outputFormat:u,variogram:i,packValueRange:s,llCorner:c,cellSize:_,colorMapping:a})=>{e.uniform3fv(l.gridInfo,[c[0],c[1],_]),e.uniform1f(l.dimension,i._n),e.uniform2fv(l.variogramMxySize,i._textureSize),u==="packed-imagebitmap"&&e.uniform2fv(l.packValueRange,s),e.uniform4fv(l.variogramParam,i._params),e.uniform1f(l.model,F[i._model]),u==="imagebitmap"&&(e.uniform1f(l.classbreakCount,a._stopCount),e.activeTexture(e.TEXTURE0+1),e.bindTexture(e.TEXTURE_2D,a._texture)),e.uniform1f(l.outputFormat,U[u]),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,i._texture)}}}function Re(t){const e=[];let r;return(...n)=>{const{promise:f,resolve:l,reject:u}=ne(),i={resolve:l,reject:u,args:n};return e.unshift(i),Promise.resolve().then(o),f.cancel=()=>{if(u(),i!==r){const s=e.findIndex(c=>c===i);e.splice(s,1)}},f};function o(){r||e.length&&(r=e.pop(),t.apply(null,r.args).then(n=>r.resolve(n)).catch(n=>r.reject(n)).finally(()=>{r=null,o()}))}}function he(t){const{gl:e,canvas:r,isWEBGL2:o}=C(),{createBufferRT:n,setUniforms:f}=Ee(),{llCorner:l,gridSize:u,cellSize:i,packValueRange:s,outputFormat:c}=t;T(u[0]>0&&u[1]>0,"gridsize can not be 0");const _=t.variogram instanceof k?t.variogram:Y(t.variogram),a=c==="imagebitmap"?t.colorMapping instanceof y?t.colorMapping:K(t.colorMapping):null;r.width=u[0],r.height=u[1];let m;if(c==="value-buffer"?(m=n(r.width,r.height),e.bindFramebuffer(e.FRAMEBUFFER,m.fbo)):e.bindFramebuffer(e.FRAMEBUFFER,null),e.viewport(0,0,r.width,r.height),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),f({outputFormat:c,variogram:_,packValueRange:s,llCorner:l,cellSize:i,colorMapping:a}),e.drawArrays(e.TRIANGLES,0,6),c!=="value-buffer")return d(),S?Promise.resolve(r.transferToImageBitmap()):createImageBitmap(r,{imageOrientation:"none"});{let g;if(o)g=new Float32Array(r.width*r.height),e.readPixels(0,0,r.width,r.height,e.RED,e.FLOAT,g);else{g=new Float32Array(r.width*r.height);const p=new Float32Array(r.width*r.height*4);e.readPixels(0,0,r.width,r.height,e.RGBA,e.FLOAT,p);for(let E=0;E<p.length;E+=4)g[E/4]=p[E]}return d(),Promise.resolve(g)}function d(){t.variogram instanceof k||_.dispose(),c==="imagebitmap"&&!(t.colorMapping instanceof y)&&a.dispose()}}const Ae=Re(he);exports.createColorMappingObject=K;exports.createVariogramObject=Y;exports.generate_WEBGL=Ae;exports.glsl_pack=$;exports.predict=ae;exports.train=oe;