@deck.gl/extensions 9.3.7 → 9.4.0-alpha.2

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,13 +4,13 @@
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 Ut=Object.create;var X=Object.defineProperty;var Gt=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var qt=Object.getPrototypeOf,Wt=Object.prototype.hasOwnProperty;var Te=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ae=(r,e)=>{for(var t in e)X(r,t,{get:e[t],enumerable:!0})},Z=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ht(e))!Wt.call(r,o)&&o!==t&&X(r,o,{get:()=>e[o],enumerable:!(i=Gt(e,o))||i.enumerable});return r},y=(r,e,t)=>(Z(r,e,"default"),t&&Z(t,e,"default")),d=(r,e,t)=>(t=r!=null?Ut(qt(r)):{},Z(e||!r||!r.__esModule?X(t,"default",{value:r,enumerable:!0}):t,r)),Kt=r=>Z(X({},"__esModule",{value:!0}),r);var _=Te((Vi,Le)=>{Le.exports=globalThis.deck});var He=Te((Wi,Ge)=>{Ge.exports=globalThis.luma});var $={};Ae($,{BrushingExtension:()=>Ce,ClipExtension:()=>bt,CollisionFilterExtension:()=>Lt,DataFilterExtension:()=>Ze,FillStyleExtension:()=>xt,Fp64Extension:()=>ct,MaskExtension:()=>Rt,PathStyleExtension:()=>mt,_TerrainExtension:()=>jt,project64:()=>re});var x={},Oe=d(_(),1);y(x,d(_(),1));if(!Oe.Layer)throw new Error("@deck.gl/core is not found");y($,x);var Re=d(_(),1);var Se=d(_(),1),Ie=`layout(std140) uniform brushingUniforms {
7
+ "use strict";var __exports__=(()=>{var Yt=Object.create;var Q=Object.defineProperty;var Kt=Object.getOwnPropertyDescriptor;var $t=Object.getOwnPropertyNames;var Zt=Object.getPrototypeOf,Jt=Object.prototype.hasOwnProperty;var Ae=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),Se=(i,e)=>{for(var t in e)Q(i,t,{get:e[t],enumerable:!0})},X=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $t(e))!Jt.call(i,o)&&o!==t&&Q(i,o,{get:()=>e[o],enumerable:!(r=Kt(e,o))||r.enumerable});return i},y=(i,e,t)=>(X(i,e,"default"),t&&X(t,e,"default")),d=(i,e,t)=>(t=i!=null?Yt(Zt(i)):{},X(e||!i||!i.__esModule?Q(t,"default",{value:i,enumerable:!0}):t,i)),Xt=i=>X(Q({},"__esModule",{value:!0}),i);var _=Ae((qr,Ie)=>{Ie.exports=globalThis.deck});var Ye=Ae((Jr,We)=>{We.exports=globalThis.luma});var J={};Se(J,{BrushingExtension:()=>Be,ClipExtension:()=>Ft,CollisionFilterExtension:()=>It,DataFilterExtension:()=>Qe,FillStyleExtension:()=>Pt,Fp64Extension:()=>dt,MaskExtension:()=>Nt,PathStyleExtension:()=>gt,_TerrainExtension:()=>Wt,project64:()=>oe});var x={},Ce=d(_(),1);y(x,d(_(),1));if(!Ce.Layer)throw new Error("@deck.gl/core is not found");y(J,x);var Ne=d(_(),1);var Re=d(_(),1),ke=`layout(std140) uniform brushingUniforms {
8
8
  bool enabled;
9
9
  highp int target;
10
10
  vec2 mousePos;
11
11
  float radius;
12
12
  } brushing;
13
- `,Yt=`
13
+ `,Qt=`
14
14
  in vec2 brushingTargets;
15
15
 
16
16
  out float brushing_isVisible;
@@ -33,15 +33,15 @@
33
33
  void brushing_setVisible(bool visible) {
34
34
  brushing_isVisible = float(visible);
35
35
  }
36
- `,$t=`
37
- ${Ie}
38
- ${Yt}
39
- `,Zt=`
36
+ `,ei=`
37
+ ${ke}
38
+ ${Qt}
39
+ `,ti=`
40
40
  in float brushing_isVisible;
41
- `,Xt=`
42
- ${Ie}
43
- ${Zt}
44
- `,Qt={source:0,target:1,custom:2,source_target:3},Jt={"vs:DECKGL_FILTER_GL_POSITION":`
41
+ `,ii=`
42
+ ${ke}
43
+ ${ti}
44
+ `,ri={source:0,target:1,custom:2,source_target:3},oi={"vs:DECKGL_FILTER_GL_POSITION":`
45
45
  vec2 brushingTarget;
46
46
  vec2 brushingSource;
