@deck.gl/extensions 9.1.0-beta.1 → 9.1.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/brushing/brushing-extension.js +1 -0
  2. package/dist/brushing/brushing-extension.js.map +1 -0
  3. package/dist/brushing/shader-module.js +1 -0
  4. package/dist/brushing/shader-module.js.map +1 -0
  5. package/dist/clip/clip-extension.js +1 -0
  6. package/dist/clip/clip-extension.js.map +1 -0
  7. package/dist/collision-filter/collision-filter-effect.js +1 -0
  8. package/dist/collision-filter/collision-filter-effect.js.map +1 -0
  9. package/dist/collision-filter/collision-filter-extension.js +1 -0
  10. package/dist/collision-filter/collision-filter-extension.js.map +1 -0
  11. package/dist/collision-filter/collision-filter-pass.d.ts +2 -2
  12. package/dist/collision-filter/collision-filter-pass.d.ts.map +1 -1
  13. package/dist/collision-filter/collision-filter-pass.js +7 -1
  14. package/dist/collision-filter/collision-filter-pass.js.map +1 -0
  15. package/dist/collision-filter/shader-module.js +1 -0
  16. package/dist/collision-filter/shader-module.js.map +1 -0
  17. package/dist/data-filter/aggregator.js +1 -0
  18. package/dist/data-filter/aggregator.js.map +1 -0
  19. package/dist/data-filter/data-filter-extension.d.ts.map +1 -1
  20. package/dist/data-filter/data-filter-extension.js +9 -1
  21. package/dist/data-filter/data-filter-extension.js.map +1 -0
  22. package/dist/data-filter/shader-module.d.ts +1 -1
  23. package/dist/data-filter/shader-module.d.ts.map +1 -1
  24. package/dist/data-filter/shader-module.js +12 -11
  25. package/dist/data-filter/shader-module.js.map +1 -0
  26. package/dist/dist.dev.js +28 -16
  27. package/dist/fill-style/fill-style-extension.js +1 -0
  28. package/dist/fill-style/fill-style-extension.js.map +1 -0
  29. package/dist/fill-style/shader-module.js +1 -0
  30. package/dist/fill-style/shader-module.js.map +1 -0
  31. package/dist/fp64/fp64-extension.js +1 -0
  32. package/dist/fp64/fp64-extension.js.map +1 -0
  33. package/dist/fp64/project64.glsl.js +1 -0
  34. package/dist/fp64/project64.glsl.js.map +1 -0
  35. package/dist/fp64/project64.js +1 -0
  36. package/dist/fp64/project64.js.map +1 -0
  37. package/dist/index.cjs +28 -16
  38. package/dist/index.cjs.map +3 -3
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/mask/mask-effect.js +1 -0
  42. package/dist/mask/mask-effect.js.map +1 -0
  43. package/dist/mask/mask-extension.js +1 -0
  44. package/dist/mask/mask-extension.js.map +1 -0
  45. package/dist/mask/mask-pass.d.ts +2 -43
  46. package/dist/mask/mask-pass.d.ts.map +1 -1
  47. package/dist/mask/mask-pass.js +2 -1
  48. package/dist/mask/mask-pass.js.map +1 -0
  49. package/dist/mask/shader-module.js +1 -0
  50. package/dist/mask/shader-module.js.map +1 -0
  51. package/dist/path-style/path-style-extension.js +1 -0
  52. package/dist/path-style/path-style-extension.js.map +1 -0
  53. package/dist/path-style/shaders.glsl.js +1 -0
  54. package/dist/path-style/shaders.glsl.js.map +1 -0
  55. package/dist/terrain/height-map-builder.js +1 -0
  56. package/dist/terrain/height-map-builder.js.map +1 -0
  57. package/dist/terrain/shader-module.d.ts.map +1 -1
  58. package/dist/terrain/shader-module.js +1 -0
  59. package/dist/terrain/shader-module.js.map +1 -0
  60. package/dist/terrain/terrain-cover.js +1 -0
  61. package/dist/terrain/terrain-cover.js.map +1 -0
  62. package/dist/terrain/terrain-effect.js +1 -0
  63. package/dist/terrain/terrain-effect.js.map +1 -0
  64. package/dist/terrain/terrain-extension.js +1 -0
  65. package/dist/terrain/terrain-extension.js.map +1 -0
  66. package/dist/terrain/terrain-pass.d.ts +2 -42
  67. package/dist/terrain/terrain-pass.d.ts.map +1 -1
  68. package/dist/terrain/terrain-pass.js +2 -1
  69. package/dist/terrain/terrain-pass.js.map +1 -0
  70. package/dist/terrain/terrain-picking-pass.d.ts +2 -1
  71. package/dist/terrain/terrain-picking-pass.d.ts.map +1 -1
  72. package/dist/terrain/terrain-picking-pass.js +2 -1
  73. package/dist/terrain/terrain-picking-pass.js.map +1 -0
  74. package/dist/terrain/utils.js +1 -0
  75. package/dist/terrain/utils.js.map +1 -0
  76. package/dist/utils/debug.js +1 -0
  77. package/dist/utils/debug.js.map +1 -0
  78. package/dist/utils/projection-utils.js +1 -0
  79. package/dist/utils/projection-utils.js.map +1 -0
  80. package/dist.min.js +60 -60
  81. package/package.json +7 -7
  82. package/src/collision-filter/collision-filter-pass.ts +8 -3
  83. package/src/data-filter/data-filter-extension.ts +8 -1
  84. package/src/data-filter/shader-module.ts +12 -12
  85. package/src/mask/mask-pass.ts +13 -3
  86. package/src/terrain/shader-module.ts +1 -1
  87. package/src/terrain/terrain-pass.ts +7 -3
  88. package/src/terrain/terrain-picking-pass.ts +3 -2
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 Vt=Object.create;var Q=Object.defineProperty;var zt=Object.getOwnPropertyDescriptor;var Ut=Object.getOwnPropertyNames;var Gt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var Fe=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),Ae=(o,e)=>{for(var t in e)Q(o,t,{get:e[t],enumerable:!0})},X=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ut(e))!qt.call(o,s)&&s!==t&&Q(o,s,{get:()=>e[s],enumerable:!(r=zt(e,s))||r.enumerable});return o},y=(o,e,t)=>(X(o,e,"default"),t&&X(t,e,"default")),d=(o,e,t)=>(t=o!=null?Vt(Gt(o)):{},X(e||!o||!o.__esModule?Q(t,"default",{value:o,enumerable:!0}):t,o)),Ht=o=>X(Q({},"__esModule",{value:!0}),o);var _=Fe((Br,Oe)=>{Oe.exports=globalThis.deck});var qe=Fe((Gr,Ge)=>{Ge.exports=globalThis.luma});var Z={};Ae(Z,{BrushingExtension:()=>Re,ClipExtension:()=>yt,CollisionFilterExtension:()=>Ft,DataFilterExtension:()=>Xe,FillStyleExtension:()=>vt,Fp64Extension:()=>ft,MaskExtension:()=>Ct,PathStyleExtension:()=>dt,_TerrainExtension:()=>jt,project64:()=>re});var g={},Le=d(_(),1);y(g,d(_(),1));if(!Le.Layer)throw new Error("@deck.gl/core is not found");y(Z,g);var ke=d(_(),1);var Se=d(_(),1),Ce=`uniform brushingUniforms {
7
+ "use strict";var __exports__=(()=>{var jt=Object.create;var Q=Object.defineProperty;var Vt=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Ut=Object.getPrototypeOf,Gt=Object.prototype.hasOwnProperty;var Te=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),Ae=(o,e)=>{for(var t in e)Q(o,t,{get:e[t],enumerable:!0})},X=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of zt(e))!Gt.call(o,s)&&s!==t&&Q(o,s,{get:()=>e[s],enumerable:!(r=Vt(e,s))||r.enumerable});return o},y=(o,e,t)=>(X(o,e,"default"),t&&X(t,e,"default")),d=(o,e,t)=>(t=o!=null?jt(Ut(o)):{},X(e||!o||!o.__esModule?Q(t,"default",{value:o,enumerable:!0}):t,o)),qt=o=>X(Q({},"__esModule",{value:!0}),o);var _=Te((Dr,Oe)=>{Oe.exports=globalThis.deck});var qe=Te((qr,Ge)=>{Ge.exports=globalThis.luma});var Z={};Ae(Z,{BrushingExtension:()=>Re,ClipExtension:()=>xt,CollisionFilterExtension:()=>Ft,DataFilterExtension:()=>Ze,FillStyleExtension:()=>ht,Fp64Extension:()=>ct,MaskExtension:()=>Ct,PathStyleExtension:()=>pt,_TerrainExtension:()=>Dt,project64:()=>re});var g={},Le=d(_(),1);y(g,d(_(),1));if(!Le.Layer)throw new Error("@deck.gl/core is not found");y(Z,g);var ke=d(_(),1);var Ce=d(_(),1),Se=`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
+ `,Ht=`
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
+ `,Yt=`
37
+ ${Se}
38
+ ${Ht}
36
39
  `,Wt=`
37
- ${Ce}
38
- ${Yt}
39
- `,Kt=`
40
40
  in float brushing_isVisible;
41
- `,$t=`
42
- ${Ce}
43
- ${Kt}
44
- `,Zt={source:0,target:1,custom:2,source_target:3},Xt={"vs:DECKGL_FILTER_GL_POSITION":`
41
+ `,Kt=`
42
+ ${Se}
43
+ ${Wt}
44
+ `,$t={source:0,target:1,custom:2,source_target:3},Zt={"vs:DECKGL_FILTER_GL_POSITION":`
45
45
  vec2 brushingTarget;
46
46
  vec2 brushingSource;
47
47
  if (brushing.target == 3) {
@@ -65,7 +65,7 @@ ${Kt}
65
65
  if (brushing.enabled && brushing_isVisible < 0.5) {
66
66
  discard;
67
67
  }
68
- `},Ie={name:"brushing",dependencies:[Se.project],vs:Wt,fs:$t,inject:Xt,getUniforms:o=>{if(!o||!("viewport"in o))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:r="source",mousePosition:s,viewport:i}=o;return{enabled:Boolean(e&&s&&i.containsPixel(s)),radius:t,target:Zt[r]||0,mousePos:s?i.unproject([s.x-i.x,s.y-i.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var Qt={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},S=class extends ke.LayerExtension{getShaders(){return{modules:[Ie]}}initializeState(e,t){let r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let s=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=s,e.deck&&e.deck.eventManager.on({pointermove:s,pointerleave:s})}finalizeState(e,t){if(e.deck){let r=this.state.onMouseMove;e.deck.eventManager.off({pointermove:r,pointerleave:r})}}draw(e,t){let{viewport:r,mousePosition:s}=e.context,{brushingEnabled:i,brushingRadius:n,brushingTarget:a}=this.props,l={viewport:r,mousePosition:s,brushingEnabled:i,brushingRadius:n,brushingTarget:a};this.setShaderModuleProps({brushing:l})}};S.defaultProps=Qt;S.extensionName="BrushingExtension";var Re=S;var E=d(_(),1);var we=`uniform dataFilterUniforms {
68
+ `},Ie={name:"brushing",dependencies:[Ce.project],vs:Yt,fs:Kt,inject:Zt,getUniforms:o=>{if(!o||!("viewport"in o))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:r="source",mousePosition:s,viewport:i}=o;return{enabled:Boolean(e&&s&&i.containsPixel(s)),radius:t,target:$t[r]||0,mousePos:s?i.unproject([s.x-i.x,s.y-i.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var Xt={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},C=class extends ke.LayerExtension{getShaders(){return{modules:[Ie]}}initializeState(e,t){let r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let s=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=s,e.deck&&e.deck.eventManager.on({pointermove:s,pointerleave:s})}finalizeState(e,t){if(e.deck){let r=this.state.onMouseMove;e.deck.eventManager.off({pointermove:r,pointerleave:r})}}draw(e,t){let{viewport:r,mousePosition:s}=e.context,{brushingEnabled:i,brushingRadius:n,brushingTarget:a}=this.props,l={viewport:r,mousePosition:s,brushingEnabled:i,brushingRadius:n,brushingTarget:a};this.setShaderModuleProps({brushing:l})}};C.defaultProps=Xt;C.extensionName="BrushingExtension";var Re=C;var E=d(_(),1);var we=`uniform dataFilterUniforms {
69
69
  bool useSoftMargin;
70
70
  bool enabled;
71
71
  bool transformSize;
@@ -81,10 +81,10 @@ ${Kt}
81
81
  #endif
82
82
  #endif
83
83
  #ifdef DATACATEGORY_TYPE
84
- highp ivec4 categoryBitMask;
84
+ highp uvec4 categoryBitMask;
85
85
  #endif
86
86
  } dataFilter;
87
- `,Jt=`
87
+ `,Qt=`
88
88
  #ifdef DATAFILTER_TYPE
89
89
  in DATAFILTER_TYPE filterValues;
90
90
  #ifdef DATAFILTER_DOUBLE
@@ -138,38 +138,38 @@ float dataFilter_reduceValue(vec4 value) {
138
138
  #ifdef DATACATEGORY_TYPE
139
139
  void dataFilter_setCategoryValue(DATACATEGORY_TYPE category) {
140
140
  #if DATACATEGORY_CHANNELS == 1 // One 128-bit mask
141
- int dataFilter_masks = dataFilter.categoryBitMask[int(category / 32.0)];
141
+ uint dataFilter_masks = dataFilter.categoryBitMask[category / 32u];
142
142
  #elif DATACATEGORY_CHANNELS == 2 // Two 64-bit masks
143
- ivec2 dataFilter_masks = ivec2(
144
- dataFilter.categoryBitMask[int(category.x / 32.0)],
145
- dataFilter.categoryBitMask[int(category.y / 32.0) + 2]
143
+ uvec2 dataFilter_masks = uvec2(
144
+ dataFilter.categoryBitMask[category.x / 32u],
145
+ dataFilter.categoryBitMask[category.y / 32u + 2u]
146
146
  );
147
147
  #elif DATACATEGORY_CHANNELS == 3 // Three 32-bit masks
148
- ivec3 dataFilter_masks = dataFilter.categoryBitMask.xyz;
148
+ uvec3 dataFilter_masks = dataFilter.categoryBitMask.xyz;
149
149
  #else // Four 32-bit masks
150
- ivec4 dataFilter_masks = dataFilter.categoryBitMask;
150
+ uvec4 dataFilter_masks = dataFilter.categoryBitMask;
151
151
  #endif
152
152
 
153
153
  // Shift mask and extract relevant bits
154
- DATACATEGORY_TYPE dataFilter_bits = DATACATEGORY_TYPE(dataFilter_masks) / pow(DATACATEGORY_TYPE(2.0), mod(category, 32.0));
155
- dataFilter_bits = mod(floor(dataFilter_bits), 2.0);
154
+ DATACATEGORY_TYPE dataFilter_bits = DATACATEGORY_TYPE(dataFilter_masks) >> (category & 31u);
155
+ dataFilter_bits &= 1u;
156
156
 
157
157
  #if DATACATEGORY_CHANNELS == 1
158
- if(dataFilter_bits == 0.0) dataFilter_value = 0.0;
158
+ if(dataFilter_bits == 0u) dataFilter_value = 0.0;
159
159
  #else
160
- if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0.0)))) dataFilter_value = 0.0;
160
+ if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0u)))) dataFilter_value = 0.0;
161
161
  #endif
