@deck.gl/extensions 9.0.0-beta.6 → 9.0.0-beta.8

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.
package/dist.min.js CHANGED
@@ -4,7 +4,7 @@
4
4
  else if (typeof define === 'function' && define.amd) define([], factory);
5
5
  else if (typeof exports === 'object') exports['deck'] = factory();
6
6
  else root['deck'] = factory();})(globalThis, function () {
7
- "use strict";var __exports__=(()=>{var Ct=Object.create;var $=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var kt=Object.getOwnPropertyNames;var Nt=Object.getPrototypeOf,wt=Object.prototype.hasOwnProperty;var Oe=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ie=(r,e)=>{for(var t in e)$(r,t,{get:e[t],enumerable:!0})},Z=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of kt(e))!wt.call(r,s)&&s!==t&&$(r,s,{get:()=>e[s],enumerable:!(i=St(e,s))||i.enumerable});return r},P=(r,e,t)=>(Z(r,e,"default"),t&&Z(t,e,"default")),d=(r,e,t)=>(t=r!=null?Ct(Nt(r)):{},Z(e||!r||!r.__esModule?$(t,"default",{value:r,enumerable:!0}):t,r)),Bt=r=>Z($({},"__esModule",{value:!0}),r);var m=Oe((gi,Re)=>{Re.exports=globalThis.deck});var Ue=Oe((Ei,Ge)=>{Ge.exports=globalThis.luma});var Y={};Ie(Y,{BrushingExtension:()=>L,ClipExtension:()=>D,CollisionFilterExtension:()=>G,DataFilterExtension:()=>O,FillStyleExtension:()=>B,Fp64Extension:()=>S,MaskExtension:()=>U,PathStyleExtension:()=>N,_TerrainExtension:()=>H,project64:()=>oe});var g={},Ce=d(m(),1);P(g,d(m(),1));if(!Ce.Layer)throw new Error("@deck.gl/core is not found");P(Y,g);var Ne=d(m(),1);var Se=d(m(),1);var Dt=`
7
+ "use strict";var __exports__=(()=>{var Rt=Object.create;var $=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var kt=Object.getPrototypeOf,Nt=Object.prototype.hasOwnProperty;var Le=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Oe=(r,e)=>{for(var t in e)$(r,t,{get:e[t],enumerable:!0})},Z=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of St(e))!Nt.call(r,s)&&s!==t&&$(r,s,{get:()=>e[s],enumerable:!(i=Ct(e,s))||i.enumerable});return r},P=(r,e,t)=>(Z(r,e,"default"),t&&Z(t,e,"default")),d=(r,e,t)=>(t=r!=null?Rt(kt(r)):{},Z(e||!r||!r.__esModule?$(t,"default",{value:r,enumerable:!0}):t,r)),Bt=r=>Z($({},"__esModule",{value:!0}),r);var m=Le((vi,Ie)=>{Ie.exports=globalThis.deck});var Ge=Le((bi,ze)=>{ze.exports=globalThis.luma});var Y={};Oe(Y,{BrushingExtension:()=>L,ClipExtension:()=>D,CollisionFilterExtension:()=>G,DataFilterExtension:()=>O,FillStyleExtension:()=>w,Fp64Extension:()=>S,MaskExtension:()=>U,PathStyleExtension:()=>N,_TerrainExtension:()=>H,project64:()=>se});var g={},Re=d(m(),1);P(g,d(m(),1));if(!Re.Layer)throw new Error("@deck.gl/core is not found");P(Y,g);var ke=d(m(),1);var Ce=d(m(),1);var wt=`
8
8
  uniform bool brushing_enabled;
9
9
  uniform int brushing_target;
10
10
  uniform vec2 brushing_mousePos;
@@ -30,10 +30,10 @@ return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);
30
30
  void brushing_setVisible(bool visible) {
31
31
  brushing_isVisible = float(visible);
32
32
  }
33
- `,Vt=`
33
+ `,Dt=`
34
34
  uniform bool brushing_enabled;
35
35
  in float brushing_isVisible;
36
- `,jt={source:0,target:1,custom:2,source_target:3},zt={"vs:DECKGL_FILTER_GL_POSITION":`
36
+ `,Vt={source:0,target:1,custom:2,source_target:3},jt={"vs:DECKGL_FILTER_GL_POSITION":`
37
37
  vec2 brushingTarget;
38
38
  vec2 brushingSource;
39
39
  if (brushing_target == 3) {
@@ -61,7 +61,7 @@ brushing_setVisible(visible);
61
61
  if (brushing_enabled && brushing_isVisible < 0.5) {
62
62
  discard;
63
63
  }
64
- `},ke={name:"brushing",dependencies:[Se.project],vs:Dt,fs:Vt,inject:zt,getUniforms:r=>{if(!r||!("viewport"in r))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:i="source",mousePosition:s,viewport:o}=r;return{brushing_enabled:Boolean(e&&s&&o.containsPixel(s)),brushing_radius:t,brushing_target:jt[i]||0,brushing_mousePos:s?o.unproject([s.x-o.x,s.y-o.y]):[0,0]}}};var Gt={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},X=class extends Ne.LayerExtension{getShaders(){return{modules:[ke]}}initializeState(e,t){let i=this.getAttributeManager();i&&i.add({brushingTargets:{size:2,accessor:"getBrushingTarget",shaderAttributes:{brushingTargets:{divisor:0},instanceBrushingTargets:{divisor:1}}}});let s=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=s,e.deck&&e.deck.eventManager.on({pointermove:s,pointerleave:s})}finalizeState(e,t){if(e.deck){let i=this.state.onMouseMove;e.deck.eventManager.off({pointermove:i,pointerleave:i})}}},L=X;(()=>{X.defaultProps=Gt})(),(()=>{X.extensionName="BrushingExtension"})();var b=d(m(),1);var we=`
64
+ `},Se={name:"brushing",dependencies:[Ce.project],vs:wt,fs:Dt,inject:jt,getUniforms:r=>{if(!r||!("viewport"in r))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:i="source",mousePosition:s,viewport:o}=r;return{brushing_enabled:Boolean(e&&s&&o.containsPixel(s)),brushing_radius:t,brushing_target:Vt[i]||0,brushing_mousePos:s?o.unproject([s.x-o.x,s.y-o.y]):[0,0]}}};var zt={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},X=class extends ke.LayerExtension{getShaders(){return{modules:[Se]}}initializeState(e,t){let i=this.getAttributeManager();i&&i.add({brushingTargets:{size:2,accessor:"getBrushingTarget",shaderAttributes:{brushingTargets:{divisor:0},instanceBrushingTargets:{divisor:1}}}});let s=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=s,e.deck&&e.deck.eventManager.on({pointermove:s,pointerleave:s})}finalizeState(e,t){if(e.deck){let i=this.state.onMouseMove;e.deck.eventManager.off({pointermove:i,pointerleave:i})}}},L=X;(()=>{X.defaultProps=zt})(),(()=>{X.extensionName="BrushingExtension"})();var b=d(m(),1);var Ne=`
65
65
  uniform DATAFILTER_TYPE filter_min;
66
66
  uniform DATAFILTER_TYPE filter_softMin;
67
67
  uniform DATAFILTER_TYPE filter_softMax;
@@ -137,7 +137,7 @@ dataFilter_value = 1.0;
137
137
  `,Be=`
138
138
  uniform bool filter_transformColor;
139
139
  in float dataFilter_value;
140
- `;function De(r){if(!r||!("extensions"in r))return{};let{filterRange:e=[-1,1],filterEnabled:t=!0,filterTransformSize:i=!0,filterTransformColor:s=!0}=r,o=r.filterSoftRange||e;return{...Number.isFinite(e[0])?{filter_min:e[0],filter_softMin:o[0],filter_softMax:o[1],filter_max:e[1]}:{filter_min:e.map(n=>n[0]),filter_softMin:o.map(n=>n[0]),filter_softMax:o.map(n=>n[1]),filter_max:e.map(n=>n[1])},filter_enabled:t,filter_useSoftMargin:Boolean(r.filterSoftRange),filter_transformSize:t&&i,filter_transformColor:t&&s}}function Ut(r){if(!r||!("extensions"in r))return{};let e=De(r);if(Number.isFinite(e.filter_min)){let t=Math.fround(e.filter_min);e.filter_min-=t,e.filter_softMin-=t,e.filter_min64High=t;let i=Math.fround(e.filter_max);e.filter_max-=i,e.filter_softMax-=i,e.filter_max64High=i}else{let t=e.filter_min.map(Math.fround);e.filter_min=e.filter_min.map((s,o)=>s-t[o]),e.filter_softMin=e.filter_softMin.map((s,o)=>s-t[o]),e.filter_min64High=t;let i=e.filter_max.map(Math.fround);e.filter_max=e.filter_max.map((s,o)=>s-i[o]),e.filter_softMax=e.filter_softMax.map((s,o)=>s-i[o]),e.filter_max64High=i}return e}var Ve={"vs:#main-start":`
140
+ `;function we(r){if(!r||!("extensions"in r))return{};let{filterRange:e=[-1,1],filterEnabled:t=!0,filterTransformSize:i=!0,filterTransformColor:s=!0}=r,o=r.filterSoftRange||e;return{...Number.isFinite(e[0])?{filter_min:e[0],filter_softMin:o[0],filter_softMax:o[1],filter_max:e[1]}:{filter_min:e.map(n=>n[0]),filter_softMin:o.map(n=>n[0]),filter_softMax:o.map(n=>n[1]),filter_max:e.map(n=>n[1])},filter_enabled:t,filter_useSoftMargin:Boolean(r.filterSoftRange),filter_transformSize:t&&i,filter_transformColor:t&&s}}function Gt(r){if(!r||!("extensions"in r))return{};let e=we(r);if(Number.isFinite(e.filter_min)){let t=Math.fround(e.filter_min);e.filter_min-=t,e.filter_softMin-=t,e.filter_min64High=t;let i=Math.fround(e.filter_max);e.filter_max-=i,e.filter_softMax-=i,e.filter_max64High=i}else{let t=e.filter_min.map(Math.fround);e.filter_min=e.filter_min.map((s,o)=>s-t[o]),e.filter_softMin=e.filter_softMin.map((s,o)=>s-t[o]),e.filter_min64High=t;let i=e.filter_max.map(Math.fround);e.filter_max=e.filter_max.map((s,o)=>s-i[o]),e.filter_softMax=e.filter_softMax.map((s,o)=>s-i[o]),e.filter_max64High=i}return e}var De={"vs:#main-start":`
141
141
  #ifdef DATAFILTER_DOUBLE
142
142
  dataFilter_setValue(
143
143
  DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,
@@ -160,7 +160,7 @@ if (dataFilter_value == 0.0) discard;
160
160
  if (filter_transformColor) {
161
161
  color.a *= dataFilter_value;
162
162
  }
163
- `},je={name:"data-filter",vs:we,fs:Be,inject:Ve,getUniforms:De},ze={name:"data-filter-fp64",vs:we,fs:Be,inject:Ve,getUniforms:Ut};var qe=d(Ue(),1);var qt=`#version 300 es
163
+ `},Ve={name:"data-filter",vs:Ne,fs:Be,inject:De,getUniforms:we},je={name:"data-filter-fp64",vs:Ne,fs:Be,inject:De,getUniforms:Gt};var Ue=d(Ge(),1);var Ut=`#version 300 es
164
164
  #define SHADER_NAME data-filter-vertex-shader
165
165
 
166
166
  #ifdef FLOAT_TARGET
@@ -191,7 +191,7 @@ void main() {
191
191
  #endif
192
192
  gl_PointSize = 1.0;
193
193
  }
194
- `,Wt=`#version 300 es
194
+ `,qt=`#version 300 es
195
195
  #define SHADER_NAME data-filter-fragment-shader
196
196
  precision highp float;
197
197
 
@@ -205,174 +205,139 @@ void main() {
205
205
  }
206
206
  fragColor = vColor;
207
207
  }
208
- `,Ht=["float32-renderable-webgl","texture-blend-float-webgl"];function We(r){return Ht.every(e=>r.features.has(e))}function He(r,e){return e?r.createFramebuffer({width:1,height:1,colorAttachments:[r.createTexture({format:"rgba32float",type:5126,mipmaps:!1})]}):r.createFramebuffer({width:256,height:64,colorAttachments:[r.createTexture({format:"rgba8unorm",type:5126,mipmaps:!1})]})}function Ye(r,e,t){return e.defines.NON_INSTANCED_MODEL=1,t&&(e.defines.FLOAT_TARGET=1),new qe.Model(r,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:qt,fs:Wt,...e})}var Ke={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};var Kt={getFilterValue:{type:"accessor",value:0},getFilterCategory:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterCategories:[0],filterTransformSize:!0,filterTransformColor:!0},Zt={categorySize:1,filterSize:1,fp64:!1,countItems:!1},Ze={1:"float",2:"vec2",3:"vec3",4:"vec4"},Q=class extends b.LayerExtension{constructor(e){super({...Zt,...e})}getShaders(e){let{categorySize:t,filterSize:i,fp64:s}=e.opts;return{modules:[s?ze:je],defines:{DATACATEGORY_TYPE:Ze[t],DATACATEGORY_CHANNELS:t,DATAFILTER_TYPE:Ze[i],DATAFILTER_DOUBLE:Boolean(s)}}}initializeState(e,t){let i=this.getAttributeManager(),{categorySize:s,filterSize:o,fp64:n}=t.opts;i&&i.add({filterValues:{size:o,type:n?"float64":"float32",accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}},filterCategoryValues:{size:s,accessor:"getFilterCategory",transform:s===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((f,c)=>t._getCategoryKey.call(this,f,c)),shaderAttributes:{filterCategoryValues:{divisor:0},instanceFilterCategoryValues:{divisor:1}}}});let{device:a}=this.context;if(i&&t.opts.countItems){let l=We(a);i.add({filterIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:_})=>{let p=u&&u.__source?u.__source.index:_;return l?(p+1)%255:[(p+1)%255,Math.floor(p/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=He(a,l),c=Ye(a,t.getShaders.call(this,t),l);this.setState({filterFBO:f,filterModel:c})}}updateState({props:e,oldProps:t,changeFlags:i},s){let o=this.getAttributeManager(),{categorySize:n}=s.opts;if(this.state.filterModel){let a=o.attributes.filterValues.needsUpdate()||o.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}if(o?.attributes.filterCategoryValues){let a=o.attributes.filterCategoryValues.needsUpdate()||!(0,b._deepEqual)(e.filterCategories,t.filterCategories,2);a&&this.setState({categoryBitMaskNeedsUpdate:a}),i.dataChanged&&(this.setState({categoryMap:Array(n).fill(0).map(()=>({}))}),o.attributes.filterCategoryValues.setNeedsUpdate("categoryMap"))}}draw(e,t){let i=this.state.filterFBO,s=this.state.filterModel,o=this.state.filterNeedsUpdate,n=this.state.categoryBitMaskNeedsUpdate,{onFilteredItemsChange:a}=this.props;if(n&&t._updateCategoryBitMask.call(this,e,t),o&&a&&s){let{attributes:{filterValues:l,filterCategoryValues:f,filterIndices:c}}=this.getAttributeManager();s.setVertexCount(this.getNumInstances()),this.context.device.clearWebGL({framebuffer:i,color:[0,0,0,0]}),s.updateModuleSettings(e.moduleParameters),s.setAttributes({...l.getValue(),...f?.getValue(),...c?.getValue()}),s.setUniforms(e.uniforms),s.device.withParametersWebGL({framebuffer:i,...Ke,viewport:[0,0,i.width,i.height]},()=>{s.draw(this.context.renderPass)});let u=s.device.readPixelsToArrayWebGL(i),_=0;for(let p=0;p<u.length;p++)_+=u[p];a({id:this.id,count:_}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,t=this.state.filterModel;e?.destroy(),t?.destroy()}_updateCategoryBitMask(e,t){let{categorySize:i}=t.opts,{filterCategories:s}=this.props,o=new Uint32Array([0,0,0,0]),n=i===1?[s]:s,a=i===1?128:i===2?64:32;for(let l=0;l<n.length;l++){let f=n[l];for(let c of f){let u=t._getCategoryKey.call(this,c,l);if(u<a){let _=l*(a/32)+Math.floor(u/32);o[_]+=Math.pow(2,u%32)}else b.log.warn(`Exceeded maximum number of categories (${a})`)()}}e.uniforms.filter_categoryBitMask=o,this.state.categoryBitMaskNeedsUpdate=!1}_getCategoryKey(e,t){let i=this.state.categoryMap[t];return e in i||(i[e]=Object.keys(i).length),i[e]}},O=Q;(()=>{Q.defaultProps=Kt})(),(()=>{Q.extensionName="DataFilterExtension"})();var C=d(m(),1);var J=r=>`${r}`;function ee(r,e=[],t=0){let i=Math.fround(r),s=r-i;return e[t]=i,e[t+1]=s,e}function Pe(r){return r-Math.fround(r)}function ye(r){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let i=0;i<4;++i){let s=t*4+i;ee(r[i*4+t],e,s*2)}return e}var $e=J`\
209
- uniform float ONE;
210
-
211
- /*
212
- About LUMA_FP64_CODE_ELIMINATION_WORKAROUND
213
-
214
- The purpose of this workaround is to prevent shader compilers from
215
- optimizing away necessary arithmetic operations by swapping their sequences
216
- or transform the equation to some 'equivalent' form.
217
-
218
- The method is to multiply an artifical variable, ONE, which will be known to
219
- the compiler to be 1 only at runtime. The whole expression is then represented
220
- as a polynomial with respective to ONE. In the coefficients of all terms, only one a
221
- and one b should appear
222
-
223
- err = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE
224
- */
225
-
226
- // Divide float number to high and low floats to extend fraction bits
208
+ `,Wt=["float32-renderable-webgl","texture-blend-float-webgl"];function qe(r){return Wt.every(e=>r.features.has(e))}function We(r,e){return e?r.createFramebuffer({width:1,height:1,colorAttachments:[r.createTexture({format:"rgba32float",type:5126,mipmaps:!1})]}):r.createFramebuffer({width:256,height:64,colorAttachments:[r.createTexture({format:"rgba8unorm",type:5126,mipmaps:!1})]})}function He(r,e,t){return e.defines.NON_INSTANCED_MODEL=1,t&&(e.defines.FLOAT_TARGET=1),new Ue.Model(r,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:Ut,fs:qt,...e})}var Ye={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};var Yt={getFilterValue:{type:"accessor",value:0},getFilterCategory:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterCategories:[0],filterTransformSize:!0,filterTransformColor:!0},Kt={categorySize:1,filterSize:1,fp64:!1,countItems:!1},Ke={1:"float",2:"vec2",3:"vec3",4:"vec4"},Q=class extends b.LayerExtension{constructor(e){super({...Kt,...e})}getShaders(e){let{categorySize:t,filterSize:i,fp64:s}=e.opts;return{modules:[s?je:Ve],defines:{DATACATEGORY_TYPE:Ke[t],DATACATEGORY_CHANNELS:t,DATAFILTER_TYPE:Ke[i],DATAFILTER_DOUBLE:Boolean(s)}}}initializeState(e,t){let i=this.getAttributeManager(),{categorySize:s,filterSize:o,fp64:n}=t.opts;i&&i.add({filterValues:{size:o,type:n?"float64":"float32",accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}},filterCategoryValues:{size:s,accessor:"getFilterCategory",transform:s===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((f,c)=>t._getCategoryKey.call(this,f,c)),shaderAttributes:{filterCategoryValues:{divisor:0},instanceFilterCategoryValues:{divisor:1}}}});let{device:a}=this.context;if(i&&t.opts.countItems){let l=qe(a);i.add({filterIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:_})=>{let p=u&&u.__source?u.__source.index:_;return l?(p+1)%255:[(p+1)%255,Math.floor(p/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=We(a,l),c=He(a,t.getShaders.call(this,t),l);this.setState({filterFBO:f,filterModel:c})}}updateState({props:e,oldProps:t,changeFlags:i},s){let o=this.getAttributeManager(),{categorySize:n}=s.opts;if(this.state.filterModel){let a=o.attributes.filterValues.needsUpdate()||o.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}if(o?.attributes.filterCategoryValues){let a=o.attributes.filterCategoryValues.needsUpdate()||!(0,b._deepEqual)(e.filterCategories,t.filterCategories,2);a&&this.setState({categoryBitMaskNeedsUpdate:a}),i.dataChanged&&(this.setState({categoryMap:Array(n).fill(0).map(()=>({}))}),o.attributes.filterCategoryValues.setNeedsUpdate("categoryMap"))}}draw(e,t){let i=this.state.filterFBO,s=this.state.filterModel,o=this.state.filterNeedsUpdate,n=this.state.categoryBitMaskNeedsUpdate,{onFilteredItemsChange:a}=this.props;if(n&&t._updateCategoryBitMask.call(this,e,t),o&&a&&s){let{attributes:{filterValues:l,filterCategoryValues:f,filterIndices:c}}=this.getAttributeManager();s.setVertexCount(this.getNumInstances()),this.context.device.clearWebGL({framebuffer:i,color:[0,0,0,0]}),s.updateModuleSettings(e.moduleParameters),s.setAttributes({...l.getValue(),...f?.getValue(),...c?.getValue()}),s.setUniforms(e.uniforms),s.device.withParametersWebGL({framebuffer:i,...Ye,viewport:[0,0,i.width,i.height]},()=>{s.draw(this.context.renderPass)});let u=s.device.readPixelsToArrayWebGL(i),_=0;for(let p=0;p<u.length;p++)_+=u[p];a({id:this.id,count:_}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,t=this.state.filterModel;e?.destroy(),t?.destroy()}_updateCategoryBitMask(e,t){let{categorySize:i}=t.opts,{filterCategories:s}=this.props,o=new Uint32Array([0,0,0,0]),n=i===1?[s]:s,a=i===1?128:i===2?64:32;for(let l=0;l<n.length;l++){let f=n[l];for(let c of f){let u=t._getCategoryKey.call(this,c,l);if(u<a){let _=l*(a/32)+Math.floor(u/32);o[_]+=Math.pow(2,u%32)}else b.log.warn(`Exceeded maximum number of categories (${a})`)()}}e.uniforms.filter_categoryBitMask=o,this.state.categoryBitMaskNeedsUpdate=!1}_getCategoryKey(e,t){let i=this.state.categoryMap[t];return e in i||(i[e]=Object.keys(i).length),i[e]}},O=Q;(()=>{Q.defaultProps=Yt})(),(()=>{Q.extensionName="DataFilterExtension"})();var C=d(m(),1);function J(r,e=[],t=0){let i=Math.fround(r),s=r-i;return e[t]=i,e[t+1]=s,e}function xe(r){return r-Math.fround(r)}function Pe(r){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let i=0;i<4;++i){let s=t*4+i;J(r[i*4+t],e,s*2)}return e}var Ze=`uniform float ONE;
227
209
  vec2 split(float a) {
228
- const float SPLIT = 4097.0;
229
- float t = a * SPLIT;
210
+ const float SPLIT = 4097.0;
211
+ float t = a * SPLIT;
230
212
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
231
- float a_hi = t * ONE - (t - a);
232
- float a_lo = a * ONE - a_hi;
213
+ float a_hi = t * ONE - (t - a);
214
+ float a_lo = a * ONE - a_hi;
233
215
  #else
234
- float a_hi = t - (t - a);
235
- float a_lo = a - a_hi;
216
+ float a_hi = t - (t - a);
217
+ float a_lo = a - a_hi;
236
218
  #endif
237
- return vec2(a_hi, a_lo);
219
+ return vec2(a_hi, a_lo);
238
220
  }
239
-
240
- // Divide float number again when high float uses too many fraction bits
241
221
  vec2 split2(vec2 a) {
242
- vec2 b = split(a.x);
243
- b.y += a.y;
244
- return b;
222
+ vec2 b = split(a.x);
223
+ b.y += a.y;
224
+ return b;
245
225
  }
246
-
247
- // Special sum operation when a > b
248
226
  vec2 quickTwoSum(float a, float b) {
249
227
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
250
- float sum = (a + b) * ONE;
251
- float err = b - (sum - a) * ONE;
228
+ float sum = (a + b) * ONE;
229
+ float err = b - (sum - a) * ONE;
252
230
  #else
253
- float sum = a + b;
254
- float err = b - (sum - a);
231
+ float sum = a + b;
232
+ float err = b - (sum - a);
255
233
  #endif
256
- return vec2(sum, err);
234
+ return vec2(sum, err);
257
235
  }
258
-
259
- // General sum operation
260
236
  vec2 twoSum(float a, float b) {
261
- float s = (a + b);
237
+ float s = (a + b);
262
238
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
263
- float v = (s * ONE - a) * ONE;
264
- float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
239
+ float v = (s * ONE - a) * ONE;
240
+ float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
265
241
  #else
266
- float v = s - a;
267
- float err = (a - (s - v)) + (b - v);
242
+ float v = s - a;
243
+ float err = (a - (s - v)) + (b - v);
268
244
  #endif
269
- return vec2(s, err);
245
+ return vec2(s, err);
270
246
  }
271
-
272
247
  vec2 twoSub(float a, float b) {
273
- float s = (a - b);
248
+ float s = (a - b);
274
249
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
275
- float v = (s * ONE - a) * ONE;
276
- float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
250
+ float v = (s * ONE - a) * ONE;
251
+ float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
277
252
  #else
278
- float v = s - a;
279
- float err = (a - (s - v)) - (b + v);
253
+ float v = s - a;
254
+ float err = (a - (s - v)) - (b + v);
280
255
  #endif
281
- return vec2(s, err);
256
+ return vec2(s, err);
282
257
  }
283
-
284
258
  vec2 twoSqr(float a) {
285
- float prod = a * a;
286
- vec2 a_fp64 = split(a);
259
+ float prod = a * a;
260
+ vec2 a_fp64 = split(a);
287
261
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
288
- float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
289
- a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
262
+ float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
263
+ a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
290
264
  #else
291
- float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
265
+ float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
292
266
  #endif
293
- return vec2(prod, err);
267
+ return vec2(prod, err);
294
268
  }
295
-
296
269
  vec2 twoProd(float a, float b) {
297
- float prod = a * b;
298
- vec2 a_fp64 = split(a);
299
- vec2 b_fp64 = split(b);
300
- float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
301
- a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
302
- return vec2(prod, err);
270
+ float prod = a * b;
271
+ vec2 a_fp64 = split(a);
272
+ vec2 b_fp64 = split(b);
273
+ float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
274
+ a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
275
+ return vec2(prod, err);
303
276
  }
304
-
305
277
  vec2 sum_fp64(vec2 a, vec2 b) {
306
- vec2 s, t;
307
- s = twoSum(a.x, b.x);
308
- t = twoSum(a.y, b.y);
309
- s.y += t.x;
310
- s = quickTwoSum(s.x, s.y);
311
- s.y += t.y;
312
- s = quickTwoSum(s.x, s.y);
313
- return s;
278
+ vec2 s, t;
279
+ s = twoSum(a.x, b.x);
280
+ t = twoSum(a.y, b.y);
281
+ s.y += t.x;
282
+ s = quickTwoSum(s.x, s.y);
283
+ s.y += t.y;
284
+ s = quickTwoSum(s.x, s.y);
285
+ return s;
314
286
  }
315
-
316
287
  vec2 sub_fp64(vec2 a, vec2 b) {
317
- vec2 s, t;
318
- s = twoSub(a.x, b.x);
319
- t = twoSub(a.y, b.y);
320
- s.y += t.x;
321
- s = quickTwoSum(s.x, s.y);
322
- s.y += t.y;
323
- s = quickTwoSum(s.x, s.y);
324
- return s;
288
+ vec2 s, t;
289
+ s = twoSub(a.x, b.x);
290
+ t = twoSub(a.y, b.y);
291
+ s.y += t.x;
292
+ s = quickTwoSum(s.x, s.y);
293
+ s.y += t.y;
294
+ s = quickTwoSum(s.x, s.y);
295
+ return s;
325
296
  }
326
-
327
297
  vec2 mul_fp64(vec2 a, vec2 b) {
328
- vec2 prod = twoProd(a.x, b.x);
329
- // y component is for the error
330
- prod.y += a.x * b.y;
298
+ vec2 prod = twoProd(a.x, b.x);
299
+ prod.y += a.x * b.y;
331
300
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
332
- prod = split2(prod);
301
+ prod = split2(prod);
333
302
  #endif
334
- prod = quickTwoSum(prod.x, prod.y);
335
- prod.y += a.y * b.x;
303
+ prod = quickTwoSum(prod.x, prod.y);
304
+ prod.y += a.y * b.x;
336
305
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
337
- prod = split2(prod);
306
+ prod = split2(prod);
338
307
  #endif
339
- prod = quickTwoSum(prod.x, prod.y);
340
- return prod;
308
+ prod = quickTwoSum(prod.x, prod.y);
309
+ return prod;
341
310
  }
342
-
343
311
  vec2 div_fp64(vec2 a, vec2 b) {
344
- float xn = 1.0 / b.x;
312
+ float xn = 1.0 / b.x;
345
313
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
346
- vec2 yn = mul_fp64(a, vec2(xn, 0));
314
+ vec2 yn = mul_fp64(a, vec2(xn, 0));
347
315
  #else
348
- vec2 yn = a * xn;
316
+ vec2 yn = a * xn;
349
317
  #endif
350
- float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
351
- vec2 prod = twoProd(xn, diff);
352
- return sum_fp64(yn, prod);
318
+ float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
319
+ vec2 prod = twoProd(xn, diff);
320
+ return sum_fp64(yn, prod);
353
321
  }
354
-
355
322
  vec2 sqrt_fp64(vec2 a) {
356
- if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
357
- if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
358
-
359
- float x = 1.0 / sqrt(a.x);
360
- float yn = a.x * x;
323
+ if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
324
+ if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
325
+ float x = 1.0 / sqrt(a.x);
326
+ float yn = a.x * x;
361
327
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
362
- vec2 yn_sqr = twoSqr(yn) * ONE;
328
+ vec2 yn_sqr = twoSqr(yn) * ONE;
363
329
  #else
364
- vec2 yn_sqr = twoSqr(yn);
330
+ vec2 yn_sqr = twoSqr(yn);
365
331
  #endif
366
- float diff = sub_fp64(a, yn_sqr).x;
367
- vec2 prod = twoProd(x * 0.5, diff);
332
+ float diff = sub_fp64(a, yn_sqr).x;
333
+ vec2 prod = twoProd(x * 0.5, diff);
368
334
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
369
- return sum_fp64(split(yn), prod);
335
+ return sum_fp64(split(yn), prod);
370
336
  #else
371
- return sum_fp64(vec2(yn, 0.0), prod);
337
+ return sum_fp64(vec2(yn, 0.0), prod);
372
338
  #endif
373
339
  }
374
- `;var Xe=J`\
375
- const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
340
+ `;var $e=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
376
341
  const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
377
342
  const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
378
343
  const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
@@ -382,666 +347,510 @@ const vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);
382
347
  const vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);
383
348
  const vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);
384
349
  const vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);
385
-
386
350
  const vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);
387
351
  const vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);
388
352
  const vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);
389
353
  const vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);
390
-
391
354
  const vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);
392
355
  const vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);
393
356
  const vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);
394
357
  const vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);
395
-
396
- const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09); // 1/3!
397
- const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09); // 1/4!
398
- const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10); // 1/5!
399
- const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11); // 1/6!
400
- const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12); // 1/7!
401
- const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13); // 1/8!
402
- const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14); // 1/9!
403
- const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15); // 1/10!
404
-
358
+ const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);
359
+ const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);
360
+ const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);
361
+ const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);
362
+ const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);
363
+ const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);
364
+ const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);
365
+ const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);
405
366
  float nint(float d) {
406
- if (d == floor(d)) return d;
407
- return floor(d + 0.5);
367
+ if (d == floor(d)) return d;
368
+ return floor(d + 0.5);
408
369
  }
409
-
410
370
  vec2 nint_fp64(vec2 a) {
411
- float hi = nint(a.x);
412
- float lo;
413
- vec2 tmp;
414
- if (hi == a.x) {
415
- lo = nint(a.y);
416
- tmp = quickTwoSum(hi, lo);
417
- } else {
418
- lo = 0.0;
419
- if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
420
- hi -= 1.0;
421
- }
422
- tmp = vec2(hi, lo);
423
- }
424
- return tmp;
371
+ float hi = nint(a.x);
372
+ float lo;
373
+ vec2 tmp;
374
+ if (hi == a.x) {
375
+ lo = nint(a.y);
376
+ tmp = quickTwoSum(hi, lo);
377
+ } else {
378
+ lo = 0.0;
379
+ if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
380
+ hi -= 1.0;
381
+ }
382
+ tmp = vec2(hi, lo);
383
+ }
384
+ return tmp;
425
385
  }
426
-
427
- /* k_power controls how much range reduction we would like to have
428
- Range reduction uses the following method:
429
- assume a = k_power * r + m * log(2), k and m being integers.
430
- Set k_power = 4 (we can choose other k to trade accuracy with performance.
431
- we only need to calculate exp(r) and using exp(a) = 2^m * exp(r)^k_power;
432
- */
433
-
434
386
  vec2 exp_fp64(vec2 a) {
435
- // We need to make sure these two numbers match
436
- // as bit-wise shift is not available in GLSL 1.0
437
- const int k_power = 4;
438
- const float k = 16.0;
439
-
440
- const float inv_k = 1.0 / k;
441
-
442
- if (a.x <= -88.0) return vec2(0.0, 0.0);
443
- if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
444
- if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
445
- if (a.x == 1.0 && a.y == 0.0) return E_FP64;
446
-
447
- float m = floor(a.x / LOG2_FP64.x + 0.5);
448
- vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
449
- vec2 s, t, p;
450
-
451
- p = mul_fp64(r, r);
452
- s = sum_fp64(r, p * 0.5);
453
- p = mul_fp64(p, r);
454
- t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
455
-
456
- s = sum_fp64(s, t);
457
- p = mul_fp64(p, r);
458
- t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
459
-
460
- s = sum_fp64(s, t);
461
- p = mul_fp64(p, r);
462
- t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
463
-
464
- // s = sum_fp64(s, t);
465
- // p = mul_fp64(p, r);
466
- // t = mul_fp64(p, INVERSE_FACTORIAL_6_FP64);
467
-
468
- // s = sum_fp64(s, t);
469
- // p = mul_fp64(p, r);
470
- // t = mul_fp64(p, INVERSE_FACTORIAL_7_FP64);
471
-
472
- s = sum_fp64(s, t);
473
-
474
-
475
- // At this point, s = exp(r) - 1; but after following 4 recursions, we will get exp(r) ^ 512 - 1.
476
- for (int i = 0; i < k_power; i++) {
477
- s = sum_fp64(s * 2.0, mul_fp64(s, s));
478
- }
479
-
387
+ const int k_power = 4;
388
+ const float k = 16.0;
389
+ const float inv_k = 1.0 / k;
390
+ if (a.x <= -88.0) return vec2(0.0, 0.0);
391
+ if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
392
+ if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
393
+ if (a.x == 1.0 && a.y == 0.0) return E_FP64;
394
+ float m = floor(a.x / LOG2_FP64.x + 0.5);
395
+ vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
396
+ vec2 s, t, p;
397
+ p = mul_fp64(r, r);
398
+ s = sum_fp64(r, p * 0.5);
399
+ p = mul_fp64(p, r);
400
+ t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
401
+ s = sum_fp64(s, t);
402
+ p = mul_fp64(p, r);
403
+ t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
404
+ s = sum_fp64(s, t);
405
+ p = mul_fp64(p, r);
406
+ t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
407
+ s = sum_fp64(s, t);
408
+ for (int i = 0; i < k_power; i++) {
409
+ s = sum_fp64(s * 2.0, mul_fp64(s, s));
410
+ }
480
411
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
481
- s = sum_fp64(s, vec2(ONE, 0.0));
412
+ s = sum_fp64(s, vec2(ONE, 0.0));
482
413
  #else
483
- s = sum_fp64(s, vec2(1.0, 0.0));
414
+ s = sum_fp64(s, vec2(1.0, 0.0));
484
415
  #endif
485
-
486
- return s * pow(2.0, m);
487
- // return r;
416
+ return s * pow(2.0, m);
488
417
  }
489
-
490
418
  vec2 log_fp64(vec2 a)
491
419
  {
492
- if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
493
- if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
494
- vec2 x = vec2(log(a.x), 0.0);
495
- vec2 s;
420
+ if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
421
+ if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
422
+ vec2 x = vec2(log(a.x), 0.0);
423
+ vec2 s;
496
424
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
497
- s = vec2(ONE, 0.0);
425
+ s = vec2(ONE, 0.0);
498
426
  #else
499
- s = vec2(1.0, 0.0);
427
+ s = vec2(1.0, 0.0);
500
428
  #endif
501
-
502
- x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
503
- return x;
429
+ x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
430
+ return x;
504
431
  }
505
-
506
432
  vec2 sin_taylor_fp64(vec2 a) {
507
- vec2 r, s, t, x;
508
-
509
- if (a.x == 0.0 && a.y == 0.0) {
510
- return vec2(0.0, 0.0);
511
- }
512
-
513
- x = -mul_fp64(a, a);
514
- s = a;
515
- r = a;
516
-
517
- r = mul_fp64(r, x);
518
- t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
519
- s = sum_fp64(s, t);
520
-
521
- r = mul_fp64(r, x);
522
- t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
523
- s = sum_fp64(s, t);
524
-
525
- /* keep the following commented code in case we need them
526
- for extra accuracy from the Taylor expansion*/
527
-
528
- // r = mul_fp64(r, x);
529
- // t = mul_fp64(r, INVERSE_FACTORIAL_7_FP64);
530
- // s = sum_fp64(s, t);
531
-
532
- // r = mul_fp64(r, x);
533
- // t = mul_fp64(r, INVERSE_FACTORIAL_9_FP64);
534
- // s = sum_fp64(s, t);
535
-
536
- return s;
433
+ vec2 r, s, t, x;
434
+ if (a.x == 0.0 && a.y == 0.0) {
435
+ return vec2(0.0, 0.0);
436
+ }
437
+ x = -mul_fp64(a, a);
438
+ s = a;
439
+ r = a;
440
+ r = mul_fp64(r, x);
441
+ t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
442
+ s = sum_fp64(s, t);
443
+ r = mul_fp64(r, x);
444
+ t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
445
+ s = sum_fp64(s, t);
446
+ return s;
537
447
  }
538
-
539
448
  vec2 cos_taylor_fp64(vec2 a) {
540
- vec2 r, s, t, x;
541
-
542
- if (a.x == 0.0 && a.y == 0.0) {
543
- return vec2(1.0, 0.0);
544
- }
545
-
546
- x = -mul_fp64(a, a);
547
- r = x;
548
- s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
549
-
550
- r = mul_fp64(r, x);
551
- t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
552
- s = sum_fp64(s, t);
553
-
554
- r = mul_fp64(r, x);
555
- t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
556
- s = sum_fp64(s, t);
557
-
558
- /* keep the following commented code in case we need them
559
- for extra accuracy from the Taylor expansion*/
560
-
561
- // r = mul_fp64(r, x);
562
- // t = mul_fp64(r, INVERSE_FACTORIAL_8_FP64);
563
- // s = sum_fp64(s, t);
564
-
565
- // r = mul_fp64(r, x);
566
- // t = mul_fp64(r, INVERSE_FACTORIAL_10_FP64);
567
- // s = sum_fp64(s, t);
568
-
569
- return s;
449
+ vec2 r, s, t, x;
450
+ if (a.x == 0.0 && a.y == 0.0) {
451
+ return vec2(1.0, 0.0);
452
+ }
453
+ x = -mul_fp64(a, a);
454
+ r = x;
455
+ s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
456
+ r = mul_fp64(r, x);
457
+ t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
458
+ s = sum_fp64(s, t);
459
+ r = mul_fp64(r, x);
460
+ t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
461
+ s = sum_fp64(s, t);
462
+ return s;
570
463
  }
571
-
572
464
  void sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {
573
- if (a.x == 0.0 && a.y == 0.0) {
574
- sin_t = vec2(0.0, 0.0);
575
- cos_t = vec2(1.0, 0.0);
576
- }
577
-
578
- sin_t = sin_taylor_fp64(a);
579
- cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
465
+ if (a.x == 0.0 && a.y == 0.0) {
466
+ sin_t = vec2(0.0, 0.0);
467
+ cos_t = vec2(1.0, 0.0);
468
+ }
469
+ sin_t = sin_taylor_fp64(a);
470
+ cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
580
471
  }
581
-
582
472
  vec2 sin_fp64(vec2 a) {
583
- if (a.x == 0.0 && a.y == 0.0) {
584
- return vec2(0.0, 0.0);
585
- }
586
-
587
- // 2pi range reduction
588
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
589
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
590
-
591
- vec2 t;
592
- float q = floor(r.x / PI_2_FP64.x + 0.5);
593
- int j = int(q);
594
-
595
- if (j < -2 || j > 2) {
596
- return vec2(0.0 / 0.0, 0.0 / 0.0);
597
- }
598
-
599
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
600
-
601
- q = floor(t.x / PI_16_FP64.x + 0.5);
602
- int k = int(q);
603
-
604
- if (k == 0) {
605
- if (j == 0) {
606
- return sin_taylor_fp64(t);
607
- } else if (j == 1) {
608
- return cos_taylor_fp64(t);
609
- } else if (j == -1) {
610
- return -cos_taylor_fp64(t);
611
- } else {
612
- return -sin_taylor_fp64(t);
613
- }
614
- }
615
-
616
- int abs_k = int(abs(float(k)));
617
-
618
- if (abs_k > 4) {
619
- return vec2(0.0 / 0.0, 0.0 / 0.0);
620
- } else {
621
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
622
- }
623
-
624
- vec2 u = vec2(0.0, 0.0);
625
- vec2 v = vec2(0.0, 0.0);
626
-
473
+ if (a.x == 0.0 && a.y == 0.0) {
474
+ return vec2(0.0, 0.0);
475
+ }
476
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
477
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
478
+ vec2 t;
479
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
480
+ int j = int(q);
481
+ if (j < -2 || j > 2) {
482
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
483
+ }
484
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
485
+ q = floor(t.x / PI_16_FP64.x + 0.5);
486
+ int k = int(q);
487
+ if (k == 0) {
488
+ if (j == 0) {
489
+ return sin_taylor_fp64(t);
490
+ } else if (j == 1) {
491
+ return cos_taylor_fp64(t);
492
+ } else if (j == -1) {
493
+ return -cos_taylor_fp64(t);
494
+ } else {
495
+ return -sin_taylor_fp64(t);
496
+ }
497
+ }
498
+ int abs_k = int(abs(float(k)));
499
+ if (abs_k > 4) {
500
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
501
+ } else {
502
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
503
+ }
504
+ vec2 u = vec2(0.0, 0.0);
505
+ vec2 v = vec2(0.0, 0.0);
627
506
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
628
- if (abs(float(abs_k) - 1.0) < 0.5) {
629
- u = COS_TABLE_0_FP64;
630
- v = SIN_TABLE_0_FP64;
631
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
632
- u = COS_TABLE_1_FP64;
633
- v = SIN_TABLE_1_FP64;
634
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
635
- u = COS_TABLE_2_FP64;
636
- v = SIN_TABLE_2_FP64;
637
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
638
- u = COS_TABLE_3_FP64;
639
- v = SIN_TABLE_3_FP64;
640
- }
507
+ if (abs(float(abs_k) - 1.0) < 0.5) {
508
+ u = COS_TABLE_0_FP64;
509
+ v = SIN_TABLE_0_FP64;
510
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
511
+ u = COS_TABLE_1_FP64;
512
+ v = SIN_TABLE_1_FP64;
513
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
514
+ u = COS_TABLE_2_FP64;
515
+ v = SIN_TABLE_2_FP64;
516
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
517
+ u = COS_TABLE_3_FP64;
518
+ v = SIN_TABLE_3_FP64;
519
+ }
641
520
  #else
642
- if (abs_k == 1) {
643
- u = COS_TABLE_0_FP64;
644
- v = SIN_TABLE_0_FP64;
645
- } else if (abs_k == 2) {
646
- u = COS_TABLE_1_FP64;
647
- v = SIN_TABLE_1_FP64;
648
- } else if (abs_k == 3) {
649
- u = COS_TABLE_2_FP64;
650
- v = SIN_TABLE_2_FP64;
651
- } else if (abs_k == 4) {
652
- u = COS_TABLE_3_FP64;
653
- v = SIN_TABLE_3_FP64;
654
- }
521
+ if (abs_k == 1) {
522
+ u = COS_TABLE_0_FP64;
523
+ v = SIN_TABLE_0_FP64;
524
+ } else if (abs_k == 2) {
525
+ u = COS_TABLE_1_FP64;
526
+ v = SIN_TABLE_1_FP64;
527
+ } else if (abs_k == 3) {
528
+ u = COS_TABLE_2_FP64;
529
+ v = SIN_TABLE_2_FP64;
530
+ } else if (abs_k == 4) {
531
+ u = COS_TABLE_3_FP64;
532
+ v = SIN_TABLE_3_FP64;
533
+ }
655
534
  #endif
656
-
657
- vec2 sin_t, cos_t;
658
- sincos_taylor_fp64(t, sin_t, cos_t);
659
-
660
-
661
-
662
- vec2 result = vec2(0.0, 0.0);
663
- if (j == 0) {
664
- if (k > 0) {
665
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
666
- } else {
667
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
668
- }
669
- } else if (j == 1) {
670
- if (k > 0) {
671
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
672
- } else {
673
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
674
- }
675
- } else if (j == -1) {
676
- if (k > 0) {
677
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
678
- } else {
679
- result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
680
- }
681
- } else {
682
- if (k > 0) {
683
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
684
- } else {
685
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
686
- }
687
- }
688
-
689
- return result;
535
+ vec2 sin_t, cos_t;
536
+ sincos_taylor_fp64(t, sin_t, cos_t);
537
+ vec2 result = vec2(0.0, 0.0);
538
+ if (j == 0) {
539
+ if (k > 0) {
540
+ result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
541
+ } else {
542
+ result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
543
+ }
544
+ } else if (j == 1) {
545
+ if (k > 0) {
546
+ result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
547
+ } else {
548
+ result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
549
+ }
550
+ } else if (j == -1) {
551
+ if (k > 0) {
552
+ result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
553
+ } else {
554
+ result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
555
+ }
556
+ } else {
557
+ if (k > 0) {
558
+ result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
559
+ } else {
560
+ result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
561
+ }
562
+ }
563
+ return result;
690
564
  }
691
-
692
565
  vec2 cos_fp64(vec2 a) {
693
- if (a.x == 0.0 && a.y == 0.0) {
694
- return vec2(1.0, 0.0);
695
- }
696
-
697
- // 2pi range reduction
698
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
699
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
700
-
701
- vec2 t;
702
- float q = floor(r.x / PI_2_FP64.x + 0.5);
703
- int j = int(q);
704
-
705
- if (j < -2 || j > 2) {
706
- return vec2(0.0 / 0.0, 0.0 / 0.0);
707
- }
708
-
709
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
710
-
711
- q = floor(t.x / PI_16_FP64.x + 0.5);
712
- int k = int(q);
713
-
714
- if (k == 0) {
715
- if (j == 0) {
716
- return cos_taylor_fp64(t);
717
- } else if (j == 1) {
718
- return -sin_taylor_fp64(t);
719
- } else if (j == -1) {
720
- return sin_taylor_fp64(t);
721
- } else {
722
- return -cos_taylor_fp64(t);
723
- }
724
- }
725
-
726
- int abs_k = int(abs(float(k)));
727
-
728
- if (abs_k > 4) {
729
- return vec2(0.0 / 0.0, 0.0 / 0.0);
730
- } else {
731
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
732
- }
733
-
734
- vec2 u = vec2(0.0, 0.0);
735
- vec2 v = vec2(0.0, 0.0);
736
-
566
+ if (a.x == 0.0 && a.y == 0.0) {
567
+ return vec2(1.0, 0.0);
568
+ }
569
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
570
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
571
+ vec2 t;
572
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
573
+ int j = int(q);
574
+ if (j < -2 || j > 2) {
575
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
576
+ }
577
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
578
+ q = floor(t.x / PI_16_FP64.x + 0.5);
579
+ int k = int(q);
580
+ if (k == 0) {
581
+ if (j == 0) {
582
+ return cos_taylor_fp64(t);
583
+ } else if (j == 1) {
584
+ return -sin_taylor_fp64(t);
585
+ } else if (j == -1) {
586
+ return sin_taylor_fp64(t);
587
+ } else {
588
+ return -cos_taylor_fp64(t);
589
+ }
590
+ }
591
+ int abs_k = int(abs(float(k)));
592
+ if (abs_k > 4) {
593
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
594
+ } else {
595
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
596
+ }
597
+ vec2 u = vec2(0.0, 0.0);
598
+ vec2 v = vec2(0.0, 0.0);
737
599
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
738
- if (abs(float(abs_k) - 1.0) < 0.5) {
739
- u = COS_TABLE_0_FP64;
740
- v = SIN_TABLE_0_FP64;
741
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
742
- u = COS_TABLE_1_FP64;
743
- v = SIN_TABLE_1_FP64;
744
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
745
- u = COS_TABLE_2_FP64;
746
- v = SIN_TABLE_2_FP64;
747
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
748
- u = COS_TABLE_3_FP64;
749
- v = SIN_TABLE_3_FP64;
750
- }
600
+ if (abs(float(abs_k) - 1.0) < 0.5) {
601
+ u = COS_TABLE_0_FP64;
602
+ v = SIN_TABLE_0_FP64;
603
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
604
+ u = COS_TABLE_1_FP64;
605
+ v = SIN_TABLE_1_FP64;
606
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
607
+ u = COS_TABLE_2_FP64;
608
+ v = SIN_TABLE_2_FP64;
609
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
610
+ u = COS_TABLE_3_FP64;
611
+ v = SIN_TABLE_3_FP64;
612
+ }
751
613
  #else
752
- if (abs_k == 1) {
753
- u = COS_TABLE_0_FP64;
754
- v = SIN_TABLE_0_FP64;
755
- } else if (abs_k == 2) {
756
- u = COS_TABLE_1_FP64;
757
- v = SIN_TABLE_1_FP64;
758
- } else if (abs_k == 3) {
759
- u = COS_TABLE_2_FP64;
760
- v = SIN_TABLE_2_FP64;
761
- } else if (abs_k == 4) {
762
- u = COS_TABLE_3_FP64;
763
- v = SIN_TABLE_3_FP64;
764
- }
614
+ if (abs_k == 1) {
615
+ u = COS_TABLE_0_FP64;
616
+ v = SIN_TABLE_0_FP64;
617
+ } else if (abs_k == 2) {
618
+ u = COS_TABLE_1_FP64;
619
+ v = SIN_TABLE_1_FP64;
620
+ } else if (abs_k == 3) {
621
+ u = COS_TABLE_2_FP64;
622
+ v = SIN_TABLE_2_FP64;
623
+ } else if (abs_k == 4) {
624
+ u = COS_TABLE_3_FP64;
625
+ v = SIN_TABLE_3_FP64;
626
+ }
765
627
  #endif
766
-
767
- vec2 sin_t, cos_t;
768
- sincos_taylor_fp64(t, sin_t, cos_t);
769
-
770
- vec2 result = vec2(0.0, 0.0);
771
- if (j == 0) {
772
- if (k > 0) {
773
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
774
- } else {
775
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
776
- }
777
- } else if (j == 1) {
778
- if (k > 0) {
779
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
780
- } else {
781
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
782
- }
783
- } else if (j == -1) {
784
- if (k > 0) {
785
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
786
- } else {
787
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
788
- }
789
- } else {
790
- if (k > 0) {
791
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
792
- } else {
793
- result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
794
- }
795
- }
796
-
797
- return result;
628
+ vec2 sin_t, cos_t;
629
+ sincos_taylor_fp64(t, sin_t, cos_t);
630
+ vec2 result = vec2(0.0, 0.0);
631
+ if (j == 0) {
632
+ if (k > 0) {
633
+ result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
634
+ } else {
635
+ result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
636
+ }
637
+ } else if (j == 1) {
638
+ if (k > 0) {
639
+ result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
640
+ } else {
641
+ result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
642
+ }
643
+ } else if (j == -1) {
644
+ if (k > 0) {
645
+ result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
646
+ } else {
647
+ result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
648
+ }
649
+ } else {
650
+ if (k > 0) {
651
+ result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
652
+ } else {
653
+ result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
654
+ }
655
+ }
656
+ return result;
798
657
  }
799
-
800
658
  vec2 tan_fp64(vec2 a) {
801
- vec2 sin_a;
802
- vec2 cos_a;
803
-
804
- if (a.x == 0.0 && a.y == 0.0) {
805
- return vec2(0.0, 0.0);
806
- }
807
-
808
- // 2pi range reduction
809
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
810
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
811
-
812
- vec2 t;
813
- float q = floor(r.x / PI_2_FP64.x + 0.5);
814
- int j = int(q);
815
-
816
-
817
- if (j < -2 || j > 2) {
818
- return vec2(0.0 / 0.0, 0.0 / 0.0);
819
- }
820
-
821
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
822
-
823
- q = floor(t.x / PI_16_FP64.x + 0.5);
824
- int k = int(q);
825
- int abs_k = int(abs(float(k)));
826
-
827
- // We just can't get PI/16 * 3.0 very accurately.
828
- // so let's just store it
829
- if (abs_k > 4) {
830
- return vec2(0.0 / 0.0, 0.0 / 0.0);
831
- } else {
832
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
833
- }
834
-
835
-
836
- vec2 u = vec2(0.0, 0.0);
837
- vec2 v = vec2(0.0, 0.0);
838
-
839
- vec2 sin_t, cos_t;
840
- vec2 s, c;
841
- sincos_taylor_fp64(t, sin_t, cos_t);
842
-
843
- if (k == 0) {
844
- s = sin_t;
845
- c = cos_t;
846
- } else {
659
+ vec2 sin_a;
660
+ vec2 cos_a;
661
+ if (a.x == 0.0 && a.y == 0.0) {
662
+ return vec2(0.0, 0.0);
663
+ }
664
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
665
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
666
+ vec2 t;
667
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
668
+ int j = int(q);
669
+ if (j < -2 || j > 2) {
670
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
671
+ }
672
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
673
+ q = floor(t.x / PI_16_FP64.x + 0.5);
674
+ int k = int(q);
675
+ int abs_k = int(abs(float(k)));
676
+ if (abs_k > 4) {
677
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
678
+ } else {
679
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
680
+ }
681
+ vec2 u = vec2(0.0, 0.0);
682
+ vec2 v = vec2(0.0, 0.0);
683
+ vec2 sin_t, cos_t;
684
+ vec2 s, c;
685
+ sincos_taylor_fp64(t, sin_t, cos_t);
686
+ if (k == 0) {
687
+ s = sin_t;
688
+ c = cos_t;
689
+ } else {
847
690
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
848
- if (abs(float(abs_k) - 1.0) < 0.5) {
849
- u = COS_TABLE_0_FP64;
850
- v = SIN_TABLE_0_FP64;
851
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
852
- u = COS_TABLE_1_FP64;
853
- v = SIN_TABLE_1_FP64;
854
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
855
- u = COS_TABLE_2_FP64;
856
- v = SIN_TABLE_2_FP64;
857
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
858
- u = COS_TABLE_3_FP64;
859
- v = SIN_TABLE_3_FP64;
860
- }
691
+ if (abs(float(abs_k) - 1.0) < 0.5) {
692
+ u = COS_TABLE_0_FP64;
693
+ v = SIN_TABLE_0_FP64;
694
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
695
+ u = COS_TABLE_1_FP64;
696
+ v = SIN_TABLE_1_FP64;
697
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
698
+ u = COS_TABLE_2_FP64;
699
+ v = SIN_TABLE_2_FP64;
700
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
701
+ u = COS_TABLE_3_FP64;
702
+ v = SIN_TABLE_3_FP64;
703
+ }
861
704
  #else
862
- if (abs_k == 1) {
863
- u = COS_TABLE_0_FP64;
864
- v = SIN_TABLE_0_FP64;
865
- } else if (abs_k == 2) {
866
- u = COS_TABLE_1_FP64;
867
- v = SIN_TABLE_1_FP64;
868
- } else if (abs_k == 3) {
869
- u = COS_TABLE_2_FP64;
870
- v = SIN_TABLE_2_FP64;
871
- } else if (abs_k == 4) {
872
- u = COS_TABLE_3_FP64;
873
- v = SIN_TABLE_3_FP64;
874
- }
705
+ if (abs_k == 1) {
706
+ u = COS_TABLE_0_FP64;
707
+ v = SIN_TABLE_0_FP64;
708
+ } else if (abs_k == 2) {
709
+ u = COS_TABLE_1_FP64;
710
+ v = SIN_TABLE_1_FP64;
711
+ } else if (abs_k == 3) {
712
+ u = COS_TABLE_2_FP64;
713
+ v = SIN_TABLE_2_FP64;
714
+ } else if (abs_k == 4) {
715
+ u = COS_TABLE_3_FP64;
716
+ v = SIN_TABLE_3_FP64;
717
+ }
875
718
  #endif
876
- if (k > 0) {
877
- s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
878
- c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
879
- } else {
880
- s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
881
- c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
882
- }
883
- }
884
-
885
- if (j == 0) {
886
- sin_a = s;
887
- cos_a = c;
888
- } else if (j == 1) {
889
- sin_a = c;
890
- cos_a = -s;
891
- } else if (j == -1) {
892
- sin_a = -c;
893
- cos_a = s;
894
- } else {
895
- sin_a = -s;
896
- cos_a = -c;
897
- }
898
- return div_fp64(sin_a, cos_a);
719
+ if (k > 0) {
720
+ s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
721
+ c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
722
+ } else {
723
+ s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
724
+ c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
725
+ }
726
+ }
727
+ if (j == 0) {
728
+ sin_a = s;
729
+ cos_a = c;
730
+ } else if (j == 1) {
731
+ sin_a = c;
732
+ cos_a = -s;
733
+ } else if (j == -1) {
734
+ sin_a = -c;
735
+ cos_a = s;
736
+ } else {
737
+ sin_a = -s;
738
+ cos_a = -c;
739
+ }
740
+ return div_fp64(sin_a, cos_a);
899
741
  }
900
-
901
742
  vec2 radians_fp64(vec2 degree) {
902
- return mul_fp64(degree, PI_180_FP64);
743
+ return mul_fp64(degree, PI_180_FP64);
903
744
  }
904
-
905
745
  vec2 mix_fp64(vec2 a, vec2 b, float x) {
906
- vec2 range = sub_fp64(b, a);
907
- return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
746
+ vec2 range = sub_fp64(b, a);
747
+ return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
908
748
  }
909
-
910
- // Vector functions
911
- // vec2 functions
912
749
  void vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
913
- out_val[0] = sum_fp64(a[0], b[0]);
914
- out_val[1] = sum_fp64(a[1], b[1]);
750
+ out_val[0] = sum_fp64(a[0], b[0]);
751
+ out_val[1] = sum_fp64(a[1], b[1]);
915
752
  }
916
-
917
753
  void vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
918
- out_val[0] = sub_fp64(a[0], b[0]);
919
- out_val[1] = sub_fp64(a[1], b[1]);
754
+ out_val[0] = sub_fp64(a[0], b[0]);
755
+ out_val[1] = sub_fp64(a[1], b[1]);
920
756
  }
921
-
922
757
  void vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
923
- out_val[0] = mul_fp64(a[0], b[0]);
924
- out_val[1] = mul_fp64(a[1], b[1]);
758
+ out_val[0] = mul_fp64(a[0], b[0]);
759
+ out_val[1] = mul_fp64(a[1], b[1]);
925
760
  }
926
-
927
761
  void vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
928
- out_val[0] = div_fp64(a[0], b[0]);
929
- out_val[1] = div_fp64(a[1], b[1]);
762
+ out_val[0] = div_fp64(a[0], b[0]);
763
+ out_val[1] = div_fp64(a[1], b[1]);
930
764
  }
931
-
932
765
  void vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {
933
- vec2 range[2];
934
- vec2_sub_fp64(y, x, range);
935
- vec2 portion[2];
936
- portion[0] = range[0] * a;
937
- portion[1] = range[1] * a;
938
- vec2_sum_fp64(x, portion, out_val);
766
+ vec2 range[2];
767
+ vec2_sub_fp64(y, x, range);
768
+ vec2 portion[2];
769
+ portion[0] = range[0] * a;
770
+ portion[1] = range[1] * a;
771
+ vec2_sum_fp64(x, portion, out_val);
939
772
  }
940
-
941
773
  vec2 vec2_length_fp64(vec2 x[2]) {
942
- return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
774
+ return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
943
775
  }
944
-
945
776
  void vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {
946
- vec2 length = vec2_length_fp64(x);
947
- vec2 length_vec2[2];
948
- length_vec2[0] = length;
949
- length_vec2[1] = length;
950
-
951
- vec2_div_fp64(x, length_vec2, out_val);
777
+ vec2 length = vec2_length_fp64(x);
778
+ vec2 length_vec2[2];
779
+ length_vec2[0] = length;
780
+ length_vec2[1] = length;
781
+ vec2_div_fp64(x, length_vec2, out_val);
952
782
  }
953
-
954
783
  vec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {
955
- vec2 diff[2];
956
- vec2_sub_fp64(x, y, diff);
957
- return vec2_length_fp64(diff);
784
+ vec2 diff[2];
785
+ vec2_sub_fp64(x, y, diff);
786
+ return vec2_length_fp64(diff);
958
787
  }
959
-
960
788
  vec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {
961
- vec2 v[2];
962
-
963
- v[0] = mul_fp64(a[0], b[0]);
964
- v[1] = mul_fp64(a[1], b[1]);
965
-
966
- return sum_fp64(v[0], v[1]);
789
+ vec2 v[2];
790
+ v[0] = mul_fp64(a[0], b[0]);
791
+ v[1] = mul_fp64(a[1], b[1]);
792
+ return sum_fp64(v[0], v[1]);
967
793
  }
968
-
969
- // vec3 functions
970
794
  void vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
971
- for (int i = 0; i < 3; i++) {
972
- out_val[i] = sum_fp64(a[i], b[i]);
973
- }
795
+ for (int i = 0; i < 3; i++) {
796
+ out_val[i] = sum_fp64(a[i], b[i]);
797
+ }
974
798
  }
975
-
976
799
  void vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
977
- for (int i = 0; i < 3; i++) {
978
- out_val[i] = sum_fp64(a[i], b[i]);
979
- }
800
+ for (int i = 0; i < 3; i++) {
801
+ out_val[i] = sum_fp64(a[i], b[i]);
802
+ }
980
803
  }
981
-
982
804
  vec2 vec3_length_fp64(vec2 x[3]) {
983
- return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
984
- mul_fp64(x[2], x[2])));
805
+ return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
806
+ mul_fp64(x[2], x[2])));
985
807
  }
986
-
987
808
  vec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {
988
- vec2 diff[3];
989
- vec3_sub_fp64(x, y, diff);
990
- return vec3_length_fp64(diff);
809
+ vec2 diff[3];
810
+ vec3_sub_fp64(x, y, diff);
811
+ return vec3_length_fp64(diff);
991
812
  }
992
-
993
- // vec4 functions
994
813
  void vec4_fp64(vec4 a, out vec2 out_val[4]) {
995
- out_val[0].x = a[0];
996
- out_val[0].y = 0.0;
997
-
998
- out_val[1].x = a[1];
999
- out_val[1].y = 0.0;
1000
-
1001
- out_val[2].x = a[2];
1002
- out_val[2].y = 0.0;
1003
-
1004
- out_val[3].x = a[3];
1005
- out_val[3].y = 0.0;
814
+ out_val[0].x = a[0];
815
+ out_val[0].y = 0.0;
816
+ out_val[1].x = a[1];
817
+ out_val[1].y = 0.0;
818
+ out_val[2].x = a[2];
819
+ out_val[2].y = 0.0;
820
+ out_val[3].x = a[3];
821
+ out_val[3].y = 0.0;
1006
822
  }
1007
-
1008
823
  void vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {
1009
- out_val[0] = mul_fp64(a[0], b);
1010
- out_val[1] = mul_fp64(a[1], b);
1011
- out_val[2] = mul_fp64(a[2], b);
1012
- out_val[3] = mul_fp64(a[3], b);
824
+ out_val[0] = mul_fp64(a[0], b);
825
+ out_val[1] = mul_fp64(a[1], b);
826
+ out_val[2] = mul_fp64(a[2], b);
827
+ out_val[3] = mul_fp64(a[3], b);
1013
828
  }
1014
-
1015
829
  void vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {
1016
- for (int i = 0; i < 4; i++) {
1017
- out_val[i] = sum_fp64(a[i], b[i]);
1018
- }
830
+ for (int i = 0; i < 4; i++) {
831
+ out_val[i] = sum_fp64(a[i], b[i]);
832
+ }
1019
833
  }
1020
-
1021
834
  void vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {
1022
- vec2 v[4];
1023
-
1024
- v[0] = mul_fp64(a[0], b[0]);
1025
- v[1] = mul_fp64(a[1], b[1]);
1026
- v[2] = mul_fp64(a[2], b[2]);
1027
- v[3] = mul_fp64(a[3], b[3]);
1028
-
1029
- out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
835
+ vec2 v[4];
836
+ v[0] = mul_fp64(a[0], b[0]);
837
+ v[1] = mul_fp64(a[1], b[1]);
838
+ v[2] = mul_fp64(a[2], b[2]);
839
+ v[3] = mul_fp64(a[3], b[3]);
840
+ out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
1030
841
  }
1031
-
1032
842
  void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
1033
- vec2 tmp[4];
1034
-
1035
- for (int i = 0; i < 4; i++)
1036
- {
1037
- for (int j = 0; j < 4; j++)
1038
- {
1039
- tmp[j] = b[j + i * 4];
1040
- }
1041
- vec4_dot_fp64(a, tmp, out_val[i]);
1042
- }
843
+ vec2 tmp[4];
844
+ for (int i = 0; i < 4; i++)
845
+ {
846
+ for (int j = 0; j < 4; j++)
847
+ {
848
+ tmp[j] = b[j + i * 4];
849
+ }
850
+ vec4_dot_fp64(a, tmp, out_val[i]);
851
+ }
1043
852
  }
1044
- `;var $t={ONE:1};function Xt(){return $t}var Qe={name:"fp64-arithmetic",vs:$e,getUniforms:Xt,fp64ify:ee,fp64LowPart:Pe,fp64ifyMatrix4:ye},te={name:"fp64",vs:Xe,dependencies:[Qe],fp64ify:ee,fp64LowPart:Pe,fp64ifyMatrix4:ye};var Bi=1/Math.PI*180,Di=1/180*Math.PI,Qt={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Qt}};var I=globalThis.mathgl.config;function Te(r){return Array.isArray(r)||ArrayBuffer.isView(r)&&!(r instanceof DataView)}function E(r,e,t){let i=I.EPSILON;t&&(I.EPSILON=t);try{if(r===e)return!0;if(Te(r)&&Te(e)){if(r.length!==e.length)return!1;for(let s=0;s<r.length;++s)if(!E(r[s],e[s]))return!1;return!0}return r&&r.equals?r.equals(e):e&&e.equals?e.equals(r):typeof r=="number"&&typeof e=="number"?Math.abs(r-e)<=I.EPSILON*Math.max(1,Math.abs(r),Math.abs(e)):!1}finally{I.EPSILON=i}}var R=typeof Float32Array<"u"?Float32Array:Array,be=Math.random;function re(r){return r>=0?Math.round(r):r%.5===0?Math.floor(r):Math.round(r)}var ji=Math.PI/180;var ie={};Ie(ie,{add:()=>sr,angle:()=>Fr,bezier:()=>xr,ceil:()=>or,clone:()=>er,copy:()=>rr,create:()=>Je,cross:()=>mr,dist:()=>Nr,distance:()=>st,div:()=>kr,divide:()=>it,dot:()=>Ae,equals:()=>Rr,exactEquals:()=>Ir,floor:()=>nr,forEach:()=>Vr,fromValues:()=>tr,hermite:()=>gr,inverse:()=>pr,len:()=>Br,length:()=>et,lerp:()=>hr,max:()=>lr,min:()=>ar,mul:()=>Sr,multiply:()=>rt,negate:()=>_r,normalize:()=>dr,random:()=>Pr,rotateX:()=>Er,rotateY:()=>Ar,rotateZ:()=>Mr,round:()=>fr,scale:()=>cr,scaleAndAdd:()=>ur,set:()=>ir,slerp:()=>vr,sqrDist:()=>wr,sqrLen:()=>Dr,squaredDistance:()=>ot,squaredLength:()=>nt,str:()=>Or,sub:()=>Cr,subtract:()=>tt,transformMat3:()=>Tr,transformMat4:()=>yr,transformQuat:()=>br,zero:()=>Lr});function Je(){let r=new R(3);return R!=Float32Array&&(r[0]=0,r[1]=0,r[2]=0),r}function er(r){let e=new R(3);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e}function et(r){let e=r[0],t=r[1],i=r[2];return Math.sqrt(e*e+t*t+i*i)}function tr(r,e,t){let i=new R(3);return i[0]=r,i[1]=e,i[2]=t,i}function rr(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r}function ir(r,e,t,i){return r[0]=e,r[1]=t,r[2]=i,r}function sr(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r}function tt(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],r}function rt(r,e,t){return r[0]=e[0]*t[0],r[1]=e[1]*t[1],r[2]=e[2]*t[2],r}function it(r,e,t){return r[0]=e[0]/t[0],r[1]=e[1]/t[1],r[2]=e[2]/t[2],r}function or(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r[2]=Math.ceil(e[2]),r}function nr(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r[2]=Math.floor(e[2]),r}function ar(r,e,t){return r[0]=Math.min(e[0],t[0]),r[1]=Math.min(e[1],t[1]),r[2]=Math.min(e[2],t[2]),r}function lr(r,e,t){return r[0]=Math.max(e[0],t[0]),r[1]=Math.max(e[1],t[1]),r[2]=Math.max(e[2],t[2]),r}function fr(r,e){return r[0]=re(e[0]),r[1]=re(e[1]),r[2]=re(e[2]),r}function cr(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r}function ur(r,e,t,i){return r[0]=e[0]+t[0]*i,r[1]=e[1]+t[1]*i,r[2]=e[2]+t[2]*i,r}function st(r,e){let t=e[0]-r[0],i=e[1]-r[1],s=e[2]-r[2];return Math.sqrt(t*t+i*i+s*s)}function ot(r,e){let t=e[0]-r[0],i=e[1]-r[1],s=e[2]-r[2];return t*t+i*i+s*s}function nt(r){let e=r[0],t=r[1],i=r[2];return e*e+t*t+i*i}function _r(r,e){return r[0]=-e[0],r[1]=-e[1],r[2]=-e[2],r}function pr(r,e){return r[0]=1/e[0],r[1]=1/e[1],r[2]=1/e[2],r}function dr(r,e){let t=e[0],i=e[1],s=e[2],o=t*t+i*i+s*s;return o>0&&(o=1/Math.sqrt(o)),r[0]=e[0]*o,r[1]=e[1]*o,r[2]=e[2]*o,r}function Ae(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]}function mr(r,e,t){let i=e[0],s=e[1],o=e[2],n=t[0],a=t[1],l=t[2];return r[0]=s*l-o*a,r[1]=o*n-i*l,r[2]=i*a-s*n,r}function hr(r,e,t,i){let s=e[0],o=e[1],n=e[2];return r[0]=s+i*(t[0]-s),r[1]=o+i*(t[1]-o),r[2]=n+i*(t[2]-n),r}function vr(r,e,t,i){let s=Math.acos(Math.min(Math.max(Ae(e,t),-1),1)),o=Math.sin(s),n=Math.sin((1-i)*s)/o,a=Math.sin(i*s)/o;return r[0]=n*e[0]+a*t[0],r[1]=n*e[1]+a*t[1],r[2]=n*e[2]+a*t[2],r}function gr(r,e,t,i,s,o){let n=o*o,a=n*(2*o-3)+1,l=n*(o-2)+o,f=n*(o-1),c=n*(3-2*o);return r[0]=e[0]*a+t[0]*l+i[0]*f+s[0]*c,r[1]=e[1]*a+t[1]*l+i[1]*f+s[1]*c,r[2]=e[2]*a+t[2]*l+i[2]*f+s[2]*c,r}function xr(r,e,t,i,s,o){let n=1-o,a=n*n,l=o*o,f=a*n,c=3*o*a,u=3*l*n,_=l*o;return r[0]=e[0]*f+t[0]*c+i[0]*u+s[0]*_,r[1]=e[1]*f+t[1]*c+i[1]*u+s[1]*_,r[2]=e[2]*f+t[2]*c+i[2]*u+s[2]*_,r}function Pr(r,e){e=e===void 0?1:e;let t=be()*2*Math.PI,i=be()*2-1,s=Math.sqrt(1-i*i)*e;return r[0]=Math.cos(t)*s,r[1]=Math.sin(t)*s,r[2]=i*e,r}function yr(r,e,t){let i=e[0],s=e[1],o=e[2],n=t[3]*i+t[7]*s+t[11]*o+t[15];return n=n||1,r[0]=(t[0]*i+t[4]*s+t[8]*o+t[12])/n,r[1]=(t[1]*i+t[5]*s+t[9]*o+t[13])/n,r[2]=(t[2]*i+t[6]*s+t[10]*o+t[14])/n,r}function Tr(r,e,t){let i=e[0],s=e[1],o=e[2];return r[0]=i*t[0]+s*t[3]+o*t[6],r[1]=i*t[1]+s*t[4]+o*t[7],r[2]=i*t[2]+s*t[5]+o*t[8],r}function br(r,e,t){let i=t[0],s=t[1],o=t[2],n=t[3],a=e[0],l=e[1],f=e[2],c=s*f-o*l,u=o*a-i*f,_=i*l-s*a,p=s*_-o*u,h=o*c-i*_,K=i*u-s*c,v=n*2;return c*=v,u*=v,_*=v,p*=2,h*=2,K*=2,r[0]=a+c+p,r[1]=l+u+h,r[2]=f+_+K,r}function Er(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[0],o[1]=s[1]*Math.cos(i)-s[2]*Math.sin(i),o[2]=s[1]*Math.sin(i)+s[2]*Math.cos(i),r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Ar(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[2]*Math.sin(i)+s[0]*Math.cos(i),o[1]=s[1],o[2]=s[2]*Math.cos(i)-s[0]*Math.sin(i),r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Mr(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[0]*Math.cos(i)-s[1]*Math.sin(i),o[1]=s[0]*Math.sin(i)+s[1]*Math.cos(i),o[2]=s[2],r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Fr(r,e){let t=r[0],i=r[1],s=r[2],o=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+i*i+s*s)*(o*o+n*n+a*a)),f=l&&Ae(r,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Lr(r){return r[0]=0,r[1]=0,r[2]=0,r}function Or(r){return"vec3(".concat(r[0],", ").concat(r[1],", ").concat(r[2],")")}function Ir(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]}function Rr(r,e){let t=r[0],i=r[1],s=r[2],o=e[0],n=e[1],a=e[2];return Math.abs(t-o)<=1e-6*Math.max(1,Math.abs(t),Math.abs(o))&&Math.abs(i-n)<=1e-6*Math.max(1,Math.abs(i),Math.abs(n))&&Math.abs(s-a)<=1e-6*Math.max(1,Math.abs(s),Math.abs(a))}var Cr=tt,Sr=rt,kr=it,Nr=st,wr=ot,Br=et,Dr=nt,Vr=function(){let r=Je();return function(e,t,i,s,o,n){let a,l;for(t||(t=3),i||(i=0),s?l=Math.min(s*t+i,e.length):l=e.length,a=i;a<l;a+=t)r[0]=e[a],r[1]=e[a+1],r[2]=e[a+2],o(r,r,n),e[a]=r[0],e[a+1]=r[1],e[a+2]=r[2];return e}}();var se=d(m(),1);var at=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
853
+ `;var Zt={ONE:1};function $t(){return Zt}var Xe={name:"fp64-arithmetic",vs:Ze,getUniforms:$t,fp64ify:J,fp64LowPart:xe,fp64ifyMatrix4:Pe},ee={name:"fp64",vs:$e,dependencies:[Xe],fp64ify:J,fp64LowPart:xe,fp64ifyMatrix4:Pe};var Si=1/Math.PI*180,ki=1/180*Math.PI,Xt={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Xt}};var I=globalThis.mathgl.config;function ye(r){return Array.isArray(r)||ArrayBuffer.isView(r)&&!(r instanceof DataView)}function A(r,e,t){let i=I.EPSILON;t&&(I.EPSILON=t);try{if(r===e)return!0;if(ye(r)&&ye(e)){if(r.length!==e.length)return!1;for(let s=0;s<r.length;++s)if(!A(r[s],e[s]))return!1;return!0}return r&&r.equals?r.equals(e):e&&e.equals?e.equals(r):typeof r=="number"&&typeof e=="number"?Math.abs(r-e)<=I.EPSILON*Math.max(1,Math.abs(r),Math.abs(e)):!1}finally{I.EPSILON=i}}var R=typeof Float32Array<"u"?Float32Array:Array,Te=Math.random;function te(r){return r>=0?Math.round(r):r%.5===0?Math.floor(r):Math.round(r)}var Bi=Math.PI/180;var re={};Oe(re,{add:()=>ir,angle:()=>Mr,bezier:()=>gr,ceil:()=>sr,clone:()=>Jt,copy:()=>tr,create:()=>Qe,cross:()=>dr,dist:()=>kr,distance:()=>it,div:()=>Sr,divide:()=>rt,dot:()=>Ae,equals:()=>Ir,exactEquals:()=>Or,floor:()=>or,forEach:()=>Dr,fromValues:()=>er,hermite:()=>vr,inverse:()=>_r,len:()=>Br,length:()=>Je,lerp:()=>mr,max:()=>ar,min:()=>nr,mul:()=>Cr,multiply:()=>tt,negate:()=>ur,normalize:()=>pr,random:()=>xr,rotateX:()=>br,rotateY:()=>Ar,rotateZ:()=>Er,round:()=>lr,scale:()=>fr,scaleAndAdd:()=>cr,set:()=>rr,slerp:()=>hr,sqrDist:()=>Nr,sqrLen:()=>wr,squaredDistance:()=>st,squaredLength:()=>ot,str:()=>Lr,sub:()=>Rr,subtract:()=>et,transformMat3:()=>yr,transformMat4:()=>Pr,transformQuat:()=>Tr,zero:()=>Fr});function Qe(){let r=new R(3);return R!=Float32Array&&(r[0]=0,r[1]=0,r[2]=0),r}function Jt(r){let e=new R(3);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e}function Je(r){let e=r[0],t=r[1],i=r[2];return Math.sqrt(e*e+t*t+i*i)}function er(r,e,t){let i=new R(3);return i[0]=r,i[1]=e,i[2]=t,i}function tr(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r}function rr(r,e,t,i){return r[0]=e,r[1]=t,r[2]=i,r}function ir(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r}function et(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],r}function tt(r,e,t){return r[0]=e[0]*t[0],r[1]=e[1]*t[1],r[2]=e[2]*t[2],r}function rt(r,e,t){return r[0]=e[0]/t[0],r[1]=e[1]/t[1],r[2]=e[2]/t[2],r}function sr(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r[2]=Math.ceil(e[2]),r}function or(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r[2]=Math.floor(e[2]),r}function nr(r,e,t){return r[0]=Math.min(e[0],t[0]),r[1]=Math.min(e[1],t[1]),r[2]=Math.min(e[2],t[2]),r}function ar(r,e,t){return r[0]=Math.max(e[0],t[0]),r[1]=Math.max(e[1],t[1]),r[2]=Math.max(e[2],t[2]),r}function lr(r,e){return r[0]=te(e[0]),r[1]=te(e[1]),r[2]=te(e[2]),r}function fr(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r}function cr(r,e,t,i){return r[0]=e[0]+t[0]*i,r[1]=e[1]+t[1]*i,r[2]=e[2]+t[2]*i,r}function it(r,e){let t=e[0]-r[0],i=e[1]-r[1],s=e[2]-r[2];return Math.sqrt(t*t+i*i+s*s)}function st(r,e){let t=e[0]-r[0],i=e[1]-r[1],s=e[2]-r[2];return t*t+i*i+s*s}function ot(r){let e=r[0],t=r[1],i=r[2];return e*e+t*t+i*i}function ur(r,e){return r[0]=-e[0],r[1]=-e[1],r[2]=-e[2],r}function _r(r,e){return r[0]=1/e[0],r[1]=1/e[1],r[2]=1/e[2],r}function pr(r,e){let t=e[0],i=e[1],s=e[2],o=t*t+i*i+s*s;return o>0&&(o=1/Math.sqrt(o)),r[0]=e[0]*o,r[1]=e[1]*o,r[2]=e[2]*o,r}function Ae(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]}function dr(r,e,t){let i=e[0],s=e[1],o=e[2],n=t[0],a=t[1],l=t[2];return r[0]=s*l-o*a,r[1]=o*n-i*l,r[2]=i*a-s*n,r}function mr(r,e,t,i){let s=e[0],o=e[1],n=e[2];return r[0]=s+i*(t[0]-s),r[1]=o+i*(t[1]-o),r[2]=n+i*(t[2]-n),r}function hr(r,e,t,i){let s=Math.acos(Math.min(Math.max(Ae(e,t),-1),1)),o=Math.sin(s),n=Math.sin((1-i)*s)/o,a=Math.sin(i*s)/o;return r[0]=n*e[0]+a*t[0],r[1]=n*e[1]+a*t[1],r[2]=n*e[2]+a*t[2],r}function vr(r,e,t,i,s,o){let n=o*o,a=n*(2*o-3)+1,l=n*(o-2)+o,f=n*(o-1),c=n*(3-2*o);return r[0]=e[0]*a+t[0]*l+i[0]*f+s[0]*c,r[1]=e[1]*a+t[1]*l+i[1]*f+s[1]*c,r[2]=e[2]*a+t[2]*l+i[2]*f+s[2]*c,r}function gr(r,e,t,i,s,o){let n=1-o,a=n*n,l=o*o,f=a*n,c=3*o*a,u=3*l*n,_=l*o;return r[0]=e[0]*f+t[0]*c+i[0]*u+s[0]*_,r[1]=e[1]*f+t[1]*c+i[1]*u+s[1]*_,r[2]=e[2]*f+t[2]*c+i[2]*u+s[2]*_,r}function xr(r,e){e=e===void 0?1:e;let t=Te()*2*Math.PI,i=Te()*2-1,s=Math.sqrt(1-i*i)*e;return r[0]=Math.cos(t)*s,r[1]=Math.sin(t)*s,r[2]=i*e,r}function Pr(r,e,t){let i=e[0],s=e[1],o=e[2],n=t[3]*i+t[7]*s+t[11]*o+t[15];return n=n||1,r[0]=(t[0]*i+t[4]*s+t[8]*o+t[12])/n,r[1]=(t[1]*i+t[5]*s+t[9]*o+t[13])/n,r[2]=(t[2]*i+t[6]*s+t[10]*o+t[14])/n,r}function yr(r,e,t){let i=e[0],s=e[1],o=e[2];return r[0]=i*t[0]+s*t[3]+o*t[6],r[1]=i*t[1]+s*t[4]+o*t[7],r[2]=i*t[2]+s*t[5]+o*t[8],r}function Tr(r,e,t){let i=t[0],s=t[1],o=t[2],n=t[3],a=e[0],l=e[1],f=e[2],c=s*f-o*l,u=o*a-i*f,_=i*l-s*a,p=s*_-o*u,h=o*c-i*_,K=i*u-s*c,v=n*2;return c*=v,u*=v,_*=v,p*=2,h*=2,K*=2,r[0]=a+c+p,r[1]=l+u+h,r[2]=f+_+K,r}function br(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[0],o[1]=s[1]*Math.cos(i)-s[2]*Math.sin(i),o[2]=s[1]*Math.sin(i)+s[2]*Math.cos(i),r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Ar(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[2]*Math.sin(i)+s[0]*Math.cos(i),o[1]=s[1],o[2]=s[2]*Math.cos(i)-s[0]*Math.sin(i),r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Er(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[0]*Math.cos(i)-s[1]*Math.sin(i),o[1]=s[0]*Math.sin(i)+s[1]*Math.cos(i),o[2]=s[2],r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Mr(r,e){let t=r[0],i=r[1],s=r[2],o=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+i*i+s*s)*(o*o+n*n+a*a)),f=l&&Ae(r,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Fr(r){return r[0]=0,r[1]=0,r[2]=0,r}function Lr(r){return"vec3(".concat(r[0],", ").concat(r[1],", ").concat(r[2],")")}function Or(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]}function Ir(r,e){let t=r[0],i=r[1],s=r[2],o=e[0],n=e[1],a=e[2];return Math.abs(t-o)<=1e-6*Math.max(1,Math.abs(t),Math.abs(o))&&Math.abs(i-n)<=1e-6*Math.max(1,Math.abs(i),Math.abs(n))&&Math.abs(s-a)<=1e-6*Math.max(1,Math.abs(s),Math.abs(a))}var Rr=et,Cr=tt,Sr=rt,kr=it,Nr=st,Br=Je,wr=ot,Dr=function(){let r=Qe();return function(e,t,i,s,o,n){let a,l;for(t||(t=3),i||(i=0),s?l=Math.min(s*t+i,e.length):l=e.length,a=i;a<l;a+=t)r[0]=e[a],r[1]=e[a+1],r[2]=e[a+2],o(r,r,n),e[a]=r[0],e[a+1]=r[1],e[a+2]=r[2];return e}}();var ie=d(m(),1);var nt=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
1045
854
  uniform vec2 project_uViewProjectionMatrixFP64[16];
1046
855
  void mercatorProject_fp64(vec4 lnglat_fp64, out vec2 out_val[2]) {
1047
856
  #if defined(NVIDIA_FP64_WORKAROUND)
@@ -1101,7 +910,7 @@ return project_position_to_clipspace(
1101
910
  position, position64xyLow, offset, commonPosition
1102
911
  );
1103
912
  }
1104
- `;var{fp64ify:jr,fp64ifyMatrix4:zr}=te,oe={name:"project64",dependencies:[se.project,te],vs:at,getUniforms:Ur},Gr=(0,se._memoize)(qr);function Ur(r){if(r&&"viewport"in r){let{viewProjectionMatrix:e,scale:t}=r.viewport;return Gr({viewProjectionMatrix:e,scale:t})}return{}}function qr({viewProjectionMatrix:r,scale:e}){let t=zr(r),i=jr(e);return{project_uViewProjectionMatrixFP64:t,project64_uViewProjectionMatrix:t,project64_uScale:i}}var Me=class extends C.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!==C.COORDINATE_SYSTEM.LNGLAT&&e!==C.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[oe]}}},S=Me;(()=>{Me.extensionName="Fp64Extension"})();var k=d(m(),1);var lt={inject:{"vs:#decl":`
913
+ `;var{fp64ify:Vr,fp64ifyMatrix4:jr}=ee,se={name:"project64",dependencies:[ie.project,ee],vs:nt,getUniforms:Gr},zr=(0,ie._memoize)(Ur);function Gr(r){if(r&&"viewport"in r){let{viewProjectionMatrix:e,scale:t}=r.viewport;return zr({viewProjectionMatrix:e,scale:t})}return{}}function Ur({viewProjectionMatrix:r,scale:e}){let t=jr(r),i=Vr(e);return{project_uViewProjectionMatrixFP64:t,project64_uViewProjectionMatrix:t,project64_uScale:i}}var Ee=class extends C.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!==C.COORDINATE_SYSTEM.LNGLAT&&e!==C.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[se]}}},S=Ee;(()=>{Ee.extensionName="Fp64Extension"})();var k=d(m(),1);var at={inject:{"vs:#decl":`
1105
914
  in vec2 instanceDashArrays;
1106
915
  in float instanceDashOffsets;
1107
916
  out vec2 vDashArray;
@@ -1146,7 +955,7 @@ discard;
1146
955
  }
1147
956
  }
1148
957
  }
1149
- `}},ft={inject:{"vs:#decl":`
958
+ `}},lt={inject:{"vs:#decl":`
1150
959
  in float instanceOffsets;
1151
960
  `,"vs:DECKGL_FILTER_SIZE":`
1152
961
  float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
@@ -1163,7 +972,7 @@ isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);
1163
972
  if (isInside == 0.0) {
1164
973
  discard;
1165
974
  }
1166
- `}};var Wr={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},ne=class extends k.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:i=!1}={}){super({dash:e||i,offset:t,highPrecisionDash:i})}isEnabled(e){return"pathTesselator"in e.state}getShaders(e){if(!e.isEnabled(this))return null;let t={};return e.opts.dash&&(t=(0,k._mergeShaders)(t,lt)),e.opts.offset&&(t=(0,k._mergeShaders)(t,ft)),t}initializeState(e,t){let i=this.getAttributeManager();!i||!t.isEnabled(this)||(t.opts.dash&&i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},instanceDashOffsets:t.opts.highPrecisionDash?{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}:{size:1,update:s=>{s.constant=!0,s.value=[0]}}}),t.opts.offset&&i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(!t.isEnabled(this))return;let i={};t.opts.dash&&(i.dashAlignMode=this.props.dashJustified?1:0,i.dashGapPickable=Boolean(this.props.dashGapPickable)),this.state.model?.setUniforms(i)}getDashOffsets(e){let t=[0],i=this.props.positionFormat==="XY"?2:3,s=Array.isArray(e[0]),o=s?e.length:e.length/i,n,a;for(let l=0;l<o-1;l++)n=s?e[l]:e.slice(l*i,l*i+i),n=this.projectPosition(n),l>0&&(t[l]=t[l-1]+ie.dist(a,n)),a=n;return t}},N=ne;(()=>{ne.defaultProps=Wr})(),(()=>{ne.extensionName="PathStyleExtension"})();var ut=d(m(),1);var w=d(m(),1);var Hr=`
975
+ `}};var qr={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},oe=class extends k.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:i=!1}={}){super({dash:e||i,offset:t,highPrecisionDash:i})}isEnabled(e){return"pathTesselator"in e.state}getShaders(e){if(!e.isEnabled(this))return null;let t={};return e.opts.dash&&(t=(0,k._mergeShaders)(t,at)),e.opts.offset&&(t=(0,k._mergeShaders)(t,lt)),t}initializeState(e,t){let i=this.getAttributeManager();!i||!t.isEnabled(this)||(t.opts.dash&&i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},instanceDashOffsets:t.opts.highPrecisionDash?{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}:{size:1,update:s=>{s.constant=!0,s.value=[0]}}}),t.opts.offset&&i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(!t.isEnabled(this))return;let i={};t.opts.dash&&(i.dashAlignMode=this.props.dashJustified?1:0,i.dashGapPickable=Boolean(this.props.dashGapPickable)),this.state.model?.setUniforms(i)}getDashOffsets(e){let t=[0],i=this.props.positionFormat==="XY"?2:3,s=Array.isArray(e[0]),o=s?e.length:e.length/i,n,a;for(let l=0;l<o-1;l++)n=s?e[l]:e.slice(l*i,l*i+i),n=this.projectPosition(n),l>0&&(t[l]=t[l-1]+re.dist(a,n)),a=n;return t}},N=oe;(()=>{oe.defaultProps=qr})(),(()=>{oe.extensionName="PathStyleExtension"})();var ct=d(m(),1);var B=d(m(),1);var Wr=`
1167
976
  #ifdef NON_INSTANCED_MODEL
1168
977
  #define FILL_PATTERN_FRAME_ATTRIB fillPatternFrames
1169
978
  #define FILL_PATTERN_SCALE_ATTRIB fillPatternScales
@@ -1181,7 +990,7 @@ uniform vec2 fill_patternTextureSize;
1181
990
  out vec2 fill_uv;
1182
991
  out vec4 fill_patternBounds;
1183
992
  out vec4 fill_patternPlacement;
1184
- `,Yr=`
993
+ `,Hr=`
1185
994
  uniform bool fill_patternEnabled;
1186
995
  uniform bool fill_patternMask;
1187
996
  uniform sampler2D fill_patternTexture;
@@ -1191,7 +1000,7 @@ in vec4 fill_patternBounds;
1191
1000
  in vec4 fill_patternPlacement;
1192
1001
  in vec2 fill_uv;
1193
1002
  const float FILL_UV_SCALE = 512.0 / 40000000.0;
1194
- `,Kr={"vs:DECKGL_FILTER_GL_POSITION":`
1003
+ `,Yr={"vs:DECKGL_FILTER_GL_POSITION":`
1195
1004
  fill_uv = geometry.position.xy;
1196
1005
  `,"vs:DECKGL_FILTER_COLOR":`
1197
1006
  if (fill_patternEnabled) {
@@ -1211,12 +1020,12 @@ if (!fill_patternMask) {
1211
1020
  color.rgb = patternColor.rgb;
1212
1021
  }
1213
1022
  }
1214
- `};function Zr(r,e){if(!r)return{};if("fillPatternTexture"in r){let{fillPatternTexture:t}=r;return{fill_patternTexture:t,fill_patternTextureSize:[t.width,t.height]}}if("viewport"in r){let{fillPatternMask:t=!0,fillPatternEnabled:i=!0}=r,{project_uCommonOrigin:s}=e,o=[(0,w.fp64LowPart)(s[0]),(0,w.fp64LowPart)(s[1])];return{fill_uvCoordinateOrigin:s.slice(0,2),fill_uvCoordinateOrigin64Low:o,fill_patternMask:t,fill_patternEnabled:i}}return{}}var ct={name:"fill-pattern",vs:Hr,fs:Yr,inject:Kr,dependencies:[w.project],getUniforms:Zr};var $r={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:{minFilter:"linear"}},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:r=>r.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},ae=class extends ut.LayerExtension{constructor({pattern:e=!1}={}){super({pattern:e})}isEnabled(e){return e.getAttributeManager()!==null&&!("pathTesselator"in e.state)}getShaders(e){return e.isEnabled(this)?{modules:[e.opts.pattern&&ct].filter(Boolean)}:null}initializeState(e,t){if(!t.isEnabled(this))return;let i=this.getAttributeManager();t.opts.pattern&&i.add({fillPatternFrames:{size:4,accessor:"getFillPattern",transform:t.getPatternFrame.bind(this),shaderAttributes:{fillPatternFrames:{divisor:0},instanceFillPatternFrames:{divisor:1}}},fillPatternScales:{size:1,accessor:"getFillPatternScale",defaultValue:1,shaderAttributes:{fillPatternScales:{divisor:0},instanceFillPatternScales:{divisor:1}}},fillPatternOffsets:{size:2,accessor:"getFillPatternOffset",shaderAttributes:{fillPatternOffsets:{divisor:0},instanceFillPatternOffsets:{divisor:1}}}}),this.setState({emptyTexture:this.context.device.createTexture({data:new Uint8Array(4),width:1,height:1})})}updateState({props:e,oldProps:t},i){i.isEnabled(this)&&e.fillPatternMapping&&e.fillPatternMapping!==t.fillPatternMapping&&this.getAttributeManager().invalidate("getFillPattern")}draw(e,t){if(!t.isEnabled(this))return;let{fillPatternAtlas:i}=this.props;this.setModuleParameters({fillPatternTexture:i||this.state.emptyTexture})}finalizeState(){this.state.emptyTexture?.delete()}getPatternFrame(e){let{fillPatternMapping:t}=this.getCurrentLayer().props,i=t&&t[e];return i?[i.x,i.y,i.width,i.height]:[0,0,0,0]}},B=ae;(()=>{ae.defaultProps=$r})(),(()=>{ae.extensionName="FillStyleExtension"})();var _t=d(m(),1);var Xr={clipBounds:[0,0,1,1],clipByInstance:void 0},pt=`
1023
+ `};function Kr(r,e){if(!r)return{};if("fillPatternTexture"in r){let{fillPatternTexture:t}=r;return{fill_patternTexture:t,fill_patternTextureSize:[t.width,t.height]}}if("viewport"in r){let{fillPatternMask:t=!0,fillPatternEnabled:i=!0}=r,{project_uCommonOrigin:s}=e,o=[(0,B.fp64LowPart)(s[0]),(0,B.fp64LowPart)(s[1])];return{fill_uvCoordinateOrigin:s.slice(0,2),fill_uvCoordinateOrigin64Low:o,fill_patternMask:t,fill_patternEnabled:i}}return{}}var ft={name:"fill-pattern",vs:Wr,fs:Hr,inject:Yr,dependencies:[B.project],getUniforms:Kr};var Zr={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:{minFilter:"linear"}},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:r=>r.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},ne=class extends ct.LayerExtension{constructor({pattern:e=!1}={}){super({pattern:e})}isEnabled(e){return e.getAttributeManager()!==null&&!("pathTesselator"in e.state)}getShaders(e){return e.isEnabled(this)?{modules:[e.opts.pattern&&ft].filter(Boolean)}:null}initializeState(e,t){if(!t.isEnabled(this))return;let i=this.getAttributeManager();t.opts.pattern&&i.add({fillPatternFrames:{size:4,accessor:"getFillPattern",transform:t.getPatternFrame.bind(this),shaderAttributes:{fillPatternFrames:{divisor:0},instanceFillPatternFrames:{divisor:1}}},fillPatternScales:{size:1,accessor:"getFillPatternScale",defaultValue:1,shaderAttributes:{fillPatternScales:{divisor:0},instanceFillPatternScales:{divisor:1}}},fillPatternOffsets:{size:2,accessor:"getFillPatternOffset",shaderAttributes:{fillPatternOffsets:{divisor:0},instanceFillPatternOffsets:{divisor:1}}}}),this.setState({emptyTexture:this.context.device.createTexture({data:new Uint8Array(4),width:1,height:1})})}updateState({props:e,oldProps:t},i){i.isEnabled(this)&&e.fillPatternMapping&&e.fillPatternMapping!==t.fillPatternMapping&&this.getAttributeManager().invalidate("getFillPattern")}draw(e,t){if(!t.isEnabled(this))return;let{fillPatternAtlas:i}=this.props;this.setModuleParameters({fillPatternTexture:i||this.state.emptyTexture})}finalizeState(){this.state.emptyTexture?.delete()}getPatternFrame(e){let{fillPatternMapping:t}=this.getCurrentLayer().props,i=t&&t[e];return i?[i.x,i.y,i.width,i.height]:[0,0,0,0]}},w=ne;(()=>{ne.defaultProps=Zr})(),(()=>{ne.extensionName="FillStyleExtension"})();var ut=d(m(),1);var $r={clipBounds:[0,0,1,1],clipByInstance:void 0},_t=`
1215
1024
  uniform vec4 clip_bounds;
1216
1025
  bool clip_isInBounds(vec2 position) {
1217
1026
  return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];
1218
1027
  }
1219
- `,Qr={name:"clip-vs",vs:pt},Jr={"vs:#decl":`
1028
+ `,Xr={name:"clip-vs",vs:_t},Qr={"vs:#decl":`
1220
1029
  out float clip_isVisible;
1221
1030
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1222
1031
  clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
@@ -1224,7 +1033,7 @@ clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
1224
1033
  in float clip_isVisible;
1225
1034
  `,"fs:DECKGL_FILTER_COLOR":`
1226
1035
  if (clip_isVisible < 0.5) discard;
1227
- `},ei={name:"clip-fs",fs:pt},ti={"vs:#decl":`
1036
+ `},Jr={name:"clip-fs",fs:_t},ei={"vs:#decl":`
1228
1037
  out vec2 clip_commonPosition;
1229
1038
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1230
1039
  clip_commonPosition = geometry.position.xy;
@@ -1232,7 +1041,7 @@ clip_commonPosition = geometry.position.xy;
1232
1041
  in vec2 clip_commonPosition;
1233
1042
  `,"fs:DECKGL_FILTER_COLOR":`
1234
1043
  if (!clip_isInBounds(clip_commonPosition)) discard;
1235
- `},le=class extends _t.LayerExtension{getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(e=Boolean(this.props.clipByInstance)),this.state.clipByInstance=e,e?{modules:[Qr],inject:Jr}:{modules:[ei],inject:ti}}draw({uniforms:e}){let{clipBounds:t}=this.props;if(this.state.clipByInstance)e.clip_bounds=t;else{let i=this.projectPosition([t[0],t[1],0]),s=this.projectPosition([t[2],t[3],0]);e.clip_bounds=[Math.min(i[0],s[0]),Math.min(i[1],s[1]),Math.max(i[0],s[0]),Math.max(i[1],s[1])]}}},D=le;(()=>{le.defaultProps=Xr})(),(()=>{le.extensionName="ClipExtension"})();var xt=d(m(),1);var dt=d(m(),1);var ri=`
1044
+ `},ae=class extends ut.LayerExtension{getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(e=Boolean(this.props.clipByInstance)),this.state.clipByInstance=e,e?{modules:[Xr],inject:Qr}:{modules:[Jr],inject:ei}}draw({uniforms:e}){let{clipBounds:t}=this.props;if(this.state.clipByInstance)e.clip_bounds=t;else{let i=this.projectPosition([t[0],t[1],0]),s=this.projectPosition([t[2],t[3],0]);e.clip_bounds=[Math.min(i[0],s[0]),Math.min(i[1],s[1]),Math.max(i[0],s[0]),Math.max(i[1],s[1])]}}},D=ae;(()=>{ae.defaultProps=$r})(),(()=>{ae.extensionName="ClipExtension"})();var gt=d(m(),1);var pt=d(m(),1);var ti=`
1236
1045
  #ifdef NON_INSTANCED_MODEL
1237
1046
  in float collisionPriorities;
1238
1047
  #else
@@ -1271,7 +1080,7 @@ delta.y += step.y;
1271
1080
  float W = 2.0 * floatN + 1.0;
1272
1081
  return pow(accumulator / (W * W), 2.2);
1273
1082
  }
1274
- `,ii={"vs:#decl":`
1083
+ `,ri={"vs:#decl":`
1275
1084
  float collision_fade = 1.0;
1276
1085
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1277
1086
  if (collision_sort) {
@@ -1292,13 +1101,13 @@ position = vec4(0.0, 0.0, 2.0, 1.0);
1292
1101
  }
1293
1102
  `,"vs:DECKGL_FILTER_COLOR":`
1294
1103
  color.a *= collision_fade;
1295
- `},si=(r,e)=>{if(!r||!("dummyCollisionMap"in r))return{};let{collisionFBO:t,drawToCollisionMap:i,dummyCollisionMap:s}=r;return{collision_sort:Boolean(i),collision_texture:!i&&t?t.colorAttachments[0]:s}},mt={name:"collision",dependencies:[dt.project],vs:ri,inject:ii,getUniforms:si};var gt=d(m(),1);var ht=d(m(),1),V=class extends ht._LayersPass{renderCollisionMap(e,t){let s=[0,0,0,0];return this.device.withParametersWebGL({scissorTest:!0,scissor:[1,1,e.width-2*1,e.height-2*1],blend:!1,depthTest:!0,depthRange:[0,1]},()=>this.render({...t,clearColor:s,target:e,pass:"collision"}))}getModuleParameters(){return{drawToCollisionMap:!0,picking:{isActive:1,isAttribute:!1},lightSources:{}}}};var Fe=d(m(),1);var vt=d(m(),1),j=class extends vt._LayersPass{constructor(e,t){super(e,t);let{mapSize:i=2048}=t;this.maskMap=e.createTexture({format:"rgba8unorm",width:i,height:i,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),this.fbo=e.createFramebuffer({id:"maskmap",width:i,height:i,colorAttachments:[this.maskMap]})}render(e){let t=[!1,!1,!1,!1];t[e.channel]=!0;let i=[255,255,255,255];return this.device.withParametersWebGL({blend:!0,blendFunc:[0,1],blendEquation:32778,colorMask:t,depthTest:!1},()=>super.render({...e,clearColor:i,target:this.fbo,pass:"mask"}))}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var fe=d(m(),1);function A(r,e){let t=[1/0,1/0,-1/0,-1/0];for(let i of r){let s=i.getBounds();if(s){let o=i.projectPosition(s[0],{viewport:e,autoOffset:!1}),n=i.projectPosition(s[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],o[0]),t[1]=Math.min(t[1],o[1]),t[2]=Math.max(t[2],n[0]),t[3]=Math.max(t[3],n[1])}}return Number.isFinite(t[0])?t:null}var oi=2048;function M(r){let{bounds:e,viewport:t,border:i=0}=r,{isGeospatial:s}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let o=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=r;if(l===void 0){n=n-i*2,a=a-i*2;let f=Math.min(n/(e[2]-e[0]),a/(e[3]-e[1]));l=Math.min(Math.log2(f),20)}else if(!n||!a){let f=2**l;n=Math.round(Math.abs(e[2]-e[0])*f),a=Math.round(Math.abs(e[3]-e[1])*f);let c=oi-i*2;if(n>c||a>c){let u=c/Math.max(n,a);n=Math.round(n*u),a=Math.round(a*u),l+=Math.log2(u)}}return s?new fe.WebMercatorViewport({id:t.id,x:i,y:i,width:n,height:a,longitude:o[0],latitude:o[1],zoom:l,orthographic:!0}):new fe.OrthographicViewport({id:t.id,x:i,y:i,width:n,height:a,target:o,zoom:l,flipY:!1})}function ni(r,e){let t;if(e&&e.length===2){let[o,n]=e,a=r.getBounds({z:o}),l=r.getBounds({z:n});t=[Math.min(a[0],l[0]),Math.min(a[1],l[1]),Math.max(a[2],l[2]),Math.max(a[3],l[3])]}else t=r.getBounds();let i=r.projectPosition(t.slice(0,2)),s=r.projectPosition(t.slice(2,4));return[i[0],i[1],s[0],s[1]]}function F(r,e,t){if(!r)return[0,0,1,1];let i=ni(e,t),s=ai(i);return r[2]-r[0]<=s[2]-s[0]&&r[3]-r[1]<=s[3]-s[1]?r:[Math.max(r[0],s[0]),Math.max(r[1],s[1]),Math.min(r[2],s[2]),Math.min(r[3],s[3])]}function ai(r){let e=r[2]-r[0],t=r[3]-r[1],i=(r[0]+r[2])/2,s=(r[1]+r[3])/2;return[i-e,s-t,i+e,s+t]}var T=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}preRender(e,{layers:t,layerFilter:i,viewports:s,onViewportActive:o,views:n,isPicking:a}){let l=!1;if(this.dummyMaskMap||(this.dummyMaskMap=e.createTexture({width:1,height:1})),a)return{didRender:l};let f=t.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={},this.maskPass||(this.maskPass=new j(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap);let c=this._sortMaskChannels(f),u=s[0],_=!this.lastViewport||!this.lastViewport.equals(u);if(u.resolution!==void 0)return Fe.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let p in c){let h=this._renderChannel(c[p],{layerFilter:i,onViewportActive:o,views:n,viewport:u,viewportChanged:_});l||=h}return{didRender:l}}_renderChannel(e,{layerFilter:t,onViewportActive:i,views:s,viewport:o,viewportChanged:n}){let a=!1,l=this.channels[e.index];if(!l)return a;let f=e===l||e.layers.length!==l.layers.length||e.layers.some((c,u)=>c!==l.layers[u]||c.props.transitions)||e.layerBounds.some((c,u)=>c!==l.layerBounds[u]);if(e.bounds=l.bounds,e.maskBounds=l.maskBounds,this.channels[e.index]=e,f||n){this.lastViewport=o;let c=A(e.layers,o);if(e.bounds=c&&F(c,o),f||!E(e.bounds,l.bounds)){let{maskPass:u,maskMap:_}=this,p=c&&M({bounds:e.bounds,viewport:o,width:_.width,height:_.height,border:1});e.maskBounds=p?p.getBounds():[0,0,1,1],u.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:p?[p]:[],onViewportActive:i,views:s,moduleParameters:{devicePixelRatio:1}}),a=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},a}_sortMaskChannels(e){let t={},i=0;for(let s of e){let{id:o}=s.root,n=t[o];if(!n){if(++i>4){Fe.log.warn("Too many mask layers. The max supported is 4")();continue}n={id:o,index:this.channels.findIndex(a=>a?.id===o),layers:[],layerBounds:[],coordinateOrigin:s.root.props.coordinateOrigin,coordinateSystem:s.root.props.coordinateSystem},t[o]=n}n.layers.push(s),n.layerBounds.push(s.getBounds())}for(let s=0;s<4;s++){let o=this.channels[s];(!o||!(o.id in t))&&(this.channels[s]=null)}for(let s in t){let o=t[s];o.index<0&&(o.index=this.channels.findIndex(n=>!n),this.channels[o.index]=o)}return t}getModuleParameters(){return{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}cleanup(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}};var Le=2,z=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}preRender(e,{effects:t,layers:i,layerFilter:s,viewports:o,onViewportActive:n,views:a,isPicking:l,preRenderStats:f={}}){if(this.dummyCollisionMap||(this.dummyCollisionMap=e.createTexture({width:1,height:1})),l)return;let c=i.filter(({props:{visible:v,collisionEnabled:xe}})=>v&&xe);if(c.length===0){this.channels={};return}this.collisionFilterPass||(this.collisionFilterPass=new V(e,{id:"default-collision-filter"}));let u=t?.filter(v=>v.constructor===T),_=f["mask-effect"]?.didRender,p=this._groupByCollisionGroup(e,c),h=o[0],K=!this.lastViewport||!this.lastViewport.equals(h)||_;for(let v in p){let xe=this.collisionFBOs[v],Ot=p[v],[It,Rt]=e.canvasContext.getPixelSize();xe.resize({width:It/Le,height:Rt/Le}),this._render(Ot,{effects:u,layerFilter:s,onViewportActive:n,views:a,viewport:h,viewportChanged:K})}}_render(e,{effects:t,layerFilter:i,onViewportActive:s,views:o,viewport:n,viewportChanged:a}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let c=a||e===f||!(0,gt._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((u,_)=>!E(u,f.layerBounds[_]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,c){this.lastViewport=n;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:i,viewports:n?[n]:[],onViewportActive:s,views:o,moduleParameters:{dummyCollisionMap:this.dummyCollisionMap,devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/Le}})}}_groupByCollisionGroup(e,t){let i={};for(let s of t){let{collisionGroup:o}=s.props,n=i[o];n||(n={collisionGroup:o,layers:[],layerBounds:[],allLayersLoaded:!0},i[o]=n),n.layers.push(s),n.layerBounds.push(s.getBounds()),s.isLoaded||(n.allLayersLoaded=!1)}for(let s of Object.keys(i))this.collisionFBOs[s]||this.createFBO(e,s),this.channels[s]||(this.channels[s]=i[s]);for(let s of Object.keys(this.collisionFBOs))i[s]||this.destroyFBO(s);return i}getModuleParameters(e){let{collisionGroup:t}=e.props,{collisionFBOs:i,dummyCollisionMap:s}=this;return{collisionFBO:i[t],dummyCollisionMap:s}}cleanup(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(let e of Object.keys(this.collisionFBOs))this.destroyFBO(e);this.collisionFBOs={},this.lastViewport=void 0}createFBO(e,t){let{width:i,height:s}=e.gl.canvas,o=e.createTexture({format:"rgba8unorm",width:i,height:s,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),n=e.createTexture({format:"depth16unorm",width:i,height:s,mipmaps:!1,dataFormat:6402,type:5125});this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:i,height:s,colorAttachments:[o],depthStencilAttachment:n})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}};var li={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},ce=class extends xt.LayerExtension{getShaders(){return{modules:[mt]}}draw({uniforms:e,context:t,moduleParameters:i}){let{collisionEnabled:s}=this.props,{collisionFBO:o,drawToCollisionMap:n}=i,a=s&&Boolean(o);e.collision_enabled=a,n&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,t){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new z),this.getAttributeManager().add({collisionPriorities:{size:1,accessor:"getCollisionPriority",shaderAttributes:{collisionPriorities:{divisor:0},instanceCollisionPriorities:{divisor:1}}}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}},G=ce;(()=>{ce.defaultProps=li})(),(()=>{ce.extensionName="CollisionFilterExtension"})();var y=d(m(),1);var Pt=d(m(),1);var fi=`
1104
+ `},ii=(r,e)=>{if(!r||!("dummyCollisionMap"in r))return{};let{collisionFBO:t,drawToCollisionMap:i,dummyCollisionMap:s}=r;return{collision_sort:Boolean(i),collision_texture:!i&&t?t.colorAttachments[0]:s}},dt={name:"collision",dependencies:[pt.project],vs:ti,inject:ri,getUniforms:ii};var vt=d(m(),1);var mt=d(m(),1),V=class extends mt._LayersPass{renderCollisionMap(e,t){let s=[0,0,0,0];return this.device.withParametersWebGL({scissorTest:!0,scissor:[1,1,e.width-2*1,e.height-2*1],blend:!1,depthTest:!0,depthRange:[0,1]},()=>this.render({...t,clearColor:s,target:e,pass:"collision"}))}getModuleParameters(){return{drawToCollisionMap:!0,picking:{isActive:1,isAttribute:!1},lightSources:{}}}};var Me=d(m(),1);var ht=d(m(),1),j=class extends ht._LayersPass{constructor(e,t){super(e,t);let{mapSize:i=2048}=t;this.maskMap=e.createTexture({format:"rgba8unorm",width:i,height:i,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),this.fbo=e.createFramebuffer({id:"maskmap",width:i,height:i,colorAttachments:[this.maskMap]})}render(e){let t=[!1,!1,!1,!1];t[e.channel]=!0;let i=[255,255,255,255];return this.device.withParametersWebGL({blend:!0,blendFunc:[0,1],blendEquation:32778,colorMask:t,depthTest:!1},()=>super.render({...e,clearColor:i,target:this.fbo,pass:"mask"}))}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var le=d(m(),1);function E(r,e){let t=[1/0,1/0,-1/0,-1/0];for(let i of r){let s=i.getBounds();if(s){let o=i.projectPosition(s[0],{viewport:e,autoOffset:!1}),n=i.projectPosition(s[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],o[0]),t[1]=Math.min(t[1],o[1]),t[2]=Math.max(t[2],n[0]),t[3]=Math.max(t[3],n[1])}}return Number.isFinite(t[0])?t:null}var si=2048;function M(r){let{bounds:e,viewport:t,border:i=0}=r,{isGeospatial:s}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let o=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=r;if(l===void 0){n=n-i*2,a=a-i*2;let f=Math.min(n/(e[2]-e[0]),a/(e[3]-e[1]));l=Math.min(Math.log2(f),20)}else if(!n||!a){let f=2**l;n=Math.round(Math.abs(e[2]-e[0])*f),a=Math.round(Math.abs(e[3]-e[1])*f);let c=si-i*2;if(n>c||a>c){let u=c/Math.max(n,a);n=Math.round(n*u),a=Math.round(a*u),l+=Math.log2(u)}}return s?new le.WebMercatorViewport({id:t.id,x:i,y:i,width:n,height:a,longitude:o[0],latitude:o[1],zoom:l,orthographic:!0}):new le.OrthographicViewport({id:t.id,x:i,y:i,width:n,height:a,target:o,zoom:l,flipY:!1})}function oi(r,e){let t;if(e&&e.length===2){let[o,n]=e,a=r.getBounds({z:o}),l=r.getBounds({z:n});t=[Math.min(a[0],l[0]),Math.min(a[1],l[1]),Math.max(a[2],l[2]),Math.max(a[3],l[3])]}else t=r.getBounds();let i=r.projectPosition(t.slice(0,2)),s=r.projectPosition(t.slice(2,4));return[i[0],i[1],s[0],s[1]]}function F(r,e,t){if(!r)return[0,0,1,1];let i=oi(e,t),s=ni(i);return r[2]-r[0]<=s[2]-s[0]&&r[3]-r[1]<=s[3]-s[1]?r:[Math.max(r[0],s[0]),Math.max(r[1],s[1]),Math.min(r[2],s[2]),Math.min(r[3],s[3])]}function ni(r){let e=r[2]-r[0],t=r[3]-r[1],i=(r[0]+r[2])/2,s=(r[1]+r[3])/2;return[i-e,s-t,i+e,s+t]}var T=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}preRender(e,{layers:t,layerFilter:i,viewports:s,onViewportActive:o,views:n,isPicking:a}){let l=!1;if(this.dummyMaskMap||(this.dummyMaskMap=e.createTexture({width:1,height:1})),a)return{didRender:l};let f=t.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={},this.maskPass||(this.maskPass=new j(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap);let c=this._sortMaskChannels(f),u=s[0],_=!this.lastViewport||!this.lastViewport.equals(u);if(u.resolution!==void 0)return Me.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let p in c){let h=this._renderChannel(c[p],{layerFilter:i,onViewportActive:o,views:n,viewport:u,viewportChanged:_});l||=h}return{didRender:l}}_renderChannel(e,{layerFilter:t,onViewportActive:i,views:s,viewport:o,viewportChanged:n}){let a=!1,l=this.channels[e.index];if(!l)return a;let f=e===l||e.layers.length!==l.layers.length||e.layers.some((c,u)=>c!==l.layers[u]||c.props.transitions)||e.layerBounds.some((c,u)=>c!==l.layerBounds[u]);if(e.bounds=l.bounds,e.maskBounds=l.maskBounds,this.channels[e.index]=e,f||n){this.lastViewport=o;let c=E(e.layers,o);if(e.bounds=c&&F(c,o),f||!A(e.bounds,l.bounds)){let{maskPass:u,maskMap:_}=this,p=c&&M({bounds:e.bounds,viewport:o,width:_.width,height:_.height,border:1});e.maskBounds=p?p.getBounds():[0,0,1,1],u.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:p?[p]:[],onViewportActive:i,views:s,moduleParameters:{devicePixelRatio:1}}),a=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},a}_sortMaskChannels(e){let t={},i=0;for(let s of e){let{id:o}=s.root,n=t[o];if(!n){if(++i>4){Me.log.warn("Too many mask layers. The max supported is 4")();continue}n={id:o,index:this.channels.findIndex(a=>a?.id===o),layers:[],layerBounds:[],coordinateOrigin:s.root.props.coordinateOrigin,coordinateSystem:s.root.props.coordinateSystem},t[o]=n}n.layers.push(s),n.layerBounds.push(s.getBounds())}for(let s=0;s<4;s++){let o=this.channels[s];(!o||!(o.id in t))&&(this.channels[s]=null)}for(let s in t){let o=t[s];o.index<0&&(o.index=this.channels.findIndex(n=>!n),this.channels[o.index]=o)}return t}getModuleParameters(){return{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}cleanup(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}};var Fe=2,z=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}preRender(e,{effects:t,layers:i,layerFilter:s,viewports:o,onViewportActive:n,views:a,isPicking:l,preRenderStats:f={}}){if(this.dummyCollisionMap||(this.dummyCollisionMap=e.createTexture({width:1,height:1})),l)return;let c=i.filter(({props:{visible:v,collisionEnabled:ge}})=>v&&ge);if(c.length===0){this.channels={};return}this.collisionFilterPass||(this.collisionFilterPass=new V(e,{id:"default-collision-filter"}));let u=t?.filter(v=>v.constructor===T),_=f["mask-effect"]?.didRender,p=this._groupByCollisionGroup(e,c),h=o[0],K=!this.lastViewport||!this.lastViewport.equals(h)||_;for(let v in p){let ge=this.collisionFBOs[v],Lt=p[v],[Ot,It]=e.canvasContext.getPixelSize();ge.resize({width:Ot/Fe,height:It/Fe}),this._render(Lt,{effects:u,layerFilter:s,onViewportActive:n,views:a,viewport:h,viewportChanged:K})}}_render(e,{effects:t,layerFilter:i,onViewportActive:s,views:o,viewport:n,viewportChanged:a}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let c=a||e===f||!(0,vt._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((u,_)=>!A(u,f.layerBounds[_]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,c){this.lastViewport=n;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:i,viewports:n?[n]:[],onViewportActive:s,views:o,moduleParameters:{dummyCollisionMap:this.dummyCollisionMap,devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/Fe}})}}_groupByCollisionGroup(e,t){let i={};for(let s of t){let{collisionGroup:o}=s.props,n=i[o];n||(n={collisionGroup:o,layers:[],layerBounds:[],allLayersLoaded:!0},i[o]=n),n.layers.push(s),n.layerBounds.push(s.getBounds()),s.isLoaded||(n.allLayersLoaded=!1)}for(let s of Object.keys(i))this.collisionFBOs[s]||this.createFBO(e,s),this.channels[s]||(this.channels[s]=i[s]);for(let s of Object.keys(this.collisionFBOs))i[s]||this.destroyFBO(s);return i}getModuleParameters(e){let{collisionGroup:t}=e.props,{collisionFBOs:i,dummyCollisionMap:s}=this;return{collisionFBO:i[t],dummyCollisionMap:s}}cleanup(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(let e of Object.keys(this.collisionFBOs))this.destroyFBO(e);this.collisionFBOs={},this.lastViewport=void 0}createFBO(e,t){let{width:i,height:s}=e.gl.canvas,o=e.createTexture({format:"rgba8unorm",width:i,height:s,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),n=e.createTexture({format:"depth16unorm",width:i,height:s,mipmaps:!1,dataFormat:6402,type:5125});this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:i,height:s,colorAttachments:[o],depthStencilAttachment:n})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}};var ai={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},fe=class extends gt.LayerExtension{getShaders(){return{modules:[dt]}}draw({uniforms:e,context:t,moduleParameters:i}){let{collisionEnabled:s}=this.props,{collisionFBO:o,drawToCollisionMap:n}=i,a=s&&Boolean(o);e.collision_enabled=a,n&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,t){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new z),this.getAttributeManager().add({collisionPriorities:{size:1,accessor:"getCollisionPriority",shaderAttributes:{collisionPriorities:{divisor:0},instanceCollisionPriorities:{divisor:1}}}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}},G=fe;(()=>{fe.defaultProps=ai})(),(()=>{fe.extensionName="CollisionFilterExtension"})();var y=d(m(),1);var xt=d(m(),1);var li=`
1296
1105
  uniform vec4 mask_bounds;
1297
1106
  uniform bool mask_maskByInstance;
1298
1107
  vec2 mask_getCoords(vec4 position) {
1299
1108
  return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);
1300
1109
  }
1301
- `,ci=`
1110
+ `,fi=`
1302
1111
  uniform sampler2D mask_texture;
1303
1112
  uniform int mask_channel;
1304
1113
  uniform bool mask_enabled;
@@ -1324,7 +1133,7 @@ return maskValue >= 0.5;
1324
1133
  return maskValue < 0.5;
1325
1134
  }
1326
1135
  }
1327
- `,ui={"vs:#decl":`
1136
+ `,ci={"vs:#decl":`
1328
1137
  out vec2 mask_texCoords;
1329
1138
  `,"vs:#main-end":`
1330
1139
  vec4 mask_common_position;
@@ -1342,13 +1151,13 @@ bool mask = mask_isInBounds(mask_texCoords);
1342
1151
  fragColor = texture(mask_texture, mask_texCoords);
1343
1152
  if (!mask) discard;
1344
1153
  }
1345
- `},_i=r=>r&&"maskMap"in r?{mask_texture:r.maskMap}:{},yt={name:"mask",dependencies:[Pt.project],vs:fi,fs:ci,inject:ui,getUniforms:_i};var pi={maskId:"",maskByInstance:void 0,maskInverted:!1},ue=class extends y.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new T)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=Boolean(this.props.maskByInstance)),this.state.maskByInstance=e,{modules:[yt]}}draw({uniforms:e,context:t,moduleParameters:i}){e.mask_maskByInstance=this.state.maskByInstance;let{maskId:s,maskInverted:o}=this.props,{maskChannels:n}=i,{viewport:a}=t;if(n&&n[s]){let{index:l,bounds:f,coordinateOrigin:c}=n[s],{coordinateSystem:u}=n[s];e.mask_enabled=!0,e.mask_channel=l,e.mask_inverted=o,u===y.COORDINATE_SYSTEM.DEFAULT&&(u=a.isGeospatial?y.COORDINATE_SYSTEM.LNGLAT:y.COORDINATE_SYSTEM.CARTESIAN);let _={modelMatrix:null,fromCoordinateOrigin:c,fromCoordinateSystem:u},p=this.projectPosition([f[0],f[1],0],_),h=this.projectPosition([f[2],f[3],0],_);e.mask_bounds=[p[0],p[1],h[0],h[1]]}else s&&y.log.warn(`Could not find a mask layer with id: ${s}`)(),e.mask_enabled=!1}},U=ue;(()=>{ue.defaultProps=pi})(),(()=>{ue.extensionName="MaskExtension"})();var Lt=d(m(),1);var ve=d(m(),1);var bt=d(m(),1);var x={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},Tt=Object.keys(x).map(r=>`const float TERRAIN_MODE_${r} = ${x[r]}.0;`).join(`
1346
- `),_e={name:"terrain",dependencies:[bt.project],inject:{"vs:#decl":`
1154
+ `},ui=r=>r&&"maskMap"in r?{mask_texture:r.maskMap}:{},Pt={name:"mask",dependencies:[xt.project],vs:li,fs:fi,inject:ci,getUniforms:ui};var _i={maskId:"",maskByInstance:void 0,maskInverted:!1},ce=class extends y.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new T)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=Boolean(this.props.maskByInstance)),this.state.maskByInstance=e,{modules:[Pt]}}draw({uniforms:e,context:t,moduleParameters:i}){e.mask_maskByInstance=this.state.maskByInstance;let{maskId:s,maskInverted:o}=this.props,{maskChannels:n}=i,{viewport:a}=t;if(n&&n[s]){let{index:l,bounds:f,coordinateOrigin:c}=n[s],{coordinateSystem:u}=n[s];e.mask_enabled=!0,e.mask_channel=l,e.mask_inverted=o,u===y.COORDINATE_SYSTEM.DEFAULT&&(u=a.isGeospatial?y.COORDINATE_SYSTEM.LNGLAT:y.COORDINATE_SYSTEM.CARTESIAN);let _={modelMatrix:null,fromCoordinateOrigin:c,fromCoordinateSystem:u},p=this.projectPosition([f[0],f[1],0],_),h=this.projectPosition([f[2],f[3],0],_);e.mask_bounds=[p[0],p[1],h[0],h[1]]}else s&&y.log.warn(`Could not find a mask layer with id: ${s}`)(),e.mask_enabled=!1}},U=ce;(()=>{ce.defaultProps=_i})(),(()=>{ce.extensionName="MaskExtension"})();var Ft=d(m(),1);var he=d(m(),1);var Tt=d(m(),1);var x={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},yt=Object.keys(x).map(r=>`const float TERRAIN_MODE_${r} = ${x[r]}.0;`).join(`
1155
+ `),ue={name:"terrain",dependencies:[Tt.project],inject:{"vs:#decl":`
1347
1156
  uniform float terrain_mode;
1348
1157
  uniform sampler2D terrain_map;
1349
1158
  uniform vec4 terrain_bounds;
1350
1159
  out vec3 commonPos;
1351
- `+Tt,"vs:#main-start":`
1160
+ `+yt,"vs:#main-start":`
1352
1161
  if (terrain_mode == TERRAIN_MODE_SKIP) {
1353
1162
  gl_Position = vec4(0.0);
1354
1163
  return;
@@ -1376,7 +1185,7 @@ uniform float terrain_mode;
1376
1185
  uniform sampler2D terrain_map;
1377
1186
  uniform vec4 terrain_bounds;
1378
1187
  in vec3 commonPos;
1379
- `+Tt,"fs:#main-start":`
1188
+ `+yt,"fs:#main-start":`
1380
1189
  if (terrain_mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
1381
1190
  fragColor = vec4(commonPos.z, 0.0, 0.0, 1.0);
1382
1191
  return;
@@ -1392,6 +1201,6 @@ color = pixel + color * (1.0 - pixel.a);
1392
1201
  }
1393
1202
  return;
1394
1203
  }
1395
- `},getUniforms:(r={},e)=>{if("dummyHeightMap"in r){let{drawToTerrainHeightMap:t,heightMap:i,heightMapBounds:s,dummyHeightMap:o,terrainCover:n,useTerrainHeightMap:a,terrainSkipRender:l}=r,{project_uCommonOrigin:f}=e,c=l?x.SKIP:x.NONE,u=o,_=null;if(t)c=x.WRITE_HEIGHT_MAP,_=s;else if(a&&i)c=x.USE_HEIGHT_MAP,u=i,_=s;else if(n){let p=r.picking?.isActive;u=p?n.getPickingFramebuffer():n.getRenderFramebuffer(),p&&(c=x.SKIP),u?(c=c===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,_=n.bounds):u=o}return{terrain_mode:c,terrain_map:u,terrain_bounds:_?[_[0]-f[0],_[1]-f[1],_[2]-_[0],_[3]-_[1]]:[0,0,0,0]}}return null}};function q(r,e){return r.createFramebuffer({id:e.id,colorAttachments:[r.createTexture({...e.float&&{format:"rgba32float",type:5126},mipmaps:!1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}})]})}var pe=class{constructor(e){this.isDirty=!0,this.renderViewport=null,this.bounds=null,this.layers=[],this.targetBounds=null,this.targetBoundsCommon=null,this.targetLayer=e,this.tile=Et(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:i,layerNeedsRedraw:s}){e&&(this.targetLayer=e);let o=t?this._updateViewport(t):!1,n=i?this._updateLayers(i):!1;if(s){for(let a of this.layers)if(s[a]){n=!0;break}}return n||o}_updateLayers(e){let t=!1;if(e=this.tile?di(this.tile,e):e,e.length!==this.layers.length)t=!0;else for(let i=0;i<e.length;i++)if(e[i].id!==this.layers[i]){t=!0;break}return t&&(this.layers=e.map(i=>i.id)),t}_updateViewport(e){let t=this.targetLayer,i=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){i=!0,this.targetBounds=this.tile.boundingBox;let o=e.projectPosition(this.targetBounds[0]),n=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(i=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=A([t],e));if(!this.targetBoundsCommon)return!1;let s=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let o=this.renderViewport?.zoom;i=i||s!==o;let n=F(this.targetBoundsCommon,e),a=this.bounds;i=i||!a||n.some((l,f)=>l!==a[f]),this.bounds=n}return i&&(this.renderViewport=M({bounds:this.bounds,zoom:s,viewport:e})),i}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=q(this.targetLayer.context.device,{id:this.id})),this.fbo)}getPickingFramebuffer(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=q(this.targetLayer.context.device,{id:`${this.id}-picking`})),this.pickingFbo)}filterLayers(e){return e.filter(({id:t})=>this.layers.includes(t))}delete(){let{fbo:e,pickingFbo:t}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),t&&(t.colorAttachments[0].destroy(),t.destroy())}};function di(r,e){return e.filter(t=>{let i=Et(t);return i?mi(r.boundingBox,i.boundingBox):!0})}function Et(r){for(;r;){let{tile:e}=r.props;if(e)return e;r=r.parent}return null}function mi(r,e){return r&&e?r[0][0]<e[1][0]&&e[0][0]<r[1][0]&&r[0][1]<e[1][1]&&e[0][1]<r[1][1]:!1}var At=d(m(),1),de=class extends At._LayersPass{getRenderableLayers(e,t){let{layers:i}=t,s=[],o=this._getDrawLayerParams(e,t,!0);for(let n=0;n<i.length;n++){let a=i[n];!a.isComposite&&o[n].shouldDrawLayer&&s.push(a)}return s}renderHeightMap(e,t){let i=e.getRenderFramebuffer(),s=e.renderViewport;!i||!s||(i.resize(s),this.device.withParametersWebGL({clearColor:[0,0,0,0],blend:!0,blendFunc:[1,1],blendEquation:32776,depthTest:!1},()=>this.render({...t,target:i,pass:"terrain-height-map",layers:t.layers,viewports:[s],effects:[]})))}renderTerrainCover(e,t){let i=e.getRenderFramebuffer(),s=e.renderViewport;if(!i||!s)return;let o=e.filterLayers(t.layers);i.resize(s),this.device.withParametersWebGL({clearColor:[0,0,0,0],depthTest:!1},()=>this.render({...t,target:i,pass:`terrain-cover-${e.id}`,layers:o,effects:[],viewports:[s]}))}};var Mt=d(m(),1),me=class extends Mt._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:i}=t,s=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let o=this._getDrawLayerParams(e,t);for(let n=0;n<i.length;n++){let a=i[n];!a.isComposite&&o[n].shouldDrawLayer&&(s.push(a),this.drawParameters[a.id]=o[n].layerParameters)}return s}renderTerrainCover(e,t){let i=e.getPickingFramebuffer(),s=e.renderViewport;if(!i||!s)return;let o=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&o.unshift(n),i.resize(s),this.device.withParametersWebGL({depthTest:!1},()=>this.render({...t,pickingFBO:i,pass:`terrain-cover-picking-${e.id}`,layers:o,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1}))}getLayerParameters(e,t,i){if(this.drawParameters[e.id])return this.drawParameters[e.id];let s=super.getLayerParameters(e,t,i);return s.blend=!0,s}};var Ft=2048,W=class{static isSupported(e){return e.isTextureFormatRenderable("rgba32float")}constructor(e){this.renderViewport=null,this.bounds=null,this.layers=[],this.layersBounds=[],this.layersBoundsCommon=null,this.lastViewport=null,this.device=e}getRenderFramebuffer(){return this.renderViewport?(this.fbo||(this.fbo=q(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:t}){let i=e.length!==this.layers.length||e.some((o,n)=>o!==this.layers[n]||o.props.transitions||o.getBounds()!==this.layersBounds[n]);i&&(this.layers=e,this.layersBounds=e.map(o=>o.getBounds()),this.layersBoundsCommon=A(e,t));let s=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(i||s){let o=F(this.layersBoundsCommon,t);if(o[2]<=o[0]||o[3]<=o[1])return this.renderViewport=null,!1;this.bounds=o,this.lastViewport=t;let n=t.scale,a=(o[2]-o[0])*n,l=(o[3]-o[1])*n;return this.renderViewport=a>0||l>0?M({bounds:[t.center[0]-1,t.center[1]-1,t.center[0]+1,t.center[1]+1],zoom:t.zoom,width:Math.min(a,Ft),height:Math.min(l,Ft),viewport:t}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var he=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}initialize(e){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new de(e,{id:"terrain"}),this.terrainPickingPass=new me(e,{id:"terrain-picking"}),W.isSupported(e)?this.heightMap=new W(e):ve.log.warn("Terrain offset mode is not supported by this browser")(),(0,ve.getShaderAssembler)().addDefaultModule(_e)}preRender(e,t){if(!this.dummyHeightMap){this.initialize(e);for(let f of t.layers)f.props.operation.includes("terrain")&&f.setChangeFlags({extensionsChanged:!0})}if(t.pickZ){this.isDrapingEnabled=!1;return}let{viewports:i}=t,s=t.pass.startsWith("picking");this.isPicking=s,this.isDrapingEnabled=!0;let o=i[0],n=(s?this.terrainPickingPass:this.terrainPass).getRenderableLayers(o,t),a=n.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;s||n.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,o,t);let l=n.filter(f=>f.state.terrainDrawMode==="drape");this._updateTerrainCovers(a,l,o,t)}getModuleParameters(e){let{terrainDrawMode:t}=e.state;return{heightMap:this.heightMap?.getRenderFramebuffer(),heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap:t==="offset",terrainSkipRender:t==="drape"||!e.props.operation.includes("draw")}}cleanup(){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let e of this.terrainCovers.values())e.delete();this.terrainCovers.clear()}_updateHeightMap(e,t,i){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:t})||this.terrainPass.renderHeightMap(this.heightMap,{...i,layers:e,moduleParameters:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,devicePixelRatio:1,drawToTerrainHeightMap:!0}})}_updateTerrainCovers(e,t,i,s){let o={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(o[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:o});for(let n of e)this._updateTerrainCover(n,t,i,s);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,i,s){let o=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new pe(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:i,layers:t});(this.isPicking||n.isDirty||a)&&(o.renderTerrainCover(n,{...s,layers:t,moduleParameters:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1,devicePixelRatio:1}}),this.isPicking||(n.isDirty=!1))}catch(a){e.raiseError(a,`Error rendering terrain cover ${n.id}`)}}_pruneTerrainCovers(){let e=[];for(let[t,i]of this.terrainCovers)i.isActive||e.push(t);for(let t of e)this.terrainCovers.delete(t)}};var hi={terrainDrawMode:void 0},ge=class extends Lt.LayerExtension{getShaders(){return{modules:[_e]}}initializeState(){this.context.deck?._addDefaultEffect(new he)}updateState(e){let{props:t,oldProps:i}=e;if(this.state.terrainDrawMode&&t.terrainDrawMode===i.terrainDrawMode&&t.extruded===i.extruded)return;let{terrainDrawMode:s}=t;if(!s){let o=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;s=o||a?"offset":"drape"}this.setState({terrainDrawMode:s})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}},H=ge;(()=>{ge.defaultProps=hi})(),(()=>{ge.extensionName="TerrainExtension"})();return Bt(Y);})();
1204
+ `},getUniforms:(r={},e)=>{if("dummyHeightMap"in r){let{drawToTerrainHeightMap:t,heightMap:i,heightMapBounds:s,dummyHeightMap:o,terrainCover:n,useTerrainHeightMap:a,terrainSkipRender:l}=r,{project_uCommonOrigin:f}=e,c=l?x.SKIP:x.NONE,u=o,_=null;if(t)c=x.WRITE_HEIGHT_MAP,_=s;else if(a&&i)c=x.USE_HEIGHT_MAP,u=i,_=s;else if(n){let p=r.picking?.isActive;u=(p?n.getPickingFramebuffer():n.getRenderFramebuffer())?.colorAttachments[0].texture,p&&(c=x.SKIP),u?(c=c===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,_=n.bounds):u=o}return{terrain_mode:c,terrain_map:u,terrain_bounds:_?[_[0]-f[0],_[1]-f[1],_[2]-_[0],_[3]-_[1]]:[0,0,0,0]}}return null}};function q(r,e){return r.createFramebuffer({id:e.id,colorAttachments:[r.createTexture({...e.float&&{format:"rgba32float",type:5126},mipmaps:!1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}})]})}var _e=class{constructor(e){this.isDirty=!0,this.renderViewport=null,this.bounds=null,this.layers=[],this.targetBounds=null,this.targetBoundsCommon=null,this.targetLayer=e,this.tile=bt(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:i,layerNeedsRedraw:s}){e&&(this.targetLayer=e);let o=t?this._updateViewport(t):!1,n=i?this._updateLayers(i):!1;if(s){for(let a of this.layers)if(s[a]){n=!0;break}}return n||o}_updateLayers(e){let t=!1;if(e=this.tile?pi(this.tile,e):e,e.length!==this.layers.length)t=!0;else for(let i=0;i<e.length;i++)if(e[i].id!==this.layers[i]){t=!0;break}return t&&(this.layers=e.map(i=>i.id)),t}_updateViewport(e){let t=this.targetLayer,i=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){i=!0,this.targetBounds=this.tile.boundingBox;let o=e.projectPosition(this.targetBounds[0]),n=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(i=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=E([t],e));if(!this.targetBoundsCommon)return!1;let s=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let o=this.renderViewport?.zoom;i=i||s!==o;let n=F(this.targetBoundsCommon,e),a=this.bounds;i=i||!a||n.some((l,f)=>l!==a[f]),this.bounds=n}return i&&(this.renderViewport=M({bounds:this.bounds,zoom:s,viewport:e})),i}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=q(this.targetLayer.context.device,{id:this.id})),this.fbo)}getPickingFramebuffer(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=q(this.targetLayer.context.device,{id:`${this.id}-picking`})),this.pickingFbo)}filterLayers(e){return e.filter(({id:t})=>this.layers.includes(t))}delete(){let{fbo:e,pickingFbo:t}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),t&&(t.colorAttachments[0].destroy(),t.destroy())}};function pi(r,e){return e.filter(t=>{let i=bt(t);return i?di(r.boundingBox,i.boundingBox):!0})}function bt(r){for(;r;){let{tile:e}=r.props;if(e)return e;r=r.parent}return null}function di(r,e){return r&&e?r[0][0]<e[1][0]&&e[0][0]<r[1][0]&&r[0][1]<e[1][1]&&e[0][1]<r[1][1]:!1}var At=d(m(),1),pe=class extends At._LayersPass{getRenderableLayers(e,t){let{layers:i}=t,s=[],o=this._getDrawLayerParams(e,t,!0);for(let n=0;n<i.length;n++){let a=i[n];!a.isComposite&&o[n].shouldDrawLayer&&s.push(a)}return s}renderHeightMap(e,t){let i=e.getRenderFramebuffer(),s=e.renderViewport;!i||!s||(i.resize(s),this.device.withParametersWebGL({clearColor:[0,0,0,0],blend:!0,blendFunc:[1,1],blendEquation:32776,depthTest:!1},()=>this.render({...t,target:i,pass:"terrain-height-map",layers:t.layers,viewports:[s],effects:[]})))}renderTerrainCover(e,t){let i=e.getRenderFramebuffer(),s=e.renderViewport;if(!i||!s)return;let o=e.filterLayers(t.layers);i.resize(s),this.device.withParametersWebGL({clearColor:[0,0,0,0],depthTest:!1},()=>this.render({...t,target:i,pass:`terrain-cover-${e.id}`,layers:o,effects:[],viewports:[s]}))}};var Et=d(m(),1),de=class extends Et._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:i}=t,s=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let o=this._getDrawLayerParams(e,t);for(let n=0;n<i.length;n++){let a=i[n];!a.isComposite&&o[n].shouldDrawLayer&&(s.push(a),this.drawParameters[a.id]=o[n].layerParameters)}return s}renderTerrainCover(e,t){let i=e.getPickingFramebuffer(),s=e.renderViewport;if(!i||!s)return;let o=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&o.unshift(n),i.resize(s),this.device.withParametersWebGL({depthTest:!1},()=>this.render({...t,pickingFBO:i,pass:`terrain-cover-picking-${e.id}`,layers:o,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1}))}getLayerParameters(e,t,i){if(this.drawParameters[e.id])return this.drawParameters[e.id];let s=super.getLayerParameters(e,t,i);return s.blend=!0,s}};var Mt=2048,W=class{static isSupported(e){return e.isTextureFormatRenderable("rgba32float")}constructor(e){this.renderViewport=null,this.bounds=null,this.layers=[],this.layersBounds=[],this.layersBoundsCommon=null,this.lastViewport=null,this.device=e}getRenderFramebuffer(){return this.renderViewport?(this.fbo||(this.fbo=q(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:t}){let i=e.length!==this.layers.length||e.some((o,n)=>o!==this.layers[n]||o.props.transitions||o.getBounds()!==this.layersBounds[n]);i&&(this.layers=e,this.layersBounds=e.map(o=>o.getBounds()),this.layersBoundsCommon=E(e,t));let s=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(i||s){let o=F(this.layersBoundsCommon,t);if(o[2]<=o[0]||o[3]<=o[1])return this.renderViewport=null,!1;this.bounds=o,this.lastViewport=t;let n=t.scale,a=(o[2]-o[0])*n,l=(o[3]-o[1])*n;return this.renderViewport=a>0||l>0?M({bounds:[t.center[0]-1,t.center[1]-1,t.center[0]+1,t.center[1]+1],zoom:t.zoom,width:Math.min(a,Mt),height:Math.min(l,Mt),viewport:t}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var me=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}initialize(e){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new pe(e,{id:"terrain"}),this.terrainPickingPass=new de(e,{id:"terrain-picking"}),W.isSupported(e)?this.heightMap=new W(e):he.log.warn("Terrain offset mode is not supported by this browser")(),(0,he.getShaderAssembler)().addDefaultModule(ue)}preRender(e,t){if(!this.dummyHeightMap){this.initialize(e);for(let f of t.layers)f.props.operation.includes("terrain")&&f.setChangeFlags({extensionsChanged:!0})}if(t.pickZ){this.isDrapingEnabled=!1;return}let{viewports:i}=t,s=t.pass.startsWith("picking");this.isPicking=s,this.isDrapingEnabled=!0;let o=i[0],n=(s?this.terrainPickingPass:this.terrainPass).getRenderableLayers(o,t),a=n.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;s||n.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,o,t);let l=n.filter(f=>f.state.terrainDrawMode==="drape");this._updateTerrainCovers(a,l,o,t)}getModuleParameters(e){let{terrainDrawMode:t}=e.state;return{heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap:t==="offset",terrainSkipRender:t==="drape"||!e.props.operation.includes("draw")}}cleanup(){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let e of this.terrainCovers.values())e.delete();this.terrainCovers.clear()}_updateHeightMap(e,t,i){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:t})||this.terrainPass.renderHeightMap(this.heightMap,{...i,layers:e,moduleParameters:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,devicePixelRatio:1,drawToTerrainHeightMap:!0}})}_updateTerrainCovers(e,t,i,s){let o={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(o[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:o});for(let n of e)this._updateTerrainCover(n,t,i,s);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,i,s){let o=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new _e(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:i,layers:t});(this.isPicking||n.isDirty||a)&&(o.renderTerrainCover(n,{...s,layers:t,moduleParameters:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1,devicePixelRatio:1}}),this.isPicking||(n.isDirty=!1))}catch(a){e.raiseError(a,`Error rendering terrain cover ${n.id}`)}}_pruneTerrainCovers(){let e=[];for(let[t,i]of this.terrainCovers)i.isActive||e.push(t);for(let t of e)this.terrainCovers.delete(t)}};var mi={terrainDrawMode:void 0},ve=class extends Ft.LayerExtension{getShaders(){return{modules:[ue]}}initializeState(){this.context.deck?._addDefaultEffect(new me)}updateState(e){let{props:t,oldProps:i}=e;if(this.state.terrainDrawMode&&t.terrainDrawMode===i.terrainDrawMode&&t.extruded===i.extruded)return;let{terrainDrawMode:s}=t;if(!s){let o=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;s=o||a?"offset":"drape"}this.setState({terrainDrawMode:s})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}},H=ve;(()=>{ve.defaultProps=mi})(),(()=>{ve.extensionName="TerrainExtension"})();return Bt(Y);})();
1396
1205
  return __exports__;
1397
1206
  });