47
47
  if (brushing.target == 3) {
@@ -65,7 +65,7 @@ ${Zt}
65
65
  if (brushing.enabled && brushing_isVisible < 0.5) {
66
66
  discard;
67
67
  }
68
- `},ke={name:"brushing",dependencies:[Se.project],vs:$t,fs:Xt,inject:Jt,getUniforms:r=>{if(!r||!("viewport"in r))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:i="source",mousePosition:o,viewport:s}=r;return{enabled:Boolean(e&&o&&s.containsPixel(o)),radius:t,target:Qt[i]||0,mousePos:o?s.unproject([o.x-s.x,o.y-s.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var er={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},S=class extends Re.LayerExtension{getShaders(){return{modules:[ke]}}initializeState(e,t){let i=this.getAttributeManager();i&&i.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let o=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=o,e.deck&&e.deck.eventManager.on({pointermove:o,pointerleave:o})}finalizeState(e,t){if(e.deck){let i=this.state.onMouseMove;e.deck.eventManager.off({pointermove:i,pointerleave:i})}}draw(e,t){let{viewport:i,mousePosition:o}=e.context,{brushingEnabled:s,brushingRadius:a,brushingTarget:n}=this.props,l={viewport:i,mousePosition:o,brushingEnabled:s,brushingRadius:a,brushingTarget:n};this.setShaderModuleProps({brushing:l})}};S.defaultProps=er;S.extensionName="BrushingExtension";var Ce=S;var M=d(_(),1);var we=`layout(std140) uniform dataFilterUniforms {
68
+ `},we={name:"brushing",dependencies:[Re.project],vs:ei,fs:ii,inject:oi,getUniforms:i=>{if(!i||!("viewport"in i))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:r="source",mousePosition:o,viewport:s}=i;return{enabled:Boolean(e&&o&&s.containsPixel(o)),radius:t,target:ri[r]||0,mousePos:o?s.unproject([o.x-s.x,o.y-s.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var si={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},S=class extends Ne.LayerExtension{getShaders(){return{modules:[we]}}initializeState(e,t){let r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let o=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=o,e.deck&&e.deck.eventManager.on({pointermove:o,pointerleave:o})}finalizeState(e,t){if(e.deck){let r=this.state.onMouseMove;e.deck.eventManager.off({pointermove:r,pointerleave:r})}}draw(e,t){let{viewport:r,mousePosition:o}=e.context,{brushingEnabled:s,brushingRadius:n,brushingTarget:a}=this.props,l={viewport:r,mousePosition:o,brushingEnabled:s,brushingRadius:n,brushingTarget:a};this.setShaderModuleProps({brushing:l})}};S.defaultProps=si;S.extensionName="BrushingExtension";var Be=S;var E=d(_(),1);var De=`layout(std140) uniform dataFilterUniforms {
69
69
  bool useSoftMargin;
70
70
  bool enabled;
71
71
  bool transformSize;
@@ -78,7 +78,7 @@ ${Zt}
78
78
  vec4 max64High;
79
79
  highp uvec4 categoryBitMask;
80
80
  } dataFilter;
81
- `,tr=`
81
+ `,ni=`
82
82
  #ifdef DATAFILTER_TYPE
83
83
  in DATAFILTER_TYPE filterValues;
84
84
  #ifdef DATAFILTER_DOUBLE
@@ -239,15 +239,15 @@ float dataFilter_reduceValue(vec4 value) {
239
239
  #endif
240
240
  }
241
241
  #endif
242
- `,Ne=`
243
- ${we}
244
- ${tr}
245
- `,rr=`
242
+ `,ze=`
243
+ ${De}
244
+ ${ni}
245
+ `,ai=`
246
246
  in float dataFilter_value;
247
- `,Be=`
248
- ${we}
249
- ${rr}
250
- `;function De(r){if(!r||!("extensions"in r))return{};let{filterRange:e=[-1,1],filterEnabled:t=!0,filterTransformSize:i=!0,filterTransformColor:o=!0,categoryBitMask:s}=r,a=r.filterSoftRange||e,n=l=>Array.isArray(l)?[l[0]||0,l[1]||0,l[2]||0,l[3]||0]:[l,0,0,0];return{...Number.isFinite(e[0])?{min:n(e[0]),softMin:n(a[0]),softMax:n(a[1]),max:n(e[1])}:{min:n(e.map(l=>l[0])),softMin:n(a.map(l=>l[0])),softMax:n(a.map(l=>l[1])),max:n(e.map(l=>l[1]))},enabled:t,useSoftMargin:Boolean(r.filterSoftRange),transformSize:t&&i,transformColor:t&&o,...s&&{categoryBitMask:s}}}function ir(r){if(!r||!("extensions"in r))return{};let e=De(r),t=e.min.map(Math.fround);e.min=e.min.map((o,s)=>o-t[s]),e.softMin=e.softMin.map((o,s)=>o-t[s]),e.min64High=t;let i=e.max.map(Math.fround);return e.max=e.max.map((o,s)=>o-i[s]),e.softMax=e.softMax.map((o,s)=>o-i[s]),e.max64High=i,e}var ze={"vs:#main-start":`
247
+ `,Ve=`
248
+ ${De}
249
+ ${ai}
250
+ `;function je(i){if(!i||!("extensions"in i))return{};let{filterRange:e=[-1,1],filterEnabled:t=!0,filterTransformSize:r=!0,filterTransformColor:o=!0,categoryBitMask:s}=i,n=i.filterSoftRange||e,a=l=>Array.isArray(l)?[l[0]||0,l[1]||0,l[2]||0,l[3]||0]:[l,0,0,0];return{...Number.isFinite(e[0])?{min:a(e[0]),softMin:a(n[0]),softMax:a(n[1]),max:a(e[1])}:{min:a(e.map(l=>l[0])),softMin:a(n.map(l=>l[0])),softMax:a(n.map(l=>l[1])),max:a(e.map(l=>l[1]))},enabled:t,useSoftMargin:Boolean(i.filterSoftRange),transformSize:t&&r,transformColor:t&&o,...s&&{categoryBitMask:s}}}function li(i){if(!i||!("extensions"in i))return{};let e=je(i),t=e.min.map(Math.fround);e.min=e.min.map((o,s)=>o-t[s]),e.softMin=e.softMin.map((o,s)=>o-t[s]),e.min64High=t;let r=e.max.map(Math.fround);return e.max=e.max.map((o,s)=>o-r[s]),e.softMax=e.softMax.map((o,s)=>o-r[s]),e.max64High=r,e}var Ue={"vs:#main-start":`
251
251
  dataFilter_value = 1.0;
252
252
  if (dataFilter.enabled) {
253
253
  #ifdef DATAFILTER_TYPE
@@ -278,7 +278,7 @@ ${rr}
278
278
  if (dataFilter.transformColor) {
279
279
  color.a *= dataFilter_value;
280
280
  }
281
- `};function Ve(r){return{useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32",min:"vec4<f32>",softMin:"vec4<f32>",softMax:"vec4<f32>",max:"vec4<f32>",min64High:"vec4<f32>",max64High:"vec4<f32>",categoryBitMask:"vec4<u32>"}}var je={name:"dataFilter",vs:Ne,fs:Be,inject:ze,getUniforms:De,uniformTypesFromOptions:Ve},Ue={name:"dataFilter",vs:Ne,fs:Be,inject:ze,getUniforms:ir,uniformTypesFromOptions:Ve};var qe=d(He(),1),or=`#version 300 es
281
+ `};function Ge(i){return{useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32",min:"vec4<f32>",softMin:"vec4<f32>",softMax:"vec4<f32>",max:"vec4<f32>",min64High:"vec4<f32>",max64High:"vec4<f32>",categoryBitMask:"vec4<u32>"}}var He={name:"dataFilter",vs:ze,fs:Ve,inject:Ue,getUniforms:je,uniformTypesFromOptions:Ge},qe={name:"dataFilter",vs:ze,fs:Ve,inject:Ue,getUniforms:li,uniformTypesFromOptions:Ge};var Ke=d(Ye(),1),fi=`#version 300 es
282
282
  #define SHADER_NAME data-filter-vertex-shader
283
283
 
284
284
  #ifdef FLOAT_TARGET
@@ -309,7 +309,7 @@ void main() {
309
309
  #endif
310
310
  gl_PointSize = 1.0;
311
311
  }
312
- `,sr=`#version 300 es
312
+ `,ci=`#version 300 es
313
313
  #define SHADER_NAME data-filter-fragment-shader
314
314
  precision highp float;
315
315
 
@@ -323,7 +323,7 @@ void main() {
323
323
  }
324
324
  fragColor = vColor;
325
325
  }
326
- `,ar=["float32-renderable-webgl","texture-blend-float-webgl"];function We(r){return ar.every(e=>r.features.has(e))}function Ke(r,e){return e?r.createFramebuffer({width:1,height:1,colorAttachments:[r.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):r.createFramebuffer({width:256,height:64,colorAttachments:[r.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function Ye(r,e,t,i){return t.defines.NON_INSTANCED_MODEL=1,i&&(t.defines.FLOAT_TARGET=1),new qe.Model(r,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:or,fs:sr,bufferLayout:e,...t})}var $e={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var lr={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},fr={categorySize:0,filterSize:1,fp64:!1,countItems:!1},cr={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},pr={1:"float",2:"vec2",3:"vec3",4:"vec4"},I=class extends M.LayerExtension{constructor(e={}){super({...fr,...e})}getShaders(e){let{categorySize:t,filterSize:i,fp64:o}=e.opts,s={};t&&(s.DATACATEGORY_TYPE=cr[t],s.DATACATEGORY_CHANNELS=t),i&&(s.DATAFILTER_TYPE=pr[i],s.DATAFILTER_DOUBLE=Boolean(o));let a=o?Ue:je;return a.uniformTypes=a.uniformTypesFromOptions(e.opts),{modules:[a],defines:s}}initializeState(e,t){let i=this.getAttributeManager(),{categorySize:o,filterSize:s,fp64:a}=t.opts;i&&(s&&i.add({filterValues:{size:s,type:a?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),o&&i.add({filterCategoryValues:{size:o,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:o===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((f,p)=>t._getCategoryKey.call(this,f,p))}}));let{device:n}=this.context;if(i&&t.opts.countItems){let l=We(n);i.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(c,{index:u})=>{let m=c&&c.__source?c.__source.index:u;return l?(m+1)%255:[(m+1)%255,Math.floor(m/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=Ke(n,l),p=Ye(n,i.getBufferLayouts({isInstanced:!1}),t.getShaders.call(this,t),l);this.setState({filterFBO:f,filterModel:p})}}updateState({props:e,oldProps:t,changeFlags:i},o){let s=this.getAttributeManager(),{categorySize:a}=o.opts;if(this.state.filterModel){let n=s.attributes.filterValues?.needsUpdate()||s.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;n&&this.setState({filterNeedsUpdate:n})}s?.attributes.filterCategoryValues&&((s.attributes.filterCategoryValues.needsUpdate()||!(0,M._deepEqual)(e.filterCategories,t.filterCategories,2))&&this.setState({categoryBitMask:null}),i.dataChanged&&(this.setState({categoryMap:Array(a).fill(0).map(()=>({}))}),s.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,t){let i=this.state.filterFBO,o=this.state.filterModel,s=this.state.filterNeedsUpdate;this.state.categoryBitMask||t._updateCategoryBitMask.call(this,e,t);let{onFilteredItemsChange:a,extensions:n,filterEnabled:l,filterRange:f,filterSoftRange:p,filterTransformSize:c,filterTransformColor:u,filterCategories:m}=this.props,h={extensions:n,filterEnabled:l,filterRange:f,filterSoftRange:p,filterTransformSize:c,filterTransformColor:u,filterCategories:m};if(this.state.categoryBitMask&&(h.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:h}),s&&a&&o){let b=this.getAttributeManager(),{attributes:{filterValues:v,filterCategoryValues:O,filterVertexIndices:fe}}=b;o.setVertexCount(this.getNumInstances());let ce={...v?.getValue(),...O?.getValue(),...fe?.getValue()};o.setAttributes(ce),o.shaderInputs.setProps({dataFilter:h});let pe=[0,0,i.width,i.height],Me=o.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:i,parameters:{viewport:pe},clearColor:[0,0,0,0]});o.setParameters($e),o.draw(Me),Me.end();let Ee=o.device.readPixelsToArrayWebGL(i),Fe=0;for(let ue=0;ue<Ee.length;ue++)Fe+=Ee[ue];a({id:this.id,count:Fe}),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;if(!i)return;let{filterCategories:o}=this.props,s=new Uint32Array([0,0,0,0]),a=i===1?[o]:o,n=i===1?128:i===2?64:32;for(let l=0;l<a.length;l++){let f=a[l];for(let p of f){let c=t._getCategoryKey.call(this,p,l);if(c<n){let u=l*(n/32)+Math.floor(c/32);s[u]+=Math.pow(2,c%32)}else M.log.warn(`Exceeded maximum number of categories (${n})`)()}}this.state.categoryBitMask=s}_getCategoryKey(e,t){let i=this.state.categoryMap[t];return e in i||(i[e]=Object.keys(i).length),i[e]}};I.defaultProps=lr;I.extensionName="DataFilterExtension";var Ze=I;var ft=d(_(),1);var $i=1/Math.PI*180,Zi=1/180*Math.PI,ur={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...ur}};var k=globalThis.mathgl.config;function de(r){return Array.isArray(r)||ArrayBuffer.isView(r)&&!(r instanceof DataView)}function E(r,e,t){let i=k.EPSILON;t&&(k.EPSILON=t);try{if(r===e)return!0;if(de(r)&&de(e)){if(r.length!==e.length)return!1;for(let o=0;o<r.length;++o)if(!E(r[o],e[o]))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)<=k.EPSILON*Math.max(1,Math.abs(r),Math.abs(e)):!1}finally{k.EPSILON=i}}var R=typeof Float32Array<"u"?Float32Array:Array,_e=Math.random;function Q(r){return r>=0?Math.round(r):r%.5===0?Math.floor(r):Math.round(r)}var Qi=Math.PI/180;var C={};Ae(C,{add:()=>gr,angle:()=>jr,bezier:()=>Rr,ceil:()=>xr,clone:()=>_r,copy:()=>hr,create:()=>Xe,cross:()=>Or,dist:()=>$r,distance:()=>rt,div:()=>Yr,divide:()=>tt,dot:()=>he,equals:()=>qr,exactEquals:()=>Hr,floor:()=>yr,forEach:()=>Jr,fromValues:()=>mr,hermite:()=>kr,inverse:()=>Ar,len:()=>Xr,length:()=>Qe,lerp:()=>Sr,max:()=>br,min:()=>Pr,mul:()=>Kr,multiply:()=>et,negate:()=>Tr,normalize:()=>Lr,random:()=>Cr,rotateX:()=>Dr,rotateY:()=>zr,rotateZ:()=>Vr,round:()=>Mr,scale:()=>Er,scaleAndAdd:()=>Fr,set:()=>vr,slerp:()=>Ir,sqrDist:()=>Zr,sqrLen:()=>Qr,squaredDistance:()=>it,squaredLength:()=>ot,str:()=>Gr,sub:()=>Wr,subtract:()=>Je,transformMat3:()=>Nr,transformMat4:()=>wr,transformQuat:()=>Br,zero:()=>Ur});function Xe(){let r=new R(3);return R!=Float32Array&&(r[0]=0,r[1]=0,r[2]=0),r}function _r(r){let e=new R(3);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e}function Qe(r){let e=r[0],t=r[1],i=r[2];return Math.sqrt(e*e+t*t+i*i)}function mr(r,e,t){let i=new R(3);return i[0]=r,i[1]=e,i[2]=t,i}function hr(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r}function vr(r,e,t,i){return r[0]=e,r[1]=t,r[2]=i,r}function gr(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r}function Je(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 xr(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r[2]=Math.ceil(e[2]),r}function yr(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r[2]=Math.floor(e[2]),r}function Pr(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 br(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 Mr(r,e){return r[0]=Q(e[0]),r[1]=Q(e[1]),r[2]=Q(e[2]),r}function Er(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r}function Fr(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 rt(r,e){let t=e[0]-r[0],i=e[1]-r[1],o=e[2]-r[2];return Math.sqrt(t*t+i*i+o*o)}function it(r,e){let t=e[0]-r[0],i=e[1]-r[1],o=e[2]-r[2];return t*t+i*i+o*o}function ot(r){let e=r[0],t=r[1],i=r[2];return e*e+t*t+i*i}function Tr(r,e){return r[0]=-e[0],r[1]=-e[1],r[2]=-e[2],r}function Ar(r,e){return r[0]=1/e[0],r[1]=1/e[1],r[2]=1/e[2],r}function Lr(r,e){let t=e[0],i=e[1],o=e[2],s=t*t+i*i+o*o;return s>0&&(s=1/Math.sqrt(s)),r[0]=e[0]*s,r[1]=e[1]*s,r[2]=e[2]*s,r}function he(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]}function Or(r,e,t){let i=e[0],o=e[1],s=e[2],a=t[0],n=t[1],l=t[2];return r[0]=o*l-s*n,r[1]=s*a-i*l,r[2]=i*n-o*a,r}function Sr(r,e,t,i){let o=e[0],s=e[1],a=e[2];return r[0]=o+i*(t[0]-o),r[1]=s+i*(t[1]-s),r[2]=a+i*(t[2]-a),r}function Ir(r,e,t,i){let o=Math.acos(Math.min(Math.max(he(e,t),-1),1)),s=Math.sin(o),a=Math.sin((1-i)*o)/s,n=Math.sin(i*o)/s;return r[0]=a*e[0]+n*t[0],r[1]=a*e[1]+n*t[1],r[2]=a*e[2]+n*t[2],r}function kr(r,e,t,i,o,s){let a=s*s,n=a*(2*s-3)+1,l=a*(s-2)+s,f=a*(s-1),p=a*(3-2*s);return r[0]=e[0]*n+t[0]*l+i[0]*f+o[0]*p,r[1]=e[1]*n+t[1]*l+i[1]*f+o[1]*p,r[2]=e[2]*n+t[2]*l+i[2]*f+o[2]*p,r}function Rr(r,e,t,i,o,s){let a=1-s,n=a*a,l=s*s,f=n*a,p=3*s*n,c=3*l*a,u=l*s;return r[0]=e[0]*f+t[0]*p+i[0]*c+o[0]*u,r[1]=e[1]*f+t[1]*p+i[1]*c+o[1]*u,r[2]=e[2]*f+t[2]*p+i[2]*c+o[2]*u,r}function Cr(r,e){e=e===void 0?1:e;let t=_e()*2*Math.PI,i=_e()*2-1,o=Math.sqrt(1-i*i)*e;return r[0]=Math.cos(t)*o,r[1]=Math.sin(t)*o,r[2]=i*e,r}function wr(r,e,t){let i=e[0],o=e[1],s=e[2],a=t[3]*i+t[7]*o+t[11]*s+t[15];return a=a||1,r[0]=(t[0]*i+t[4]*o+t[8]*s+t[12])/a,r[1]=(t[1]*i+t[5]*o+t[9]*s+t[13])/a,r[2]=(t[2]*i+t[6]*o+t[10]*s+t[14])/a,r}function Nr(r,e,t){let i=e[0],o=e[1],s=e[2];return r[0]=i*t[0]+o*t[3]+s*t[6],r[1]=i*t[1]+o*t[4]+s*t[7],r[2]=i*t[2]+o*t[5]+s*t[8],r}function Br(r,e,t){let i=t[0],o=t[1],s=t[2],a=t[3],n=e[0],l=e[1],f=e[2],p=o*f-s*l,c=s*n-i*f,u=i*l-o*n,m=o*u-s*c,h=s*p-i*u,b=i*c-o*p,v=a*2;return p*=v,c*=v,u*=v,m*=2,h*=2,b*=2,r[0]=n+p+m,r[1]=l+c+h,r[2]=f+u+b,r}function Dr(r,e,t,i){let o=[],s=[];return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],s[0]=o[0],s[1]=o[1]*Math.cos(i)-o[2]*Math.sin(i),s[2]=o[1]*Math.sin(i)+o[2]*Math.cos(i),r[0]=s[0]+t[0],r[1]=s[1]+t[1],r[2]=s[2]+t[2],r}function zr(r,e,t,i){let o=[],s=[];return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],s[0]=o[2]*Math.sin(i)+o[0]*Math.cos(i),s[1]=o[1],s[2]=o[2]*Math.cos(i)-o[0]*Math.sin(i),r[0]=s[0]+t[0],r[1]=s[1]+t[1],r[2]=s[2]+t[2],r}function Vr(r,e,t,i){let o=[],s=[];return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],s[0]=o[0]*Math.cos(i)-o[1]*Math.sin(i),s[1]=o[0]*Math.sin(i)+o[1]*Math.cos(i),s[2]=o[2],r[0]=s[0]+t[0],r[1]=s[1]+t[1],r[2]=s[2]+t[2],r}function jr(r,e){let t=r[0],i=r[1],o=r[2],s=e[0],a=e[1],n=e[2],l=Math.sqrt((t*t+i*i+o*o)*(s*s+a*a+n*n)),f=l&&he(r,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Ur(r){return r[0]=0,r[1]=0,r[2]=0,r}function Gr(r){return`vec3(${r[0]}, ${r[1]}, ${r[2]})`}function Hr(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]}function qr(r,e){let t=r[0],i=r[1],o=r[2],s=e[0],a=e[1],n=e[2];return Math.abs(t-s)<=1e-6*Math.max(1,Math.abs(t),Math.abs(s))&&Math.abs(i-a)<=1e-6*Math.max(1,Math.abs(i),Math.abs(a))&&Math.abs(o-n)<=1e-6*Math.max(1,Math.abs(o),Math.abs(n))}var Wr=Je,Kr=et,Yr=tt,$r=rt,Zr=it,Xr=Qe,Qr=ot,Jr=function(){let r=Xe();return function(e,t,i,o,s,a){let n,l;for(t||(t=3),i||(i=0),o?l=Math.min(o*t+i,e.length):l=e.length,n=i;n<l;n+=t)r[0]=e[n],r[1]=e[n+1],r[2]=e[n+2],s(r,r,a),e[n]=r[0],e[n+1]=r[1],e[n+2]=r[2];return e}}();function J(r,e=[],t=0){let i=Math.fround(r),o=r-i;return e[t]=i,e[t+1]=o,e}function ve(r){return r-Math.fround(r)}function ge(r){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let i=0;i<4;++i){let o=t*4+i;J(r[i*4+t],e,o*2)}return e}var xe=`
326
+ `,ui=["float32-renderable-webgl","texture-blend-float-webgl"];function $e(i){return ui.every(e=>i.features.has(e))}function Ze(i,e){return e?i.createFramebuffer({width:1,height:1,colorAttachments:[i.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):i.createFramebuffer({width:256,height:64,colorAttachments:[i.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function Je(i,e,t,r){return t.defines.NON_INSTANCED_MODEL=1,r&&(t.defines.FLOAT_TARGET=1),new Ke.Model(i,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:fi,fs:ci,bufferLayout:e,...t})}var Xe={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var di={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},_i={categorySize:0,filterSize:1,fp64:!1,countItems:!1},mi={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},hi={1:"float",2:"vec2",3:"vec3",4:"vec4"},I=class extends E.LayerExtension{constructor(e={}){super({..._i,...e})}getShaders(e){let{categorySize:t,filterSize:r,fp64:o}=e.opts,s={};t&&(s.DATACATEGORY_TYPE=mi[t],s.DATACATEGORY_CHANNELS=t),r&&(s.DATAFILTER_TYPE=hi[r],s.DATAFILTER_DOUBLE=Boolean(o));let n=o?qe:He;return n.uniformTypes=n.uniformTypesFromOptions(e.opts),{modules:[n],defines:s}}initializeState(e,t){let r=this.getAttributeManager(),{categorySize:o,filterSize:s,fp64:n}=t.opts;r&&(s&&r.add({filterValues:{size:s,type:n?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),o&&r.add({filterCategoryValues:{size:o,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:o===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((f,u)=>t._getCategoryKey.call(this,f,u))}}));let{device:a}=this.context;if(r&&t.opts.countItems){let l=$e(a);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(c,{index:p})=>{let m=c&&c.__source?c.__source.index:p;return l?(m+1)%255:[(m+1)%255,Math.floor(m/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=Ze(a,l),u=Je(a,r.getBufferLayouts({isInstanced:!1}),t.getShaders.call(this,t),l);this.setState({filterFBO:f,filterModel:u})}}updateState({props:e,oldProps:t,changeFlags:r},o){let s=this.getAttributeManager(),{categorySize:n}=o.opts;if(this.state.filterModel){let a=s.attributes.filterValues?.needsUpdate()||s.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}s?.attributes.filterCategoryValues&&((s.attributes.filterCategoryValues.needsUpdate()||!(0,E._deepEqual)(e.filterCategories,t.filterCategories,2))&&this.setState({categoryBitMask:null}),r.dataChanged&&(this.setState({categoryMap:Array(n).fill(0).map(()=>({}))}),s.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,t){let r=this.state.filterFBO,o=this.state.filterModel,s=this.state.filterNeedsUpdate;this.state.categoryBitMask||t._updateCategoryBitMask.call(this,e,t);let{onFilteredItemsChange:n,extensions:a,filterEnabled:l,filterRange:f,filterSoftRange:u,filterTransformSize:c,filterTransformColor:p,filterCategories:m}=this.props,h={extensions:a,filterEnabled:l,filterRange:f,filterSoftRange:u,filterTransformSize:c,filterTransformColor:p,filterCategories:m};if(this.state.categoryBitMask&&(h.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:h}),s&&n&&o){let P=this.getAttributeManager(),{attributes:{filterValues:v,filterCategoryValues:A,filterVertexIndices:ue}}=P;o.setVertexCount(this.getNumInstances());let pe={...v?.getValue(),...A?.getValue(),...ue?.getValue()};o.setAttributes(pe),o.shaderInputs.setProps({dataFilter:h});let de=[0,0,r.width,r.height],Te=o.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:de},clearColor:[0,0,0,0]});o.setParameters(Xe),o.draw(Te),Te.end();let Oe=o.device.readPixelsToArrayWebGL(r),Le=0;for(let _e=0;_e<Oe.length;_e++)Le+=Oe[_e];n({id:this.id,count:Le}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,t=this.state.filterModel;e?.destroy(),t?.destroy()}_updateCategoryBitMask(e,t){let{categorySize:r}=t.opts;if(!r)return;let{filterCategories:o}=this.props,s=new Uint32Array([0,0,0,0]),n=r===1?[o]:o,a=r===1?128:r===2?64:32;for(let l=0;l<n.length;l++){let f=n[l];for(let u of f){let c=t._getCategoryKey.call(this,u,l);if(c<a){let p=l*(a/32)+Math.floor(c/32);s[p]+=Math.pow(2,c%32)}else E.log.warn(`Exceeded maximum number of categories (${a})`)()}}this.state.categoryBitMask=s}_getCategoryKey(e,t){let r=this.state.categoryMap[t];return e in r||(r[e]=Object.keys(r).length),r[e]}};I.defaultProps=di;I.extensionName="DataFilterExtension";var Qe=I;var pt=d(_(),1);var eo=1/Math.PI*180,to=1/180*Math.PI,vi={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...vi}};var C=globalThis.mathgl.config;function me(i){return Array.isArray(i)||ArrayBuffer.isView(i)&&!(i instanceof DataView)}function M(i,e,t){let r=C.EPSILON;t&&(C.EPSILON=t);try{if(i===e)return!0;if(me(i)&&me(e)){if(i.length!==e.length)return!1;for(let o=0;o<i.length;++o)if(!M(i[o],e[o]))return!1;return!0}return i&&i.equals?i.equals(e):e&&e.equals?e.equals(i):typeof i=="number"&&typeof e=="number"?Math.abs(i-e)<=C.EPSILON*Math.max(1,Math.abs(i),Math.abs(e)):!1}finally{C.EPSILON=r}}var R=typeof Float32Array<"u"?Float32Array:Array,he=Math.random;function ee(i){return i>=0?Math.round(i):i%.5===0?Math.floor(i):Math.round(i)}var ro=Math.PI/180;var k={};Se(k,{add:()=>Ei,angle:()=>Wi,bezier:()=>Di,ceil:()=>Mi,clone:()=>xi,copy:()=>bi,create:()=>et,cross:()=>ki,dist:()=>er,distance:()=>st,div:()=>Qi,divide:()=>ot,dot:()=>ge,equals:()=>Zi,exactEquals:()=>$i,floor:()=>Fi,forEach:()=>or,fromValues:()=>yi,hermite:()=>Bi,inverse:()=>Ci,len:()=>ir,length:()=>tt,lerp:()=>wi,max:()=>Oi,min:()=>Ti,mul:()=>Xi,multiply:()=>rt,negate:()=>Ii,normalize:()=>Ri,random:()=>zi,rotateX:()=>Gi,rotateY:()=>Hi,rotateZ:()=>qi,round:()=>Li,scale:()=>Ai,scaleAndAdd:()=>Si,set:()=>Pi,slerp:()=>Ni,sqrDist:()=>tr,sqrLen:()=>rr,squaredDistance:()=>nt,squaredLength:()=>at,str:()=>Ki,sub:()=>Ji,subtract:()=>it,transformMat3:()=>ji,transformMat4:()=>Vi,transformQuat:()=>Ui,zero:()=>Yi});function et(){let i=new R(3);return R!=Float32Array&&(i[0]=0,i[1]=0,i[2]=0),i}function xi(i){let e=new R(3);return e[0]=i[0],e[1]=i[1],e[2]=i[2],e}function tt(i){let e=i[0],t=i[1],r=i[2];return Math.sqrt(e*e+t*t+r*r)}function yi(i,e,t){let r=new R(3);return r[0]=i,r[1]=e,r[2]=t,r}function bi(i,e){return i[0]=e[0],i[1]=e[1],i[2]=e[2],i}function Pi(i,e,t,r){return i[0]=e,i[1]=t,i[2]=r,i}function Ei(i,e,t){return i[0]=e[0]+t[0],i[1]=e[1]+t[1],i[2]=e[2]+t[2],i}function it(i,e,t){return i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],i}function rt(i,e,t){return i[0]=e[0]*t[0],i[1]=e[1]*t[1],i[2]=e[2]*t[2],i}function ot(i,e,t){return i[0]=e[0]/t[0],i[1]=e[1]/t[1],i[2]=e[2]/t[2],i}function Mi(i,e){return i[0]=Math.ceil(e[0]),i[1]=Math.ceil(e[1]),i[2]=Math.ceil(e[2]),i}function Fi(i,e){return i[0]=Math.floor(e[0]),i[1]=Math.floor(e[1]),i[2]=Math.floor(e[2]),i}function Ti(i,e,t){return i[0]=Math.min(e[0],t[0]),i[1]=Math.min(e[1],t[1]),i[2]=Math.min(e[2],t[2]),i}function Oi(i,e,t){return i[0]=Math.max(e[0],t[0]),i[1]=Math.max(e[1],t[1]),i[2]=Math.max(e[2],t[2]),i}function Li(i,e){return i[0]=ee(e[0]),i[1]=ee(e[1]),i[2]=ee(e[2]),i}function Ai(i,e,t){return i[0]=e[0]*t,i[1]=e[1]*t,i[2]=e[2]*t,i}function Si(i,e,t,r){return i[0]=e[0]+t[0]*r,i[1]=e[1]+t[1]*r,i[2]=e[2]+t[2]*r,i}function st(i,e){let t=e[0]-i[0],r=e[1]-i[1],o=e[2]-i[2];return Math.sqrt(t*t+r*r+o*o)}function nt(i,e){let t=e[0]-i[0],r=e[1]-i[1],o=e[2]-i[2];return t*t+r*r+o*o}function at(i){let e=i[0],t=i[1],r=i[2];return e*e+t*t+r*r}function Ii(i,e){return i[0]=-e[0],i[1]=-e[1],i[2]=-e[2],i}function Ci(i,e){return i[0]=1/e[0],i[1]=1/e[1],i[2]=1/e[2],i}function Ri(i,e){let t=e[0],r=e[1],o=e[2],s=t*t+r*r+o*o;return s>0&&(s=1/Math.sqrt(s)),i[0]=e[0]*s,i[1]=e[1]*s,i[2]=e[2]*s,i}function ge(i,e){return i[0]*e[0]+i[1]*e[1]+i[2]*e[2]}function ki(i,e,t){let r=e[0],o=e[1],s=e[2],n=t[0],a=t[1],l=t[2];return i[0]=o*l-s*a,i[1]=s*n-r*l,i[2]=r*a-o*n,i}function wi(i,e,t,r){let o=e[0],s=e[1],n=e[2];return i[0]=o+r*(t[0]-o),i[1]=s+r*(t[1]-s),i[2]=n+r*(t[2]-n),i}function Ni(i,e,t,r){let o=Math.acos(Math.min(Math.max(ge(e,t),-1),1)),s=Math.sin(o),n=Math.sin((1-r)*o)/s,a=Math.sin(r*o)/s;return i[0]=n*e[0]+a*t[0],i[1]=n*e[1]+a*t[1],i[2]=n*e[2]+a*t[2],i}function Bi(i,e,t,r,o,s){let n=s*s,a=n*(2*s-3)+1,l=n*(s-2)+s,f=n*(s-1),u=n*(3-2*s);return i[0]=e[0]*a+t[0]*l+r[0]*f+o[0]*u,i[1]=e[1]*a+t[1]*l+r[1]*f+o[1]*u,i[2]=e[2]*a+t[2]*l+r[2]*f+o[2]*u,i}function Di(i,e,t,r,o,s){let n=1-s,a=n*n,l=s*s,f=a*n,u=3*s*a,c=3*l*n,p=l*s;return i[0]=e[0]*f+t[0]*u+r[0]*c+o[0]*p,i[1]=e[1]*f+t[1]*u+r[1]*c+o[1]*p,i[2]=e[2]*f+t[2]*u+r[2]*c+o[2]*p,i}function zi(i,e){e=e===void 0?1:e;let t=he()*2*Math.PI,r=he()*2-1,o=Math.sqrt(1-r*r)*e;return i[0]=Math.cos(t)*o,i[1]=Math.sin(t)*o,i[2]=r*e,i}function Vi(i,e,t){let r=e[0],o=e[1],s=e[2],n=t[3]*r+t[7]*o+t[11]*s+t[15];return n=n||1,i[0]=(t[0]*r+t[4]*o+t[8]*s+t[12])/n,i[1]=(t[1]*r+t[5]*o+t[9]*s+t[13])/n,i[2]=(t[2]*r+t[6]*o+t[10]*s+t[14])/n,i}function ji(i,e,t){let r=e[0],o=e[1],s=e[2];return i[0]=r*t[0]+o*t[3]+s*t[6],i[1]=r*t[1]+o*t[4]+s*t[7],i[2]=r*t[2]+o*t[5]+s*t[8],i}function Ui(i,e,t){let r=t[0],o=t[1],s=t[2],n=t[3],a=e[0],l=e[1],f=e[2],u=o*f-s*l,c=s*a-r*f,p=r*l-o*a,m=o*p-s*c,h=s*u-r*p,P=r*c-o*u,v=n*2;return u*=v,c*=v,p*=v,m*=2,h*=2,P*=2,i[0]=a+u+m,i[1]=l+c+h,i[2]=f+p+P,i}function Gi(i,e,t,r){let o=[],s=[];return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],s[0]=o[0],s[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),s[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),i[0]=s[0]+t[0],i[1]=s[1]+t[1],i[2]=s[2]+t[2],i}function Hi(i,e,t,r){let o=[],s=[];return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],s[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),s[1]=o[1],s[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),i[0]=s[0]+t[0],i[1]=s[1]+t[1],i[2]=s[2]+t[2],i}function qi(i,e,t,r){let o=[],s=[];return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],s[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),s[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),s[2]=o[2],i[0]=s[0]+t[0],i[1]=s[1]+t[1],i[2]=s[2]+t[2],i}function Wi(i,e){let t=i[0],r=i[1],o=i[2],s=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+r*r+o*o)*(s*s+n*n+a*a)),f=l&&ge(i,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Yi(i){return i[0]=0,i[1]=0,i[2]=0,i}function Ki(i){return`vec3(${i[0]}, ${i[1]}, ${i[2]})`}function $i(i,e){return i[0]===e[0]&&i[1]===e[1]&&i[2]===e[2]}function Zi(i,e){let t=i[0],r=i[1],o=i[2],s=e[0],n=e[1],a=e[2];return Math.abs(t-s)<=1e-6*Math.max(1,Math.abs(t),Math.abs(s))&&Math.abs(r-n)<=1e-6*Math.max(1,Math.abs(r),Math.abs(n))&&Math.abs(o-a)<=1e-6*Math.max(1,Math.abs(o),Math.abs(a))}var Ji=it,Xi=rt,Qi=ot,er=st,tr=nt,ir=tt,rr=at,or=function(){let i=et();return function(e,t,r,o,s,n){let a,l;for(t||(t=3),r||(r=0),o?l=Math.min(o*t+r,e.length):l=e.length,a=r;a<l;a+=t)i[0]=e[a],i[1]=e[a+1],i[2]=e[a+2],s(i,i,n),e[a]=i[0],e[a+1]=i[1],e[a+2]=i[2];return e}}();function te(i,e=[],t=0){let r=Math.fround(i),o=i-r;return e[t]=r,e[t+1]=o,e}function xe(i){return i-Math.fround(i)}function ye(i){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let r=0;r<4;++r){let o=t*4+r;te(i[r*4+t],e,o*2)}return e}var be=`
327
327
  layout(std140) uniform fp64arithmeticUniforms {
328
328
  uniform float ONE;
329
329
  uniform float SPLIT;
@@ -522,18 +522,285 @@ vec2 sqrt_fp64(vec2 a) {
522
522
  return sum_fp64(vec2(yn, 0.0), prod);
523
523
  #endif
524
524
  }
525
- `;var st=`struct Fp64ArithmeticUniforms {
525
+ `;var lt=`struct Fp64ArithmeticUniforms {
526
526
  ONE: f32,
527
527
  SPLIT: f32,
528
528
  };
529
529
 
530
530
  @group(0) @binding(auto) var<uniform> fp64arithmetic : Fp64ArithmeticUniforms;
531
531
 
532
+ struct Fp64Bits {
533
+ sign: u32,
534
+ exponent: i32,
535
+ significand: vec2u,
536
+ isZero: bool,
537
+ isInf: bool,
538
+ isNan: bool,
539
+ };
540
+
532
541
  fn fp64_nan(seed: f32) -> f32 {
533
542
  let nanBits = 0x7fc00000u | select(0u, 1u, seed < 0.0);
534
543
  return bitcast<f32>(nanBits);
535
544
  }
536
545
 
546
+ fn fp64_u64_is_zero(value: vec2u) -> bool {
547
+ return value.x == 0u && value.y == 0u;
548
+ }
549
+
550
+ fn fp64_u64_compare(a: vec2u, b: vec2u) -> i32 {
551
+ if (a.x != b.x) {
552
+ return select(-1, 1, a.x > b.x);
553
+ }
554
+ if (a.y != b.y) {
555
+ return select(-1, 1, a.y > b.y);
556
+ }
557
+ return 0;
558
+ }
559
+
560
+ fn fp64_u64_add(a: vec2u, b: vec2u) -> vec2u {
561
+ let low = a.y + b.y;
562
+ let carry = select(0u, 1u, low < a.y);
563
+ return vec2u(a.x + b.x + carry, low);
564
+ }
565
+
566
+ fn fp64_u64_sub(a: vec2u, b: vec2u) -> vec2u {
567
+ let borrow = select(0u, 1u, a.y < b.y);
568
+ return vec2u(a.x - b.x - borrow, a.y - b.y);
569
+ }
570
+
571
+ fn fp64_u64_shift_left(value: vec2u, shift: u32) -> vec2u {
572
+ if (shift == 0u) {
573
+ return value;
574
+ }
575
+ if (shift < 32u) {
576
+ return vec2u((value.x << shift) | (value.y >> (32u - shift)), value.y << shift);
577
+ }
578
+ if (shift == 32u) {
579
+ return vec2u(value.y, 0u);
580
+ }
581
+ if (shift < 64u) {
582
+ return vec2u(value.y << (shift - 32u), 0u);
583
+ }
584
+ return vec2u(0u);
585
+ }
586
+
587
+ fn fp64_u64_shift_right(value: vec2u, shift: u32) -> vec2u {
588
+ if (shift == 0u) {
589
+ return value;
590
+ }
591
+ if (shift < 32u) {
592
+ return vec2u(value.x >> shift, (value.y >> shift) | (value.x << (32u - shift)));
593
+ }
594
+ if (shift == 32u) {
595
+ return vec2u(0u, value.x);
596
+ }
597
+ if (shift < 64u) {
598
+ return vec2u(0u, value.x >> (shift - 32u));
599
+ }
600
+ return vec2u(0u);
601
+ }
602
+
603
+ fn fp64_u64_get_bit(value: vec2u, bitIndex: u32) -> bool {
604
+ if (bitIndex >= 64u) {
605
+ return false;
606
+ }
607
+ if (bitIndex >= 32u) {
608
+ return ((value.x >> (bitIndex - 32u)) & 1u) != 0u;
609
+ }
610
+ return ((value.y >> bitIndex) & 1u) != 0u;
611
+ }
612
+
613
+ fn fp64_u64_has_bits_below(value: vec2u, bitCount: u32) -> bool {
614
+ if (bitCount == 0u) {
615
+ return false;
616
+ }
617
+ if (bitCount >= 64u) {
618
+ return !fp64_u64_is_zero(value);
619
+ }
620
+ if (bitCount > 32u) {
621
+ let highBitCount = bitCount - 32u;
622
+ let highMask = (1u << highBitCount) - 1u;
623
+ return value.y != 0u || (value.x & highMask) != 0u;
624
+ }
625
+ if (bitCount == 32u) {
626
+ return value.y != 0u;
627
+ }
628
+ let lowMask = (1u << bitCount) - 1u;
629
+ return (value.y & lowMask) != 0u;
630
+ }
631
+
632
+ fn fp64_u64_shift_right_sticky(value: vec2u, shift: u32) -> vec2u {
633
+ var shifted = fp64_u64_shift_right(value, shift);
634
+ if (fp64_u64_has_bits_below(value, shift)) {
635
+ shifted.y = shifted.y | 1u;
636
+ }
637
+ return shifted;
638
+ }
639
+
640
+ fn fp64_u64_count_leading_zeros(value: vec2u) -> u32 {
641
+ if (value.x != 0u) {
642
+ return countLeadingZeros(value.x);
643
+ }
644
+ return 32u + countLeadingZeros(value.y);
645
+ }
646
+
647
+ fn fp64_round_shift_right_to_u32(value: vec2u, shift: u32) -> u32 {
648
+ if (shift == 0u) {
649
+ return value.y;
650
+ }
651
+
652
+ let truncated = fp64_u64_shift_right(value, shift);
653
+ var rounded = truncated.y;
654
+ let guard = fp64_u64_get_bit(value, shift - 1u);
655
+ let hasTrailingBits = fp64_u64_has_bits_below(value, shift - 1u);
656
+ if (guard && (hasTrailingBits || (rounded & 1u) == 1u)) {
657
+ rounded = rounded + 1u;
658
+ }
659
+ return rounded;
660
+ }
661
+
662
+ fn fp64_make_f32_bits_from_u64(sign: u32, significand: vec2u, baseExponent: i32) -> u32 {
663
+ if (fp64_u64_is_zero(significand)) {
664
+ return sign << 31u;
665
+ }
666
+
667
+ let leadingZeros = fp64_u64_count_leading_zeros(significand);
668
+ let mostSignificantBit = 63u - leadingZeros;
669
+ var exponent = baseExponent + i32(mostSignificantBit);
670
+
671
+ if (exponent > 127) {
672
+ return (sign << 31u) | 0x7f800000u;
673
+ }
674
+
675
+ if (exponent >= -126) {
676
+ let shift = i32(mostSignificantBit) - 23;
677
+ var significand24: u32;
678
+ if (shift > 0) {
679
+ significand24 = fp64_round_shift_right_to_u32(significand, u32(shift));
680
+ } else {
681
+ significand24 = fp64_u64_shift_left(significand, u32(-shift)).y;
682
+ }
683
+
684
+ if (significand24 >= 0x1000000u) {
685
+ significand24 = significand24 >> 1u;
686
+ exponent = exponent + 1;
687
+ if (exponent > 127) {
688
+ return (sign << 31u) | 0x7f800000u;
689
+ }
690
+ }
691
+
692
+ return (sign << 31u) | (u32(exponent + 127) << 23u) | (significand24 & 0x7fffffu);
693
+ }
694
+
695
+ let scaleExponent = baseExponent + 149;
696
+ var mantissa: u32;
697
+ if (scaleExponent >= 0) {
698
+ mantissa = fp64_u64_shift_left(significand, u32(scaleExponent)).y;
699
+ } else {
700
+ mantissa = fp64_round_shift_right_to_u32(significand, u32(-scaleExponent));
701
+ }
702
+
703
+ if (mantissa >= 0x800000u) {
704
+ return (sign << 31u) | 0x00800000u;
705
+ }
706
+ return (sign << 31u) | mantissa;
707
+ }
708
+
709
+ fn fp64_decode_bits(bits: vec2u) -> Fp64Bits {
710
+ let sign = bits.x >> 31u;
711
+ let exponentBits = (bits.x >> 20u) & 0x7ffu;
712
+ let fractionHigh = bits.x & 0xfffffu;
713
+ let fractionLow = bits.y;
714
+ let fraction = vec2u(fractionHigh, fractionLow);
715
+
716
+ if (exponentBits == 0x7ffu) {
717
+ let isInf = fp64_u64_is_zero(fraction);
718
+ return Fp64Bits(sign, 0, vec2u(0u), false, isInf, !isInf);
719
+ }
720
+
721
+ if (exponentBits == 0u) {
722
+ let isZero = fp64_u64_is_zero(fraction);
723
+ return Fp64Bits(sign, -1022, fraction, isZero, false, false);
724
+ }
725
+
726
+ return Fp64Bits(sign, i32(exponentBits) - 1023, vec2u((1u << 20u) | fractionHigh, fractionLow), false, false, false);
727
+ }
728
+
729
+ fn fp64_finite_magnitude_compare(a: Fp64Bits, b: Fp64Bits) -> i32 {
730
+ if (a.exponent != b.exponent) {
731
+ return select(-1, 1, a.exponent > b.exponent);
732
+ }
733
+ return fp64_u64_compare(a.significand, b.significand);
734
+ }
735
+
736
+ fn fp64_add_aligned_magnitudes_to_f32_bits(sign: u32, larger: Fp64Bits, smaller: Fp64Bits) -> u32 {
737
+ let largeSignificand = fp64_u64_shift_left(larger.significand, 3u);
738
+ let smallSignificand = fp64_u64_shift_right_sticky(
739
+ fp64_u64_shift_left(smaller.significand, 3u),
740
+ u32(larger.exponent - smaller.exponent)
741
+ );
742
+ let resultSignificand = fp64_u64_add(largeSignificand, smallSignificand);
743
+ return fp64_make_f32_bits_from_u64(sign, resultSignificand, larger.exponent - 55);
744
+ }
745
+
746
+ fn fp64_sub_aligned_magnitudes_to_f32_bits(sign: u32, larger: Fp64Bits, smaller: Fp64Bits) -> u32 {
747
+ let largeSignificand = fp64_u64_shift_left(larger.significand, 3u);
748
+ let smallSignificand = fp64_u64_shift_right_sticky(
749
+ fp64_u64_shift_left(smaller.significand, 3u),
750
+ u32(larger.exponent - smaller.exponent)
751
+ );
752
+ let resultSignificand = fp64_u64_sub(largeSignificand, smallSignificand);
753
+ return fp64_make_f32_bits_from_u64(sign, resultSignificand, larger.exponent - 55);
754
+ }
755
+
756
+ // Subtract two raw binary64 values and round the exact result once to f32.
757
+ // The input words are canonical high/low words: .x contains sign/exponent/high
758
+ // fraction bits, and .y contains the low 32 fraction bits.
759
+ fn sub_fp64u32_to_f32_bits(aBits: vec2u, bBits: vec2u) -> u32 {
760
+ let a = fp64_decode_bits(aBits);
761
+ let b = fp64_decode_bits(bBits);
762
+ let bSubtractionSign = b.sign ^ 1u;
763
+
764
+ if (a.isNan || b.isNan) {
765
+ return 0x7fc00000u;
766
+ }
767
+ if (a.isInf && b.isInf) {
768
+ if (a.sign == bSubtractionSign) {
769
+ return (a.sign << 31u) | 0x7f800000u;
770
+ }
771
+ return 0x7fc00000u;
772
+ }
773
+ if (a.isInf) {
774
+ return (a.sign << 31u) | 0x7f800000u;
775
+ }
776
+ if (b.isInf) {
777
+ return (bSubtractionSign << 31u) | 0x7f800000u;
778
+ }
779
+ if (a.isZero && b.isZero) {
780
+ return select(0u, 0x80000000u, a.sign == 1u && b.sign == 0u);
781
+ }
782
+
783
+ let magnitudeComparison = fp64_finite_magnitude_compare(a, b);
784
+ if (a.sign == bSubtractionSign) {
785
+ if (magnitudeComparison >= 0) {
786
+ return fp64_add_aligned_magnitudes_to_f32_bits(a.sign, a, b);
787
+ }
788
+ return fp64_add_aligned_magnitudes_to_f32_bits(a.sign, b, a);
789
+ }
790
+
791
+ if (magnitudeComparison == 0) {
792
+ return 0u;
793
+ }
794
+ if (magnitudeComparison > 0) {
795
+ return fp64_sub_aligned_magnitudes_to_f32_bits(a.sign, a, b);
796
+ }
797
+ return fp64_sub_aligned_magnitudes_to_f32_bits(bSubtractionSign, b, a);
798
+ }
799
+
800
+ fn sub_fp64u32_to_f32(aBits: vec2u, bBits: vec2u) -> f32 {
801
+ return bitcast<f32>(sub_fp64u32_to_f32_bits(aBits, bBits));
802
+ }
803
+
537
804
  fn fp64_runtime_zero() -> f32 {
538
805
  return fp64arithmetic.ONE * 0.0;
539
806
  }
@@ -728,7 +995,7 @@ fn sqrt_fp64(a: vec2f) -> vec2f {
728
995
  return sum_fp64(vec2f(yn, 0.0), prod);
729
996
  #endif
730
997
  }
731
- `;var at=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
998
+ `;var ft=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
732
999
  const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
733
1000
  const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
734
1001
  const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
@@ -1397,7 +1664,7 @@ void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
1397
1664
  vec4_dot_fp64(a, tmp, out_val[i]);
1398
1665
  }
1399
1666
  }
1400
- `;var ei={ONE:1,SPLIT:4097},nt={name:"fp64arithmetic",source:st,fs:xe,vs:xe,defaultUniforms:ei,uniformTypes:{ONE:"f32",SPLIT:"f32"},fp64ify:J,fp64LowPart:ve,fp64ifyMatrix4:ge},ee={name:"fp64",vs:at,dependencies:[nt],fp64ify:J,fp64LowPart:ve,fp64ifyMatrix4:ge};var te=d(_(),1);var lt=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
1667
+ `;var sr={ONE:1,SPLIT:4097},ct={name:"fp64arithmetic",source:lt,fs:be,vs:be,defaultUniforms:sr,uniformTypes:{ONE:"f32",SPLIT:"f32"},fp64ify:te,fp64LowPart:xe,fp64ifyMatrix4:ye},ie={name:"fp64",vs:ft,dependencies:[ct],fp64ify:te,fp64LowPart:xe,fp64ifyMatrix4:ye};var re=d(_(),1);var ut=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
1401
1668
  layout(std140) uniform project64Uniforms {
1402
1669
  vec2 scale;
1403
1670
  mat4 viewProjectionMatrix;
@@ -1470,7 +1737,7 @@ return project_position_to_clipspace(
1470
1737
  position, position64xyLow, offset, commonPosition
1471
1738
  );
1472
1739
  }
1473
- `;var{fp64ify:ti,fp64ifyMatrix4:ri}=ee,re={name:"project64",dependencies:[te.project,ee],vs:lt,getUniforms:oi,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},ii=(0,te._memoize)(si);function oi(r){if(r&&"viewport"in r){let{viewProjectionMatrix:e,scale:t}=r.viewport;return ii({viewProjectionMatrix:e,scale:t})}return{}}function si({viewProjectionMatrix:r,scale:e}){let t=ri(r),i=new Float32Array(16),o=new Float32Array(16);for(let s=0;s<4;s++)for(let a=0;a<4;a++){let n=4*s+a,l=4*a+s;i[l]=t[2*n],o[l]=t[2*n+1]}return{scale:ti(e),viewProjectionMatrix:[...i],viewProjectionMatrix64Low:[...o]}}var ie=class extends ft.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!=="lnglat"&&e!=="default")throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[re]}}draw(e,t){let{viewport:i}=e.context;this.setShaderModuleProps({project64:{viewport:i}})}};ie.extensionName="Fp64Extension";var ct=ie;var w=d(_(),1);var pt={inject:{"vs:#decl":`
1740
+ `;var{fp64ify:nr,fp64ifyMatrix4:ar}=ie,oe={name:"project64",dependencies:[re.project,ie],vs:ut,getUniforms:fr,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},lr=(0,re._memoize)(cr);function fr(i){if(i&&"viewport"in i){let{viewProjectionMatrix:e,scale:t}=i.viewport;return lr({viewProjectionMatrix:e,scale:t})}return{}}function cr({viewProjectionMatrix:i,scale:e}){let t=ar(i),r=new Float32Array(16),o=new Float32Array(16);for(let s=0;s<4;s++)for(let n=0;n<4;n++){let a=4*s+n,l=4*n+s;r[l]=t[2*a],o[l]=t[2*a+1]}return{scale:nr(e),viewProjectionMatrix:[...r],viewProjectionMatrix64Low:[...o]}}var se=class extends pt.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!=="lnglat"&&e!=="default")throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[oe]}}draw(e,t){let{viewport:r}=e.context;this.setShaderModuleProps({project64:{viewport:r}})}};se.extensionName="Fp64Extension";var dt=se;var w=d(_(),1);var _t={inject:{"vs:#decl":`
1474
1741
  in vec2 instanceDashArrays;
1475
1742
  #ifdef HIGH_PRECISION_DASH
1476
1743
  in float instanceDashOffsets;
@@ -1522,7 +1789,7 @@ discard;
1522
1789
  }
1523
1790
  }