162
162
  }
163
163
  #endif
164
164
  `,Ne=`
165
165
  ${we}
166
- ${Jt}
167
- `,eo=`
166
+ ${Qt}
167
+ `,Jt=`
168
168
  in float dataFilter_value;
169
169
  `,Be=`
170
170
  ${we}
171
- ${eo}
172
- `;function De(o){if(!o||!("extensions"in o))return{};let{filterRange:e=[-1,1],filterEnabled:t=!0,filterTransformSize:r=!0,filterTransformColor:s=!0,categoryBitMask:i=[0,0,0,0]}=o,n=o.filterSoftRange||e;return{...Number.isFinite(e[0])?{min:e[0],softMin:n[0],softMax:n[1],max:e[1]}:{min:e.map(a=>a[0]),softMin:n.map(a=>a[0]),softMax:n.map(a=>a[1]),max:e.map(a=>a[1])},enabled:t,useSoftMargin:Boolean(o.filterSoftRange),transformSize:t&&r,transformColor:t&&s,categoryBitMask:i}}function to(o){if(!o||!("extensions"in o))return{};let e=De(o);if(Number.isFinite(e.min)){let t=Math.fround(e.min);e.min-=t,e.softMin-=t,e.min64High=t;let r=Math.fround(e.max);e.max-=r,e.softMax-=r,e.max64High=r}else{let t=e.min.map(Math.fround);e.min=e.min.map((s,i)=>s-t[i]),e.softMin=e.softMin.map((s,i)=>s-t[i]),e.min64High=t;let r=e.max.map(Math.fround);e.max=e.max.map((s,i)=>s-r[i]),e.softMax=e.softMax.map((s,i)=>s-r[i]),e.max64High=r}return e}var je={"vs:#main-start":`
171
+ ${Jt}
172
+ `;function De(o){if(!o||!("extensions"in o))return{};let{filterRange:e=[-1,1],filterEnabled:t=!0,filterTransformSize:r=!0,filterTransformColor:s=!0,categoryBitMask:i=[0,0,0,0]}=o,n=o.filterSoftRange||e;return{...Number.isFinite(e[0])?{min:e[0],softMin:n[0],softMax:n[1],max:e[1]}:{min:e.map(a=>a[0]),softMin:n.map(a=>a[0]),softMax:n.map(a=>a[1]),max:e.map(a=>a[1])},enabled:t,useSoftMargin:Boolean(o.filterSoftRange),transformSize:t&&r,transformColor:t&&s,categoryBitMask:i}}function eo(o){if(!o||!("extensions"in o))return{};let e=De(o);if(Number.isFinite(e.min)){let t=Math.fround(e.min);e.min-=t,e.softMin-=t,e.min64High=t;let r=Math.fround(e.max);e.max-=r,e.softMax-=r,e.max64High=r}else{let t=e.min.map(Math.fround);e.min=e.min.map((s,i)=>s-t[i]),e.softMin=e.softMin.map((s,i)=>s-t[i]),e.min64High=t;let r=e.max.map(Math.fround);e.max=e.max.map((s,i)=>s-r[i]),e.softMax=e.softMax.map((s,i)=>s-r[i]),e.max64High=r}return e}var je={"vs:#main-start":`
173
173
  dataFilter_value = 1.0;
174
174
  if (dataFilter.enabled) {
175
175
  #ifdef DATAFILTER_TYPE
@@ -200,7 +200,7 @@ ${eo}
200
200
  if (dataFilter.transformColor) {
201
201
  color.a *= dataFilter_value;
202
202
  }
203
- `};function Ve(o){let{categorySize:e,filterSize:t,fp64:r}=o,s={useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32"};if(t){let i=t===1?"f32":`vec${t}<f32>`;s.min=i,s.softMin=i,s.softMax=i,s.max=i,r&&(s.min64High=i,s.max64High=i)}return e&&(s.categoryBitMask="vec4<i32>"),s}var ze={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:De,uniformTypesFromOptions:Ve},Ue={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:to,uniformTypesFromOptions:Ve};var He=d(qe(),1),oo=`#version 300 es
203
+ `};function Ve(o){let{categorySize:e,filterSize:t,fp64:r}=o,s={useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32"};if(t){let i=t===1?"f32":`vec${t}<f32>`;s.min=i,s.softMin=i,s.softMax=i,s.max=i,r&&(s.min64High=i,s.max64High=i)}return e&&(s.categoryBitMask="vec4<i32>"),s}var ze={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:De,uniformTypesFromOptions:Ve},Ue={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:eo,uniformTypesFromOptions:Ve};var He=d(qe(),1),to=`#version 300 es
204
204
  #define SHADER_NAME data-filter-vertex-shader
205
205
 
206
206
  #ifdef FLOAT_TARGET
@@ -231,7 +231,7 @@ void main() {
231
231
  #endif
232
232
  gl_PointSize = 1.0;
233
233
  }
234
- `,ro=`#version 300 es
234
+ `,oo=`#version 300 es
235
235
  #define SHADER_NAME data-filter-fragment-shader
236
236
  precision highp float;
237
237
 
@@ -245,7 +245,7 @@ void main() {
245
245
  }
246
246
  fragColor = vColor;
247
247
  }
248
- `,so=["float32-renderable-webgl","texture-blend-float-webgl"];function Ye(o){return so.every(e=>o.features.has(e))}function We(o,e){return e?o.createFramebuffer({width:1,height:1,colorAttachments:[o.createTexture({format:"rgba32float",mipmaps:!1})]}):o.createFramebuffer({width:256,height:64,colorAttachments:[o.createTexture({format:"rgba8unorm",mipmaps:!1})]})}function Ke(o,e,t,r){return t.defines.NON_INSTANCED_MODEL=1,r&&(t.defines.FLOAT_TARGET=1),new He.Model(o,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",vs:oo,fs:ro,bufferLayout:e,...t})}var $e={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var no={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},ao={categorySize:0,filterSize:1,fp64:!1,countItems:!1},Ze={1:"float",2:"vec2",3:"vec3",4:"vec4"},C=class extends E.LayerExtension{constructor(e={}){super({...ao,...e})}getShaders(e){let{categorySize:t,filterSize:r,fp64:s}=e.opts,i={};t&&(i.DATACATEGORY_TYPE=Ze[t],i.DATACATEGORY_CHANNELS=t),r&&(i.DATAFILTER_TYPE=Ze[r],i.DATAFILTER_DOUBLE=Boolean(s));let n=s?Ue:ze;return n.uniformTypes=n.uniformTypesFromOptions(e.opts),{modules:[n],defines:i}}initializeState(e,t){let r=this.getAttributeManager(),{categorySize:s,filterSize:i,fp64:n}=t.opts;r&&(i&&r.add({filterValues:{size:i,type:n?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),s&&r.add({filterCategoryValues:{size:s,stepMode:"dynamic",accessor:"getFilterCategory",transform:s===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((c,f)=>t._getCategoryKey.call(this,c,f))}}));let{device:a}=this.context;if(r&&t.opts.countItems){let l=Ye(a);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:p})=>{let m=u&&u.__source?u.__source.index:p;return l?(m+1)%255:[(m+1)%255,Math.floor(m/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let c=We(a,l),f=Ke(a,r.getBufferLayouts({isInstanced:!1}),t.getShaders.call(this,t),l);this.setState({filterFBO:c,filterModel:f})}}updateState({props:e,oldProps:t,changeFlags:r},s){let i=this.getAttributeManager(),{categorySize:n}=s.opts;if(this.state.filterModel){let a=i.attributes.filterValues?.needsUpdate()||i.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}i?.attributes.filterCategoryValues&&((i.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(()=>({}))}),i.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,t){let r=this.state.filterFBO,s=this.state.filterModel,i=this.state.filterNeedsUpdate;this.state.categoryBitMask||t._updateCategoryBitMask.call(this,e,t);let{onFilteredItemsChange:n,extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m}=this.props,v={extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m};if(this.state.categoryBitMask&&(v.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:v}),i&&n&&s){let b=this.getAttributeManager(),{attributes:{filterValues:h,filterCategoryValues:L,filterVertexIndices:fe}}=b;s.setVertexCount(this.getNumInstances());let ue={...h?.getValue(),...L?.getValue(),...fe?.getValue()};s.setAttributes(ue),s.shaderInputs.setProps({dataFilter:v});let pe=[0,0,r.width,r.height],Ee=s.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:pe},clearColor:[0,0,0,0]});s.setParameters($e),s.draw(Ee),Ee.end();let Me=s.device.readPixelsToArrayWebGL(r),Te=0;for(let de=0;de<Me.length;de++)Te+=Me[de];n({id:this.id,count:Te}),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:s}=this.props,i=new Uint32Array([0,0,0,0]),n=r===1?[s]:s,a=r===1?128:r===2?64:32;for(let l=0;l<n.length;l++){let c=n[l];for(let f of c){let u=t._getCategoryKey.call(this,f,l);if(u<a){let p=l*(a/32)+Math.floor(u/32);i[p]+=Math.pow(2,u%32)}else E.log.warn(`Exceeded maximum number of categories (${a})`)()}}this.state.categoryBitMask=i}_getCategoryKey(e,t){let r=this.state.categoryMap[t];return e in r||(r[e]=Object.keys(r).length),r[e]}};C.defaultProps=no;C.extensionName="DataFilterExtension";var Xe=C;var w=d(_(),1);var Yr=1/Math.PI*180,Wr=1/180*Math.PI,lo={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...lo}};var I=globalThis.mathgl.config;function _e(o){return Array.isArray(o)||ArrayBuffer.isView(o)&&!(o instanceof DataView)}function M(o,e,t){let r=I.EPSILON;t&&(I.EPSILON=t);try{if(o===e)return!0;if(_e(o)&&_e(e)){if(o.length!==e.length)return!1;for(let s=0;s<o.length;++s)if(!M(o[s],e[s]))return!1;return!0}return o&&o.equals?o.equals(e):e&&e.equals?e.equals(o):typeof o=="number"&&typeof e=="number"?Math.abs(o-e)<=I.EPSILON*Math.max(1,Math.abs(o),Math.abs(e)):!1}finally{I.EPSILON=r}}var k=typeof Float32Array<"u"?Float32Array:Array,me=Math.random;function J(o){return o>=0?Math.round(o):o%.5===0?Math.floor(o):Math.round(o)}var $r=Math.PI/180;var R={};Ae(R,{add:()=>mo,angle:()=>Do,bezier:()=>So,ceil:()=>ho,clone:()=>fo,copy:()=>po,create:()=>Qe,cross:()=>Fo,dist:()=>Yo,distance:()=>rt,div:()=>Ho,divide:()=>ot,dot:()=>ve,equals:()=>Uo,exactEquals:()=>zo,floor:()=>vo,forEach:()=>Zo,fromValues:()=>uo,hermite:()=>Lo,inverse:()=>Mo,len:()=>Ko,length:()=>Je,lerp:()=>Ao,max:()=>xo,min:()=>go,mul:()=>qo,multiply:()=>tt,negate:()=>Eo,normalize:()=>To,random:()=>Co,rotateX:()=>wo,rotateY:()=>No,rotateZ:()=>Bo,round:()=>yo,scale:()=>Po,scaleAndAdd:()=>bo,set:()=>_o,slerp:()=>Oo,sqrDist:()=>Wo,sqrLen:()=>$o,squaredDistance:()=>st,squaredLength:()=>it,str:()=>Vo,sub:()=>Go,subtract:()=>et,transformMat3:()=>ko,transformMat4:()=>Io,transformQuat:()=>Ro,zero:()=>jo});function Qe(){let o=new k(3);return k!=Float32Array&&(o[0]=0,o[1]=0,o[2]=0),o}function fo(o){let e=new k(3);return e[0]=o[0],e[1]=o[1],e[2]=o[2],e}function Je(o){let e=o[0],t=o[1],r=o[2];return Math.sqrt(e*e+t*t+r*r)}function uo(o,e,t){let r=new k(3);return r[0]=o,r[1]=e,r[2]=t,r}function po(o,e){return o[0]=e[0],o[1]=e[1],o[2]=e[2],o}function _o(o,e,t,r){return o[0]=e,o[1]=t,o[2]=r,o}function mo(o,e,t){return o[0]=e[0]+t[0],o[1]=e[1]+t[1],o[2]=e[2]+t[2],o}function et(o,e,t){return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],o}function tt(o,e,t){return o[0]=e[0]*t[0],o[1]=e[1]*t[1],o[2]=e[2]*t[2],o}function ot(o,e,t){return o[0]=e[0]/t[0],o[1]=e[1]/t[1],o[2]=e[2]/t[2],o}function ho(o,e){return o[0]=Math.ceil(e[0]),o[1]=Math.ceil(e[1]),o[2]=Math.ceil(e[2]),o}function vo(o,e){return o[0]=Math.floor(e[0]),o[1]=Math.floor(e[1]),o[2]=Math.floor(e[2]),o}function go(o,e,t){return o[0]=Math.min(e[0],t[0]),o[1]=Math.min(e[1],t[1]),o[2]=Math.min(e[2],t[2]),o}function xo(o,e,t){return o[0]=Math.max(e[0],t[0]),o[1]=Math.max(e[1],t[1]),o[2]=Math.max(e[2],t[2]),o}function yo(o,e){return o[0]=J(e[0]),o[1]=J(e[1]),o[2]=J(e[2]),o}function Po(o,e,t){return o[0]=e[0]*t,o[1]=e[1]*t,o[2]=e[2]*t,o}function bo(o,e,t,r){return o[0]=e[0]+t[0]*r,o[1]=e[1]+t[1]*r,o[2]=e[2]+t[2]*r,o}function rt(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return Math.sqrt(t*t+r*r+s*s)}function st(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return t*t+r*r+s*s}function it(o){let e=o[0],t=o[1],r=o[2];return e*e+t*t+r*r}function Eo(o,e){return o[0]=-e[0],o[1]=-e[1],o[2]=-e[2],o}function Mo(o,e){return o[0]=1/e[0],o[1]=1/e[1],o[2]=1/e[2],o}function To(o,e){let t=e[0],r=e[1],s=e[2],i=t*t+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),o[0]=e[0]*i,o[1]=e[1]*i,o[2]=e[2]*i,o}function ve(o,e){return o[0]*e[0]+o[1]*e[1]+o[2]*e[2]}function Fo(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[0],a=t[1],l=t[2];return o[0]=s*l-i*a,o[1]=i*n-r*l,o[2]=r*a-s*n,o}function Ao(o,e,t,r){let s=e[0],i=e[1],n=e[2];return o[0]=s+r*(t[0]-s),o[1]=i+r*(t[1]-i),o[2]=n+r*(t[2]-n),o}function Oo(o,e,t,r){let s=Math.acos(Math.min(Math.max(ve(e,t),-1),1)),i=Math.sin(s),n=Math.sin((1-r)*s)/i,a=Math.sin(r*s)/i;return o[0]=n*e[0]+a*t[0],o[1]=n*e[1]+a*t[1],o[2]=n*e[2]+a*t[2],o}function Lo(o,e,t,r,s,i){let n=i*i,a=n*(2*i-3)+1,l=n*(i-2)+i,c=n*(i-1),f=n*(3-2*i);return o[0]=e[0]*a+t[0]*l+r[0]*c+s[0]*f,o[1]=e[1]*a+t[1]*l+r[1]*c+s[1]*f,o[2]=e[2]*a+t[2]*l+r[2]*c+s[2]*f,o}function So(o,e,t,r,s,i){let n=1-i,a=n*n,l=i*i,c=a*n,f=3*i*a,u=3*l*n,p=l*i;return o[0]=e[0]*c+t[0]*f+r[0]*u+s[0]*p,o[1]=e[1]*c+t[1]*f+r[1]*u+s[1]*p,o[2]=e[2]*c+t[2]*f+r[2]*u+s[2]*p,o}function Co(o,e){e=e===void 0?1:e;let t=me()*2*Math.PI,r=me()*2-1,s=Math.sqrt(1-r*r)*e;return o[0]=Math.cos(t)*s,o[1]=Math.sin(t)*s,o[2]=r*e,o}function Io(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[3]*r+t[7]*s+t[11]*i+t[15];return n=n||1,o[0]=(t[0]*r+t[4]*s+t[8]*i+t[12])/n,o[1]=(t[1]*r+t[5]*s+t[9]*i+t[13])/n,o[2]=(t[2]*r+t[6]*s+t[10]*i+t[14])/n,o}function ko(o,e,t){let r=e[0],s=e[1],i=e[2];return o[0]=r*t[0]+s*t[3]+i*t[6],o[1]=r*t[1]+s*t[4]+i*t[7],o[2]=r*t[2]+s*t[5]+i*t[8],o}function Ro(o,e,t){let r=t[0],s=t[1],i=t[2],n=t[3],a=e[0],l=e[1],c=e[2],f=s*c-i*l,u=i*a-r*c,p=r*l-s*a,m=s*p-i*u,v=i*f-r*p,b=r*u-s*f,h=n*2;return f*=h,u*=h,p*=h,m*=2,v*=2,b*=2,o[0]=a+f+m,o[1]=l+u+v,o[2]=c+p+b,o}function wo(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0],i[1]=s[1]*Math.cos(r)-s[2]*Math.sin(r),i[2]=s[1]*Math.sin(r)+s[2]*Math.cos(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function No(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[2]*Math.sin(r)+s[0]*Math.cos(r),i[1]=s[1],i[2]=s[2]*Math.cos(r)-s[0]*Math.sin(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Bo(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0]*Math.cos(r)-s[1]*Math.sin(r),i[1]=s[0]*Math.sin(r)+s[1]*Math.cos(r),i[2]=s[2],o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Do(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+r*r+s*s)*(i*i+n*n+a*a)),c=l&&ve(o,e)/l;return Math.acos(Math.min(Math.max(c,-1),1))}function jo(o){return o[0]=0,o[1]=0,o[2]=0,o}function Vo(o){return`vec3(${o[0]}, ${o[1]}, ${o[2]})`}function zo(o,e){return o[0]===e[0]&&o[1]===e[1]&&o[2]===e[2]}function Uo(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2];return Math.abs(t-i)<=1e-6*Math.max(1,Math.abs(t),Math.abs(i))&&Math.abs(r-n)<=1e-6*Math.max(1,Math.abs(r),Math.abs(n))&&Math.abs(s-a)<=1e-6*Math.max(1,Math.abs(s),Math.abs(a))}var Go=et,qo=tt,Ho=ot,Yo=rt,Wo=st,Ko=Je,$o=it,Zo=function(){let o=Qe();return function(e,t,r,s,i,n){let a,l;for(t||(t=3),r||(r=0),s?l=Math.min(s*t+r,e.length):l=e.length,a=r;a<l;a+=t)o[0]=e[a],o[1]=e[a+1],o[2]=e[a+2],i(o,o,n),e[a]=o[0],e[a+1]=o[1],e[a+2]=o[2];return e}}();function ee(o,e=[],t=0){let r=Math.fround(o),s=o-r;return e[t]=r,e[t+1]=s,e}function ge(o){return o-Math.fround(o)}function xe(o){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let r=0;r<4;++r){let s=t*4+r;ee(o[r*4+t],e,s*2)}return e}var nt=`
248
+ `,ro=["float32-renderable-webgl","texture-blend-float-webgl"];function Ye(o){return ro.every(e=>o.features.has(e))}function We(o,e){return e?o.createFramebuffer({width:1,height:1,colorAttachments:[o.createTexture({format:"rgba32float",mipmaps:!1})]}):o.createFramebuffer({width:256,height:64,colorAttachments:[o.createTexture({format:"rgba8unorm",mipmaps:!1})]})}function Ke(o,e,t,r){return t.defines.NON_INSTANCED_MODEL=1,r&&(t.defines.FLOAT_TARGET=1),new He.Model(o,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",vs:to,fs:oo,bufferLayout:e,...t})}var $e={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var io={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},no={categorySize:0,filterSize:1,fp64:!1,countItems:!1},ao={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},lo={1:"float",2:"vec2",3:"vec3",4:"vec4"},S=class extends E.LayerExtension{constructor(e={}){super({...no,...e})}getShaders(e){let{categorySize:t,filterSize:r,fp64:s}=e.opts,i={};t&&(i.DATACATEGORY_TYPE=ao[t],i.DATACATEGORY_CHANNELS=t),r&&(i.DATAFILTER_TYPE=lo[r],i.DATAFILTER_DOUBLE=Boolean(s));let n=s?Ue:ze;return n.uniformTypes=n.uniformTypesFromOptions(e.opts),{modules:[n],defines:i}}initializeState(e,t){let r=this.getAttributeManager(),{categorySize:s,filterSize:i,fp64:n}=t.opts;r&&(i&&r.add({filterValues:{size:i,type:n?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),s&&r.add({filterCategoryValues:{size:s,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:s===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((c,f)=>t._getCategoryKey.call(this,c,f))}}));let{device:a}=this.context;if(r&&t.opts.countItems){let l=Ye(a);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:p})=>{let m=u&&u.__source?u.__source.index:p;return l?(m+1)%255:[(m+1)%255,Math.floor(m/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let c=We(a,l),f=Ke(a,r.getBufferLayouts({isInstanced:!1}),t.getShaders.call(this,t),l);this.setState({filterFBO:c,filterModel:f})}}updateState({props:e,oldProps:t,changeFlags:r},s){let i=this.getAttributeManager(),{categorySize:n}=s.opts;if(this.state.filterModel){let a=i.attributes.filterValues?.needsUpdate()||i.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}i?.attributes.filterCategoryValues&&((i.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(()=>({}))}),i.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,t){let r=this.state.filterFBO,s=this.state.filterModel,i=this.state.filterNeedsUpdate;this.state.categoryBitMask||t._updateCategoryBitMask.call(this,e,t);let{onFilteredItemsChange:n,extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m}=this.props,v={extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m};if(this.state.categoryBitMask&&(v.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:v}),i&&n&&s){let b=this.getAttributeManager(),{attributes:{filterValues:h,filterCategoryValues:L,filterVertexIndices:fe}}=b;s.setVertexCount(this.getNumInstances());let ue={...h?.getValue(),...L?.getValue(),...fe?.getValue()};s.setAttributes(ue),s.shaderInputs.setProps({dataFilter:v});let pe=[0,0,r.width,r.height],Ee=s.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:pe},clearColor:[0,0,0,0]});s.setParameters($e),s.draw(Ee),Ee.end();let Me=s.device.readPixelsToArrayWebGL(r),Fe=0;for(let de=0;de<Me.length;de++)Fe+=Me[de];n({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:r}=t.opts;if(!r)return;let{filterCategories:s}=this.props,i=new Uint32Array([0,0,0,0]),n=r===1?[s]:s,a=r===1?128:r===2?64:32;for(let l=0;l<n.length;l++){let c=n[l];for(let f of c){let u=t._getCategoryKey.call(this,f,l);if(u<a){let p=l*(a/32)+Math.floor(u/32);i[p]+=Math.pow(2,u%32)}else E.log.warn(`Exceeded maximum number of categories (${a})`)()}}this.state.categoryBitMask=i}_getCategoryKey(e,t){let r=this.state.categoryMap[t];return e in r||(r[e]=Object.keys(r).length),r[e]}};S.defaultProps=io;S.extensionName="DataFilterExtension";var Ze=S;var w=d(_(),1);var Wr=1/Math.PI*180,Kr=1/180*Math.PI,co={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...co}};var I=globalThis.mathgl.config;function _e(o){return Array.isArray(o)||ArrayBuffer.isView(o)&&!(o instanceof DataView)}function M(o,e,t){let r=I.EPSILON;t&&(I.EPSILON=t);try{if(o===e)return!0;if(_e(o)&&_e(e)){if(o.length!==e.length)return!1;for(let s=0;s<o.length;++s)if(!M(o[s],e[s]))return!1;return!0}return o&&o.equals?o.equals(e):e&&e.equals?e.equals(o):typeof o=="number"&&typeof e=="number"?Math.abs(o-e)<=I.EPSILON*Math.max(1,Math.abs(o),Math.abs(e)):!1}finally{I.EPSILON=r}}var k=typeof Float32Array<"u"?Float32Array:Array,me=Math.random;function J(o){return o>=0?Math.round(o):o%.5===0?Math.floor(o):Math.round(o)}var Zr=Math.PI/180;var R={};Ae(R,{add:()=>ho,angle:()=>jo,bezier:()=>So,ceil:()=>vo,clone:()=>uo,copy:()=>_o,create:()=>Xe,cross:()=>Ao,dist:()=>Wo,distance:()=>ot,div:()=>Yo,divide:()=>tt,dot:()=>ve,equals:()=>Go,exactEquals:()=>Uo,floor:()=>go,forEach:()=>Xo,fromValues:()=>po,hermite:()=>Co,inverse:()=>Fo,len:()=>$o,length:()=>Qe,lerp:()=>Oo,max:()=>yo,min:()=>xo,mul:()=>Ho,multiply:()=>et,negate:()=>Mo,normalize:()=>To,random:()=>Io,rotateX:()=>No,rotateY:()=>Bo,rotateZ:()=>Do,round:()=>Po,scale:()=>bo,scaleAndAdd:()=>Eo,set:()=>mo,slerp:()=>Lo,sqrDist:()=>Ko,sqrLen:()=>Zo,squaredDistance:()=>rt,squaredLength:()=>st,str:()=>zo,sub:()=>qo,subtract:()=>Je,transformMat3:()=>Ro,transformMat4:()=>ko,transformQuat:()=>wo,zero:()=>Vo});function Xe(){let o=new k(3);return k!=Float32Array&&(o[0]=0,o[1]=0,o[2]=0),o}function uo(o){let e=new k(3);return e[0]=o[0],e[1]=o[1],e[2]=o[2],e}function Qe(o){let e=o[0],t=o[1],r=o[2];return Math.sqrt(e*e+t*t+r*r)}function po(o,e,t){let r=new k(3);return r[0]=o,r[1]=e,r[2]=t,r}function _o(o,e){return o[0]=e[0],o[1]=e[1],o[2]=e[2],o}function mo(o,e,t,r){return o[0]=e,o[1]=t,o[2]=r,o}function ho(o,e,t){return o[0]=e[0]+t[0],o[1]=e[1]+t[1],o[2]=e[2]+t[2],o}function Je(o,e,t){return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],o}function et(o,e,t){return o[0]=e[0]*t[0],o[1]=e[1]*t[1],o[2]=e[2]*t[2],o}function tt(o,e,t){return o[0]=e[0]/t[0],o[1]=e[1]/t[1],o[2]=e[2]/t[2],o}function vo(o,e){return o[0]=Math.ceil(e[0]),o[1]=Math.ceil(e[1]),o[2]=Math.ceil(e[2]),o}function go(o,e){return o[0]=Math.floor(e[0]),o[1]=Math.floor(e[1]),o[2]=Math.floor(e[2]),o}function xo(o,e,t){return o[0]=Math.min(e[0],t[0]),o[1]=Math.min(e[1],t[1]),o[2]=Math.min(e[2],t[2]),o}function yo(o,e,t){return o[0]=Math.max(e[0],t[0]),o[1]=Math.max(e[1],t[1]),o[2]=Math.max(e[2],t[2]),o}function Po(o,e){return o[0]=J(e[0]),o[1]=J(e[1]),o[2]=J(e[2]),o}function bo(o,e,t){return o[0]=e[0]*t,o[1]=e[1]*t,o[2]=e[2]*t,o}function Eo(o,e,t,r){return o[0]=e[0]+t[0]*r,o[1]=e[1]+t[1]*r,o[2]=e[2]+t[2]*r,o}function ot(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return Math.sqrt(t*t+r*r+s*s)}function rt(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return t*t+r*r+s*s}function st(o){let e=o[0],t=o[1],r=o[2];return e*e+t*t+r*r}function Mo(o,e){return o[0]=-e[0],o[1]=-e[1],o[2]=-e[2],o}function Fo(o,e){return o[0]=1/e[0],o[1]=1/e[1],o[2]=1/e[2],o}function To(o,e){let t=e[0],r=e[1],s=e[2],i=t*t+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),o[0]=e[0]*i,o[1]=e[1]*i,o[2]=e[2]*i,o}function ve(o,e){return o[0]*e[0]+o[1]*e[1]+o[2]*e[2]}function Ao(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[0],a=t[1],l=t[2];return o[0]=s*l-i*a,o[1]=i*n-r*l,o[2]=r*a-s*n,o}function Oo(o,e,t,r){let s=e[0],i=e[1],n=e[2];return o[0]=s+r*(t[0]-s),o[1]=i+r*(t[1]-i),o[2]=n+r*(t[2]-n),o}function Lo(o,e,t,r){let s=Math.acos(Math.min(Math.max(ve(e,t),-1),1)),i=Math.sin(s),n=Math.sin((1-r)*s)/i,a=Math.sin(r*s)/i;return o[0]=n*e[0]+a*t[0],o[1]=n*e[1]+a*t[1],o[2]=n*e[2]+a*t[2],o}function Co(o,e,t,r,s,i){let n=i*i,a=n*(2*i-3)+1,l=n*(i-2)+i,c=n*(i-1),f=n*(3-2*i);return o[0]=e[0]*a+t[0]*l+r[0]*c+s[0]*f,o[1]=e[1]*a+t[1]*l+r[1]*c+s[1]*f,o[2]=e[2]*a+t[2]*l+r[2]*c+s[2]*f,o}function So(o,e,t,r,s,i){let n=1-i,a=n*n,l=i*i,c=a*n,f=3*i*a,u=3*l*n,p=l*i;return o[0]=e[0]*c+t[0]*f+r[0]*u+s[0]*p,o[1]=e[1]*c+t[1]*f+r[1]*u+s[1]*p,o[2]=e[2]*c+t[2]*f+r[2]*u+s[2]*p,o}function Io(o,e){e=e===void 0?1:e;let t=me()*2*Math.PI,r=me()*2-1,s=Math.sqrt(1-r*r)*e;return o[0]=Math.cos(t)*s,o[1]=Math.sin(t)*s,o[2]=r*e,o}function ko(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[3]*r+t[7]*s+t[11]*i+t[15];return n=n||1,o[0]=(t[0]*r+t[4]*s+t[8]*i+t[12])/n,o[1]=(t[1]*r+t[5]*s+t[9]*i+t[13])/n,o[2]=(t[2]*r+t[6]*s+t[10]*i+t[14])/n,o}function Ro(o,e,t){let r=e[0],s=e[1],i=e[2];return o[0]=r*t[0]+s*t[3]+i*t[6],o[1]=r*t[1]+s*t[4]+i*t[7],o[2]=r*t[2]+s*t[5]+i*t[8],o}function wo(o,e,t){let r=t[0],s=t[1],i=t[2],n=t[3],a=e[0],l=e[1],c=e[2],f=s*c-i*l,u=i*a-r*c,p=r*l-s*a,m=s*p-i*u,v=i*f-r*p,b=r*u-s*f,h=n*2;return f*=h,u*=h,p*=h,m*=2,v*=2,b*=2,o[0]=a+f+m,o[1]=l+u+v,o[2]=c+p+b,o}function No(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0],i[1]=s[1]*Math.cos(r)-s[2]*Math.sin(r),i[2]=s[1]*Math.sin(r)+s[2]*Math.cos(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Bo(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[2]*Math.sin(r)+s[0]*Math.cos(r),i[1]=s[1],i[2]=s[2]*Math.cos(r)-s[0]*Math.sin(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Do(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0]*Math.cos(r)-s[1]*Math.sin(r),i[1]=s[0]*Math.sin(r)+s[1]*Math.cos(r),i[2]=s[2],o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function jo(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+r*r+s*s)*(i*i+n*n+a*a)),c=l&&ve(o,e)/l;return Math.acos(Math.min(Math.max(c,-1),1))}function Vo(o){return o[0]=0,o[1]=0,o[2]=0,o}function zo(o){return`vec3(${o[0]}, ${o[1]}, ${o[2]})`}function Uo(o,e){return o[0]===e[0]&&o[1]===e[1]&&o[2]===e[2]}function Go(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2];return Math.abs(t-i)<=1e-6*Math.max(1,Math.abs(t),Math.abs(i))&&Math.abs(r-n)<=1e-6*Math.max(1,Math.abs(r),Math.abs(n))&&Math.abs(s-a)<=1e-6*Math.max(1,Math.abs(s),Math.abs(a))}var qo=Je,Ho=et,Yo=tt,Wo=ot,Ko=rt,$o=Qe,Zo=st,Xo=function(){let o=Xe();return function(e,t,r,s,i,n){let a,l;for(t||(t=3),r||(r=0),s?l=Math.min(s*t+r,e.length):l=e.length,a=r;a<l;a+=t)o[0]=e[a],o[1]=e[a+1],o[2]=e[a+2],i(o,o,n),e[a]=o[0],e[a+1]=o[1],e[a+2]=o[2];return e}}();function ee(o,e=[],t=0){let r=Math.fround(o),s=o-r;return e[t]=r,e[t+1]=s,e}function ge(o){return o-Math.fround(o)}function xe(o){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let r=0;r<4;++r){let s=t*4+r;ee(o[r*4+t],e,s*2)}return e}var it=`
249
249
  uniform fp64arithmeticUniforms {
250
250
  uniform float ONE;
251
251
  } fp64;