1524
1791
  }
1525
- `}},ut={inject:{"vs:#decl":`
1792
+ `}},mt={inject:{"vs:#decl":`
1526
1793
  in vec2 instanceDashArrays;
1527
1794
  out vec2 vDashArray;
1528
1795
  `,"vs:#main-end":`
@@ -1564,7 +1831,7 @@ fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor);
1564
1831
  fragColor = picking_filterPickingColor(fragColor);
1565
1832
  fragColor = picking_filterHighlightColor(fragColor);
1566
1833
  }
1567
- `}},dt={inject:{"vs:#decl":`
1834
+ `}},ht={inject:{"vs:#decl":`
1568
1835
  in vec2 instanceDashArrays;
1569
1836
  out vec2 vDashArray;
1570
1837
  `,"vs:#main-end":`
@@ -1686,7 +1953,7 @@ fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor);
1686
1953
  fragColor = picking_filterPickingColor(fragColor);
1687
1954
  fragColor = picking_filterHighlightColor(fragColor);
1688
1955
  }
1689
- `}},_t={inject:{"vs:#decl":`
1956
+ `}},vt={inject:{"vs:#decl":`
1690
1957
  in float instanceOffsets;
1691
1958
  `,"vs:DECKGL_FILTER_SIZE":`
1692
1959
  float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