@@ -413,7 +413,7 @@ vec2 sqrt_fp64(vec2 a) {
413
413
  return sum_fp64(vec2(yn, 0.0), prod);
414
414
  #endif
415
415
  }
416
- `;var at=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
416
+ `;var nt=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
417
417
  const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
418
418
  const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
419
419
  const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
@@ -1082,7 +1082,7 @@ void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
1082
1082
  vec4_dot_fp64(a, tmp, out_val[i]);
1083
1083
  }
1084
1084
  }
1085
- `;var Xo={ONE:1},lt={name:"fp64arithmetic",vs:nt,defaultUniforms:Xo,uniformTypes:{ONE:"f32"},fp64ify:ee,fp64LowPart:ge,fp64ifyMatrix4:xe},te={name:"fp64",vs:at,dependencies:[lt],fp64ify:ee,fp64LowPart:ge,fp64ifyMatrix4:xe};var oe=d(_(),1);var ct=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
1085
+ `;var Qo={ONE:1},at={name:"fp64arithmetic",vs:it,defaultUniforms:Qo,uniformTypes:{ONE:"f32"},fp64ify:ee,fp64LowPart:ge,fp64ifyMatrix4:xe},te={name:"fp64",vs:nt,dependencies:[at],fp64ify:ee,fp64LowPart:ge,fp64ifyMatrix4:xe};var oe=d(_(),1);var lt=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
1086
1086
  uniform project64Uniforms {
1087
1087
  vec2 scale;
1088
1088
  mat4 viewProjectionMatrix;
@@ -1155,7 +1155,7 @@ return project_position_to_clipspace(
1155
1155
  position, position64xyLow, offset, commonPosition
1156
1156
  );
1157
1157
  }