@@ -1703,14 +1970,14 @@ isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);
1703
1970
  if (isInside == 0.0) {
1704
1971
  discard;
1705
1972
  }
1706
- `}};var ai={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},N=class extends w.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:i=!1}={}){super({dash:e||i,offset:t,highPrecisionDash:i})}getLayerType(e){if("pathTesselator"in e.state)return"path";let t=e.constructor.layerName;return t==="ScatterplotLayer"?"scatterplot":t==="TextBackgroundLayer"?"textBackground":null}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let t=e.getLayerType(this);if(!t)return null;if(t==="scatterplot"||t==="textBackground")return e.opts.dash?{modules:[{name:"pathStyle",inject:t==="scatterplot"?ut.inject:dt.inject,uniformTypes:{dashGapPickable:"i32"}}]}:null;let i={},o={};e.opts.dash&&(i=(0,w._mergeShaders)(i,pt),e.opts.highPrecisionDash&&(o.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(i=(0,w._mergeShaders)(i,_t));let{inject:s}=i;return{modules:[{name:"pathStyle",inject:s,uniformTypes:{dashAlignMode:"f32",dashGapPickable:"i32"}}],defines:o}}initializeState(e,t){let i=this.getAttributeManager(),o=t.getLayerType(this);!i||!o||(t.opts.dash&&i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},...o==="path"&&t.opts.highPrecisionDash?{instanceDashOffsets:{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}}:{}}),o==="path"&&t.opts.offset&&i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let i=t.getLayerType(this);if(i==="scatterplot"||i==="textBackground"){let o={dashGapPickable:Boolean(this.props.dashGapPickable)};this.setShaderModuleProps({pathStyle:o})}else{let o={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:Boolean(this.props.dashGapPickable)};this.setShaderModuleProps({pathStyle:o})}}}getDashOffsets(e){let t=[0],i=this.props.positionFormat==="XY"?2:3,o=Array.isArray(e[0]),s=o?e.length:e.length/i,a,n;for(let l=0;l<s-1;l++)a=o?e[l]:e.slice(l*i,l*i+i),a=this.projectPosition(a),l>0&&(t[l]=t[l-1]+C.dist(n,a)),n=a;return t[s-1]=0,t}};N.defaultProps=ai;N.extensionName="PathStyleExtension";var mt=N;var gt=d(_(),1);var F=d(_(),1),ht=`layout(std140) uniform fillUniforms {
1973
+ `}};var ur={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},N=class extends w.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:r=!1}={}){super({dash:e||r,offset:t,highPrecisionDash:r})}getLayerType(e){if("pathTesselator"in e.state)return"path";let t=e.constructor.layerName;return t==="ScatterplotLayer"?"scatterplot":t==="TextBackgroundLayer"?"textBackground":null}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let t=e.getLayerType(this);if(!t)return null;if(t==="scatterplot"||t==="textBackground")return e.opts.dash?{modules:[{name:"pathStyle",inject:t==="scatterplot"?mt.inject:ht.inject,uniformTypes:{dashGapPickable:"i32"}}]}:null;let r={},o={};e.opts.dash&&(r=(0,w._mergeShaders)(r,_t),e.opts.highPrecisionDash&&(o.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(r=(0,w._mergeShaders)(r,vt));let{inject:s}=r;return{modules:[{name:"pathStyle",inject:s,uniformTypes:{dashAlignMode:"f32",dashGapPickable:"i32"}}],defines:o}}initializeState(e,t){let r=this.getAttributeManager(),o=t.getLayerType(this);!r||!o||(t.opts.dash&&r.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},...o==="path"&&t.opts.highPrecisionDash?{instanceDashOffsets:{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}}:{}}),o==="path"&&t.opts.offset&&r.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let r=t.getLayerType(this);if(r==="scatterplot"||r==="textBackground"){let o={dashGapPickable:Boolean(this.props.dashGapPickable)};this.setShaderModuleProps({pathStyle:o})}else{let o={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:Boolean(this.props.dashGapPickable)};this.setShaderModuleProps({pathStyle:o})}}}getDashOffsets(e){let t=[0],r=this.props.positionFormat==="XY"?2:3,o=Array.isArray(e[0]),s=o?e.length:e.length/r,n,a;for(let l=0;l<s-1;l++)n=o?e[l]:e.slice(l*r,l*r+r),n=this.projectPosition(n),l>0&&(t[l]=t[l-1]+k.dist(a,n)),a=n;return t[s-1]=0,t}};N.defaultProps=ur;N.extensionName="PathStyleExtension";var gt=N;var bt=d(_(),1);var F=d(_(),1),xt=`layout(std140) uniform fillUniforms {
1707
1974
  vec2 patternTextureSize;
1708
1975
  bool patternEnabled;
1709
1976
  bool patternMask;
1710
1977
  vec2 uvCoordinateOrigin;
1711
1978
  vec2 uvCoordinateOrigin64Low;
1712
1979
  } fill;
1713
- `,ni=`
1980
+ `,pr=`
1714
1981
  in vec4 fillPatternFrames;
1715
1982
  in float fillPatternScales;
1716
1983
  in vec2 fillPatternOffsets;
@@ -1718,10 +1985,10 @@ in vec2 fillPatternOffsets;
1718
1985
  out vec2 fill_uv;
1719
1986
  out vec4 fill_patternBounds;
1720
1987
  out vec4 fill_patternPlacement;
1721
- `,li=`
1722
- ${ht}
1723
- ${ni}
1724
- `,fi=`
1988
+ `,dr=`
1989
+ ${xt}
1990
+ ${pr}
1991
+ `,_r=`
1725
1992
  uniform sampler2D fill_patternTexture;
1726
1993
 
1727
1994
  in vec4 fill_patternBounds;
@@ -1729,10 +1996,10 @@ in vec4 fill_patternPlacement;
1729
1996
  in vec2 fill_uv;
1730
1997
 
1731
1998
  const float FILL_UV_SCALE = 512.0 / 40000000.0;
1732
- `,ci=`
1733
- ${ht}
1734
- ${fi}
1735
- `,pi={"vs:DECKGL_FILTER_GL_POSITION":`
1999
+ `,mr=`
2000
+ ${xt}
2001
+ ${_r}
2002
+ `,hr={"vs:DECKGL_FILTER_GL_POSITION":`
1736
2003
  fill_uv = geometry.position.xy;
1737
2004
  `,"vs:DECKGL_FILTER_COLOR":`
1738
2005
  if (fill.patternEnabled) {
@@ -1754,7 +2021,7 @@ ${fi}
1754
2021
  color.rgb = patternColor.rgb;
1755
2022
  }
1756
2023
  }
1757
- `};function ui(r){if(!r)return{};let e={};if("fillPatternTexture"in r){let{fillPatternTexture:t}=r;e.fill_patternTexture=t,e.patternTextureSize=[t.width,t.height]}if("project"in r){let{fillPatternMask:t=!0,fillPatternEnabled:i=!0}=r,o=F.project.getUniforms(r.project),{commonOrigin:s}=o,a=[(0,F.fp64LowPart)(s[0]),(0,F.fp64LowPart)(s[1])];e.uvCoordinateOrigin=s.slice(0,2),e.uvCoordinateOrigin64Low=a,e.patternMask=t,e.patternEnabled=i}return e}var vt={name:"fill",vs:li,fs:ci,inject:pi,dependencies:[F.project],getUniforms:ui,uniformTypes:{patternTextureSize:"vec2<f32>",patternEnabled:"i32",patternMask:"i32",uvCoordinateOrigin:"vec2<f32>",uvCoordinateOrigin64Low:"vec2<f32>"}};var di={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:{lodMaxClamp:0}},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]}},B=class extends gt.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&&vt].filter(Boolean)}:null}initializeState(e,t){if(!t.isEnabled(this))return;let i=this.getAttributeManager();t.opts.pattern&&i.add({fillPatternFrames:{size:4,stepMode:"dynamic",accessor:"getFillPattern",transform:t.getPatternFrame.bind(this)},fillPatternScales:{size:1,stepMode:"dynamic",accessor:"getFillPatternScale",defaultValue:1},fillPatternOffsets:{size:2,stepMode:"dynamic",accessor:"getFillPatternOffset"}}),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,fillPatternEnabled:o,fillPatternMask:s}=this.props,a={project:e.shaderModuleProps.project,fillPatternEnabled:o,fillPatternMask:s,fillPatternTexture:i||this.state.emptyTexture};this.setShaderModuleProps({fill:a})}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.defaultProps=di;B.extensionName="FillStyleExtension";var xt=B;var yt=d(_(),1),_i={clipBounds:[0,0,1,1],clipByInstance:void 0},Pt=`
2024
+ `};function vr(i){if(!i)return{};let e={};if("fillPatternTexture"in i){let{fillPatternTexture:t}=i;e.fill_patternTexture=t,e.patternTextureSize=[t.width,t.height]}if("project"in i){let{fillPatternMask:t=!0,fillPatternEnabled:r=!0}=i,o=F.project.getUniforms(i.project),{commonOrigin:s}=o,n=[(0,F.fp64LowPart)(s[0]),(0,F.fp64LowPart)(s[1])];e.uvCoordinateOrigin=s.slice(0,2),e.uvCoordinateOrigin64Low=n,e.patternMask=t,e.patternEnabled=r}return e}var yt={name:"fill",vs:dr,fs:mr,inject:hr,dependencies:[F.project],getUniforms:vr,uniformTypes:{patternTextureSize:"vec2<f32>",patternEnabled:"i32",patternMask:"i32",uvCoordinateOrigin:"vec2<f32>",uvCoordinateOrigin64Low:"vec2<f32>"}};var gr={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:{lodMaxClamp:0}},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:i=>i.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},B=class extends bt.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&&yt].filter(Boolean)}:null}initializeState(e,t){if(!t.isEnabled(this))return;let r=this.getAttributeManager();t.opts.pattern&&r.add({fillPatternFrames:{size:4,stepMode:"dynamic",accessor:"getFillPattern",transform:t.getPatternFrame.bind(this)},fillPatternScales:{size:1,stepMode:"dynamic",accessor:"getFillPatternScale",defaultValue:1},fillPatternOffsets:{size:2,stepMode:"dynamic",accessor:"getFillPatternOffset"}}),this.setState({emptyTexture:this.context.device.createTexture({data:new Uint8Array(4),width:1,height:1})})}updateState({props:e,oldProps:t},r){r.isEnabled(this)&&e.fillPatternMapping&&e.fillPatternMapping!==t.fillPatternMapping&&this.getAttributeManager().invalidate("getFillPattern")}draw(e,t){if(!t.isEnabled(this))return;let{fillPatternAtlas:r,fillPatternEnabled:o,fillPatternMask:s}=this.props,n={project:e.shaderModuleProps.project,fillPatternEnabled:o,fillPatternMask:s,fillPatternTexture:r||this.state.emptyTexture};this.setShaderModuleProps({fill:n})}finalizeState(){this.state.emptyTexture?.delete()}getPatternFrame(e){let{fillPatternMapping:t}=this.getCurrentLayer().props,r=t&&t[e];return r?[r.x,r.y,r.width,r.height]:[0,0,0,0]}};B.defaultProps=gr;B.extensionName="FillStyleExtension";var Pt=B;var Et=d(_(),1),xr={clipBounds:[0,0,1,1],clipByInstance:void 0},Mt=`
1758
2025
  layout(std140) uniform clipUniforms {
1759
2026
  vec4 bounds;
1760
2027
  } clip;
@@ -1762,7 +2029,7 @@ layout(std140) uniform clipUniforms {
1762
2029
  bool clip_isInBounds(vec2 position) {
1763
2030
  return position.x >= clip.bounds[0] && position.y >= clip.bounds[1] && position.x < clip.bounds[2] && position.y < clip.bounds[3];
1764
2031
  }
1765
- `,mi={name:"clip",vs:Pt,uniformTypes:{bounds:"vec4<f32>"}},hi={"vs:#decl":`
2032
+ `,yr={name:"clip",vs:Mt,uniformTypes:{bounds:"vec4<f32>"}},br={"vs:#decl":`
1766
2033
  out float clip_isVisible;
1767
2034
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1768
2035
  clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
@@ -1770,7 +2037,7 @@ out float clip_isVisible;
1770
2037
  in float clip_isVisible;
1771
2038
  `,"fs:DECKGL_FILTER_COLOR":`
1772
2039
  if (clip_isVisible < 0.5) discard;
1773
- `},vi={name:"clip",fs:Pt,uniformTypes:{bounds:"vec4<f32>"}},gi={"vs:#decl":`
2040
+ `},Pr={name:"clip",fs:Mt,uniformTypes:{bounds:"vec4<f32>"}},Er={"vs:#decl":`
1774
2041
  out vec2 clip_commonPosition;
1775
2042
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1776
2043
  clip_commonPosition = geometry.position.xy;
@@ -1778,7 +2045,7 @@ out vec2 clip_commonPosition;
1778
2045
  in vec2 clip_commonPosition;
1779
2046
  `,"fs:DECKGL_FILTER_COLOR":`
1780
2047
  if (!clip_isInBounds(clip_commonPosition)) discard;
1781
- `},D=class extends yt.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:[mi],inject:hi}:{modules:[vi],inject:gi}}draw(){let{clipBounds:e}=this.props,t={};if(this.state.clipByInstance)t.bounds=e;else{let i=this.projectPosition([e[0],e[1],0]),o=this.projectPosition([e[2],e[3],0]);t.bounds=[Math.min(i[0],o[0]),Math.min(i[1],o[1]),Math.max(i[0],o[0]),Math.max(i[1],o[1])]}this.setShaderModuleProps({clip:t})}};D.defaultProps=_i;D.extensionName="ClipExtension";var bt=D;var At=d(_(),1);var Mt=d(_(),1),xi=`
2048
+ `},D=class extends Et.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:[yr],inject:br}:{modules:[Pr],inject:Er}}draw(){let{clipBounds:e}=this.props,t={};if(this.state.clipByInstance)t.bounds=e;else{let r=this.projectPosition([e[0],e[1],0]),o=this.projectPosition([e[2],e[3],0]);t.bounds=[Math.min(r[0],o[0]),Math.min(r[1],o[1]),Math.max(r[0],o[0]),Math.max(r[1],o[1])]}this.setShaderModuleProps({clip:t})}};D.defaultProps=xr;D.extensionName="ClipExtension";var Ft=D;var St=d(_(),1);var Tt=d(_(),1),Mr=`
1782
2049
  in float collisionPriorities;
1783
2050
 
1784
2051
  uniform sampler2D collision_texture;
@@ -1826,7 +2093,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
1826
2093
  float W = 2.0 * floatN + 1.0;
1827
2094
  return pow(accumulator / (W * W), 2.2);
1828
2095
  }
1829
- `,yi={"vs:#decl":`
2096
+ `,Fr={"vs:#decl":`
1830
2097
  float collision_fade = 1.0;
1831
2098
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1832
2099
  if (collision.sort) {
@@ -1845,21 +2112,21 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
1845
2112
  }
1846
2113
  `,"vs:DECKGL_FILTER_COLOR":`
1847
2114
  color.a *= collision_fade;