1158
- `;var{fp64ify:Qo,fp64ifyMatrix4:Jo}=te,re={name:"project64",dependencies:[oe.project,te],vs:ct,getUniforms:tr,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},er=(0,oe._memoize)(or);function tr(o){if(o&&"viewport"in o){let{viewProjectionMatrix:e,scale:t}=o.viewport;return er({viewProjectionMatrix:e,scale:t})}return{}}function or({viewProjectionMatrix:o,scale:e}){let t=Jo(o),r=new Float32Array(16),s=new Float32Array(16);for(let i=0;i<4;i++)for(let n=0;n<4;n++){let a=4*i+n,l=4*n+i;r[l]=t[2*a],s[l]=t[2*a+1]}return{scale:Qo(e),viewProjectionMatrix:[...r],viewProjectionMatrix64Low:[...s]}}var se=class extends w.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!==w.COORDINATE_SYSTEM.LNGLAT&&e!==w.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[re]}}draw(e,t){let{viewport:r}=e.context;this.setShaderModuleProps({project64:{viewport:r}})}};se.extensionName="Fp64Extension";var ft=se;var N=d(_(),1);var ut={inject:{"vs:#decl":`
1158
+ `;var{fp64ify:Jo,fp64ifyMatrix4:er}=te,re={name:"project64",dependencies:[oe.project,te],vs:lt,getUniforms:or,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},tr=(0,oe._memoize)(rr);function or(o){if(o&&"viewport"in o){let{viewProjectionMatrix:e,scale:t}=o.viewport;return tr({viewProjectionMatrix:e,scale:t})}return{}}function rr({viewProjectionMatrix:o,scale:e}){let t=er(o),r=new Float32Array(16),s=new Float32Array(16);for(let i=0;i<4;i++)for(let n=0;n<4;n++){let a=4*i+n,l=4*n+i;r[l]=t[2*a],s[l]=t[2*a+1]}return{scale:Jo(e),viewProjectionMatrix:[...r],viewProjectionMatrix64Low:[...s]}}var se=class extends w.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!==w.COORDINATE_SYSTEM.LNGLAT&&e!==w.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[re]}}draw(e,t){let{viewport:r}=e.context;this.setShaderModuleProps({project64:{viewport:r}})}};se.extensionName="Fp64Extension";var ct=se;var N=d(_(),1);var ft={inject:{"vs:#decl":`
1159
1159
  in vec2 instanceDashArrays;
1160
1160
  in float instanceDashOffsets;
1161
1161
  out vec2 vDashArray;
@@ -1201,7 +1201,7 @@ discard;
1201
1201
  }
1202
1202
  }
1203
1203
  }
1204
- `}},pt={inject:{"vs:#decl":`
1204
+ `}},ut={inject:{"vs:#decl":`
1205
1205
  in float instanceOffsets;
1206
1206
  `,"vs:DECKGL_FILTER_SIZE":`
1207
1207
  float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
@@ -1218,14 +1218,14 @@ isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);
1218
1218
  if (isInside == 0.0) {
1219
1219
  discard;
1220
1220
  }
1221
- `}};var rr={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},B=class extends N.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:r=!1}={}){super({dash:e||r,offset:t,highPrecisionDash:r})}isEnabled(e){return"pathTesselator"in e.state}getShaders(e){if(!e.isEnabled(this))return null;let t={};e.opts.dash&&(t=(0,N._mergeShaders)(t,ut)),e.opts.offset&&(t=(0,N._mergeShaders)(t,pt));let{inject:r}=t;return{modules:[{name:"pathStyle",inject:r,uniformTypes:{dashAlignMode:"f32",dashGapPickable:"i32"}}]}}initializeState(e,t){let r=this.getAttributeManager();!r||!t.isEnabled(this)||(t.opts.dash&&r.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},instanceDashOffsets:t.opts.highPrecisionDash?{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}:{size:1,update:s=>{s.constant=!0,s.value=[0]}}}),t.opts.offset&&r.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let r={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:Boolean(this.props.dashGapPickable)};this.setShaderModuleProps({pathStyle:r})}}getDashOffsets(e){let t=[0],r=this.props.positionFormat==="XY"?2:3,s=Array.isArray(e[0]),i=s?e.length:e.length/r,n,a;for(let l=0;l<i-1;l++)n=s?e[l]:e.slice(l*r,l*r+r),n=this.projectPosition(n),l>0&&(t[l]=t[l-1]+R.dist(a,n)),a=n;return t[i-1]=0,t}};B.defaultProps=rr;B.extensionName="PathStyleExtension";var dt=B;var ht=d(_(),1);var T=d(_(),1),_t=`uniform fillUniforms {
1221
+ `}};var sr={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},B=class extends N.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:r=!1}={}){super({dash:e||r,offset:t,highPrecisionDash:r})}isEnabled(e){return"pathTesselator"in e.state}getShaders(e){if(!e.isEnabled(this))return null;let t={};e.opts.dash&&(t=(0,N._mergeShaders)(t,ft)),e.opts.offset&&(t=(0,N._mergeShaders)(t,ut));let{inject:r}=t;return{modules:[{name:"pathStyle",inject:r,uniformTypes:{dashAlignMode:"f32",dashGapPickable:"i32"}}]}}initializeState(e,t){let r=this.getAttributeManager();!r||!t.isEnabled(this)||(t.opts.dash&&r.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},instanceDashOffsets:t.opts.highPrecisionDash?{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}:{size:1,update:s=>{s.constant=!0,s.value=[0]}}}),t.opts.offset&&r.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let r={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:Boolean(this.props.dashGapPickable)};this.setShaderModuleProps({pathStyle:r})}}getDashOffsets(e){let t=[0],r=this.props.positionFormat==="XY"?2:3,s=Array.isArray(e[0]),i=s?e.length:e.length/r,n,a;for(let l=0;l<i-1;l++)n=s?e[l]:e.slice(l*r,l*r+r),n=this.projectPosition(n),l>0&&(t[l]=t[l-1]+R.dist(a,n)),a=n;return t[i-1]=0,t}};B.defaultProps=sr;B.extensionName="PathStyleExtension";var pt=B;var mt=d(_(),1);var F=d(_(),1),dt=`uniform fillUniforms {
1222
1222
  vec2 patternTextureSize;
1223
1223
  bool patternEnabled;
1224
1224
  bool patternMask;
1225
1225
  vec2 uvCoordinateOrigin;
1226
1226
  vec2 uvCoordinateOrigin64Low;
1227
1227
  } fill;
1228
- `,sr=`
1228
+ `,ir=`
1229
1229
  in vec4 fillPatternFrames;
1230
1230
  in float fillPatternScales;
1231
1231
  in vec2 fillPatternOffsets;
@@ -1233,10 +1233,10 @@ in vec2 fillPatternOffsets;
1233
1233
  out vec2 fill_uv;
1234
1234
  out vec4 fill_patternBounds;
1235
1235
  out vec4 fill_patternPlacement;
1236
- `,ir=`
1237
- ${_t}
1238
- ${sr}
1239
1236
  `,nr=`
1237
+ ${dt}
1238
+ ${ir}
1239
+ `,ar=`
1240
1240
  uniform sampler2D fill_patternTexture;
1241
1241
 
1242
1242
  in vec4 fill_patternBounds;
@@ -1244,10 +1244,10 @@ in vec4 fill_patternPlacement;
1244
1244
  in vec2 fill_uv;
1245
1245
 
1246
1246
  const float FILL_UV_SCALE = 512.0 / 40000000.0;
1247
- `,ar=`
1248
- ${_t}
1249
- ${nr}
1250
- `,lr={"vs:DECKGL_FILTER_GL_POSITION":`
1247
+ `,lr=`
1248
+ ${dt}
1249
+ ${ar}
1250
+ `,cr={"vs:DECKGL_FILTER_GL_POSITION":`
1251
1251
  fill_uv = geometry.position.xy;
1252
1252
  `,"vs:DECKGL_FILTER_COLOR":`
1253
1253
  if (fill.patternEnabled) {
@@ -1269,7 +1269,7 @@ ${nr}
1269
1269
  color.rgb = patternColor.rgb;
1270
1270
  }
1271
1271
  }
1272
- `};function cr(o){if(!o)return{};let e={};if("fillPatternTexture"in o){let{fillPatternTexture:t}=o;e.fill_patternTexture=t,e.patternTextureSize=[t.width,t.height]}if("project"in o){let{fillPatternMask:t=!0,fillPatternEnabled:r=!0}=o,s=T.project.getUniforms(o.project),{commonOrigin:i}=s,n=[(0,T.fp64LowPart)(i[0]),(0,T.fp64LowPart)(i[1])];e.uvCoordinateOrigin=i.slice(0,2),e.uvCoordinateOrigin64Low=n,e.patternMask=t,e.patternEnabled=r}return e}var mt={name:"fill",vs:ir,fs:ar,inject:lr,dependencies:[T.project],getUniforms:cr,uniformTypes:{patternTextureSize:"vec2<f32>",patternEnabled:"i32",patternMask:"i32",uvCoordinateOrigin:"vec2<f32>",uvCoordinateOrigin64Low:"vec2<f32>"}};var fr={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:{lodMaxClamp:0}},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:o=>o.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},D=class extends ht.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&&mt].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:s,fillPatternMask:i}=this.props,n={project:e.shaderModuleProps.project,fillPatternEnabled:s,fillPatternMask:i,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]}};D.defaultProps=fr;D.extensionName="FillStyleExtension";var vt=D;var gt=d(_(),1),ur={clipBounds:[0,0,1,1],clipByInstance:void 0},xt=`
1272
+ `};function fr(o){if(!o)return{};let e={};if("fillPatternTexture"in o){let{fillPatternTexture:t}=o;e.fill_patternTexture=t,e.patternTextureSize=[t.width,t.height]}if("project"in o){let{fillPatternMask:t=!0,fillPatternEnabled:r=!0}=o,s=F.project.getUniforms(o.project),{commonOrigin:i}=s,n=[(0,F.fp64LowPart)(i[0]),(0,F.fp64LowPart)(i[1])];e.uvCoordinateOrigin=i.slice(0,2),e.uvCoordinateOrigin64Low=n,e.patternMask=t,e.patternEnabled=r}return e}var _t={name:"fill",vs:nr,fs:lr,inject:cr,dependencies:[F.project],getUniforms:fr,uniformTypes:{patternTextureSize:"vec2<f32>",patternEnabled:"i32",patternMask:"i32",uvCoordinateOrigin:"vec2<f32>",uvCoordinateOrigin64Low:"vec2<f32>"}};var ur={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:{lodMaxClamp:0}},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:o=>o.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},D=class extends mt.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&&_t].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:s,fillPatternMask:i}=this.props,n={project:e.shaderModuleProps.project,fillPatternEnabled:s,fillPatternMask:i,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]}};D.defaultProps=ur;D.extensionName="FillStyleExtension";var ht=D;var vt=d(_(),1),pr={clipBounds:[0,0,1,1],clipByInstance:void 0},gt=`
1273
1273
  uniform clipUniforms {
1274
1274
  vec4 bounds;
1275
1275
  } clip;
@@ -1277,7 +1277,7 @@ uniform clipUniforms {
1277
1277
  bool clip_isInBounds(vec2 position) {
1278
1278
  return position.x >= clip.bounds[0] && position.y >= clip.bounds[1] && position.x < clip.bounds[2] && position.y < clip.bounds[3];
1279
1279
  }
1280
- `,pr={name:"clip",vs:xt,uniformTypes:{bounds:"vec4<f32>"}},dr={"vs:#decl":`
1280
+ `,dr={name:"clip",vs:gt,uniformTypes:{bounds:"vec4<f32>"}},_r={"vs:#decl":`
1281
1281
  out float clip_isVisible;
1282
1282
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1283
1283
  clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
@@ -1285,7 +1285,7 @@ out float clip_isVisible;
1285
1285
  in float clip_isVisible;
1286
1286
  `,"fs:DECKGL_FILTER_COLOR":`
1287
1287
  if (clip_isVisible < 0.5) discard;
1288
- `},_r={name:"clip",fs:xt,uniformTypes:{bounds:"vec4<f32>"}},mr={"vs:#decl":`
1288
+ `},mr={name:"clip",fs:gt,uniformTypes:{bounds:"vec4<f32>"}},hr={"vs:#decl":`
1289
1289
  out vec2 clip_commonPosition;
1290
1290
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1291
1291
  clip_commonPosition = geometry.position.xy;
@@ -1293,7 +1293,7 @@ out vec2 clip_commonPosition;
1293
1293
  in vec2 clip_commonPosition;
1294
1294
  `,"fs:DECKGL_FILTER_COLOR":`
1295
1295
  if (!clip_isInBounds(clip_commonPosition)) discard;
1296
- `},j=class extends gt.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:[pr],inject:dr}:{modules:[_r],inject:mr}}draw(){let{clipBounds:e}=this.props,t={};if(this.state.clipByInstance)t.bounds=e;else{let r=this.projectPosition([e[0],e[1],0]),s=this.projectPosition([e[2],e[3],0]);t.bounds=[Math.min(r[0],s[0]),Math.min(r[1],s[1]),Math.max(r[0],s[0]),Math.max(r[1],s[1])]}this.setShaderModuleProps({clip:t})}};j.defaultProps=ur;j.extensionName="ClipExtension";var yt=j;var Tt=d(_(),1);var Pt=d(_(),1),hr=`
1296
+ `},j=class extends vt.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:[dr],inject:_r}:{modules:[mr],inject:hr}}draw(){let{clipBounds:e}=this.props,t={};if(this.state.clipByInstance)t.bounds=e;else{let r=this.projectPosition([e[0],e[1],0]),s=this.projectPosition([e[2],e[3],0]);t.bounds=[Math.min(r[0],s[0]),Math.min(r[1],s[1]),Math.max(r[0],s[0]),Math.max(r[1],s[1])]}this.setShaderModuleProps({clip:t})}};j.defaultProps=pr;j.extensionName="ClipExtension";var xt=j;var Mt=d(_(),1);var yt=d(_(),1),vr=`
1297
1297
  in float collisionPriorities;
1298
1298
 
1299
1299
  uniform sampler2D collision_texture;
@@ -1341,7 +1341,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
1341
1341
  float W = 2.0 * floatN + 1.0;
1342
1342
  return pow(accumulator / (W * W), 2.2);
1343
1343
  }