1848
- `},Pi=r=>{if(!r||!("dummyCollisionMap"in r))return{};let{enabled:e,collisionFBO:t,drawToCollisionMap:i,dummyCollisionMap:o}=r;return{enabled:e&&!i,sort:Boolean(i),collision_texture:!i&&t?t.colorAttachments[0]:o}},Et={name:"collision",dependencies:[Mt.project],vs:xi,inject:yi,getUniforms:Pi,uniformTypes:{sort:"i32",enabled:"i32"}};var Tt=d(_(),1);var Ft=d(_(),1),z=class extends Ft._LayersPass{renderCollisionMap(e,t){let o=[0,0,0,0],s=[1,1,e.width-2*1,e.height-2*1];this.render({...t,clearColor:o,scissorRect:s,target:e,pass:"collision"})}getLayerParameters(e,t,i){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}getShaderModuleProps(){return{collision:{drawToCollisionMap:!0},picking:{isActive:1,isAttribute:!1},lighting:{enabled:!1}}}};var ye=2,V=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}setup(e){this.context=e;let{device:t}=e;this.dummyCollisionMap=t.createTexture({width:1,height:1}),this.collisionFilterPass=new z(t,{id:"default-collision-filter"})}preRender({effects:e,layers:t,layerFilter:i,viewports:o,onViewportActive:s,views:a,isPicking:n,preRenderStats:l={}}){let{device:f}=this.context;if(n)return;let p=t.filter(({props:{visible:v,collisionEnabled:O}})=>v&&O);if(p.length===0){this.channels={};return}let c=e?.filter(v=>v.useInPicking&&l[v.id]),u=l["mask-effect"]?.didRender,m=this._groupByCollisionGroup(f,p),h=o[0],b=!this.lastViewport||!this.lastViewport.equals(h)||u;for(let v in m){let O=this.collisionFBOs[v],fe=m[v],[ce,pe]=f.canvasContext.getPixelSize();O.resize({width:ce/ye,height:pe/ye}),this._render(fe,{effects:c,layerFilter:i,onViewportActive:s,views:a,viewport:h,viewportChanged:b})}}_render(e,{effects:t,layerFilter:i,onViewportActive:o,views:s,viewport:a,viewportChanged:n}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let p=n||e===f||!(0,Tt._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((c,u)=>!E(c,f.layerBounds[u]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(c=>c.props.transitions);if(this.channels[l]=e,p){this.lastViewport=a;let c=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(c,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:i,viewports:a?[a]:[],onViewportActive:o,views:s,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:c.device.canvasContext.getDevicePixelRatio()/ye}}})}}_groupByCollisionGroup(e,t){let i={};for(let o of t){let s=o.props.collisionGroup,a=i[s];a||(a={collisionGroup:s,layers:[],layerBounds:[],allLayersLoaded:!0},i[s]=a),a.layers.push(o),a.layerBounds.push(o.getBounds()),o.isLoaded||(a.allLayersLoaded=!1)}for(let o of Object.keys(i))this.collisionFBOs[o]||this.createFBO(e,o),this.channels[o]||(this.channels[o]=i[o]);for(let o of Object.keys(this.collisionFBOs))i[o]||this.destroyFBO(o);return i}getShaderModuleProps(e){let{collisionGroup:t,collisionEnabled:i}=e.props,{collisionFBOs:o,dummyCollisionMap:s}=this,a=o[t];return{collision:{enabled:i&&Boolean(a),collisionFBO:a,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:o}=e.getDefaultCanvasContext().canvas,s=e.createTexture({format:"rgba8unorm",width:i,height:o,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),a=e.createTexture({format:"depth16unorm",width:i,height:o});this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:i,height:o,colorAttachments:[s],depthStencilAttachment:a})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}};var bi={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},j=class extends At.LayerExtension{getShaders(){return{modules:[Et]}}draw({shaderModuleProps:e}){e.collision?.drawToCollisionMap&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,t){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new V),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}};j.defaultProps=bi;j.extensionName="CollisionFilterExtension";var Lt=j;var P=d(_(),1);var Ot=d(_(),1),St=`layout(std140) uniform maskUniforms {
2115
+ `},Tr=i=>{if(!i||!("dummyCollisionMap"in i))return{};let{enabled:e,collisionFBO:t,drawToCollisionMap:r,dummyCollisionMap:o}=i;return{enabled:e&&!r,sort:Boolean(r),collision_texture:!r&&t?t.colorAttachments[0]:o}},Ot={name:"collision",dependencies:[Tt.project],vs:Mr,inject:Fr,getUniforms:Tr,uniformTypes:{sort:"i32",enabled:"i32"}};var At=d(_(),1);var Lt=d(_(),1),z=class extends Lt._LayersPass{renderCollisionMap(e,t){let o=[0,0,0,0],s=[1,1,e.width-2*1,e.height-2*1];this.render({...t,clearColor:o,scissorRect:s,target:e,pass:"collision"})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}getShaderModuleProps(){return{collision:{drawToCollisionMap:!0},picking:{isActive:1,isAttribute:!1},lighting:{enabled:!1}}}};var Pe=2,V=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}setup(e){this.context=e;let{device:t}=e;this.dummyCollisionMap=t.createTexture({width:1,height:1}),this.collisionFilterPass=new z(t,{id:"default-collision-filter"})}preRender({effects:e,layers:t,layerFilter:r,viewports:o,onViewportActive:s,views:n,isPicking:a,preRenderStats:l={}}){let{device:f}=this.context;if(a)return;let u=t.filter(({props:{visible:v,collisionEnabled:A}})=>v&&A);if(u.length===0){this.channels={};return}let c=e?.filter(v=>v.useInPicking&&l[v.id]),p=l["mask-effect"]?.didRender,m=this._groupByCollisionGroup(f,u),h=o[0],P=!this.lastViewport||!this.lastViewport.equals(h)||p;for(let v in m){let A=this.collisionFBOs[v],ue=m[v],[pe,de]=f.canvasContext.getPixelSize();A.resize({width:pe/Pe,height:de/Pe}),this._render(ue,{effects:c,layerFilter:r,onViewportActive:s,views:n,viewport:h,viewportChanged:P})}}_render(e,{effects:t,layerFilter:r,onViewportActive:o,views:s,viewport:n,viewportChanged:a}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let u=a||e===f||!(0,At._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((c,p)=>!M(c,f.layerBounds[p]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(c=>c.props.transitions);if(this.channels[l]=e,u){this.lastViewport=n;let c=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(c,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:r,viewports:n?[n]:[],onViewportActive:o,views:s,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:c.device.canvasContext.getDevicePixelRatio()/Pe}}})}}_groupByCollisionGroup(e,t){let r={};for(let o of t){let s=o.props.collisionGroup,n=r[s];n||(n={collisionGroup:s,layers:[],layerBounds:[],allLayersLoaded:!0},r[s]=n),n.layers.push(o),n.layerBounds.push(o.getBounds()),o.isLoaded||(n.allLayersLoaded=!1)}for(let o of Object.keys(r))this.collisionFBOs[o]||this.createFBO(e,o),this.channels[o]||(this.channels[o]=r[o]);for(let o of Object.keys(this.collisionFBOs))r[o]||this.destroyFBO(o);return r}getShaderModuleProps(e){let{collisionGroup:t,collisionEnabled:r}=e.props,{collisionFBOs:o,dummyCollisionMap:s}=this,n=o[t];return{collision:{enabled:r&&Boolean(n),collisionFBO:n,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:r,height:o}=e.getDefaultCanvasContext().canvas,s=e.createTexture({format:"rgba8unorm",width:r,height:o,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),n=e.createTexture({format:"depth16unorm",width:r,height:o});this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:r,height:o,colorAttachments:[s],depthStencilAttachment:n})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}};var Or={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},j=class extends St.LayerExtension{getShaders(){return{modules:[Ot]}}draw({shaderModuleProps:e}){e.collision?.drawToCollisionMap&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,t){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new V),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}};j.defaultProps=Or;j.extensionName="CollisionFilterExtension";var It=j;var b=d(_(),1);var Ct=d(_(),1),Rt=`layout(std140) uniform maskUniforms {
1849
2116
  vec4 bounds;
1850
2117
  highp int channel;
1851
2118
  bool enabled;
1852
2119
  bool inverted;
1853
2120
  bool maskByInstance;
1854
2121
  } mask;
1855
- `,Mi=`
2122
+ `,Lr=`
1856
2123
  vec2 mask_getCoords(vec4 position) {
1857
2124
  return (position.xy - mask.bounds.xy) / (mask.bounds.zw - mask.bounds.xy);
1858
2125
  }
1859
- `,Ei=`
1860
- ${St}
1861
- ${Mi}
1862
- `,Fi=`
2126
+ `,Ar=`
2127
+ ${Rt}
2128
+ ${Lr}
2129
+ `,Sr=`
1863
2130
  uniform sampler2D mask_texture;
1864
2131
 
1865
2132
  bool mask_isInBounds(vec2 texCoords) {
@@ -1884,10 +2151,10 @@ bool mask_isInBounds(vec2 texCoords) {
1884
2151
  return maskValue < 0.5;
1885
2152
  }
1886
2153
  }
1887
- `,Ti=`
1888
- ${St}
1889
- ${Fi}
1890
- `,Ai={"vs:#decl":`
2154
+ `,Ir=`
2155
+ ${Rt}
2156
+ ${Sr}
2157
+ `,Cr={"vs:#decl":`
1891
2158
  out vec2 mask_texCoords;
1892
2159
  `,"vs:#main-end":`
1893
2160
  vec4 mask_common_position;
@@ -1909,45 +2176,75 @@ in vec2 mask_texCoords;
1909
2176
 
1910
2177
  if (!mask) discard;
1911
2178
  }