1344
- `,vr={"vs:#decl":`
1344
+ `,gr={"vs:#decl":`
1345
1345
  float collision_fade = 1.0;
1346
1346
  `,"vs:DECKGL_FILTER_GL_POSITION":`
1347
1347
  if (collision.sort) {
@@ -1360,21 +1360,21 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
1360
1360
  }
1361
1361
  `,"vs:DECKGL_FILTER_COLOR":`
1362
1362
  color.a *= collision_fade;
1363
- `},gr=o=>{if(!o||!("dummyCollisionMap"in o))return{};let{enabled:e,collisionFBO:t,drawToCollisionMap:r,dummyCollisionMap:s}=o;return{enabled:e&&!r,sort:Boolean(r),collision_texture:!r&&t?t.colorAttachments[0]:s}},bt={name:"collision",dependencies:[Pt.project],vs:hr,inject:vr,getUniforms:gr,uniformTypes:{sort:"i32",enabled:"i32"}};var Mt=d(_(),1);var Et=d(_(),1),V=class extends Et._LayersPass{renderCollisionMap(e,t){let s=[0,0,0,0],i=[1,1,e.width-2*1,e.height-2*1];this.render({...t,clearColor:s,scissorRect:i,target:e,pass:"collision"})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!1,depthRange:[0,1],depthTest:!0}}getShaderModuleProps(){return{collision:{drawToCollisionMap:!0},picking:{isActive:1,isAttribute:!1},lighting:{enabled:!1}}}};var ye=2,z=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 V(t,{id:"default-collision-filter"})}preRender({effects:e,layers:t,layerFilter:r,viewports:s,onViewportActive:i,views:n,isPicking:a,preRenderStats:l={}}){let{device:c}=this.context;if(a)return;let f=t.filter(({props:{visible:h,collisionEnabled:L}})=>h&&L);if(f.length===0){this.channels={};return}let u=e?.filter(h=>h.useInPicking&&l[h.id]),p=l["mask-effect"]?.didRender,m=this._groupByCollisionGroup(c,f),v=s[0],b=!this.lastViewport||!this.lastViewport.equals(v)||p;for(let h in m){let L=this.collisionFBOs[h],fe=m[h],[ue,pe]=c.canvasContext.getPixelSize();L.resize({width:ue/ye,height:pe/ye}),this._render(fe,{effects:u,layerFilter:r,onViewportActive:i,views:n,viewport:v,viewportChanged:b})}}_render(e,{effects:t,layerFilter:r,onViewportActive:s,views:i,viewport:n,viewportChanged:a}){let{collisionGroup:l}=e,c=this.channels[l];if(!c)return;let f=a||e===c||!(0,Mt._deepEqual)(c.layers,e.layers,1)||e.layerBounds.some((u,p)=>!M(u,c.layerBounds[p]))||e.allLayersLoaded!==c.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,f){this.lastViewport=n;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:r,viewports:n?[n]:[],onViewportActive:s,views:i,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/ye}}})}}_groupByCollisionGroup(e,t){let r={};for(let s of t){let i=s.props.collisionGroup,n=r[i];n||(n={collisionGroup:i,layers:[],layerBounds:[],allLayersLoaded:!0},r[i]=n),n.layers.push(s),n.layerBounds.push(s.getBounds()),s.isLoaded||(n.allLayersLoaded=!1)}for(let s of Object.keys(r))this.collisionFBOs[s]||this.createFBO(e,s),this.channels[s]||(this.channels[s]=r[s]);for(let s of Object.keys(this.collisionFBOs))r[s]||this.destroyFBO(s);return r}getShaderModuleProps(e){let{collisionGroup:t,collisionEnabled:r}=e.props,{collisionFBOs:s,dummyCollisionMap:i}=this,n=s[t];return{collision:{enabled:r&&Boolean(n),collisionFBO:n,dummyCollisionMap:i}}}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:s}=e.gl.canvas,i=e.createTexture({format:"rgba8unorm",width:r,height:s,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),n=e.createTexture({format:"depth16unorm",width:r,height:s,mipmaps:!1});this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:r,height:s,colorAttachments:[i],depthStencilAttachment:n})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}};var xr={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},U=class extends Tt.LayerExtension{getShaders(){return{modules:[bt]}}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 z),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}};U.defaultProps=xr;U.extensionName="CollisionFilterExtension";var Ft=U;var P=d(_(),1);var At=d(_(),1),Ot=`uniform maskUniforms {
1363
+ `},xr=o=>{if(!o||!("dummyCollisionMap"in o))return{};let{enabled:e,collisionFBO:t,drawToCollisionMap:r,dummyCollisionMap:s}=o;return{enabled:e&&!r,sort:Boolean(r),collision_texture:!r&&t?t.colorAttachments[0]:s}},Pt={name:"collision",dependencies:[yt.project],vs:vr,inject:gr,getUniforms:xr,uniformTypes:{sort:"i32",enabled:"i32"}};var Et=d(_(),1);var bt=d(_(),1),V=class extends bt._LayersPass{renderCollisionMap(e,t){let s=[0,0,0,0],i=[1,1,e.width-2*1,e.height-2*1];this.render({...t,clearColor:s,scissorRect:i,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 ye=2,z=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 V(t,{id:"default-collision-filter"})}preRender({effects:e,layers:t,layerFilter:r,viewports:s,onViewportActive:i,views:n,isPicking:a,preRenderStats:l={}}){let{device:c}=this.context;if(a)return;let f=t.filter(({props:{visible:h,collisionEnabled:L}})=>h&&L);if(f.length===0){this.channels={};return}let u=e?.filter(h=>h.useInPicking&&l[h.id]),p=l["mask-effect"]?.didRender,m=this._groupByCollisionGroup(c,f),v=s[0],b=!this.lastViewport||!this.lastViewport.equals(v)||p;for(let h in m){let L=this.collisionFBOs[h],fe=m[h],[ue,pe]=c.canvasContext.getPixelSize();L.resize({width:ue/ye,height:pe/ye}),this._render(fe,{effects:u,layerFilter:r,onViewportActive:i,views:n,viewport:v,viewportChanged:b})}}_render(e,{effects:t,layerFilter:r,onViewportActive:s,views:i,viewport:n,viewportChanged:a}){let{collisionGroup:l}=e,c=this.channels[l];if(!c)return;let f=a||e===c||!(0,Et._deepEqual)(c.layers,e.layers,1)||e.layerBounds.some((u,p)=>!M(u,c.layerBounds[p]))||e.allLayersLoaded!==c.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,f){this.lastViewport=n;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:r,viewports:n?[n]:[],onViewportActive:s,views:i,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/ye}}})}}_groupByCollisionGroup(e,t){let r={};for(let s of t){let i=s.props.collisionGroup,n=r[i];n||(n={collisionGroup:i,layers:[],layerBounds:[],allLayersLoaded:!0},r[i]=n),n.layers.push(s),n.layerBounds.push(s.getBounds()),s.isLoaded||(n.allLayersLoaded=!1)}for(let s of Object.keys(r))this.collisionFBOs[s]||this.createFBO(e,s),this.channels[s]||(this.channels[s]=r[s]);for(let s of Object.keys(this.collisionFBOs))r[s]||this.destroyFBO(s);return r}getShaderModuleProps(e){let{collisionGroup:t,collisionEnabled:r}=e.props,{collisionFBOs:s,dummyCollisionMap:i}=this,n=s[t];return{collision:{enabled:r&&Boolean(n),collisionFBO:n,dummyCollisionMap:i}}}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:s}=e.gl.canvas,i=e.createTexture({format:"rgba8unorm",width:r,height:s,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),n=e.createTexture({format:"depth16unorm",width:r,height:s,mipmaps:!1});this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:r,height:s,colorAttachments:[i],depthStencilAttachment:n})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}};var yr={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},U=class extends Mt.LayerExtension{getShaders(){return{modules:[Pt]}}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 z),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}};U.defaultProps=yr;U.extensionName="CollisionFilterExtension";var Ft=U;var P=d(_(),1);var Tt=d(_(),1),At=`uniform maskUniforms {
1364
1364
  vec4 bounds;
1365
1365
  highp int channel;
1366
1366
  bool enabled;
1367
1367
  bool inverted;
1368
1368
  bool maskByInstance;
1369
1369
  } mask;
1370
- `,yr=`
1370
+ `,Pr=`
1371
1371
  vec2 mask_getCoords(vec4 position) {
1372
1372
  return (position.xy - mask.bounds.xy) / (mask.bounds.zw - mask.bounds.xy);
1373
1373
  }
1374
- `,Pr=`
1375
- ${Ot}
1376
- ${yr}
1377
1374
  `,br=`
1375
+ ${At}
1376
+ ${Pr}
1377
+ `,Er=`
1378
1378
  uniform sampler2D mask_texture;
1379
1379
 
1380
1380
  bool mask_isInBounds(vec2 texCoords) {
@@ -1399,10 +1399,10 @@ bool mask_isInBounds(vec2 texCoords) {
1399
1399
  return maskValue < 0.5;
1400
1400
  }
1401
1401
  }
1402
- `,Er=`
1403
- ${Ot}
1404
- ${br}
1405
- `,Mr={"vs:#decl":`
1402
+ `,Mr=`
1403
+ ${At}
1404
+ ${Er}
1405
+ `,Fr={"vs:#decl":`
1406
1406
  out vec2 mask_texCoords;
1407
1407
  `,"vs:#main-end":`
1408
1408
  vec4 mask_common_position;
@@ -1424,15 +1424,15 @@ in vec2 mask_texCoords;
1424
1424
 
1425
1425
  if (!mask) discard;
1426
1426
  }
1427
- `},Tr=o=>o&&"maskMap"in o?{mask_texture:o.maskMap}:o||{},Lt={name:"mask",dependencies:[At.project],vs:Pr,fs:Er,inject:Mr,getUniforms:Tr,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Pe=d(_(),1);var St=d(_(),1),Fr={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},G=class extends St._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,depthTest:!1,...Fr}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var ie=d(_(),1);function F(o,e){let t=[1/0,1/0,-1/0,-1/0];for(let r of o){let s=r.getBounds();if(s){let i=r.projectPosition(s[0],{viewport:e,autoOffset:!1}),n=r.projectPosition(s[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],i[0]),t[1]=Math.min(t[1],i[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 Ar=2048;function A(o){let{bounds:e,viewport:t,border:r=0}=o,{isGeospatial:s}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let i=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=o;if(l===void 0){n=n-r*2,a=a-r*2;let c=Math.min(n/(e[2]-e[0]),a/(e[3]-e[1]));l=Math.min(Math.log2(c),20)}else if(!n||!a){let c=2**l;n=Math.round(Math.abs(e[2]-e[0])*c),a=Math.round(Math.abs(e[3]-e[1])*c);let f=Ar-r*2;if(n>f||a>f){let u=f/Math.max(n,a);n=Math.round(n*u),a=Math.round(a*u),l+=Math.log2(u)}}return s?new ie.WebMercatorViewport({id:t.id,x:r,y:r,width:n,height:a,longitude:i[0],latitude:i[1],zoom:l,orthographic:!0}):new ie.OrthographicViewport({id:t.id,x:r,y:r,width:n,height:a,target:i,zoom:l,flipY:!1})}function Or(o,e){let t;if(e&&e.length===2){let[i,n]=e,a=o.getBounds({z:i}),l=o.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=o.getBounds();let r=o.projectPosition(t.slice(0,2)),s=o.projectPosition(t.slice(2,4));return[r[0],r[1],s[0],s[1]]}function O(o,e,t){if(!o)return[0,0,1,1];let r=Or(e,t),s=Lr(r);return o[2]-o[0]<=s[2]-s[0]&&o[3]-o[1]<=s[3]-s[1]?o:[Math.max(o[0],s[0]),Math.max(o[1],s[1]),Math.min(o[2],s[2]),Math.min(o[3],s[3])]}function Lr(o){let e=o[2]-o[0],t=o[3]-o[1],r=(o[0]+o[2])/2,s=(o[1]+o[3])/2;return[r-e,s-t,r+e,s+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 G(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:t,viewports:r,onViewportActive:s,views:i,isPicking:n}){let a=!1;if(n)return{didRender:a};let l=e.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(l.length===0)return this.masks=null,this.channels.length=0,{didRender:a};this.masks={};let c=this._sortMaskChannels(l),f=r[0],u=!this.lastViewport||!this.lastViewport.equals(f);if(f.resolution!==void 0)return Pe.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:a};for(let p in c){let m=this._renderChannel(c[p],{layerFilter:t,onViewportActive:s,views:i,viewport:f,viewportChanged:u});a||(a=m)}return{didRender:a}}_renderChannel(e,{layerFilter:t,onViewportActive:r,views:s,viewport:i,viewportChanged:n}){let a=!1,l=this.channels[e.index];if(!l)return a;let c=e===l||e.layers.length!==l.layers.length||e.layers.some((f,u)=>f!==l.layers[u]||f.props.transitions)||e.layerBounds.some((f,u)=>f!==l.layerBounds[u]);if(e.bounds=l.bounds,e.maskBounds=l.maskBounds,this.channels[e.index]=e,c||n){this.lastViewport=i;let f=F(e.layers,i);if(e.bounds=f&&O(f,i),c||!M(e.bounds,l.bounds)){let{maskPass:u,maskMap:p}=this,m=f&&A({bounds:e.bounds,viewport:i,width:p.width,height:p.height,border:1});e.maskBounds=m?m.getBounds():[0,0,1,1],u.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:m?[m]:[],onViewportActive:r,views:s,shaderModuleProps:{project:{devicePixelRatio:1}}}),a=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},a}_sortMaskChannels(e){let t={},r=0;for(let s of e){let{id:i}=s.root,n=t[i];if(!n){if(++r>4){Pe.log.warn("Too many mask layers. The max supported is 4")();continue}n={id:i,index:this.channels.findIndex(a=>a?.id===i),layers:[],layerBounds:[],coordinateOrigin:s.root.props.coordinateOrigin,coordinateSystem:s.root.props.coordinateSystem},t[i]=n}n.layers.push(s),n.layerBounds.push(s.getBounds())}for(let s=0;s<4;s++){let i=this.channels[s];(!i||!(i.id in t))&&(this.channels[s]=null)}for(let s in t){let i=t[s];i.index<0&&(i.index=this.channels.findIndex(n=>!n),this.channels[i.index]=i)}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 Sr={maskId:"",maskByInstance:void 0,maskInverted:!1},H=class extends P.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:[Lt]}}draw({context:e,shaderModuleProps:t}){let r={};r.maskByInstance=Boolean(this.state.maskByInstance);let{maskId:s,maskInverted:i}=this.props,{maskChannels:n}=t.mask||{},{viewport:a}=e;if(n&&n[s]){let{index:l,bounds:c,coordinateOrigin:f}=n[s],{coordinateSystem:u}=n[s];r.enabled=!0,r.channel=l,r.inverted=i,u===P.COORDINATE_SYSTEM.DEFAULT&&(u=a.isGeospatial?P.COORDINATE_SYSTEM.LNGLAT:P.COORDINATE_SYSTEM.CARTESIAN);let p={modelMatrix:null,fromCoordinateOrigin:f,fromCoordinateSystem:u},m=this.projectPosition([c[0],c[1],0],p),v=this.projectPosition([c[2],c[3],0],p);r.bounds=[m[0],m[1],v[0],v[1]]}else s&&P.log.warn(`Could not find a mask layer with id: ${s}`)(),r.enabled=!1;this.setShaderModuleProps({mask:r})}};H.defaultProps=Sr;H.extensionName="MaskExtension";var Ct=H;var Dt=d(_(),1);var Bt=d(_(),1);var be=d(_(),1),x={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},Cr=Object.keys(x).map(o=>`const float TERRAIN_MODE_${o} = ${x[o]}.0;`).join(`
1428
- `),It=Cr+`
1427
+ `},Tr=o=>o&&"maskMap"in o?{mask_texture:o.maskMap}:o||{},Ot={name:"mask",dependencies:[Tt.project],vs:br,fs:Mr,inject:Fr,getUniforms:Tr,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Pe=d(_(),1);var Lt=d(_(),1),Ar={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},G=class extends Lt._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",...Ar}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var ie=d(_(),1);function T(o,e){let t=[1/0,1/0,-1/0,-1/0];for(let r of o){let s=r.getBounds();if(s){let i=r.projectPosition(s[0],{viewport:e,autoOffset:!1}),n=r.projectPosition(s[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],i[0]),t[1]=Math.min(t[1],i[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 Or=2048;function A(o){let{bounds:e,viewport:t,border:r=0}=o,{isGeospatial:s}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let i=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=o;if(l===void 0){n=n-r*2,a=a-r*2;let c=Math.min(n/(e[2]-e[0]),a/(e[3]-e[1]));l=Math.min(Math.log2(c),20)}else if(!n||!a){let c=2**l;n=Math.round(Math.abs(e[2]-e[0])*c),a=Math.round(Math.abs(e[3]-e[1])*c);let f=Or-r*2;if(n>f||a>f){let u=f/Math.max(n,a);n=Math.round(n*u),a=Math.round(a*u),l+=Math.log2(u)}}return s?new ie.WebMercatorViewport({id:t.id,x:r,y:r,width:n,height:a,longitude:i[0],latitude:i[1],zoom:l,orthographic:!0}):new ie.OrthographicViewport({id:t.id,x:r,y:r,width:n,height:a,target:i,zoom:l,flipY:!1})}function Lr(o,e){let t;if(e&&e.length===2){let[i,n]=e,a=o.getBounds({z:i}),l=o.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=o.getBounds();let r=o.projectPosition(t.slice(0,2)),s=o.projectPosition(t.slice(2,4));return[r[0],r[1],s[0],s[1]]}function O(o,e,t){if(!o)return[0,0,1,1];let r=Lr(e,t),s=Cr(r);return o[2]-o[0]<=s[2]-s[0]&&o[3]-o[1]<=s[3]-s[1]?o:[Math.max(o[0],s[0]),Math.max(o[1],s[1]),Math.min(o[2],s[2]),Math.min(o[3],s[3])]}function Cr(o){let e=o[2]-o[0],t=o[3]-o[1],r=(o[0]+o[2])/2,s=(o[1]+o[3])/2;return[r-e,s-t,r+e,s+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 G(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:t,viewports:r,onViewportActive:s,views:i,isPicking:n}){let a=!1;if(n)return{didRender:a};let l=e.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(l.length===0)return this.masks=null,this.channels.length=0,{didRender:a};this.masks={};let c=this._sortMaskChannels(l),f=r[0],u=!this.lastViewport||!this.lastViewport.equals(f);if(f.resolution!==void 0)return Pe.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:a};for(let p in c){let m=this._renderChannel(c[p],{layerFilter:t,onViewportActive:s,views:i,viewport:f,viewportChanged:u});a||(a=m)}return{didRender:a}}_renderChannel(e,{layerFilter:t,onViewportActive:r,views:s,viewport:i,viewportChanged:n}){let a=!1,l=this.channels[e.index];if(!l)return a;let c=e===l||e.layers.length!==l.layers.length||e.layers.some((f,u)=>f!==l.layers[u]||f.props.transitions)||e.layerBounds.some((f,u)=>f!==l.layerBounds[u]);if(e.bounds=l.bounds,e.maskBounds=l.maskBounds,this.channels[e.index]=e,c||n){this.lastViewport=i;let f=T(e.layers,i);if(e.bounds=f&&O(f,i),c||!M(e.bounds,l.bounds)){let{maskPass:u,maskMap:p}=this,m=f&&A({bounds:e.bounds,viewport:i,width:p.width,height:p.height,border:1});e.maskBounds=m?m.getBounds():[0,0,1,1],u.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:m?[m]:[],onViewportActive:r,views:s,shaderModuleProps:{project:{devicePixelRatio:1}}}),a=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},a}_sortMaskChannels(e){let t={},r=0;for(let s of e){let{id:i}=s.root,n=t[i];if(!n){if(++r>4){Pe.log.warn("Too many mask layers. The max supported is 4")();continue}n={id:i,index:this.channels.findIndex(a=>a?.id===i),layers:[],layerBounds:[],coordinateOrigin:s.root.props.coordinateOrigin,coordinateSystem:s.root.props.coordinateSystem},t[i]=n}n.layers.push(s),n.layerBounds.push(s.getBounds())}for(let s=0;s<4;s++){let i=this.channels[s];(!i||!(i.id in t))&&(this.channels[s]=null)}for(let s in t){let i=t[s];i.index<0&&(i.index=this.channels.findIndex(n=>!n),this.channels[i.index]=i)}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 Sr={maskId:"",maskByInstance:void 0,maskInverted:!1},H=class extends P.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:[Ot]}}draw({context:e,shaderModuleProps:t}){let r={};r.maskByInstance=Boolean(this.state.maskByInstance);let{maskId:s,maskInverted:i}=this.props,{maskChannels:n}=t.mask||{},{viewport:a}=e;if(n&&n[s]){let{index:l,bounds:c,coordinateOrigin:f}=n[s],{coordinateSystem:u}=n[s];r.enabled=!0,r.channel=l,r.inverted=i,u===P.COORDINATE_SYSTEM.DEFAULT&&(u=a.isGeospatial?P.COORDINATE_SYSTEM.LNGLAT:P.COORDINATE_SYSTEM.CARTESIAN);let p={modelMatrix:null,fromCoordinateOrigin:f,fromCoordinateSystem:u},m=this.projectPosition([c[0],c[1],0],p),v=this.projectPosition([c[2],c[3],0],p);r.bounds=[m[0],m[1],v[0],v[1]]}else s&&P.log.warn(`Could not find a mask layer with id: ${s}`)(),r.enabled=!1;this.setShaderModuleProps({mask:r})}};H.defaultProps=Sr;H.extensionName="MaskExtension";var Ct=H;var Bt=d(_(),1);var Nt=d(_(),1);var be=d(_(),1),x={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},Ir=Object.keys(x).map(o=>`const float TERRAIN_MODE_${o} = ${x[o]}.0;`).join(`
1428
+ `),St=Ir+`
1429
1429
  uniform terrainUniforms {
1430
1430
  float mode;
1431
1431
  vec4 bounds;
1432
1432
  } terrain;
1433
1433
 
1434
1434
  uniform sampler2D terrain_map;
1435
- `,Y={name:"terrain",dependencies:[be.project],vs:It+"out vec3 commonPos;",fs:It+"in vec3 commonPos;",inject:{"vs:#main-start":`
1435
+ `,Y={name:"terrain",dependencies:[be.project],vs:St+"out vec3 commonPos;",fs:St+"in vec3 commonPos;",inject:{"vs:#main-start":`
1436
1436
  if (terrain.mode == TERRAIN_MODE_SKIP) {
1437
1437
  gl_Position = vec4(0.0);
1438
1438
  return;
@@ -1472,6 +1472,6 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
1472
1472
  }
1473
1473
  return;
1474
1474
  }