1912
- `},Li=r=>r&&"maskMap"in r?{mask_texture:r.maskMap}:r||{},It={name:"mask",dependencies:[Ot.project],vs:Ei,fs:Ti,inject:Ai,getUniforms:Li,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Pe=d(_(),1);var kt=d(_(),1),Oi={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},U=class extends kt._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=2**e.channel,i=[255,255,255,255];super.render({...e,clearColor:i,colorMask:t,target:this.fbo,pass:"mask"})}getLayerParameters(e,t,i){return{...e.props.parameters,blend:!0,depthCompare:"always",...Oi}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var oe=d(_(),1);function T(r,e){let t=[1/0,1/0,-1/0,-1/0];for(let i of r){let o=i.getBounds();if(o){let s=i.projectPosition(o[0],{viewport:e,autoOffset:!1}),a=i.projectPosition(o[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],s[0]),t[1]=Math.min(t[1],s[1]),t[2]=Math.max(t[2],a[0]),t[3]=Math.max(t[3],a[1])}}return Number.isFinite(t[0])?t:null}var Si=2048;function A(r){let{bounds:e,viewport:t,border:i=0}=r,{isGeospatial:o}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let s=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:a,height:n,zoom:l}=r;if(l===void 0){a=a-i*2,n=n-i*2;let f=Math.min(a/(e[2]-e[0]),n/(e[3]-e[1]));l=Math.min(Math.log2(f),20)}else if(!a||!n){let f=2**l;a=Math.round(Math.abs(e[2]-e[0])*f),n=Math.round(Math.abs(e[3]-e[1])*f);let p=Si-i*2;if(a>p||n>p){let c=p/Math.max(a,n);a=Math.round(a*c),n=Math.round(n*c),l+=Math.log2(c)}}return o?new oe.WebMercatorViewport({id:t.id,x:i,y:i,width:a,height:n,longitude:s[0],latitude:s[1],zoom:l,orthographic:!0}):new oe.OrthographicViewport({id:t.id,x:i,y:i,width:a,height:n,target:s,zoom:l,flipY:!1})}function Ii(r,e){let t;if(e&&e.length===2){let[s,a]=e,n=r.getBounds({z:s}),l=r.getBounds({z:a});t=[Math.min(n[0],l[0]),Math.min(n[1],l[1]),Math.max(n[2],l[2]),Math.max(n[3],l[3])]}else t=r.getBounds();let i=r.projectPosition(t.slice(0,2)),o=r.projectPosition(t.slice(2,4));return[i[0],i[1],o[0],o[1]]}function L(r,e,t){if(!r)return[0,0,1,1];let i=Ii(e,t),o=ki(i);return r[2]-r[0]<=o[2]-o[0]&&r[3]-r[1]<=o[3]-o[1]?r:[Math.max(r[0],o[0]),Math.max(r[1],o[1]),Math.min(r[2],o[2]),Math.min(r[3],o[3])]}function ki(r){let e=r[2]-r[0],t=r[3]-r[1],i=(r[0]+r[2])/2,o=(r[1]+r[3])/2;return[i-e,o-t,i+e,o+t]}var G=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}setup({device:e}){this.dummyMaskMap=e.createTexture({width:1,height:1}),this.maskPass=new U(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:t,viewports:i,onViewportActive:o,views:s,effects:a,isPicking:n}){let l=!1;if(n)return{didRender:l};let f=e.filter(m=>m.props.visible&&m.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={};let p=this._sortMaskChannels(f),c=i[0],u=!this.lastViewport||!this.lastViewport.equals(c);if(c.resolution!==void 0)return Pe.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let m in p){let h=this._renderChannel(p[m],{layerFilter:t,onViewportActive:o,views:s,effects:a,viewport:c,viewportChanged:u});l||(l=h)}return{didRender:l}}_renderChannel(e,{layerFilter:t,onViewportActive:i,views:o,effects:s,viewport:a,viewportChanged:n}){let l=!1,f=this.channels[e.index];if(!f)return l;let p=e===f||e.layers.length!==f.layers.length||e.layers.some((c,u)=>c!==f.layers[u]||c.props.transitions)||e.layerBounds.some((c,u)=>c!==f.layerBounds[u]);if(e.bounds=f.bounds,e.maskBounds=f.maskBounds,this.channels[e.index]=e,p||n){this.lastViewport=a;let c=T(e.layers,a);if(e.bounds=c&&L(c,a),p||!E(e.bounds,f.bounds)){let{maskPass:u,maskMap:m}=this,h=c&&A({bounds:e.bounds,viewport:a,width:m.width,height:m.height,border:1});e.maskBounds=h?h.getBounds():[0,0,1,1],u.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:h?[h]:[],onViewportActive:i,views:o,effects:s,shaderModuleProps:{project:{devicePixelRatio:1}}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}_sortMaskChannels(e){let t={},i=0;for(let o of e){let{id:s}=o.root,a=t[s];if(!a){if(++i>4){Pe.log.warn("Too many mask layers. The max supported is 4")();continue}a={id:s,index:this.channels.findIndex(n=>n?.id===s),layers:[],layerBounds:[],coordinateOrigin:o.root.props.coordinateOrigin,coordinateSystem:o.root.props.coordinateSystem},t[s]=a}a.layers.push(o),a.layerBounds.push(o.getBounds())}for(let o=0;o<4;o++){let s=this.channels[o];(!s||!(s.id in t))&&(this.channels[o]=null)}for(let o in t){let s=t[o];s.index<0&&(s.index=this.channels.findIndex(a=>!a),this.channels[s.index]=s)}return t}getShaderModuleProps(){return{mask:{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 Ri={maskId:"",maskByInstance:void 0,maskInverted:!1},H=class extends P.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new G)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=Boolean(this.props.maskByInstance)),this.state.maskByInstance=e,{modules:[It]}}draw({context:e,shaderModuleProps:t}){let i={};i.maskByInstance=Boolean(this.state.maskByInstance);let{maskId:o,maskInverted:s}=this.props,{maskChannels:a}=t.mask||{},{viewport:n}=e;if(a&&a[o]){let{index:l,bounds:f,coordinateOrigin:p}=a[o],{coordinateSystem:c}=a[o];i.enabled=!0,i.channel=l,i.inverted=s,c===P.COORDINATE_SYSTEM.DEFAULT&&(c=n.isGeospatial?P.COORDINATE_SYSTEM.LNGLAT:P.COORDINATE_SYSTEM.CARTESIAN);let u={modelMatrix:null,fromCoordinateOrigin:p,fromCoordinateSystem:c},m=this.projectPosition([f[0],f[1],0],u),h=this.projectPosition([f[2],f[3],0],u);i.bounds=[m[0],m[1],h[0],h[1]]}else o&&P.log.warn(`Could not find a mask layer with id: ${o}`)(),i.enabled=!1;this.setShaderModuleProps({mask:i})}};H.defaultProps=Ri;H.extensionName="MaskExtension";var Rt=H;var Vt=d(_(),1);var zt=d(_(),1);var be=d(_(),1),g={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},Ci=Object.keys(g).map(r=>`const float TERRAIN_MODE_${r} = ${g[r]}.0;`).join(`
1913
- `),Ct=Ci+`
2179
+ `},Rr=i=>i&&"maskMap"in i?{mask_texture:i.maskMap}:i||{},kt={name:"mask",dependencies:[Ct.project],vs:Ar,fs:Ir,inject:Cr,getUniforms:Rr,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Me=d(_(),1);var wt=d(_(),1),kr={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},U=class extends wt._LayersPass{constructor(e,t){super(e,t);let{mapSize:r=2048}=t;this.maskMap=e.createTexture({format:"rgba8unorm",width:r,height:r,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),this.fbo=e.createFramebuffer({id:"maskmap",width:r,height:r,colorAttachments:[this.maskMap]})}render(e){let t=2**e.channel,r=[255,255,255,255];super.render({...e,clearColor:r,colorMask:t,target:this.fbo,pass:"mask"})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...kr}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var G=d(_(),1),Ee=new G.WebMercatorViewport({width:1,height:1,longitude:0,latitude:0,zoom:0});function H(i){let[e,t]=Ee.projectPosition(i);return[e,t]}function ne(i){return i.isGeospatial?Ee:i}function T(i,e){let t=[1/0,1/0,-1/0,-1/0];for(let r of i){let o=r.getBounds();if(o){let s=r.projectPosition(o[0],{viewport:e,autoOffset:!1}),n=r.projectPosition(o[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],s[0]),t[1]=Math.min(t[1],s[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 wr=2048;function O(i){let{bounds:e,viewport:t,border:r=0}=i,{isGeospatial:o}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let s=o?Ee.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]):t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=i;if(l===void 0){n=n-r*2,a=a-r*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 u=wr-r*2;if(n>u||a>u){let c=u/Math.max(n,a);n=Math.round(n*c),a=Math.round(a*c),l+=Math.log2(c)}}return o?new G.WebMercatorViewport({id:t.id,x:r,y:r,width:n,height:a,longitude:s[0],latitude:s[1],zoom:l,orthographic:!0}):new G.OrthographicViewport({id:t.id,x:r,y:r,width:n,height:a,target:s,zoom:l,flipY:!1})}function Nr(i,e){let t;if(e&&e.length===2){let[s,n]=e,a=i.getBounds({z:s}),l=i.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=i.getBounds();let r=i.projectPosition(t.slice(0,2)),o=i.projectPosition(t.slice(2,4));return[r[0],r[1],o[0],o[1]]}function L(i,e,t){if(!i)return[0,0,1,1];let r=Nr(e,t),o=Br(r);return i[2]-i[0]<=o[2]-o[0]&&i[3]-i[1]<=o[3]-o[1]?i:[Math.max(i[0],o[0]),Math.max(i[1],o[1]),Math.min(i[2],o[2]),Math.min(i[3],o[3])]}function Br(i){let e=i[2]-i[0],t=i[3]-i[1],r=(i[0]+i[2])/2,o=(i[1]+i[3])/2;return[r-e,o-t,r+e,o+t]}var q=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}setup({device:e}){this.dummyMaskMap=e.createTexture({width:1,height:1}),this.maskPass=new U(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:t,viewports:r,onViewportActive:o,views:s,effects:n,isPicking:a}){let l=!1;if(a)return{didRender:l};let f=e.filter(m=>m.props.visible&&m.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={};let u=this._sortMaskChannels(f),c=r[0],p=!this.lastViewport||!this.lastViewport.equals(c);if(c.resolution!==void 0)return Me.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let m in u){let h=this._renderChannel(u[m],{layerFilter:t,onViewportActive:o,views:s,effects:n,viewport:c,viewportChanged:p});l||(l=h)}return{didRender:l}}_renderChannel(e,{layerFilter:t,onViewportActive:r,views:o,effects:s,viewport:n,viewportChanged:a}){let l=!1,f=this.channels[e.index];if(!f)return l;let u=e===f||e.layers.length!==f.layers.length||e.layers.some((c,p)=>c!==f.layers[p]||c.props.transitions)||e.layerBounds.some((c,p)=>c!==f.layerBounds[p]);if(e.bounds=f.bounds,e.maskBounds=f.maskBounds,this.channels[e.index]=e,u||a){this.lastViewport=n;let c=T(e.layers,n);if(e.bounds=c&&L(c,n),u||!M(e.bounds,f.bounds)){let{maskPass:p,maskMap:m}=this,h=c&&O({bounds:e.bounds,viewport:n,width:m.width,height:m.height,border:1});e.maskBounds=h?h.getBounds():[0,0,1,1],p.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:h?[h]:[],onViewportActive:r,views:o,effects:s,shaderModuleProps:{project:{devicePixelRatio:1}}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}_sortMaskChannels(e){let t={},r=0;for(let o of e){let{id:s}=o.root,n=t[s];if(!n){if(++r>4){Me.log.warn("Too many mask layers. The max supported is 4")();continue}n={id:s,index:this.channels.findIndex(a=>a?.id===s),layers:[],layerBounds:[],coordinateOrigin:o.root.props.coordinateOrigin,coordinateSystem:o.root.props.coordinateSystem},t[s]=n}n.layers.push(o),n.layerBounds.push(o.getBounds())}for(let o=0;o<4;o++){let s=this.channels[o];(!s||!(s.id in t))&&(this.channels[o]=null)}for(let o in t){let s=t[o];s.index<0&&(s.index=this.channels.findIndex(n=>!n),this.channels[s.index]=s)}return t}getShaderModuleProps(){return{mask:{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 Dr={maskId:"",maskByInstance:void 0,maskInverted:!1},W=class extends b.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new q)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=Boolean(this.props.maskByInstance)),this.state.maskByInstance=e,{modules:[kt]}}draw({context:e,shaderModuleProps:t}){let r={};r.maskByInstance=Boolean(this.state.maskByInstance);let{maskId:o,maskInverted:s}=this.props,{maskChannels:n}=t.mask||{},{viewport:a}=e;if(n&&n[o]){let{index:l,bounds:f,coordinateOrigin:u}=n[o],{coordinateSystem:c}=n[o];r.enabled=!0,r.channel=l,r.inverted=s,c===b.COORDINATE_SYSTEM.DEFAULT&&(c=a.isGeospatial?b.COORDINATE_SYSTEM.LNGLAT:b.COORDINATE_SYSTEM.CARTESIAN);let p={modelMatrix:null,fromCoordinateOrigin:u,fromCoordinateSystem:c},m=this.projectPosition([f[0],f[1],0],p),h=this.projectPosition([f[2],f[3],0],p);r.bounds=[m[0],m[1],h[0],h[1]]}else o&&b.log.warn(`Could not find a mask layer with id: ${o}`)(),r.enabled=!1;this.setShaderModuleProps({mask:r})}};W.defaultProps=Dr;W.extensionName="MaskExtension";var Nt=W;var qt=d(_(),1);var Ht=d(_(),1);var Fe=d(_(),1),g={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},zr=Object.keys(g).map(i=>`const float TERRAIN_MODE_${i} = ${g[i]}.0;`).join(`
2180
+ `),Bt=zr+`
1914
2181
  layout(std140) uniform terrainUniforms {
1915
2182
  float mode;
1916
2183
  vec4 bounds;
1917
2184
  } terrain;
1918
2185
 
1919
2186
  uniform sampler2D terrain_map;
1920
- `,q={name:"terrain",dependencies:[be.project],vs:Ct+"out vec3 commonPos;",fs:Ct+"in vec3 commonPos;",inject:{"vs:#main-start":`
2187
+ `,Y={name:"terrain",dependencies:[Fe.project],vs:`${Bt}
2188
+ out vec3 commonPos;
2189
+ // In globe mode, absolute Mercator position for terrain FBO UV lookups
2190
+ out vec2 terrainMercPos;
2191
+ out float terrainHeight;
2192
+
2193
+ vec2 terrain_globe_to_mercator(vec3 globePosition) {
2194
+ float D = length(globePosition);
2195
+ float sinLat = clamp(globePosition.z / D, -0.999998, 0.999998);
2196
+ float x = atan(globePosition.x, -globePosition.y);
2197
+ float y = atanh(sinLat);
2198
+ return (vec2(x, y) + PI) * WORLD_SCALE;
2199
+ }
2200
+ `,fs:`${Bt}in vec2 terrainMercPos;
2201
+ in float terrainHeight;`,inject:{"vs:#main-start":`
1921
2202
  if (terrain.mode == TERRAIN_MODE_SKIP) {
1922
2203
  gl_Position = vec4(0.0);
1923
2204
  return;
1924
2205
  }
1925
2206
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1926
2207
  commonPos = geometry.position.xyz;
2208
+ terrainHeight = commonPos.z + project.commonOrigin.z;
2209
+ if (project.projectionMode == PROJECTION_MODE_GLOBE) {
2210
+ terrainMercPos = terrain_globe_to_mercator(commonPos);
2211
+ terrainHeight = length(commonPos) - GLOBE_RADIUS;
2212
+ } else {
2213
+ terrainMercPos = commonPos.xy;
2214
+ }
1927
2215
  if (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
1928
- vec2 texCoords = (commonPos.xy - terrain.bounds.xy) / terrain.bounds.zw;
2216
+ vec2 texCoords = (terrainMercPos - terrain.bounds.xy) / terrain.bounds.zw;
1929
2217
  position = vec4(texCoords * 2.0 - 1.0, 0.0, 1.0);
1930
- commonPos.z += project.commonOrigin.z;
1931
2218
  }
1932
2219
  if (terrain.mode == TERRAIN_MODE_USE_HEIGHT_MAP) {
1933
2220
  vec3 anchor = geometry.worldPosition;
1934
2221
  anchor.z = 0.0;
1935
2222
  vec3 anchorCommon = project_position(anchor);
1936
- vec2 texCoords = (anchorCommon.xy - terrain.bounds.xy) / terrain.bounds.zw;
2223
+ vec2 anchorMercPos = project.projectionMode == PROJECTION_MODE_GLOBE
2224
+ ? terrain_globe_to_mercator(anchorCommon)
2225
+ : anchorCommon.xy;
2226
+ vec2 texCoords = (anchorMercPos - terrain.bounds.xy) / terrain.bounds.zw;
1937
2227
  if (texCoords.x >= 0.0 && texCoords.y >= 0.0 && texCoords.x <= 1.0 && texCoords.y <= 1.0) {
1938
2228
  float terrainZ = texture(terrain_map, texCoords).r;
1939
- geometry.position.z += terrainZ;
2229
+ if (project.projectionMode == PROJECTION_MODE_GLOBE) {
2230
+ // Height map is written in Mercator common space (units = TILE_SIZE / EARTH_CIRCUMFERENCE / cos(lat))
2231
+ // Convert to globe radial units (units = GLOBE_RADIUS / EARTH_RADIUS)
2232
+ terrainZ *= cos(radians(geometry.worldPosition.y)) * PI;
2233
+ geometry.position.xyz += normalize(geometry.position.xyz) * terrainZ;
2234
+ } else {
2235
+ geometry.position.z += terrainZ;
2236
+ }
1940
2237
  position = project_common_position_to_clipspace(geometry.position);
1941
2238
  }
1942
2239
  }
1943
2240
  `,"fs:#main-start":`
1944
2241
  if (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
1945
- fragColor = vec4(commonPos.z, 0.0, 0.0, 1.0);
2242
+ fragColor = vec4(terrainHeight, 0.0, 0.0, 1.0);
1946
2243
  return;
1947
2244
  }
1948
2245
  `,"fs:DECKGL_FILTER_COLOR":`
1949
2246
  if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_USE_COVER_ONLY)) {
1950
- vec2 texCoords = (commonPos.xy - terrain.bounds.xy) / terrain.bounds.zw;
2247
+ vec2 texCoords = (terrainMercPos - terrain.bounds.xy) / terrain.bounds.zw;
1951
2248
  vec4 pixel = texture(terrain_map, texCoords);
1952
2249
  if (terrain.mode == TERRAIN_MODE_USE_COVER_ONLY) {
1953
2250
  color = pixel;
@@ -1957,6 +2254,6 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
1957
2254
  }
1958
2255
  return;
1959
2256
  }