1475
- `},getUniforms:(o={})=>{if("dummyHeightMap"in o){let{drawToTerrainHeightMap:e,heightMap:t,heightMapBounds:r,dummyHeightMap:s,terrainCover:i,useTerrainHeightMap:n,terrainSkipRender:a}=o,l=be.project.getUniforms(o.project),{commonOrigin:c}=l,f=a?x.SKIP:x.NONE,u=s,p=null;return e?(f=x.WRITE_HEIGHT_MAP,p=r):n&&t?(f=x.USE_HEIGHT_MAP,u=t,p=r):i&&(u=(o.isPicking?i.getPickingFramebuffer():i.getRenderFramebuffer())?.colorAttachments[0].texture,o.isPicking&&(f=x.SKIP),u?(f=f===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,p=i.bounds):u=s),{mode:f,terrain_map:u,bounds:p?[p[0]-c[0],p[1]-c[1],p[2]-p[0],p[3]-p[1]]:[0,0,0,0]}}return{}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};function W(o,e){return o.createFramebuffer({id:e.id,colorAttachments:[o.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},mipmaps:!1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var ne=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=kt(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:r,layerNeedsRedraw:s}){e&&(this.targetLayer=e);let i=t?this._updateViewport(t):!1,n=r?this._updateLayers(r):!1;if(s){for(let a of this.layers)if(s[a]){n=!0;break}}return n||i}_updateLayers(e){let t=!1;if(e=this.tile?Ir(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 i=e.projectPosition(this.targetBounds[0]),n=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[i[0],i[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(r=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=F([t],e));if(!this.targetBoundsCommon)return!1;let s=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let i=this.renderViewport?.zoom;r=r||s!==i;let n=O(this.targetBoundsCommon,e),a=this.bounds;r=r||!a||n.some((l,c)=>l!==a[c]),this.bounds=n}return r&&(this.renderViewport=A({bounds:this.bounds,zoom:s,viewport:e})),r}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 Ir(o,e){return e.filter(t=>{let r=kt(t);return r?kr(o.boundingBox,r.boundingBox):!0})}function kt(o){for(;o;){let{tile:e}=o.props;if(e)return e;o=o.parent}return null}function kr(o,e){return o&&e?o[0][0]<e[1][0]&&e[0][0]<o[1][0]&&o[0][1]<e[1][1]&&e[0][1]<o[1][1]:!1}var Rt=d(_(),1),Rr={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},ae=class extends Rt._LayersPass{getRenderableLayers(e,t){let{layers:r}=t,s=[],i=this._getDrawLayerParams(e,t,!0);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&s.push(a)}return s}renderHeightMap(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;!r||!s||(r.resize(s),this.render({...t,target:r,pass:"terrain-height-map",layers:t.layers,viewports:[s],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers);r.resize(s),this.render({...t,target:r,pass:`terrain-cover-${e.id}`,layers:i,effects:[],viewports:[s],clearColor:[0,0,0,0]})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthTest:!1,...e.props.operation.includes("terrain")&&Rr}}getShaderModuleProps(e,t,r){return{terrain:{project:r.project}}}};var wt=d(_(),1),le=class extends wt._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:r}=t,s=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let i=this._getDrawLayerParams(e,t);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&(s.push(a),this.drawParameters[a.id]=i[n].layerParameters)}return s}renderTerrainCover(e,t){let r=e.getPickingFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&i.unshift(n),r.resize(s),this.render({...t,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:i,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1})}getLayerParameters(e,t,r){let s;return this.drawParameters[e.id]?s=this.drawParameters[e.id]:(s=super.getLayerParameters(e,t,r),s.blend=!0),{...s,depthTest:!1}}getShaderModuleProps(e,t,r){return{terrain:{project:r.project}}}};var Nt=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 r=e.length!==this.layers.length||e.some((i,n)=>i!==this.layers[n]||i.props.transitions||i.getBounds()!==this.layersBounds[n]);r&&(this.layers=e,this.layersBounds=e.map(i=>i.getBounds()),this.layersBoundsCommon=F(e,t));let s=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||s){let i=O(this.layersBoundsCommon,t);if(i[2]<=i[0]||i[3]<=i[1])return this.renderViewport=null,!1;this.bounds=i,this.lastViewport=t;let n=t.scale,a=(i[2]-i[0])*n,l=(i[3]-i[1])*n;return this.renderViewport=a>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(a,Nt),height:Math.min(l,Nt),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 ae(e,{id:"terrain"}),this.terrainPickingPass=new le(e,{id:"terrain-picking"}),K.isSupported(e)?this.heightMap=new K(e):Bt.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 s=t[0],i=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(s,e),n=i.filter(l=>l.props.operation.includes("terrain"));if(n.length===0)return;r||i.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(n,s,e);let a=i.filter(l=>l.state.terrainDrawMode==="drape");this._updateTerrainCovers(n,a,s,e)}getShaderModuleProps(e,t){let{terrainDrawMode:r}=e.state;return{terrain:{project:t.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap: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,s){let i={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(i[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:i});for(let n of e)this._updateTerrainCover(n,t,r,s);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,r,s){let i=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new ne(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:r,layers:t});(this.isPicking||n.isDirty||a)&&(i.renderTerrainCover(n,{...s,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 wr={terrainDrawMode:void 0},$=class extends Dt.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:s}=t;if(!s){let i=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;s=i||a?"offset":"drape"}this.setState({terrainDrawMode:s})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};$.defaultProps=wr;$.extensionName="TerrainExtension";var jt=$;return Ht(Z);})();
1475
+ `},getUniforms:(o={})=>{if("dummyHeightMap"in o){let{drawToTerrainHeightMap:e,heightMap:t,heightMapBounds:r,dummyHeightMap:s,terrainCover:i,useTerrainHeightMap:n,terrainSkipRender:a}=o,l=be.project.getUniforms(o.project),{commonOrigin:c}=l,f=a?x.SKIP:x.NONE,u=s,p=null;return e?(f=x.WRITE_HEIGHT_MAP,p=r):n&&t?(f=x.USE_HEIGHT_MAP,u=t,p=r):i&&(u=(o.isPicking?i.getPickingFramebuffer():i.getRenderFramebuffer())?.colorAttachments[0].texture,o.isPicking&&(f=x.SKIP),u?(f=f===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,p=i.bounds):u=s),{mode:f,terrain_map:u,bounds:p?[p[0]-c[0],p[1]-c[1],p[2]-p[0],p[3]-p[1]]:[0,0,0,0]}}return{}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};function W(o,e){return o.createFramebuffer({id:e.id,colorAttachments:[o.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},mipmaps:!1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var ne=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=It(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:r,layerNeedsRedraw:s}){e&&(this.targetLayer=e);let i=t?this._updateViewport(t):!1,n=r?this._updateLayers(r):!1;if(s){for(let a of this.layers)if(s[a]){n=!0;break}}return n||i}_updateLayers(e){let t=!1;if(e=this.tile?kr(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 i=e.projectPosition(this.targetBounds[0]),n=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[i[0],i[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(r=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=T([t],e));if(!this.targetBoundsCommon)return!1;let s=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let i=this.renderViewport?.zoom;r=r||s!==i;let n=O(this.targetBoundsCommon,e),a=this.bounds;r=r||!a||n.some((l,c)=>l!==a[c]),this.bounds=n}return r&&(this.renderViewport=A({bounds:this.bounds,zoom:s,viewport:e})),r}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 kr(o,e){return e.filter(t=>{let r=It(t);return r?Rr(o.boundingBox,r.boundingBox):!0})}function It(o){for(;o;){let{tile:e}=o.props;if(e)return e;o=o.parent}return null}function Rr(o,e){return o&&e?o[0][0]<e[1][0]&&e[0][0]<o[1][0]&&o[0][1]<e[1][1]&&e[0][1]<o[1][1]:!1}var kt=d(_(),1),wr={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},ae=class extends kt._LayersPass{getRenderableLayers(e,t){let{layers:r}=t,s=[],i=this._getDrawLayerParams(e,t,!0);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&s.push(a)}return s}renderHeightMap(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;!r||!s||(r.resize(s),this.render({...t,target:r,pass:"terrain-height-map",layers:t.layers,viewports:[s],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers);r.resize(s),this.render({...t,target:r,pass:`terrain-cover-${e.id}`,layers:i,effects:[],viewports:[s],clearColor:[0,0,0,0]})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&wr}}getShaderModuleProps(e,t,r){return{terrain:{project:r.project}}}};var Rt=d(_(),1),le=class extends Rt._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:r}=t,s=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let i=this._getDrawLayerParams(e,t);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&(s.push(a),this.drawParameters[a.id]=i[n].layerParameters)}return s}renderTerrainCover(e,t){let r=e.getPickingFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&i.unshift(n),r.resize(s),this.render({...t,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:i,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1})}getLayerParameters(e,t,r){let s;return this.drawParameters[e.id]?s=this.drawParameters[e.id]:(s=super.getLayerParameters(e,t,r),s.blend=!0),{...s,depthCompare:"always"}}getShaderModuleProps(e,t,r){return{terrain:{project:r.project}}}};var wt=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 r=e.length!==this.layers.length||e.some((i,n)=>i!==this.layers[n]||i.props.transitions||i.getBounds()!==this.layersBounds[n]);r&&(this.layers=e,this.layersBounds=e.map(i=>i.getBounds()),this.layersBoundsCommon=T(e,t));let s=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||s){let i=O(this.layersBoundsCommon,t);if(i[2]<=i[0]||i[3]<=i[1])return this.renderViewport=null,!1;this.bounds=i,this.lastViewport=t;let n=t.scale,a=(i[2]-i[0])*n,l=(i[3]-i[1])*n;return this.renderViewport=a>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(a,wt),height:Math.min(l,wt),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 ae(e,{id:"terrain"}),this.terrainPickingPass=new le(e,{id:"terrain-picking"}),K.isSupported(e)?this.heightMap=new K(e):Nt.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 s=t[0],i=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(s,e),n=i.filter(l=>l.props.operation.includes("terrain"));if(n.length===0)return;r||i.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(n,s,e);let a=i.filter(l=>l.state.terrainDrawMode==="drape");this._updateTerrainCovers(n,a,s,e)}getShaderModuleProps(e,t){let{terrainDrawMode:r}=e.state;return{terrain:{project:t.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap: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,s){let i={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(i[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:i});for(let n of e)this._updateTerrainCover(n,t,r,s);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,r,s){let i=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new ne(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:r,layers:t});(this.isPicking||n.isDirty||a)&&(i.renderTerrainCover(n,{...s,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 Nr={terrainDrawMode:void 0},$=class extends Bt.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:s}=t;if(!s){let i=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;s=i||a?"offset":"drape"}this.setState({terrainDrawMode:s})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};$.defaultProps=Nr;$.extensionName="TerrainExtension";var Dt=$;return qt(Z);})();
1476
1476
  return __exports__;
1477
1477
  });
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Plug-and-play functionalities for deck.gl layers",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
- "version": "9.1.0-beta.1",
6
+ "version": "9.1.0-beta.3",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -38,14 +38,14 @@
38
38
  "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev"
39
39
  },
40
40
  "dependencies": {
41
- "@luma.gl/constants": "^9.1.0-beta.11",
42
- "@luma.gl/shadertools": "^9.1.0-beta.11",
41
+ "@luma.gl/constants": "^9.1.0-beta.16",
42
+ "@luma.gl/shadertools": "^9.1.0-beta.16",
43
43
  "@math.gl/core": "^4.1.0"
44
44
  },
45
45
  "peerDependencies": {
46
- "@deck.gl/core": "9.0.0-alpha.0",
47
- "@luma.gl/core": "^9.1.0-beta.11",
48
- "@luma.gl/engine": "^9.1.0-beta.11"
46
+ "@deck.gl/core": "^9.1.0-beta",
47
+ "@luma.gl/core": "^9.1.0-beta",
48
+ "@luma.gl/engine": "^9.1.0-beta"
49
49
  },
50
- "gitHead": "a86fb154cf323eacc3f56ef087f636fb9f6c30b6"
50
+ "gitHead": "6625885881202cb753b64c6f2b8ee6f323092075"
51
51
  }
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {Framebuffer} from '@luma.gl/core';
5
+ import {Framebuffer, Parameters} from '@luma.gl/core';
6
6
  import {Layer, _LayersPass as LayersPass, LayersPassRenderOptions, Viewport} from '@deck.gl/core';
7
7
 
8
8
  type CollisionFilterPassRenderOptions = LayersPassRenderOptions & {};
@@ -16,8 +16,13 @@ export default class CollisionFilterPass extends LayersPass {
16
16
  this.render({...options, clearColor, scissorRect, target, pass: 'collision'});
17
17
  }
18
18
 
19
- protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any {
20
- return {...layer.props.parameters, blend: false, depthRange: [0, 1], depthTest: true};
19
+ protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): Parameters {
20
+ return {
21
+ ...layer.props.parameters,
22
+ blend: false,
23
+ depthWriteEnabled: true,
24
+ depthCompare: 'less-equal'
25
+ };
21
26
  }
22
27
 
23
28
  getShaderModuleProps() {
@@ -115,6 +115,12 @@ const defaultOptions: Required<DataFilterExtensionOptions> = {
115
115
  countItems: false
116
116
  };
117
117
 
118
+ const CATEGORY_TYPE_FROM_SIZE = {
119
+ 1: 'uint' as const,
120
+ 2: 'uvec2' as const,
121
+ 3: 'uvec3' as const,
122
+ 4: 'uvec4' as const
123
+ };
118
124
  const DATA_TYPE_FROM_SIZE = {
119
125
  1: 'float' as const,
120
126
  2: 'vec2' as const,
@@ -137,7 +143,7 @@ export default class DataFilterExtension extends LayerExtension<
137
143
  const {categorySize, filterSize, fp64} = extension.opts;
138
144
  const defines: Defines = {};
139
145
  if (categorySize) {
140
- defines.DATACATEGORY_TYPE = DATA_TYPE_FROM_SIZE[categorySize];
146
+ defines.DATACATEGORY_TYPE = CATEGORY_TYPE_FROM_SIZE[categorySize];
141
147
  defines.DATACATEGORY_CHANNELS = categorySize;
142
148
  }
143
149
  if (filterSize) {
@@ -173,6 +179,7 @@ export default class DataFilterExtension extends LayerExtension<
173
179
  size: categorySize,
174
180
  stepMode: 'dynamic',
175
181
  accessor: 'getFilterCategory',
182
+ type: 'uint32',
176
183
  transform:
177
184
  categorySize === 1
178
185
  ? d => extension._getCategoryKey.call(this, d, 0)