1960
- `},getUniforms:(r={})=>{if(!r.dummyHeightMap)return{};if("terrainSkipRender"in r||"drawToTerrainHeightMap"in r){let{drawToTerrainHeightMap:e,heightMap:t,heightMapBounds:i,dummyHeightMap:o,terrainCover:s,useTerrainHeightMap:a,terrainSkipRender:n}=r,l=be.project.getUniforms(r.project),{commonOrigin:f}=l,p=n?g.SKIP:g.NONE,c=o,u=null;if(e)p=g.WRITE_HEIGHT_MAP,u=i;else if(a&&t)p=g.USE_HEIGHT_MAP,c=t,u=i;else if(s){let h=(r.isPicking?s.getPickingFramebuffer():s.getRenderFramebuffer())?.colorAttachments[0].texture;r.isPicking&&(p=g.SKIP),h?(c=h,p=p===g.SKIP?g.USE_COVER_ONLY:g.USE_COVER,u=s.bounds):r.isPicking&&!n&&(p=g.NONE)}return{mode:p,terrain_map:c,bounds:u?[u[0]-f[0],u[1]-f[1],u[2]-u[0],u[3]-u[1]]:[0,0,0,0]}}return{mode:g.NONE,terrain_map:r.dummyHeightMap,bounds:[0,0,0,0]}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};function W(r,e){return r.createFramebuffer({id:e.id,colorAttachments:[r.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},dimension:"2d",width:1,height:1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var se=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=wt(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:i,layerNeedsRedraw:o}){e&&(this.targetLayer=e);let s=t?this._updateViewport(t):!1,a=i?this._updateLayers(i):!1;if(o){for(let n of this.layers)if(o[n]){a=!0;break}}return a||s}_updateLayers(e){let t=!1;if(e=this.tile?wi(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 s=e.projectPosition(this.targetBounds[0]),a=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[s[0],s[1],a[0],a[1]]}}else this.targetBounds!==t.getBounds()&&(i=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=T([t],e));if(!this.targetBoundsCommon)return!1;let o=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let s=this.renderViewport?.zoom;i=i||o!==s;let a=L(this.targetBoundsCommon,e),n=this.bounds;i=i||!n||a.some((l,f)=>l!==n[f]),this.bounds=a}return i&&(this.renderViewport=A({bounds:this.bounds,zoom:o,viewport:e})),i}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=W(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=W(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),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 wi(r,e){return e.filter(t=>{let i=wt(t);return i?Ni(r.boundingBox,i.boundingBox):!0})}function wt(r){for(;r;){let{tile:e}=r.props;if(e)return e;r=r.parent}return null}function Ni(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 Nt=d(_(),1),Bi={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},ae=class extends Nt._LayersPass{getRenderableLayers(e,t){let{layers:i}=t,o=[],s=this._getDrawLayerParams(e,t,!0);for(let a=0;a<i.length;a++){let n=i[a];!n.isComposite&&s[a].shouldDrawLayer&&o.push(n)}return o}renderHeightMap(e,t){let i=e.getRenderFramebuffer(),o=e.renderViewport;!i||!o||(i.resize(o),this.render({...t,target:i,pass:"terrain-height-map",layers:t.layers,viewports:[o],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,t){let i=e.getRenderFramebuffer(),o=e.renderViewport;if(!i||!o)return;let s=e.filterLayers(t.layers);i.resize(o),this.render({...t,target:i,pass:`terrain-cover-${e.id}`,layers:s,viewports:[o],clearColor:[0,0,0,0]})}getLayerParameters(e,t,i){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&Bi}}getShaderModuleProps(e,t,i){return{terrain:{project:i.project}}}};var Bt=d(_(),1),ne=class extends Bt._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:i}=t,o=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let s=this._getDrawLayerParams(e,t);for(let a=0;a<i.length;a++){let n=i[a];!n.isComposite&&s[a].shouldDrawLayer&&(o.push(n),this.drawParameters[n.id]=s[a].layerParameters)}return o}renderTerrainCover(e,t){let i=e.getPickingFramebuffer(),o=e.renderViewport;if(!i||!o)return;let s=e.filterLayers(t.layers),a=e.targetLayer;a.props.pickable&&s.unshift(a),i.resize(o);let l=this.drawParameters[a.id]?.blendColor?.[3]??0;this.render({...t,pickingFBO:i,pass:`terrain-cover-picking-${e.id}`,layers:s,viewports:[o],cullRect:void 0,deviceRect:o,pickZ:!1,clearColor:[0,0,0,l]})}getLayerParameters(e,t,i){let o;return this.drawParameters[e.id]?o=this.drawParameters[e.id]:(o=super.getLayerParameters(e,t,i),o.blend=!0),{...o,depthCompare:"always",blendAlphaSrcFactor:"constant"}}getShaderModuleProps(e,t,i){return{...super.getShaderModuleProps(e,t,i),terrain:{project:i.project}}}};var Dt=2048,K=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=W(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:t}){let i=e.length!==this.layers.length||e.some((s,a)=>s!==this.layers[a]||s.props.transitions||s.getBounds()!==this.layersBounds[a]);i&&(this.layers=e,this.layersBounds=e.map(s=>s.getBounds()),this.layersBoundsCommon=T(e,t));let o=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(i||o){let s=L(this.layersBoundsCommon,t);if(s[2]<=s[0]||s[3]<=s[1])return this.renderViewport=null,!1;this.bounds=s,this.lastViewport=t;let a=t.scale,n=(s[2]-s[0])*a,l=(s[3]-s[1])*a;return this.renderViewport=n>0||l>0?A({bounds:[t.center[0]-1,t.center[1]-1,t.center[0]+1,t.center[1]+1],zoom:t.zoom,width:Math.min(n,Dt),height:Math.min(l,Dt),viewport:t}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var le=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}setup({device:e,deck:t}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new ae(e,{id:"terrain"}),this.terrainPickingPass=new ne(e,{id:"terrain-picking"}),K.isSupported(e)?this.heightMap=new K(e):zt.log.warn("Terrain offset mode is not supported by this browser")(),t._addDefaultShaderModule(q)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:t}=e,i=e.pass.startsWith("picking");this.isPicking=i,this.isDrapingEnabled=!0;let o=t[0],s=(i?this.terrainPickingPass:this.terrainPass).getRenderableLayers(o,e),a=s.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;i||s.filter(p=>p.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,o,e);let n=s.filter(f=>f.state.terrainDrawMode==="drape"),l=e.effects?.filter(f=>f!==this);this._updateTerrainCovers(a,n,o,{...e,effects:l})}getShaderModuleProps(e,t){if(e.props.operation.includes("mask"))return{terrain:{dummyHeightMap:this.dummyHeightMap}};let{terrainDrawMode:i}=e.state,o=this.isDrapingEnabled?this.terrainCovers.get(e.id)??null:null;return this.isPicking&&e.props.operation.includes("terrain")&&(e.state._hasPickingCover=Boolean(o?.getPickingFramebuffer())),{terrain:{project:t.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:o,useTerrainHeightMap:i==="offset",terrainSkipRender:i==="drape"||!e.props.operation.includes("draw")}}}cleanup({deck:e}){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let t of this.terrainCovers.values())t.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(q)}_updateHeightMap(e,t,i){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:t})||this.terrainPass.renderHeightMap(this.heightMap,{...i,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,t,i,o){let s={};for(let a of t)a.state.terrainCoverNeedsRedraw&&(s[a.id]=!0,a.state.terrainCoverNeedsRedraw=!1);for(let a of this.terrainCovers.values())a.isDirty=a.isDirty||a.shouldUpdate({layerNeedsRedraw:s});for(let a of e)this._updateTerrainCover(a,t,i,o);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,i,o){let s=this.isPicking?this.terrainPickingPass:this.terrainPass,a=this.terrainCovers.get(e.id);a||(a=new se(e),this.terrainCovers.set(e.id,a));try{let n=a.shouldUpdate({targetLayer:e,viewport:i,layers:t});(this.isPicking||a.isDirty||n)&&(s.renderTerrainCover(a,{...o,layers:t,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(a.isDirty=!1))}catch(n){e.raiseError(n,`Error rendering terrain cover ${a.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 Di={terrainDrawMode:void 0},Y=class extends Vt.LayerExtension{getShaders(){return{modules:[q]}}initializeState(){this.context.deck?._addDefaultEffect(new le)}updateState(e){let{props:t,oldProps:i}=e;if(this.state.terrainDrawMode&&t.terrainDrawMode===i.terrainDrawMode&&t.extruded===i.extruded)return;let{terrainDrawMode:o}=t;if(!o){let s=this.props.extruded,a=this.getAttributeManager()?.attributes,n=a&&"instancePositions"in a;o=s||n?"offset":"drape"}this.setState({terrainDrawMode:o})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};Y.defaultProps=Di;Y.extensionName="TerrainExtension";var jt=Y;return Kt($);})();
2257
+ `},getUniforms:(i={})=>{if(!i.dummyHeightMap)return{};if("terrainSkipRender"in i||"drawToTerrainHeightMap"in i){let{drawToTerrainHeightMap:e,heightMap:t,heightMapBounds:r,dummyHeightMap:o,terrainCover:s,useTerrainHeightMap:n,terrainSkipRender:a}=i,l=Fe.project.getUniforms(i.project),{commonOrigin:f}=l,u=a?g.SKIP:g.NONE,c=o,p=null;if(e)u=g.WRITE_HEIGHT_MAP,p=r;else if(n&&t)u=g.USE_HEIGHT_MAP,c=t,p=r;else if(s){let h=(i.isPicking?s.getPickingFramebuffer():s.getRenderFramebuffer())?.colorAttachments[0].texture;i.isPicking&&(u=g.SKIP),h?(c=h,u=u===g.SKIP?g.USE_COVER_ONLY:g.USE_COVER,p=s.bounds):i.isPicking&&!a&&(u=g.NONE)}return{mode:u,terrain_map:c,bounds:p?[p[0]-f[0],p[1]-f[1],p[2]-p[0],p[3]-p[1]]:[0,0,0,0]}}return{mode:g.NONE,terrain_map:i.dummyHeightMap,bounds:[0,0,0,0]}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};var Dt=d(_(),1);function K(i,e){return i.createFramebuffer({id:e.id,colorAttachments:[i.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},dimension:"2d",width:1,height:1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var ae=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=zt(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:r,layerNeedsRedraw:o}){e&&(this.targetLayer=e);let s=t?this._updateViewport(t):!1,n=r?this._updateLayers(r):!1;if(o){for(let a of this.layers)if(o[a]){n=!0;break}}return n||s}_updateLayers(e){let t=!1;if(e=this.tile?Vr(this.tile,e):e,e.length!==this.layers.length)t=!0;else for(let r=0;r<e.length;r++)if(e[r].id!==this.layers[r]){t=!0;break}return t&&(this.layers=e.map(r=>r.id)),t}_updateViewport(e){let t=this.targetLayer,r=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){r=!0,this.targetBounds=this.tile.boundingBox;let s=H(this.targetBounds[0]),n=H(this.targetBounds[1]);this.targetBoundsCommon=[s[0],s[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(r=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=T([t],ne(e)));if(!this.targetBoundsCommon)return!1;let o=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let s=this.renderViewport?.zoom;r=r||o!==s;let n=e instanceof Dt._GlobeViewport?this.targetBoundsCommon:L(this.targetBoundsCommon,e),a=this.bounds;r=r||!a||n.some((l,f)=>l!==a[f]),this.bounds=n}return r&&(this.renderViewport=O({bounds:this.bounds,zoom:o,viewport:e})),r}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=K(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=K(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),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 Vr(i,e){return e.filter(t=>{let r=zt(t);return r?jr(i.boundingBox,r.boundingBox):!0})}function zt(i){for(;i;){let{tile:e}=i.props;if(e)return e;i=i.parent}return null}function jr(i,e){return i&&e?i[0][0]<e[1][0]&&e[0][0]<i[1][0]&&i[0][1]<e[1][1]&&e[0][1]<i[1][1]:!1}var Vt=d(_(),1),Ur={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},le=class extends Vt._LayersPass{getRenderableLayers(e,t){let{layers:r}=t,o=[],s=this._getDrawLayerParams(e,t,!0);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&s[n].shouldDrawLayer&&o.push(a)}return o}renderHeightMap(e,t){let r=e.getRenderFramebuffer(),o=e.renderViewport;!r||!o||(r.resize(o),this.render({...t,target:r,pass:"terrain-height-map",layers:t.layers,viewports:[o],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,t){let r=e.getRenderFramebuffer(),o=e.renderViewport;if(!r||!o)return;let s=e.filterLayers(t.layers);r.resize(o),this.render({...t,target:r,pass:`terrain-cover-${e.id}`,layers:s,viewports:[o],clearColor:[0,0,0,0]})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&Ur}}getShaderModuleProps(e,t,r){return{terrain:{project:r.project}}}};var jt=d(_(),1),fe=class extends jt._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:r}=t,o=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let s=this._getDrawLayerParams(e,t);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&s[n].shouldDrawLayer&&(o.push(a),this.drawParameters[a.id]=s[n].layerParameters)}return o}renderTerrainCover(e,t){let r=e.getPickingFramebuffer(),o=e.renderViewport;if(!r||!o)return;let s=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&s.unshift(n),r.resize(o);let l=this.drawParameters[n.id]?.blendColor?.[3]??0;this.render({...t,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:s,viewports:[o],cullRect:void 0,deviceRect:o,pickZ:!1,clearColor:[0,0,0,l]})}getLayerParameters(e,t,r){let o;return this.drawParameters[e.id]?o=this.drawParameters[e.id]:(o=super.getLayerParameters(e,t,r),o.blend=!0),{...o,depthCompare:"always",blendAlphaSrcFactor:"constant"}}getShaderModuleProps(e,t,r){return{...super.getShaderModuleProps(e,t,r),terrain:{project:r.project}}}};var Gt=d(_(),1),Ut=2048,$=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=K(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:t}){let r=e.length!==this.layers.length||e.some((s,n)=>s!==this.layers[n]||s.props.transitions||s.getBounds()!==this.layersBounds[n]);r&&(this.layers=e,this.layersBounds=e.map(s=>s.getBounds()),this.layersBoundsCommon=T(e,ne(t)));let o=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||o){let s=t instanceof Gt._GlobeViewport?this.layersBoundsCommon:L(this.layersBoundsCommon,t);if(s[2]<=s[0]||s[3]<=s[1])return this.renderViewport=null,!1;this.bounds=s,this.lastViewport=t;let n=t.scale,a=(s[2]-s[0])*n,l=(s[3]-s[1])*n,f=t.isGeospatial?H([t.longitude??0,t.latitude??0]):[t.center[0],t.center[1]];return this.renderViewport=a>0||l>0?O({bounds:[f[0]-1,f[1]-1,f[0]+1,f[1]+1],zoom:t.zoom,width:Math.min(a,Ut),height:Math.min(l,Ut),viewport:t}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var ce=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}setup({device:e,deck:t}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new le(e,{id:"terrain"}),this.terrainPickingPass=new fe(e,{id:"terrain-picking"}),$.isSupported(e)?this.heightMap=new $(e):Ht.log.warn("Terrain offset mode is not supported by this browser")(),t._addDefaultShaderModule(Y)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:t}=e,r=e.pass.startsWith("picking");this.isPicking=r,this.isDrapingEnabled=!0;let o=t[0],s=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(o,e),n=s.filter(f=>f.props.operation.includes("terrain"));if(n.length===0)return;r||s.filter(u=>u.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(n,o,e);let a=s.filter(f=>f.state.terrainDrawMode==="drape"),l=e.effects?.filter(f=>f!==this);this._updateTerrainCovers(n,a,o,{...e,effects:l})}getShaderModuleProps(e,t){if(e.props.operation.includes("mask"))return{terrain:{dummyHeightMap:this.dummyHeightMap}};let{terrainDrawMode:r}=e.state,o=this.isDrapingEnabled?this.terrainCovers.get(e.id)??null:null;return this.isPicking&&e.props.operation.includes("terrain")&&(e.state._hasPickingCover=Boolean(o?.getPickingFramebuffer())),{terrain:{project:t.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:o,useTerrainHeightMap:r==="offset",terrainSkipRender:r==="drape"||!e.props.operation.includes("draw")}}}cleanup({deck:e}){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let t of this.terrainCovers.values())t.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(Y)}_updateHeightMap(e,t,r){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:t})||this.terrainPass.renderHeightMap(this.heightMap,{...r,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,t,r,o){let s={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(s[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:s});for(let n of e)this._updateTerrainCover(n,t,r,o);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,r,o){let s=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new ae(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:r,layers:t});(this.isPicking||n.isDirty||a)&&(s.renderTerrainCover(n,{...o,layers:t,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(n.isDirty=!1))}catch(a){e.raiseError(a,`Error rendering terrain cover ${n.id}`)}}_pruneTerrainCovers(){let e=[];for(let[t,r]of this.terrainCovers)r.isActive||e.push(t);for(let t of e)this.terrainCovers.delete(t)}};var Gr={terrainDrawMode:void 0},Z=class extends qt.LayerExtension{getShaders(){return{modules:[Y]}}initializeState(){this.context.deck?._addDefaultEffect(new ce)}updateState(e){let{props:t,oldProps:r}=e;if(this.state.terrainDrawMode&&t.terrainDrawMode===r.terrainDrawMode&&t.extruded===r.extruded)return;let{terrainDrawMode:o}=t;if(!o){let s=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;o=s||a?"offset":"drape"}this.setState({terrainDrawMode:o})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};Z.defaultProps=Gr;Z.extensionName="TerrainExtension";var Wt=Z;return Xt(J);})();
1961
2258
  return __exports__;
1962
2259
  });