@deck.gl/extensions 8.9.0-beta.3 → 8.9.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dist.dev.js CHANGED
@@ -1117,7 +1117,7 @@ void main() {
1117
1117
  onFilteredItemsChange: {
1118
1118
  type: "function",
1119
1119
  value: null,
1120
- compare: false
1120
+ optional: true
1121
1121
  },
1122
1122
  filterEnabled: true,
1123
1123
  filterRange: [-1, 1],
@@ -2513,7 +2513,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
2513
2513
  if (!oldChannelInfo) {
2514
2514
  return didRender;
2515
2515
  }
2516
- const maskChanged = channelInfo === oldChannelInfo || oldChannelInfo.layers.length !== channelInfo.layers.length || channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);
2516
+ const maskChanged = channelInfo === oldChannelInfo || channelInfo.layers.length !== oldChannelInfo.layers.length || channelInfo.layers.some((layer, i) => layer !== oldChannelInfo.layers[i] || layer.props.transitions) || channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);
2517
2517
  channelInfo.bounds = oldChannelInfo.bounds;
2518
2518
  channelInfo.maskBounds = oldChannelInfo.maskBounds;
2519
2519
  this.channels[channelInfo.index] = channelInfo;
@@ -2702,7 +2702,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
2702
2702
  if (!oldRenderInfo) {
2703
2703
  return;
2704
2704
  }
2705
- const needsRender = viewportChanged || renderInfo === oldRenderInfo || !(0, import_core25._deepEqual)(oldRenderInfo.layers, renderInfo.layers, 0) || renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) || renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded || renderInfo.layers.some((layer) => layer.props.transitions);
2705
+ const needsRender = viewportChanged || renderInfo === oldRenderInfo || !(0, import_core25._deepEqual)(oldRenderInfo.layers, renderInfo.layers, 1) || renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) || renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded || renderInfo.layers.some((layer) => layer.props.transitions);
2706
2706
  this.channels[collisionGroup] = renderInfo;
2707
2707
  if (needsRender) {
2708
2708
  this.lastViewport = viewport;
@@ -133,7 +133,7 @@ var CollisionFilterEffect = function () {
133
133
  return;
134
134
  }
135
135
 
136
- var needsRender = viewportChanged || renderInfo === oldRenderInfo || !(0, _core3._deepEqual)(oldRenderInfo.layers, renderInfo.layers, 0) || renderInfo.layerBounds.some(function (b, i) {
136
+ var needsRender = viewportChanged || renderInfo === oldRenderInfo || !(0, _core3._deepEqual)(oldRenderInfo.layers, renderInfo.layers, 1) || renderInfo.layerBounds.some(function (b, i) {
137
137
  return !(0, _core2.equals)(b, oldRenderInfo.layerBounds[i]);
138
138
  }) || renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded || renderInfo.layers.some(function (layer) {
139
139
  return layer.props.transitions;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collision-filter/collision-filter-effect.ts"],"names":["DOWNSCALE","CollisionFilterEffect","gl","allEffects","effects","layers","layerFilter","viewports","onViewportActive","views","isPicking","preRenderStats","dummyCollisionMap","Texture2D","width","height","collisionLayers","filter","props","visible","collisionEnabled","length","channels","collisionFilterPass","CollisionFilterPass","id","e","constructor","MaskEffect","maskEffectRendered","didRender","_groupByCollisionGroup","viewport","viewportChanged","lastViewport","equals","collisionGroup","collisionFBO","collisionFBOs","renderInfo","resize","canvas","_render","oldRenderInfo","needsRender","layerBounds","some","b","i","allLayersLoaded","layer","transitions","renderCollisionMap","pass","moduleParameters","devicePixelRatio","channelMap","channelInfo","push","getBounds","isLoaded","Object","keys","createFBO","destroyFBO","delete","undefined","collisionMap","parameters","depthBuffer","Renderbuffer","format","Framebuffer","attachments","fbo","values","attachment"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;AASA,IAAMA,SAAS,GAAG,CAAlB;;IASqBC,qB;;;8CACd,yB;iDACG,I;wDACO,I;iDACP,C;oDAEuC,E;;yDAEM,E;;;;;;;WAIrD,mBACEC,EADF,QAYQ;AAAA;;AAAA,UATKC,UASL,QATJC,OASI;AAAA,UARJC,MAQI,QARJA,MAQI;AAAA,UAPJC,WAOI,QAPJA,WAOI;AAAA,UANJC,SAMI,QANJA,SAMI;AAAA,UALJC,gBAKI,QALJA,gBAKI;AAAA,UAJJC,KAII,QAJJA,KAII;AAAA,UAHJC,SAGI,QAHJA,SAGI;AAAA,qCAFJC,cAEI;AAAA,UAFJA,cAEI,oCAFa,EAEb;;AACN,UAAI,CAAC,KAAKC,iBAAV,EAA6B;AAC3B,aAAKA,iBAAL,GAAyB,IAAIC,eAAJ,CAAcX,EAAd,EAAkB;AAACY,UAAAA,KAAK,EAAE,CAAR;AAAWC,UAAAA,MAAM,EAAE;AAAnB,SAAlB,CAAzB;AACD;;AAED,UAAIL,SAAJ,EAAe;AAEb;AACD;;AAED,UAAMM,eAAe,GAAGX,MAAM,CAACY,MAAP,CAEtB;AAAA,gCAAEC,KAAF;AAAA,YAAUC,OAAV,eAAUA,OAAV;AAAA,YAAmBC,gBAAnB,eAAmBA,gBAAnB;AAAA,eAA0CD,OAAO,IAAIC,gBAArD;AAAA,OAFsB,CAAxB;;AAIA,UAAIJ,eAAe,CAACK,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,aAAKC,QAAL,GAAgB,EAAhB;AACA;AACD;;AAED,UAAI,CAAC,KAAKC,mBAAV,EAA+B;AAC7B,aAAKA,mBAAL,GAA2B,IAAIC,4BAAJ,CAAwBtB,EAAxB,EAA4B;AAACuB,UAAAA,EAAE,EAAE;AAAL,SAA5B,CAA3B;AACD;;AAGD,UAAMrB,OAAO,GAAGD,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAEc,MAAZ,CAAmB,UAAAS,CAAC;AAAA,eAAIA,CAAC,CAACC,WAAF,KAAkBC,mBAAtB;AAAA,OAApB,CAAhB;AACA,UAAMC,kBAAkB,2BAAIlB,cAAc,CAAC,aAAD,CAAlB,yDAAG,qBAAuDmB,SAAlF;;AAGA,UAAMR,QAAQ,GAAG,KAAKS,sBAAL,CAA4B7B,EAA5B,EAAgCc,eAAhC,CAAjB;;AAEA,UAAMgB,QAAQ,GAAGzB,SAAS,CAAC,CAAD,CAA1B;AACA,UAAM0B,eAAe,GACnB,CAAC,KAAKC,YAAN,IAAsB,CAAC,KAAKA,YAAL,CAAkBC,MAAlB,CAAyBH,QAAzB,CAAvB,IAA6DH,kBAD/D;;AAIA,WAAK,IAAMO,cAAX,IAA6Bd,QAA7B,EAAuC;AACrC,YAAMe,YAAY,GAAG,KAAKC,aAAL,CAAmBF,cAAnB,CAArB;AACA,YAAMG,UAAU,GAAGjB,QAAQ,CAACc,cAAD,CAA3B;AACAC,QAAAA,YAAY,CAACG,MAAb,CAAoB;AAClB1B,UAAAA,KAAK,EAAEZ,EAAE,CAACuC,MAAH,CAAU3B,KAAV,GAAkBd,SADP;AAElBe,UAAAA,MAAM,EAAEb,EAAE,CAACuC,MAAH,CAAU1B,MAAV,GAAmBf;AAFT,SAApB;;AAIA,aAAK0C,OAAL,CAAaH,UAAb,EAAyB;AACvBnC,UAAAA,OAAO,EAAPA,OADuB;AAEvBE,UAAAA,WAAW,EAAXA,WAFuB;AAGvBE,UAAAA,gBAAgB,EAAhBA,gBAHuB;AAIvBC,UAAAA,KAAK,EAALA,KAJuB;AAKvBuB,UAAAA,QAAQ,EAARA,QALuB;AAMvBC,UAAAA,eAAe,EAAfA;AANuB,SAAzB;AAQD;AAGF;;;WAED,iBACEM,UADF,SAiBE;AAAA,UAdEnC,OAcF,SAdEA,OAcF;AAAA,UAbEE,WAaF,SAbEA,WAaF;AAAA,UAZEE,gBAYF,SAZEA,gBAYF;AAAA,UAXEC,KAWF,SAXEA,KAWF;AAAA,UAVEuB,QAUF,SAVEA,QAUF;AAAA,UATEC,eASF,SATEA,eASF;AACA,UAAOG,cAAP,GAAyBG,UAAzB,CAAOH,cAAP;AACA,UAAMO,aAAa,GAAG,KAAKrB,QAAL,CAAcc,cAAd,CAAtB;;AACA,UAAI,CAACO,aAAL,EAAoB;AAClB;AACD;;AAED,UAAMC,WAAW,GACfX,eAAe,IAEfM,UAAU,KAAKI,aAFf,IAIA,CAAC,uBAAUA,aAAa,CAACtC,MAAxB,EAAgCkC,UAAU,CAAClC,MAA3C,EAAmD,CAAnD,CAJD,IAMAkC,UAAU,CAACM,WAAX,CAAuBC,IAAvB,CAA4B,UAACC,CAAD,EAAIC,CAAJ;AAAA,eAAU,CAAC,mBAAOD,CAAP,EAAUJ,aAAa,CAACE,WAAd,CAA0BG,CAA1B,CAAV,CAAX;AAAA,OAA5B,CANA,IAQAT,UAAU,CAACU,eAAX,KAA+BN,aAAa,CAACM,eAR7C,IAUAV,UAAU,CAAClC,MAAX,CAAkByC,IAAlB,CAAuB,UAAAI,KAAK;AAAA,eAAIA,KAAK,CAAChC,KAAN,CAAYiC,WAAhB;AAAA,OAA5B,CAXF;AAaA,WAAK7B,QAAL,CAAcc,cAAd,IAAgCG,UAAhC;;AAEA,UAAIK,WAAJ,EAAiB;AACf,aAAKV,YAAL,GAAoBF,QAApB;AACA,YAAMK,YAAY,GAAG,KAAKC,aAAL,CAAmBF,cAAnB,CAArB;AAGA,aAAKb,mBAAL,CAA0B6B,kBAA1B,CAA6Cf,YAA7C,EAA2D;AACzDgB,UAAAA,IAAI,EAAE,kBADmD;AAEzD3C,UAAAA,SAAS,EAAE,IAF8C;AAGzDL,UAAAA,MAAM,EAAEkC,UAAU,CAAClC,MAHsC;AAIzDD,UAAAA,OAAO,EAAPA,OAJyD;AAKzDE,UAAAA,WAAW,EAAXA,WALyD;AAMzDC,UAAAA,SAAS,EAAEyB,QAAQ,GAAG,CAACA,QAAD,CAAH,GAAgB,EANsB;AAOzDxB,UAAAA,gBAAgB,EAAhBA,gBAPyD;AAQzDC,UAAAA,KAAK,EAALA,KARyD;AASzD6C,UAAAA,gBAAgB,EAAE;AAEhB1C,YAAAA,iBAAiB,EAAE,KAAKA,iBAFR;AAGhB2C,YAAAA,gBAAgB,EAAE,4BAAiBlB,YAAY,CAACnC,EAA9B,IAAoCF;AAHtC;AATuC,SAA3D;AAeD;AACF;;;WAMD,gCACEE,EADF,EAEEc,eAFF,EAG8B;AAC5B,UAAMwC,UAAU,GAAG,EAAnB;;AAD4B,iDAERxC,eAFQ;AAAA;;AAAA;AAE5B,4DAAqC;AAAA,cAA1BkC,KAA0B;AACnC,cAAOd,gBAAP,GAAyBc,KAAK,CAAChC,KAA/B,CAAOkB,cAAP;AACA,cAAIqB,WAAW,GAAGD,UAAU,CAACpB,gBAAD,CAA5B;;AACA,cAAI,CAACqB,WAAL,EAAkB;AAChBA,YAAAA,WAAW,GAAG;AAACrB,cAAAA,cAAc,EAAdA,gBAAD;AAAiB/B,cAAAA,MAAM,EAAE,EAAzB;AAA6BwC,cAAAA,WAAW,EAAE,EAA1C;AAA8CI,cAAAA,eAAe,EAAE;AAA/D,aAAd;AACAO,YAAAA,UAAU,CAACpB,gBAAD,CAAV,GAA6BqB,WAA7B;AACD;;AACDA,UAAAA,WAAW,CAACpD,MAAZ,CAAmBqD,IAAnB,CAAwBR,KAAxB;AACAO,UAAAA,WAAW,CAACZ,WAAZ,CAAwBa,IAAxB,CAA6BR,KAAK,CAACS,SAAN,EAA7B;;AACA,cAAI,CAACT,KAAK,CAACU,QAAX,EAAqB;AACnBH,YAAAA,WAAW,CAACR,eAAZ,GAA8B,KAA9B;AACD;AACF;AAd2B;AAAA;AAAA;AAAA;AAAA;;AAiB5B,sCAA6BY,MAAM,CAACC,IAAP,CAAYN,UAAZ,CAA7B,kCAAsD;AAAjD,YAAMpB,cAAc,mBAApB;;AACH,YAAI,CAAC,KAAKE,aAAL,CAAmBF,cAAnB,CAAL,EAAyC;AACvC,eAAK2B,SAAL,CAAe7D,EAAf,EAAmBkC,cAAnB;AACD;;AACD,YAAI,CAAC,KAAKd,QAAL,CAAcc,cAAd,CAAL,EAAoC;AAClC,eAAKd,QAAL,CAAcc,cAAd,IAAgCoB,UAAU,CAACpB,cAAD,CAA1C;AACD;AACF;;AACD,wCAA6ByB,MAAM,CAACC,IAAP,CAAY,KAAKxB,aAAjB,CAA7B,qCAA8D;AAAzD,YAAMF,eAAc,qBAApB;;AACH,YAAI,CAACoB,UAAU,CAACpB,eAAD,CAAf,EAAiC;AAC/B,eAAK4B,UAAL,CAAgB5B,eAAhB;AACD;AACF;;AAED,aAAOoB,UAAP;AACD;;;WAED,6BAAoBN,KAApB,EAGE;AACA,UAAOd,cAAP,GAA0Bc,KAAD,CAAgDhC,KAAzE,CAAOkB,cAAP;AACA,UAAOE,aAAP,GAA2C,IAA3C,CAAOA,aAAP;AAAA,UAAsB1B,iBAAtB,GAA2C,IAA3C,CAAsBA,iBAAtB;AACA,aAAO;AAACyB,QAAAA,YAAY,EAAEC,aAAa,CAACF,cAAD,CAA5B;AAA8CxB,QAAAA,iBAAiB,EAAjBA;AAA9C,OAAP;AACD;;;WAED,mBAAgB;AACd,UAAI,KAAKA,iBAAT,EAA4B;AAC1B,aAAKA,iBAAL,CAAuBqD,MAAvB;AACA,aAAKrD,iBAAL,GAAyBsD,SAAzB;AACD;;AACD,WAAK5C,QAAL,GAAgB,EAAhB;;AACA,wCAA6BuC,MAAM,CAACC,IAAP,CAAY,KAAKxB,aAAjB,CAA7B,qCAA8D;AAAzD,YAAMF,cAAc,qBAApB;AACH,aAAK4B,UAAL,CAAgB5B,cAAhB;AACD;;AACD,WAAKE,aAAL,GAAqB,EAArB;AACA,WAAKJ,YAAL,GAAoBgC,SAApB;AACD;;;WAED,mBAAUhE,EAAV,EAAqCkC,cAArC,EAA6D;AAAA;;AAC3D,uBAAwBlC,EAAE,CAACuC,MAA3B;AAAA,UAAO3B,KAAP,cAAOA,KAAP;AAAA,UAAcC,MAAd,cAAcA,MAAd;AACA,UAAMoD,YAAY,GAAG,IAAItD,eAAJ,CAAcX,EAAd,EAAkB;AACrCY,QAAAA,KAAK,EAALA,KADqC;AAErCC,QAAAA,MAAM,EAANA,MAFqC;AAGrCqD,QAAAA,UAAU;AAH2B,OAAlB,CAArB;AAWA,UAAMC,WAAW,GAAG,IAAIC,kBAAJ,CAAiBpE,EAAjB,EAAqB;AAACqE,QAAAA,MAAM,OAAP;AAA+BzD,QAAAA,KAAK,EAALA,KAA/B;AAAsCC,QAAAA,MAAM,EAANA;AAAtC,OAArB,CAApB;AACA,WAAKuB,aAAL,CAAmBF,cAAnB,IAAqC,IAAIoC,iBAAJ,CAAgBtE,EAAhB,EAAoB;AACvDuB,QAAAA,EAAE,sBAAeW,cAAf,CADqD;AAEvDtB,QAAAA,KAAK,EAALA,KAFuD;AAGvDC,QAAAA,MAAM,EAANA,MAHuD;AAIvD0D,QAAAA,WAAW,yEACeN,YADf,sDAEcE,WAFd;AAJ4C,OAApB,CAArC;AASD;;;WAED,oBAAWjC,cAAX,EAAmC;AACjC,UAAMsC,GAAG,GAAG,KAAKpC,aAAL,CAAmBF,cAAnB,CAAZ;;AACA,yCAAyByB,MAAM,CAACc,MAAP,CAAcD,GAAG,CAACD,WAAlB,CAAzB,sCAAwE;AAAnE,YAAMG,UAAU,sBAAhB;AACHA,QAAAA,UAAU,CAACX,MAAX;AACD;;AACDS,MAAAA,GAAG,CAACT,MAAJ;AACA,aAAO,KAAK3B,aAAL,CAAmBF,cAAnB,CAAP;AACD","sourcesContent":["import {Framebuffer, Renderbuffer, Texture2D, cssToDeviceRatio} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport {_deepEqual as deepEqual} from '@deck.gl/core';\nimport type {Effect, Layer, PreRenderOptions, Viewport} from '@deck.gl/core';\nimport CollisionFilterPass from './collision-filter-pass';\nimport MaskEffect, {MaskPreRenderStats} from '../mask/mask-effect';\n// import {debugFBO} from '../utils/debug';\n\ntype CollisionFilterExtensionProps = {\n collisionTestProps?: {};\n collisionGroup: string;\n};\n\n// Factor by which to downscale Collision FBO relative to canvas\nconst DOWNSCALE = 2;\n\ntype RenderInfo = {\n collisionGroup: string;\n layers: Layer<CollisionFilterExtensionProps>[];\n layerBounds: ([number[], number[]] | null)[];\n allLayersLoaded: boolean;\n};\n\nexport default class CollisionFilterEffect implements Effect {\n id = 'collision-filter-effect';\n props = null;\n useInPicking = true;\n order = 1;\n\n private channels: Record<string, RenderInfo> = {};\n private collisionFilterPass?: CollisionFilterPass;\n private collisionFBOs: Record<string, Framebuffer> = {};\n private dummyCollisionMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {\n effects: allEffects,\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n isPicking,\n preRenderStats = {}\n }: PreRenderOptions\n ): void {\n if (!this.dummyCollisionMap) {\n this.dummyCollisionMap = new Texture2D(gl, {width: 1, height: 1});\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return;\n }\n\n const collisionLayers = layers.filter(\n // @ts-ignore\n ({props: {visible, collisionEnabled}}) => visible && collisionEnabled\n ) as Layer<CollisionFilterExtensionProps>[];\n if (collisionLayers.length === 0) {\n this.channels = {};\n return;\n }\n\n if (!this.collisionFilterPass) {\n this.collisionFilterPass = new CollisionFilterPass(gl, {id: 'default-collision-filter'});\n }\n\n // Detect if mask has rendered. TODO: better dependency system for Effects\n const effects = allEffects?.filter(e => e.constructor === MaskEffect);\n const maskEffectRendered = (preRenderStats['mask-effect'] as MaskPreRenderStats)?.didRender;\n\n // Collect layers to render\n const channels = this._groupByCollisionGroup(gl, collisionLayers);\n\n const viewport = viewports[0];\n const viewportChanged =\n !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;\n\n // Resize framebuffers to match canvas\n for (const collisionGroup in channels) {\n const collisionFBO = this.collisionFBOs[collisionGroup];\n const renderInfo = channels[collisionGroup];\n collisionFBO.resize({\n width: gl.canvas.width / DOWNSCALE,\n height: gl.canvas.height / DOWNSCALE\n });\n this._render(renderInfo, {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n }\n\n // debugFBO(this.collisionFBOs[Object.keys(channels)[0]], {minimap: true});\n }\n\n private _render(\n renderInfo: RenderInfo,\n {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n effects: PreRenderOptions['effects'];\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ) {\n const {collisionGroup} = renderInfo;\n const oldRenderInfo = this.channels[collisionGroup];\n if (!oldRenderInfo) {\n return;\n }\n\n const needsRender =\n viewportChanged ||\n // If render info is new\n renderInfo === oldRenderInfo ||\n // If sublayers have changed\n !deepEqual(oldRenderInfo.layers, renderInfo.layers, 0) ||\n // If a sublayer's bounds have been updated\n renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) ||\n // If a sublayer's isLoaded state has been updated\n renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded ||\n // Some prop is in transition\n renderInfo.layers.some(layer => layer.props.transitions);\n\n this.channels[collisionGroup] = renderInfo;\n\n if (needsRender) {\n this.lastViewport = viewport;\n const collisionFBO = this.collisionFBOs[collisionGroup];\n\n // Rerender collision FBO\n this.collisionFilterPass!.renderCollisionMap(collisionFBO, {\n pass: 'collision-filter',\n isPicking: true,\n layers: renderInfo.layers,\n effects,\n layerFilter,\n viewports: viewport ? [viewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n // To avoid feedback loop forming between Framebuffer and active Texture.\n dummyCollisionMap: this.dummyCollisionMap,\n devicePixelRatio: cssToDeviceRatio(collisionFBO.gl) / DOWNSCALE\n }\n });\n }\n }\n\n /**\n * Group layers by collisionGroup\n * Returns a map from collisionGroup to render info\n */\n private _groupByCollisionGroup(\n gl: WebGLRenderingContext,\n collisionLayers: Layer<CollisionFilterExtensionProps>[]\n ): Record<string, RenderInfo> {\n const channelMap = {};\n for (const layer of collisionLayers) {\n const {collisionGroup} = layer.props;\n let channelInfo = channelMap[collisionGroup];\n if (!channelInfo) {\n channelInfo = {collisionGroup, layers: [], layerBounds: [], allLayersLoaded: true};\n channelMap[collisionGroup] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n if (!layer.isLoaded) {\n channelInfo.allLayersLoaded = false;\n }\n }\n\n // Create any new passes and remove any old ones\n for (const collisionGroup of Object.keys(channelMap)) {\n if (!this.collisionFBOs[collisionGroup]) {\n this.createFBO(gl, collisionGroup);\n }\n if (!this.channels[collisionGroup]) {\n this.channels[collisionGroup] = channelMap[collisionGroup];\n }\n }\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n if (!channelMap[collisionGroup]) {\n this.destroyFBO(collisionGroup);\n }\n }\n\n return channelMap;\n }\n\n getModuleParameters(layer: Layer): {\n collisionFBO: Framebuffer;\n dummyCollisionMap: Texture2D;\n } {\n const {collisionGroup} = (layer as Layer<CollisionFilterExtensionProps>).props;\n const {collisionFBOs, dummyCollisionMap} = this;\n return {collisionFBO: collisionFBOs[collisionGroup], dummyCollisionMap};\n }\n\n cleanup(): void {\n if (this.dummyCollisionMap) {\n this.dummyCollisionMap.delete();\n this.dummyCollisionMap = undefined;\n }\n this.channels = {};\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n this.destroyFBO(collisionGroup);\n }\n this.collisionFBOs = {};\n this.lastViewport = undefined;\n }\n\n createFBO(gl: WebGLRenderingContext, collisionGroup: string) {\n const {width, height} = gl.canvas;\n const collisionMap = new Texture2D(gl, {\n width,\n height,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.NEAREST,\n [gl.TEXTURE_MAG_FILTER]: gl.NEAREST,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n const depthBuffer = new Renderbuffer(gl, {format: gl.DEPTH_COMPONENT16, width, height});\n this.collisionFBOs[collisionGroup] = new Framebuffer(gl, {\n id: `Collision-${collisionGroup}`,\n width,\n height,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: collisionMap,\n [gl.DEPTH_ATTACHMENT]: depthBuffer\n }\n });\n }\n\n destroyFBO(collisionGroup: string) {\n const fbo = this.collisionFBOs[collisionGroup];\n for (const attachment of Object.values(fbo.attachments as Texture2D[])) {\n attachment.delete();\n }\n fbo.delete();\n delete this.collisionFBOs[collisionGroup];\n }\n}\n"],"file":"collision-filter-effect.js"}
1
+ {"version":3,"sources":["../../../src/collision-filter/collision-filter-effect.ts"],"names":["DOWNSCALE","CollisionFilterEffect","gl","allEffects","effects","layers","layerFilter","viewports","onViewportActive","views","isPicking","preRenderStats","dummyCollisionMap","Texture2D","width","height","collisionLayers","filter","props","visible","collisionEnabled","length","channels","collisionFilterPass","CollisionFilterPass","id","e","constructor","MaskEffect","maskEffectRendered","didRender","_groupByCollisionGroup","viewport","viewportChanged","lastViewport","equals","collisionGroup","collisionFBO","collisionFBOs","renderInfo","resize","canvas","_render","oldRenderInfo","needsRender","layerBounds","some","b","i","allLayersLoaded","layer","transitions","renderCollisionMap","pass","moduleParameters","devicePixelRatio","channelMap","channelInfo","push","getBounds","isLoaded","Object","keys","createFBO","destroyFBO","delete","undefined","collisionMap","parameters","depthBuffer","Renderbuffer","format","Framebuffer","attachments","fbo","values","attachment"],"mappings":"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","sourcesContent":["import {Framebuffer, Renderbuffer, Texture2D, cssToDeviceRatio} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport {_deepEqual as deepEqual} from '@deck.gl/core';\nimport type {Effect, Layer, PreRenderOptions, Viewport} from '@deck.gl/core';\nimport CollisionFilterPass from './collision-filter-pass';\nimport MaskEffect, {MaskPreRenderStats} from '../mask/mask-effect';\n// import {debugFBO} from '../utils/debug';\n\ntype CollisionFilterExtensionProps = {\n collisionTestProps?: {};\n collisionGroup: string;\n};\n\n// Factor by which to downscale Collision FBO relative to canvas\nconst DOWNSCALE = 2;\n\ntype RenderInfo = {\n collisionGroup: string;\n layers: Layer<CollisionFilterExtensionProps>[];\n layerBounds: ([number[], number[]] | null)[];\n allLayersLoaded: boolean;\n};\n\nexport default class CollisionFilterEffect implements Effect {\n id = 'collision-filter-effect';\n props = null;\n useInPicking = true;\n order = 1;\n\n private channels: Record<string, RenderInfo> = {};\n private collisionFilterPass?: CollisionFilterPass;\n private collisionFBOs: Record<string, Framebuffer> = {};\n private dummyCollisionMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {\n effects: allEffects,\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n isPicking,\n preRenderStats = {}\n }: PreRenderOptions\n ): void {\n if (!this.dummyCollisionMap) {\n this.dummyCollisionMap = new Texture2D(gl, {width: 1, height: 1});\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return;\n }\n\n const collisionLayers = layers.filter(\n // @ts-ignore\n ({props: {visible, collisionEnabled}}) => visible && collisionEnabled\n ) as Layer<CollisionFilterExtensionProps>[];\n if (collisionLayers.length === 0) {\n this.channels = {};\n return;\n }\n\n if (!this.collisionFilterPass) {\n this.collisionFilterPass = new CollisionFilterPass(gl, {id: 'default-collision-filter'});\n }\n\n // Detect if mask has rendered. TODO: better dependency system for Effects\n const effects = allEffects?.filter(e => e.constructor === MaskEffect);\n const maskEffectRendered = (preRenderStats['mask-effect'] as MaskPreRenderStats)?.didRender;\n\n // Collect layers to render\n const channels = this._groupByCollisionGroup(gl, collisionLayers);\n\n const viewport = viewports[0];\n const viewportChanged =\n !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;\n\n // Resize framebuffers to match canvas\n for (const collisionGroup in channels) {\n const collisionFBO = this.collisionFBOs[collisionGroup];\n const renderInfo = channels[collisionGroup];\n collisionFBO.resize({\n width: gl.canvas.width / DOWNSCALE,\n height: gl.canvas.height / DOWNSCALE\n });\n this._render(renderInfo, {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n }\n\n // debugFBO(this.collisionFBOs[Object.keys(channels)[0]], {minimap: true});\n }\n\n private _render(\n renderInfo: RenderInfo,\n {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n effects: PreRenderOptions['effects'];\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ) {\n const {collisionGroup} = renderInfo;\n const oldRenderInfo = this.channels[collisionGroup];\n if (!oldRenderInfo) {\n return;\n }\n\n const needsRender =\n viewportChanged ||\n // If render info is new\n renderInfo === oldRenderInfo ||\n // If sublayers have changed\n !deepEqual(oldRenderInfo.layers, renderInfo.layers, 1) ||\n // If a sublayer's bounds have been updated\n renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) ||\n // If a sublayer's isLoaded state has been updated\n renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded ||\n // Some prop is in transition\n renderInfo.layers.some(layer => layer.props.transitions);\n\n this.channels[collisionGroup] = renderInfo;\n\n if (needsRender) {\n this.lastViewport = viewport;\n const collisionFBO = this.collisionFBOs[collisionGroup];\n\n // Rerender collision FBO\n this.collisionFilterPass!.renderCollisionMap(collisionFBO, {\n pass: 'collision-filter',\n isPicking: true,\n layers: renderInfo.layers,\n effects,\n layerFilter,\n viewports: viewport ? [viewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n // To avoid feedback loop forming between Framebuffer and active Texture.\n dummyCollisionMap: this.dummyCollisionMap,\n devicePixelRatio: cssToDeviceRatio(collisionFBO.gl) / DOWNSCALE\n }\n });\n }\n }\n\n /**\n * Group layers by collisionGroup\n * Returns a map from collisionGroup to render info\n */\n private _groupByCollisionGroup(\n gl: WebGLRenderingContext,\n collisionLayers: Layer<CollisionFilterExtensionProps>[]\n ): Record<string, RenderInfo> {\n const channelMap = {};\n for (const layer of collisionLayers) {\n const {collisionGroup} = layer.props;\n let channelInfo = channelMap[collisionGroup];\n if (!channelInfo) {\n channelInfo = {collisionGroup, layers: [], layerBounds: [], allLayersLoaded: true};\n channelMap[collisionGroup] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n if (!layer.isLoaded) {\n channelInfo.allLayersLoaded = false;\n }\n }\n\n // Create any new passes and remove any old ones\n for (const collisionGroup of Object.keys(channelMap)) {\n if (!this.collisionFBOs[collisionGroup]) {\n this.createFBO(gl, collisionGroup);\n }\n if (!this.channels[collisionGroup]) {\n this.channels[collisionGroup] = channelMap[collisionGroup];\n }\n }\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n if (!channelMap[collisionGroup]) {\n this.destroyFBO(collisionGroup);\n }\n }\n\n return channelMap;\n }\n\n getModuleParameters(layer: Layer): {\n collisionFBO: Framebuffer;\n dummyCollisionMap: Texture2D;\n } {\n const {collisionGroup} = (layer as Layer<CollisionFilterExtensionProps>).props;\n const {collisionFBOs, dummyCollisionMap} = this;\n return {collisionFBO: collisionFBOs[collisionGroup], dummyCollisionMap};\n }\n\n cleanup(): void {\n if (this.dummyCollisionMap) {\n this.dummyCollisionMap.delete();\n this.dummyCollisionMap = undefined;\n }\n this.channels = {};\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n this.destroyFBO(collisionGroup);\n }\n this.collisionFBOs = {};\n this.lastViewport = undefined;\n }\n\n createFBO(gl: WebGLRenderingContext, collisionGroup: string) {\n const {width, height} = gl.canvas;\n const collisionMap = new Texture2D(gl, {\n width,\n height,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.NEAREST,\n [gl.TEXTURE_MAG_FILTER]: gl.NEAREST,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n const depthBuffer = new Renderbuffer(gl, {format: gl.DEPTH_COMPONENT16, width, height});\n this.collisionFBOs[collisionGroup] = new Framebuffer(gl, {\n id: `Collision-${collisionGroup}`,\n width,\n height,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: collisionMap,\n [gl.DEPTH_ATTACHMENT]: depthBuffer\n }\n });\n }\n\n destroyFBO(collisionGroup: string) {\n const fbo = this.collisionFBOs[collisionGroup];\n for (const attachment of Object.values(fbo.attachments as Texture2D[])) {\n attachment.delete();\n }\n fbo.delete();\n delete this.collisionFBOs[collisionGroup];\n }\n}\n"],"file":"collision-filter-effect.js"}
@@ -49,7 +49,7 @@ var defaultProps = {
49
49
  onFilteredItemsChange: {
50
50
  type: 'function',
51
51
  value: null,
52
- compare: false
52
+ optional: true
53
53
  },
54
54
  filterEnabled: true,
55
55
  filterRange: [-1, 1],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/data-filter/data-filter.ts"],"names":["defaultProps","getFilterValue","type","value","onFilteredItemsChange","compare","filterEnabled","filterRange","filterSoftRange","filterTransformSize","filterTransformColor","DATA_TYPE_FROM_SIZE","DataFilterExtension","filterSize","fp64","countItems","Error","extension","opts","modules","shaderModule64","shaderModule","defines","DATAFILTER_TYPE","DATAFILTER_DOUBLE","Boolean","context","attributeManager","getAttributeManager","add","filterValues","size","accessor","shaderAttributes","divisor","instanceFilterValues","gl","useFloatTarget","aggregator","supportsFloatTarget","filterIndices","vertexOffset","normalized","object","index","i","__source","Math","floor","filterPrevIndices","filterFBO","getFramebuffer","filterModel","getModel","getShaders","call","setState","props","oldProps","state","filterNeedsUpdate","attributes","needsUpdate","params","setVertexCount","getNumInstances","framebuffer","color","updateModuleSettings","moduleParameters","setAttributes","getShaderAttributes","draw","parameters","viewport","width","height","count","length","id","delete","LayerExtension"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension} from '@deck.gl/core';\nimport {shaderModule, shaderModule64} from './shader-module';\nimport * as aggregator from './aggregator';\nimport {readPixelsToArray, clear} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/core';\n\nconst defaultProps = {\n getFilterValue: {type: 'accessor', value: 0},\n onFilteredItemsChange: {type: 'function', value: null, compare: false},\n\n filterEnabled: true,\n filterRange: [-1, 1],\n filterSoftRange: null,\n filterTransformSize: true,\n filterTransformColor: true\n};\n\nexport type DataFilterExtensionProps<DataT = any> = {\n /**\n * Accessor to retrieve the value for each object that it will be filtered by.\n * Returns either a number (if `filterSize: 1`) or an array of numbers.\n */\n getFilterValue?: Accessor<DataT, number | number[]>;\n /**\n * Enable/disable the data filter. If the data filter is disabled, all objects are rendered.\n * @default true\n */\n filterEnabled?: boolean;\n /**\n * The [min, max] bounds which defines whether an object should be rendered.\n * If an object's filtered value is within the bounds, the object will be rendered; otherwise it will be hidden.\n * @default [-1, 1]\n */\n filterRange?: [number, number] | [number, number][];\n /**\n * If specified, objects will be faded in/out instead of abruptly shown/hidden.\n * When the filtered value is outside of the bounds defined by `filterSoftRange` but still within the bounds defined by `filterRange`, the object will be rendered as \"faded.\"\n * @default null\n */\n filterSoftRange?: [number, number] | [number, number][] | null;\n /**\n * When an object is \"faded\", manipulate its size so that it appears smaller or thinner. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformSize?: boolean;\n /**\n * When an object is \"faded\", manipulate its opacity so that it appears more translucent. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformColor?: boolean;\n /**\n * Only called if the `countItems` option is enabled.\n */\n onFilteredItemsChange?: (evt: {\n /** The id of the source layer. */\n id: string;\n /** The number of data objects that pass the filter. */\n count: number;\n }) => void;\n};\n\ntype DataFilterExtensionOptions = {\n /**\n * The size of the filter (number of columns to filter by). The data filter can show/hide data based on 1-4 numeric properties of each object.\n * @default 1\n */\n filterSize: number;\n /**\n * Use 64-bit precision instead of 32-bit.\n * @default false\n */\n fp64: boolean;\n /**\n * If `true`, reports the number of filtered objects with the `onFilteredItemsChange` callback.\n * @default `false`.\n */\n countItems: boolean;\n};\n\nconst DATA_TYPE_FROM_SIZE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4'\n};\n\n/** Adds GPU-based data filtering functionalities to layers. It allows the layer to show/hide objects based on user-defined properties. */\nexport default class DataFilterExtension extends LayerExtension<DataFilterExtensionOptions> {\n static defaultProps = defaultProps;\n static extensionName = 'DataFilterExtension';\n\n constructor({\n filterSize = 1,\n fp64 = false,\n countItems = false\n }: Partial<DataFilterExtensionOptions> = {}) {\n if (!DATA_TYPE_FROM_SIZE[filterSize]) {\n throw new Error('filterSize out of range');\n }\n\n super({filterSize, fp64, countItems});\n }\n\n getShaders(this: Layer<DataFilterExtensionProps>, extension: this): any {\n const {filterSize, fp64} = extension.opts;\n\n return {\n modules: [fp64 ? shaderModule64 : shaderModule],\n defines: {\n DATAFILTER_TYPE: DATA_TYPE_FROM_SIZE[filterSize],\n DATAFILTER_DOUBLE: Boolean(fp64)\n }\n };\n }\n\n initializeState(this: Layer<DataFilterExtensionProps>, context: LayerContext, extension: this) {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.add({\n filterValues: {\n size: extension.opts.filterSize,\n type: extension.opts.fp64 ? GL.DOUBLE : GL.FLOAT,\n accessor: 'getFilterValue',\n shaderAttributes: {\n filterValues: {\n divisor: 0\n },\n instanceFilterValues: {\n divisor: 1\n }\n }\n }\n });\n }\n\n const {gl} = this.context;\n if (attributeManager && extension.opts.countItems) {\n const useFloatTarget = aggregator.supportsFloatTarget(gl);\n // This attribute is needed for variable-width data, e.g. Path, SolidPolygon, Text\n // The vertex shader checks if a vertex has the same \"index\" as the previous vertex\n // so that we only write one count cross multiple vertices of the same object\n attributeManager.add({\n filterIndices: {\n size: useFloatTarget ? 1 : 2,\n vertexOffset: 1,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: (object, {index}) => {\n const i = object && object.__source ? object.__source.index : index;\n return useFloatTarget ? (i + 1) % 255 : [(i + 1) % 255, Math.floor(i / 255) % 255];\n },\n shaderAttributes: {\n filterPrevIndices: {\n vertexOffset: 0\n },\n filterIndices: {\n vertexOffset: 1\n }\n }\n }\n });\n\n const filterFBO = aggregator.getFramebuffer(gl, useFloatTarget);\n const filterModel = aggregator.getModel(\n gl,\n extension.getShaders.call(this, extension),\n useFloatTarget\n );\n this.setState({filterFBO, filterModel});\n }\n }\n\n updateState(\n this: Layer<DataFilterExtensionProps>,\n {props, oldProps}: UpdateParameters<Layer<DataFilterExtensionProps>>\n ) {\n if (this.state.filterModel) {\n const attributeManager = this.getAttributeManager();\n const filterNeedsUpdate =\n // attributeManager must be defined for filterModel to be set\n attributeManager!.attributes.filterValues.needsUpdate() ||\n props.filterEnabled !== oldProps.filterEnabled ||\n props.filterRange !== oldProps.filterRange ||\n props.filterSoftRange !== oldProps.filterSoftRange;\n if (filterNeedsUpdate) {\n this.setState({filterNeedsUpdate});\n }\n }\n }\n\n draw(this: Layer<DataFilterExtensionProps>, params: any, extension: this) {\n const {filterFBO, filterModel, filterNeedsUpdate} = this.state;\n const {onFilteredItemsChange} = this.props;\n if (filterNeedsUpdate && onFilteredItemsChange && filterModel) {\n const {\n attributes: {filterValues, filterIndices}\n } = this.getAttributeManager()!;\n filterModel.setVertexCount(this.getNumInstances());\n\n const {gl} = this.context;\n clear(gl, {framebuffer: filterFBO, color: [0, 0, 0, 0]});\n\n filterModel\n .updateModuleSettings(params.moduleParameters)\n .setAttributes({\n ...filterValues.getShaderAttributes(),\n ...(filterIndices && filterIndices.getShaderAttributes())\n })\n .draw({\n framebuffer: filterFBO,\n parameters: {\n ...aggregator.parameters,\n viewport: [0, 0, filterFBO.width, filterFBO.height]\n }\n });\n const color = readPixelsToArray(filterFBO);\n let count = 0;\n for (let i = 0; i < color.length; i++) {\n count += color[i];\n }\n onFilteredItemsChange({id: this.id, count});\n\n this.state.filterNeedsUpdate = false;\n }\n }\n\n finalizeState(this: Layer<DataFilterExtensionProps>) {\n const {filterFBO, filterModel} = this.state;\n if (filterFBO) {\n filterFBO.color.delete();\n filterFBO.delete();\n filterModel.delete();\n }\n }\n}\n"],"file":"data-filter.js"}
1
+ {"version":3,"sources":["../../../src/data-filter/data-filter.ts"],"names":["defaultProps","getFilterValue","type","value","onFilteredItemsChange","optional","filterEnabled","filterRange","filterSoftRange","filterTransformSize","filterTransformColor","DATA_TYPE_FROM_SIZE","DataFilterExtension","filterSize","fp64","countItems","Error","extension","opts","modules","shaderModule64","shaderModule","defines","DATAFILTER_TYPE","DATAFILTER_DOUBLE","Boolean","context","attributeManager","getAttributeManager","add","filterValues","size","accessor","shaderAttributes","divisor","instanceFilterValues","gl","useFloatTarget","aggregator","supportsFloatTarget","filterIndices","vertexOffset","normalized","object","index","i","__source","Math","floor","filterPrevIndices","filterFBO","getFramebuffer","filterModel","getModel","getShaders","call","setState","props","oldProps","state","filterNeedsUpdate","attributes","needsUpdate","params","setVertexCount","getNumInstances","framebuffer","color","updateModuleSettings","moduleParameters","setAttributes","getShaderAttributes","draw","parameters","viewport","width","height","count","length","id","delete","LayerExtension"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension} from '@deck.gl/core';\nimport {shaderModule, shaderModule64} from './shader-module';\nimport * as aggregator from './aggregator';\nimport {readPixelsToArray, clear} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/core';\n\nconst defaultProps = {\n getFilterValue: {type: 'accessor', value: 0},\n onFilteredItemsChange: {type: 'function', value: null, optional: true},\n\n filterEnabled: true,\n filterRange: [-1, 1],\n filterSoftRange: null,\n filterTransformSize: true,\n filterTransformColor: true\n};\n\nexport type DataFilterExtensionProps<DataT = any> = {\n /**\n * Accessor to retrieve the value for each object that it will be filtered by.\n * Returns either a number (if `filterSize: 1`) or an array of numbers.\n */\n getFilterValue?: Accessor<DataT, number | number[]>;\n /**\n * Enable/disable the data filter. If the data filter is disabled, all objects are rendered.\n * @default true\n */\n filterEnabled?: boolean;\n /**\n * The [min, max] bounds which defines whether an object should be rendered.\n * If an object's filtered value is within the bounds, the object will be rendered; otherwise it will be hidden.\n * @default [-1, 1]\n */\n filterRange?: [number, number] | [number, number][];\n /**\n * If specified, objects will be faded in/out instead of abruptly shown/hidden.\n * When the filtered value is outside of the bounds defined by `filterSoftRange` but still within the bounds defined by `filterRange`, the object will be rendered as \"faded.\"\n * @default null\n */\n filterSoftRange?: [number, number] | [number, number][] | null;\n /**\n * When an object is \"faded\", manipulate its size so that it appears smaller or thinner. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformSize?: boolean;\n /**\n * When an object is \"faded\", manipulate its opacity so that it appears more translucent. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformColor?: boolean;\n /**\n * Only called if the `countItems` option is enabled.\n */\n onFilteredItemsChange?: (evt: {\n /** The id of the source layer. */\n id: string;\n /** The number of data objects that pass the filter. */\n count: number;\n }) => void;\n};\n\ntype DataFilterExtensionOptions = {\n /**\n * The size of the filter (number of columns to filter by). The data filter can show/hide data based on 1-4 numeric properties of each object.\n * @default 1\n */\n filterSize: number;\n /**\n * Use 64-bit precision instead of 32-bit.\n * @default false\n */\n fp64: boolean;\n /**\n * If `true`, reports the number of filtered objects with the `onFilteredItemsChange` callback.\n * @default `false`.\n */\n countItems: boolean;\n};\n\nconst DATA_TYPE_FROM_SIZE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4'\n};\n\n/** Adds GPU-based data filtering functionalities to layers. It allows the layer to show/hide objects based on user-defined properties. */\nexport default class DataFilterExtension extends LayerExtension<DataFilterExtensionOptions> {\n static defaultProps = defaultProps;\n static extensionName = 'DataFilterExtension';\n\n constructor({\n filterSize = 1,\n fp64 = false,\n countItems = false\n }: Partial<DataFilterExtensionOptions> = {}) {\n if (!DATA_TYPE_FROM_SIZE[filterSize]) {\n throw new Error('filterSize out of range');\n }\n\n super({filterSize, fp64, countItems});\n }\n\n getShaders(this: Layer<DataFilterExtensionProps>, extension: this): any {\n const {filterSize, fp64} = extension.opts;\n\n return {\n modules: [fp64 ? shaderModule64 : shaderModule],\n defines: {\n DATAFILTER_TYPE: DATA_TYPE_FROM_SIZE[filterSize],\n DATAFILTER_DOUBLE: Boolean(fp64)\n }\n };\n }\n\n initializeState(this: Layer<DataFilterExtensionProps>, context: LayerContext, extension: this) {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.add({\n filterValues: {\n size: extension.opts.filterSize,\n type: extension.opts.fp64 ? GL.DOUBLE : GL.FLOAT,\n accessor: 'getFilterValue',\n shaderAttributes: {\n filterValues: {\n divisor: 0\n },\n instanceFilterValues: {\n divisor: 1\n }\n }\n }\n });\n }\n\n const {gl} = this.context;\n if (attributeManager && extension.opts.countItems) {\n const useFloatTarget = aggregator.supportsFloatTarget(gl);\n // This attribute is needed for variable-width data, e.g. Path, SolidPolygon, Text\n // The vertex shader checks if a vertex has the same \"index\" as the previous vertex\n // so that we only write one count cross multiple vertices of the same object\n attributeManager.add({\n filterIndices: {\n size: useFloatTarget ? 1 : 2,\n vertexOffset: 1,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: (object, {index}) => {\n const i = object && object.__source ? object.__source.index : index;\n return useFloatTarget ? (i + 1) % 255 : [(i + 1) % 255, Math.floor(i / 255) % 255];\n },\n shaderAttributes: {\n filterPrevIndices: {\n vertexOffset: 0\n },\n filterIndices: {\n vertexOffset: 1\n }\n }\n }\n });\n\n const filterFBO = aggregator.getFramebuffer(gl, useFloatTarget);\n const filterModel = aggregator.getModel(\n gl,\n extension.getShaders.call(this, extension),\n useFloatTarget\n );\n this.setState({filterFBO, filterModel});\n }\n }\n\n updateState(\n this: Layer<DataFilterExtensionProps>,\n {props, oldProps}: UpdateParameters<Layer<DataFilterExtensionProps>>\n ) {\n if (this.state.filterModel) {\n const attributeManager = this.getAttributeManager();\n const filterNeedsUpdate =\n // attributeManager must be defined for filterModel to be set\n attributeManager!.attributes.filterValues.needsUpdate() ||\n props.filterEnabled !== oldProps.filterEnabled ||\n props.filterRange !== oldProps.filterRange ||\n props.filterSoftRange !== oldProps.filterSoftRange;\n if (filterNeedsUpdate) {\n this.setState({filterNeedsUpdate});\n }\n }\n }\n\n draw(this: Layer<DataFilterExtensionProps>, params: any, extension: this) {\n const {filterFBO, filterModel, filterNeedsUpdate} = this.state;\n const {onFilteredItemsChange} = this.props;\n if (filterNeedsUpdate && onFilteredItemsChange && filterModel) {\n const {\n attributes: {filterValues, filterIndices}\n } = this.getAttributeManager()!;\n filterModel.setVertexCount(this.getNumInstances());\n\n const {gl} = this.context;\n clear(gl, {framebuffer: filterFBO, color: [0, 0, 0, 0]});\n\n filterModel\n .updateModuleSettings(params.moduleParameters)\n .setAttributes({\n ...filterValues.getShaderAttributes(),\n ...(filterIndices && filterIndices.getShaderAttributes())\n })\n .draw({\n framebuffer: filterFBO,\n parameters: {\n ...aggregator.parameters,\n viewport: [0, 0, filterFBO.width, filterFBO.height]\n }\n });\n const color = readPixelsToArray(filterFBO);\n let count = 0;\n for (let i = 0; i < color.length; i++) {\n count += color[i];\n }\n onFilteredItemsChange({id: this.id, count});\n\n this.state.filterNeedsUpdate = false;\n }\n }\n\n finalizeState(this: Layer<DataFilterExtensionProps>) {\n const {filterFBO, filterModel} = this.state;\n if (filterFBO) {\n filterFBO.color.delete();\n filterFBO.delete();\n filterModel.delete();\n }\n }\n}\n"],"file":"data-filter.js"}
@@ -133,7 +133,9 @@ var MaskEffect = function () {
133
133
  return didRender;
134
134
  }
135
135
 
136
- var maskChanged = channelInfo === oldChannelInfo || oldChannelInfo.layers.length !== channelInfo.layers.length || channelInfo.layerBounds.some(function (b, i) {
136
+ var maskChanged = channelInfo === oldChannelInfo || channelInfo.layers.length !== oldChannelInfo.layers.length || channelInfo.layers.some(function (layer, i) {
137
+ return layer !== oldChannelInfo.layers[i] || layer.props.transitions;
138
+ }) || channelInfo.layerBounds.some(function (b, i) {
137
139
  return b !== oldChannelInfo.layerBounds[i];
138
140
  });
139
141
  channelInfo.bounds = oldChannelInfo.bounds;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mask/mask-effect.ts"],"names":["MaskEffect","gl","layers","layerFilter","viewports","onViewportActive","views","isPicking","didRender","dummyMaskMap","Texture2D","width","height","maskLayers","filter","l","props","visible","operation","includes","length","masks","channels","maskPass","MaskPass","id","maskMap","channelMap","_sortMaskChannels","viewport","viewportChanged","lastViewport","equals","resolution","undefined","log","warn","maskId","result","_renderChannel","channelInfo","oldChannelInfo","index","maskChanged","layerBounds","some","b","i","bounds","maskBounds","maskViewport","border","getBounds","render","pass","channel","moduleParameters","devicePixelRatio","coordinateOrigin","coordinateSystem","channelCount","layer","root","findIndex","c","push","maskChannels","delete"],"mappings":"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","sourcesContent":["import {Layer, Viewport, Effect, PreRenderOptions, CoordinateSystem, log} from '@deck.gl/core';\nimport {Texture2D} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport MaskPass from './mask-pass';\nimport {joinLayerBounds, getRenderBounds, makeViewport, Bounds} from '../utils/projection-utils';\n// import {debugFBO} from '../utils/debug';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: Bounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: Bounds | null;\n maskBounds: Bounds;\n layerBounds: Bounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\nexport type MaskPreRenderStats = {\n didRender: boolean;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n order = 0;\n\n private dummyMaskMap?: Texture2D;\n private channels: (Channel | null)[] = [];\n private masks: Record<string, Mask> | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views, isPicking}: PreRenderOptions\n ): MaskPreRenderStats {\n let didRender = false;\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return {didRender};\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation.includes('mask'));\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return {didRender};\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(gl, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n if (viewport.resolution !== undefined) {\n log.warn('MaskExtension is not supported in GlobeView')();\n return {didRender};\n }\n\n for (const maskId in channelMap) {\n const result = this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n didRender ||= result;\n }\n\n // debugFBO(this.maskMap, {opaque: true});\n return {didRender};\n }\n\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ): boolean {\n let didRender = false;\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return didRender;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n oldChannelInfo.layers.length !== channelInfo.layers.length ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n const layerBounds = joinLayerBounds(channelInfo.layers, viewport);\n channelInfo.bounds = layerBounds && getRenderBounds(layerBounds, viewport);\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport =\n layerBounds &&\n makeViewport({\n bounds: channelInfo.bounds!,\n viewport,\n width: maskMap.width,\n height: maskMap.height,\n border: 1\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n\n didRender = true;\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n\n return didRender;\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record<string, Channel> {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture2D;\n maskChannels: Record<string, Mask> | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap : this.dummyMaskMap,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n"],"file":"mask-effect.js"}
1
+ {"version":3,"sources":["../../../src/mask/mask-effect.ts"],"names":["MaskEffect","gl","layers","layerFilter","viewports","onViewportActive","views","isPicking","didRender","dummyMaskMap","Texture2D","width","height","maskLayers","filter","l","props","visible","operation","includes","length","masks","channels","maskPass","MaskPass","id","maskMap","channelMap","_sortMaskChannels","viewport","viewportChanged","lastViewport","equals","resolution","undefined","log","warn","maskId","result","_renderChannel","channelInfo","oldChannelInfo","index","maskChanged","some","layer","i","transitions","layerBounds","b","bounds","maskBounds","maskViewport","border","getBounds","render","pass","channel","moduleParameters","devicePixelRatio","coordinateOrigin","coordinateSystem","channelCount","root","findIndex","c","push","maskChannels","delete"],"mappings":"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","sourcesContent":["import {Layer, Viewport, Effect, PreRenderOptions, CoordinateSystem, log} from '@deck.gl/core';\nimport {Texture2D} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport MaskPass from './mask-pass';\nimport {joinLayerBounds, getRenderBounds, makeViewport, Bounds} from '../utils/projection-utils';\n// import {debugFBO} from '../utils/debug';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: Bounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: Bounds | null;\n maskBounds: Bounds;\n layerBounds: Bounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\nexport type MaskPreRenderStats = {\n didRender: boolean;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n order = 0;\n\n private dummyMaskMap?: Texture2D;\n private channels: (Channel | null)[] = [];\n private masks: Record<string, Mask> | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views, isPicking}: PreRenderOptions\n ): MaskPreRenderStats {\n let didRender = false;\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return {didRender};\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation.includes('mask'));\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return {didRender};\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(gl, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n if (viewport.resolution !== undefined) {\n log.warn('MaskExtension is not supported in GlobeView')();\n return {didRender};\n }\n\n for (const maskId in channelMap) {\n const result = this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n didRender ||= result;\n }\n\n // debugFBO(this.maskMap, {opaque: true});\n return {didRender};\n }\n\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ): boolean {\n let didRender = false;\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return didRender;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n channelInfo.layers.length !== oldChannelInfo.layers.length ||\n channelInfo.layers.some(\n (layer, i) =>\n // Layer instance is updated\n // Layer props might have changed\n // Undetermined props could have an effect on the output geometry of a mask layer,\n // for example getRadius+updateTriggers, radiusScale, modelMatrix\n layer !== oldChannelInfo.layers[i] ||\n // Some prop is in transition\n layer.props.transitions\n ) ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n const layerBounds = joinLayerBounds(channelInfo.layers, viewport);\n channelInfo.bounds = layerBounds && getRenderBounds(layerBounds, viewport);\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport =\n layerBounds &&\n makeViewport({\n bounds: channelInfo.bounds!,\n viewport,\n width: maskMap.width,\n height: maskMap.height,\n border: 1\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n\n didRender = true;\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n\n return didRender;\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record<string, Channel> {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture2D;\n maskChannels: Record<string, Mask> | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap : this.dummyMaskMap,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n"],"file":"mask-effect.js"}
@@ -111,7 +111,7 @@ export default class CollisionFilterEffect {
111
111
  return;
112
112
  }
113
113
 
114
- const needsRender = viewportChanged || renderInfo === oldRenderInfo || !deepEqual(oldRenderInfo.layers, renderInfo.layers, 0) || renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) || renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded || renderInfo.layers.some(layer => layer.props.transitions);
114
+ const needsRender = viewportChanged || renderInfo === oldRenderInfo || !deepEqual(oldRenderInfo.layers, renderInfo.layers, 1) || renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) || renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded || renderInfo.layers.some(layer => layer.props.transitions);
115
115
  this.channels[collisionGroup] = renderInfo;
116
116
 
117
117
  if (needsRender) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collision-filter/collision-filter-effect.ts"],"names":["Framebuffer","Renderbuffer","Texture2D","cssToDeviceRatio","equals","_deepEqual","deepEqual","CollisionFilterPass","MaskEffect","DOWNSCALE","CollisionFilterEffect","preRender","gl","effects","allEffects","layers","layerFilter","viewports","onViewportActive","views","isPicking","preRenderStats","dummyCollisionMap","width","height","collisionLayers","filter","props","visible","collisionEnabled","length","channels","collisionFilterPass","id","e","constructor","maskEffectRendered","didRender","_groupByCollisionGroup","viewport","viewportChanged","lastViewport","collisionGroup","collisionFBO","collisionFBOs","renderInfo","resize","canvas","_render","oldRenderInfo","needsRender","layerBounds","some","b","i","allLayersLoaded","layer","transitions","renderCollisionMap","pass","moduleParameters","devicePixelRatio","channelMap","channelInfo","push","getBounds","isLoaded","Object","keys","createFBO","destroyFBO","getModuleParameters","cleanup","delete","undefined","collisionMap","parameters","depthBuffer","format","attachments","fbo","attachment","values"],"mappings":"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","sourcesContent":["import {Framebuffer, Renderbuffer, Texture2D, cssToDeviceRatio} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport {_deepEqual as deepEqual} from '@deck.gl/core';\nimport type {Effect, Layer, PreRenderOptions, Viewport} from '@deck.gl/core';\nimport CollisionFilterPass from './collision-filter-pass';\nimport MaskEffect, {MaskPreRenderStats} from '../mask/mask-effect';\n// import {debugFBO} from '../utils/debug';\n\ntype CollisionFilterExtensionProps = {\n collisionTestProps?: {};\n collisionGroup: string;\n};\n\n// Factor by which to downscale Collision FBO relative to canvas\nconst DOWNSCALE = 2;\n\ntype RenderInfo = {\n collisionGroup: string;\n layers: Layer<CollisionFilterExtensionProps>[];\n layerBounds: ([number[], number[]] | null)[];\n allLayersLoaded: boolean;\n};\n\nexport default class CollisionFilterEffect implements Effect {\n id = 'collision-filter-effect';\n props = null;\n useInPicking = true;\n order = 1;\n\n private channels: Record<string, RenderInfo> = {};\n private collisionFilterPass?: CollisionFilterPass;\n private collisionFBOs: Record<string, Framebuffer> = {};\n private dummyCollisionMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {\n effects: allEffects,\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n isPicking,\n preRenderStats = {}\n }: PreRenderOptions\n ): void {\n if (!this.dummyCollisionMap) {\n this.dummyCollisionMap = new Texture2D(gl, {width: 1, height: 1});\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return;\n }\n\n const collisionLayers = layers.filter(\n // @ts-ignore\n ({props: {visible, collisionEnabled}}) => visible && collisionEnabled\n ) as Layer<CollisionFilterExtensionProps>[];\n if (collisionLayers.length === 0) {\n this.channels = {};\n return;\n }\n\n if (!this.collisionFilterPass) {\n this.collisionFilterPass = new CollisionFilterPass(gl, {id: 'default-collision-filter'});\n }\n\n // Detect if mask has rendered. TODO: better dependency system for Effects\n const effects = allEffects?.filter(e => e.constructor === MaskEffect);\n const maskEffectRendered = (preRenderStats['mask-effect'] as MaskPreRenderStats)?.didRender;\n\n // Collect layers to render\n const channels = this._groupByCollisionGroup(gl, collisionLayers);\n\n const viewport = viewports[0];\n const viewportChanged =\n !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;\n\n // Resize framebuffers to match canvas\n for (const collisionGroup in channels) {\n const collisionFBO = this.collisionFBOs[collisionGroup];\n const renderInfo = channels[collisionGroup];\n collisionFBO.resize({\n width: gl.canvas.width / DOWNSCALE,\n height: gl.canvas.height / DOWNSCALE\n });\n this._render(renderInfo, {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n }\n\n // debugFBO(this.collisionFBOs[Object.keys(channels)[0]], {minimap: true});\n }\n\n private _render(\n renderInfo: RenderInfo,\n {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n effects: PreRenderOptions['effects'];\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ) {\n const {collisionGroup} = renderInfo;\n const oldRenderInfo = this.channels[collisionGroup];\n if (!oldRenderInfo) {\n return;\n }\n\n const needsRender =\n viewportChanged ||\n // If render info is new\n renderInfo === oldRenderInfo ||\n // If sublayers have changed\n !deepEqual(oldRenderInfo.layers, renderInfo.layers, 0) ||\n // If a sublayer's bounds have been updated\n renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) ||\n // If a sublayer's isLoaded state has been updated\n renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded ||\n // Some prop is in transition\n renderInfo.layers.some(layer => layer.props.transitions);\n\n this.channels[collisionGroup] = renderInfo;\n\n if (needsRender) {\n this.lastViewport = viewport;\n const collisionFBO = this.collisionFBOs[collisionGroup];\n\n // Rerender collision FBO\n this.collisionFilterPass!.renderCollisionMap(collisionFBO, {\n pass: 'collision-filter',\n isPicking: true,\n layers: renderInfo.layers,\n effects,\n layerFilter,\n viewports: viewport ? [viewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n // To avoid feedback loop forming between Framebuffer and active Texture.\n dummyCollisionMap: this.dummyCollisionMap,\n devicePixelRatio: cssToDeviceRatio(collisionFBO.gl) / DOWNSCALE\n }\n });\n }\n }\n\n /**\n * Group layers by collisionGroup\n * Returns a map from collisionGroup to render info\n */\n private _groupByCollisionGroup(\n gl: WebGLRenderingContext,\n collisionLayers: Layer<CollisionFilterExtensionProps>[]\n ): Record<string, RenderInfo> {\n const channelMap = {};\n for (const layer of collisionLayers) {\n const {collisionGroup} = layer.props;\n let channelInfo = channelMap[collisionGroup];\n if (!channelInfo) {\n channelInfo = {collisionGroup, layers: [], layerBounds: [], allLayersLoaded: true};\n channelMap[collisionGroup] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n if (!layer.isLoaded) {\n channelInfo.allLayersLoaded = false;\n }\n }\n\n // Create any new passes and remove any old ones\n for (const collisionGroup of Object.keys(channelMap)) {\n if (!this.collisionFBOs[collisionGroup]) {\n this.createFBO(gl, collisionGroup);\n }\n if (!this.channels[collisionGroup]) {\n this.channels[collisionGroup] = channelMap[collisionGroup];\n }\n }\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n if (!channelMap[collisionGroup]) {\n this.destroyFBO(collisionGroup);\n }\n }\n\n return channelMap;\n }\n\n getModuleParameters(layer: Layer): {\n collisionFBO: Framebuffer;\n dummyCollisionMap: Texture2D;\n } {\n const {collisionGroup} = (layer as Layer<CollisionFilterExtensionProps>).props;\n const {collisionFBOs, dummyCollisionMap} = this;\n return {collisionFBO: collisionFBOs[collisionGroup], dummyCollisionMap};\n }\n\n cleanup(): void {\n if (this.dummyCollisionMap) {\n this.dummyCollisionMap.delete();\n this.dummyCollisionMap = undefined;\n }\n this.channels = {};\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n this.destroyFBO(collisionGroup);\n }\n this.collisionFBOs = {};\n this.lastViewport = undefined;\n }\n\n createFBO(gl: WebGLRenderingContext, collisionGroup: string) {\n const {width, height} = gl.canvas;\n const collisionMap = new Texture2D(gl, {\n width,\n height,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.NEAREST,\n [gl.TEXTURE_MAG_FILTER]: gl.NEAREST,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n const depthBuffer = new Renderbuffer(gl, {format: gl.DEPTH_COMPONENT16, width, height});\n this.collisionFBOs[collisionGroup] = new Framebuffer(gl, {\n id: `Collision-${collisionGroup}`,\n width,\n height,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: collisionMap,\n [gl.DEPTH_ATTACHMENT]: depthBuffer\n }\n });\n }\n\n destroyFBO(collisionGroup: string) {\n const fbo = this.collisionFBOs[collisionGroup];\n for (const attachment of Object.values(fbo.attachments as Texture2D[])) {\n attachment.delete();\n }\n fbo.delete();\n delete this.collisionFBOs[collisionGroup];\n }\n}\n"],"file":"collision-filter-effect.js"}
1
+ {"version":3,"sources":["../../../src/collision-filter/collision-filter-effect.ts"],"names":["Framebuffer","Renderbuffer","Texture2D","cssToDeviceRatio","equals","_deepEqual","deepEqual","CollisionFilterPass","MaskEffect","DOWNSCALE","CollisionFilterEffect","preRender","gl","effects","allEffects","layers","layerFilter","viewports","onViewportActive","views","isPicking","preRenderStats","dummyCollisionMap","width","height","collisionLayers","filter","props","visible","collisionEnabled","length","channels","collisionFilterPass","id","e","constructor","maskEffectRendered","didRender","_groupByCollisionGroup","viewport","viewportChanged","lastViewport","collisionGroup","collisionFBO","collisionFBOs","renderInfo","resize","canvas","_render","oldRenderInfo","needsRender","layerBounds","some","b","i","allLayersLoaded","layer","transitions","renderCollisionMap","pass","moduleParameters","devicePixelRatio","channelMap","channelInfo","push","getBounds","isLoaded","Object","keys","createFBO","destroyFBO","getModuleParameters","cleanup","delete","undefined","collisionMap","parameters","depthBuffer","format","attachments","fbo","attachment","values"],"mappings":"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","sourcesContent":["import {Framebuffer, Renderbuffer, Texture2D, cssToDeviceRatio} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport {_deepEqual as deepEqual} from '@deck.gl/core';\nimport type {Effect, Layer, PreRenderOptions, Viewport} from '@deck.gl/core';\nimport CollisionFilterPass from './collision-filter-pass';\nimport MaskEffect, {MaskPreRenderStats} from '../mask/mask-effect';\n// import {debugFBO} from '../utils/debug';\n\ntype CollisionFilterExtensionProps = {\n collisionTestProps?: {};\n collisionGroup: string;\n};\n\n// Factor by which to downscale Collision FBO relative to canvas\nconst DOWNSCALE = 2;\n\ntype RenderInfo = {\n collisionGroup: string;\n layers: Layer<CollisionFilterExtensionProps>[];\n layerBounds: ([number[], number[]] | null)[];\n allLayersLoaded: boolean;\n};\n\nexport default class CollisionFilterEffect implements Effect {\n id = 'collision-filter-effect';\n props = null;\n useInPicking = true;\n order = 1;\n\n private channels: Record<string, RenderInfo> = {};\n private collisionFilterPass?: CollisionFilterPass;\n private collisionFBOs: Record<string, Framebuffer> = {};\n private dummyCollisionMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {\n effects: allEffects,\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n isPicking,\n preRenderStats = {}\n }: PreRenderOptions\n ): void {\n if (!this.dummyCollisionMap) {\n this.dummyCollisionMap = new Texture2D(gl, {width: 1, height: 1});\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return;\n }\n\n const collisionLayers = layers.filter(\n // @ts-ignore\n ({props: {visible, collisionEnabled}}) => visible && collisionEnabled\n ) as Layer<CollisionFilterExtensionProps>[];\n if (collisionLayers.length === 0) {\n this.channels = {};\n return;\n }\n\n if (!this.collisionFilterPass) {\n this.collisionFilterPass = new CollisionFilterPass(gl, {id: 'default-collision-filter'});\n }\n\n // Detect if mask has rendered. TODO: better dependency system for Effects\n const effects = allEffects?.filter(e => e.constructor === MaskEffect);\n const maskEffectRendered = (preRenderStats['mask-effect'] as MaskPreRenderStats)?.didRender;\n\n // Collect layers to render\n const channels = this._groupByCollisionGroup(gl, collisionLayers);\n\n const viewport = viewports[0];\n const viewportChanged =\n !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;\n\n // Resize framebuffers to match canvas\n for (const collisionGroup in channels) {\n const collisionFBO = this.collisionFBOs[collisionGroup];\n const renderInfo = channels[collisionGroup];\n collisionFBO.resize({\n width: gl.canvas.width / DOWNSCALE,\n height: gl.canvas.height / DOWNSCALE\n });\n this._render(renderInfo, {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n }\n\n // debugFBO(this.collisionFBOs[Object.keys(channels)[0]], {minimap: true});\n }\n\n private _render(\n renderInfo: RenderInfo,\n {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n effects: PreRenderOptions['effects'];\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ) {\n const {collisionGroup} = renderInfo;\n const oldRenderInfo = this.channels[collisionGroup];\n if (!oldRenderInfo) {\n return;\n }\n\n const needsRender =\n viewportChanged ||\n // If render info is new\n renderInfo === oldRenderInfo ||\n // If sublayers have changed\n !deepEqual(oldRenderInfo.layers, renderInfo.layers, 1) ||\n // If a sublayer's bounds have been updated\n renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) ||\n // If a sublayer's isLoaded state has been updated\n renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded ||\n // Some prop is in transition\n renderInfo.layers.some(layer => layer.props.transitions);\n\n this.channels[collisionGroup] = renderInfo;\n\n if (needsRender) {\n this.lastViewport = viewport;\n const collisionFBO = this.collisionFBOs[collisionGroup];\n\n // Rerender collision FBO\n this.collisionFilterPass!.renderCollisionMap(collisionFBO, {\n pass: 'collision-filter',\n isPicking: true,\n layers: renderInfo.layers,\n effects,\n layerFilter,\n viewports: viewport ? [viewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n // To avoid feedback loop forming between Framebuffer and active Texture.\n dummyCollisionMap: this.dummyCollisionMap,\n devicePixelRatio: cssToDeviceRatio(collisionFBO.gl) / DOWNSCALE\n }\n });\n }\n }\n\n /**\n * Group layers by collisionGroup\n * Returns a map from collisionGroup to render info\n */\n private _groupByCollisionGroup(\n gl: WebGLRenderingContext,\n collisionLayers: Layer<CollisionFilterExtensionProps>[]\n ): Record<string, RenderInfo> {\n const channelMap = {};\n for (const layer of collisionLayers) {\n const {collisionGroup} = layer.props;\n let channelInfo = channelMap[collisionGroup];\n if (!channelInfo) {\n channelInfo = {collisionGroup, layers: [], layerBounds: [], allLayersLoaded: true};\n channelMap[collisionGroup] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n if (!layer.isLoaded) {\n channelInfo.allLayersLoaded = false;\n }\n }\n\n // Create any new passes and remove any old ones\n for (const collisionGroup of Object.keys(channelMap)) {\n if (!this.collisionFBOs[collisionGroup]) {\n this.createFBO(gl, collisionGroup);\n }\n if (!this.channels[collisionGroup]) {\n this.channels[collisionGroup] = channelMap[collisionGroup];\n }\n }\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n if (!channelMap[collisionGroup]) {\n this.destroyFBO(collisionGroup);\n }\n }\n\n return channelMap;\n }\n\n getModuleParameters(layer: Layer): {\n collisionFBO: Framebuffer;\n dummyCollisionMap: Texture2D;\n } {\n const {collisionGroup} = (layer as Layer<CollisionFilterExtensionProps>).props;\n const {collisionFBOs, dummyCollisionMap} = this;\n return {collisionFBO: collisionFBOs[collisionGroup], dummyCollisionMap};\n }\n\n cleanup(): void {\n if (this.dummyCollisionMap) {\n this.dummyCollisionMap.delete();\n this.dummyCollisionMap = undefined;\n }\n this.channels = {};\n for (const collisionGroup of Object.keys(this.collisionFBOs)) {\n this.destroyFBO(collisionGroup);\n }\n this.collisionFBOs = {};\n this.lastViewport = undefined;\n }\n\n createFBO(gl: WebGLRenderingContext, collisionGroup: string) {\n const {width, height} = gl.canvas;\n const collisionMap = new Texture2D(gl, {\n width,\n height,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.NEAREST,\n [gl.TEXTURE_MAG_FILTER]: gl.NEAREST,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n const depthBuffer = new Renderbuffer(gl, {format: gl.DEPTH_COMPONENT16, width, height});\n this.collisionFBOs[collisionGroup] = new Framebuffer(gl, {\n id: `Collision-${collisionGroup}`,\n width,\n height,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: collisionMap,\n [gl.DEPTH_ATTACHMENT]: depthBuffer\n }\n });\n }\n\n destroyFBO(collisionGroup: string) {\n const fbo = this.collisionFBOs[collisionGroup];\n for (const attachment of Object.values(fbo.attachments as Texture2D[])) {\n attachment.delete();\n }\n fbo.delete();\n delete this.collisionFBOs[collisionGroup];\n }\n}\n"],"file":"collision-filter-effect.js"}
@@ -11,7 +11,7 @@ const defaultProps = {
11
11
  onFilteredItemsChange: {
12
12
  type: 'function',
13
13
  value: null,
14
- compare: false
14
+ optional: true
15
15
  },
16
16
  filterEnabled: true,
17
17
  filterRange: [-1, 1],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/data-filter/data-filter.ts"],"names":["LayerExtension","shaderModule","shaderModule64","aggregator","readPixelsToArray","clear","defaultProps","getFilterValue","type","value","onFilteredItemsChange","compare","filterEnabled","filterRange","filterSoftRange","filterTransformSize","filterTransformColor","DATA_TYPE_FROM_SIZE","DataFilterExtension","constructor","filterSize","fp64","countItems","Error","getShaders","extension","opts","modules","defines","DATAFILTER_TYPE","DATAFILTER_DOUBLE","Boolean","initializeState","context","attributeManager","getAttributeManager","add","filterValues","size","accessor","shaderAttributes","divisor","instanceFilterValues","gl","useFloatTarget","supportsFloatTarget","filterIndices","vertexOffset","normalized","object","index","i","__source","Math","floor","filterPrevIndices","filterFBO","getFramebuffer","filterModel","getModel","call","setState","updateState","props","oldProps","state","filterNeedsUpdate","attributes","needsUpdate","draw","params","setVertexCount","getNumInstances","framebuffer","color","updateModuleSettings","moduleParameters","setAttributes","getShaderAttributes","parameters","viewport","width","height","count","length","id","finalizeState","delete"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension} from '@deck.gl/core';\nimport {shaderModule, shaderModule64} from './shader-module';\nimport * as aggregator from './aggregator';\nimport {readPixelsToArray, clear} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/core';\n\nconst defaultProps = {\n getFilterValue: {type: 'accessor', value: 0},\n onFilteredItemsChange: {type: 'function', value: null, compare: false},\n\n filterEnabled: true,\n filterRange: [-1, 1],\n filterSoftRange: null,\n filterTransformSize: true,\n filterTransformColor: true\n};\n\nexport type DataFilterExtensionProps<DataT = any> = {\n /**\n * Accessor to retrieve the value for each object that it will be filtered by.\n * Returns either a number (if `filterSize: 1`) or an array of numbers.\n */\n getFilterValue?: Accessor<DataT, number | number[]>;\n /**\n * Enable/disable the data filter. If the data filter is disabled, all objects are rendered.\n * @default true\n */\n filterEnabled?: boolean;\n /**\n * The [min, max] bounds which defines whether an object should be rendered.\n * If an object's filtered value is within the bounds, the object will be rendered; otherwise it will be hidden.\n * @default [-1, 1]\n */\n filterRange?: [number, number] | [number, number][];\n /**\n * If specified, objects will be faded in/out instead of abruptly shown/hidden.\n * When the filtered value is outside of the bounds defined by `filterSoftRange` but still within the bounds defined by `filterRange`, the object will be rendered as \"faded.\"\n * @default null\n */\n filterSoftRange?: [number, number] | [number, number][] | null;\n /**\n * When an object is \"faded\", manipulate its size so that it appears smaller or thinner. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformSize?: boolean;\n /**\n * When an object is \"faded\", manipulate its opacity so that it appears more translucent. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformColor?: boolean;\n /**\n * Only called if the `countItems` option is enabled.\n */\n onFilteredItemsChange?: (evt: {\n /** The id of the source layer. */\n id: string;\n /** The number of data objects that pass the filter. */\n count: number;\n }) => void;\n};\n\ntype DataFilterExtensionOptions = {\n /**\n * The size of the filter (number of columns to filter by). The data filter can show/hide data based on 1-4 numeric properties of each object.\n * @default 1\n */\n filterSize: number;\n /**\n * Use 64-bit precision instead of 32-bit.\n * @default false\n */\n fp64: boolean;\n /**\n * If `true`, reports the number of filtered objects with the `onFilteredItemsChange` callback.\n * @default `false`.\n */\n countItems: boolean;\n};\n\nconst DATA_TYPE_FROM_SIZE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4'\n};\n\n/** Adds GPU-based data filtering functionalities to layers. It allows the layer to show/hide objects based on user-defined properties. */\nexport default class DataFilterExtension extends LayerExtension<DataFilterExtensionOptions> {\n static defaultProps = defaultProps;\n static extensionName = 'DataFilterExtension';\n\n constructor({\n filterSize = 1,\n fp64 = false,\n countItems = false\n }: Partial<DataFilterExtensionOptions> = {}) {\n if (!DATA_TYPE_FROM_SIZE[filterSize]) {\n throw new Error('filterSize out of range');\n }\n\n super({filterSize, fp64, countItems});\n }\n\n getShaders(this: Layer<DataFilterExtensionProps>, extension: this): any {\n const {filterSize, fp64} = extension.opts;\n\n return {\n modules: [fp64 ? shaderModule64 : shaderModule],\n defines: {\n DATAFILTER_TYPE: DATA_TYPE_FROM_SIZE[filterSize],\n DATAFILTER_DOUBLE: Boolean(fp64)\n }\n };\n }\n\n initializeState(this: Layer<DataFilterExtensionProps>, context: LayerContext, extension: this) {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.add({\n filterValues: {\n size: extension.opts.filterSize,\n type: extension.opts.fp64 ? GL.DOUBLE : GL.FLOAT,\n accessor: 'getFilterValue',\n shaderAttributes: {\n filterValues: {\n divisor: 0\n },\n instanceFilterValues: {\n divisor: 1\n }\n }\n }\n });\n }\n\n const {gl} = this.context;\n if (attributeManager && extension.opts.countItems) {\n const useFloatTarget = aggregator.supportsFloatTarget(gl);\n // This attribute is needed for variable-width data, e.g. Path, SolidPolygon, Text\n // The vertex shader checks if a vertex has the same \"index\" as the previous vertex\n // so that we only write one count cross multiple vertices of the same object\n attributeManager.add({\n filterIndices: {\n size: useFloatTarget ? 1 : 2,\n vertexOffset: 1,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: (object, {index}) => {\n const i = object && object.__source ? object.__source.index : index;\n return useFloatTarget ? (i + 1) % 255 : [(i + 1) % 255, Math.floor(i / 255) % 255];\n },\n shaderAttributes: {\n filterPrevIndices: {\n vertexOffset: 0\n },\n filterIndices: {\n vertexOffset: 1\n }\n }\n }\n });\n\n const filterFBO = aggregator.getFramebuffer(gl, useFloatTarget);\n const filterModel = aggregator.getModel(\n gl,\n extension.getShaders.call(this, extension),\n useFloatTarget\n );\n this.setState({filterFBO, filterModel});\n }\n }\n\n updateState(\n this: Layer<DataFilterExtensionProps>,\n {props, oldProps}: UpdateParameters<Layer<DataFilterExtensionProps>>\n ) {\n if (this.state.filterModel) {\n const attributeManager = this.getAttributeManager();\n const filterNeedsUpdate =\n // attributeManager must be defined for filterModel to be set\n attributeManager!.attributes.filterValues.needsUpdate() ||\n props.filterEnabled !== oldProps.filterEnabled ||\n props.filterRange !== oldProps.filterRange ||\n props.filterSoftRange !== oldProps.filterSoftRange;\n if (filterNeedsUpdate) {\n this.setState({filterNeedsUpdate});\n }\n }\n }\n\n draw(this: Layer<DataFilterExtensionProps>, params: any, extension: this) {\n const {filterFBO, filterModel, filterNeedsUpdate} = this.state;\n const {onFilteredItemsChange} = this.props;\n if (filterNeedsUpdate && onFilteredItemsChange && filterModel) {\n const {\n attributes: {filterValues, filterIndices}\n } = this.getAttributeManager()!;\n filterModel.setVertexCount(this.getNumInstances());\n\n const {gl} = this.context;\n clear(gl, {framebuffer: filterFBO, color: [0, 0, 0, 0]});\n\n filterModel\n .updateModuleSettings(params.moduleParameters)\n .setAttributes({\n ...filterValues.getShaderAttributes(),\n ...(filterIndices && filterIndices.getShaderAttributes())\n })\n .draw({\n framebuffer: filterFBO,\n parameters: {\n ...aggregator.parameters,\n viewport: [0, 0, filterFBO.width, filterFBO.height]\n }\n });\n const color = readPixelsToArray(filterFBO);\n let count = 0;\n for (let i = 0; i < color.length; i++) {\n count += color[i];\n }\n onFilteredItemsChange({id: this.id, count});\n\n this.state.filterNeedsUpdate = false;\n }\n }\n\n finalizeState(this: Layer<DataFilterExtensionProps>) {\n const {filterFBO, filterModel} = this.state;\n if (filterFBO) {\n filterFBO.color.delete();\n filterFBO.delete();\n filterModel.delete();\n }\n }\n}\n"],"file":"data-filter.js"}
1
+ {"version":3,"sources":["../../../src/data-filter/data-filter.ts"],"names":["LayerExtension","shaderModule","shaderModule64","aggregator","readPixelsToArray","clear","defaultProps","getFilterValue","type","value","onFilteredItemsChange","optional","filterEnabled","filterRange","filterSoftRange","filterTransformSize","filterTransformColor","DATA_TYPE_FROM_SIZE","DataFilterExtension","constructor","filterSize","fp64","countItems","Error","getShaders","extension","opts","modules","defines","DATAFILTER_TYPE","DATAFILTER_DOUBLE","Boolean","initializeState","context","attributeManager","getAttributeManager","add","filterValues","size","accessor","shaderAttributes","divisor","instanceFilterValues","gl","useFloatTarget","supportsFloatTarget","filterIndices","vertexOffset","normalized","object","index","i","__source","Math","floor","filterPrevIndices","filterFBO","getFramebuffer","filterModel","getModel","call","setState","updateState","props","oldProps","state","filterNeedsUpdate","attributes","needsUpdate","draw","params","setVertexCount","getNumInstances","framebuffer","color","updateModuleSettings","moduleParameters","setAttributes","getShaderAttributes","parameters","viewport","width","height","count","length","id","finalizeState","delete"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension} from '@deck.gl/core';\nimport {shaderModule, shaderModule64} from './shader-module';\nimport * as aggregator from './aggregator';\nimport {readPixelsToArray, clear} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/core';\n\nconst defaultProps = {\n getFilterValue: {type: 'accessor', value: 0},\n onFilteredItemsChange: {type: 'function', value: null, optional: true},\n\n filterEnabled: true,\n filterRange: [-1, 1],\n filterSoftRange: null,\n filterTransformSize: true,\n filterTransformColor: true\n};\n\nexport type DataFilterExtensionProps<DataT = any> = {\n /**\n * Accessor to retrieve the value for each object that it will be filtered by.\n * Returns either a number (if `filterSize: 1`) or an array of numbers.\n */\n getFilterValue?: Accessor<DataT, number | number[]>;\n /**\n * Enable/disable the data filter. If the data filter is disabled, all objects are rendered.\n * @default true\n */\n filterEnabled?: boolean;\n /**\n * The [min, max] bounds which defines whether an object should be rendered.\n * If an object's filtered value is within the bounds, the object will be rendered; otherwise it will be hidden.\n * @default [-1, 1]\n */\n filterRange?: [number, number] | [number, number][];\n /**\n * If specified, objects will be faded in/out instead of abruptly shown/hidden.\n * When the filtered value is outside of the bounds defined by `filterSoftRange` but still within the bounds defined by `filterRange`, the object will be rendered as \"faded.\"\n * @default null\n */\n filterSoftRange?: [number, number] | [number, number][] | null;\n /**\n * When an object is \"faded\", manipulate its size so that it appears smaller or thinner. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformSize?: boolean;\n /**\n * When an object is \"faded\", manipulate its opacity so that it appears more translucent. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformColor?: boolean;\n /**\n * Only called if the `countItems` option is enabled.\n */\n onFilteredItemsChange?: (evt: {\n /** The id of the source layer. */\n id: string;\n /** The number of data objects that pass the filter. */\n count: number;\n }) => void;\n};\n\ntype DataFilterExtensionOptions = {\n /**\n * The size of the filter (number of columns to filter by). The data filter can show/hide data based on 1-4 numeric properties of each object.\n * @default 1\n */\n filterSize: number;\n /**\n * Use 64-bit precision instead of 32-bit.\n * @default false\n */\n fp64: boolean;\n /**\n * If `true`, reports the number of filtered objects with the `onFilteredItemsChange` callback.\n * @default `false`.\n */\n countItems: boolean;\n};\n\nconst DATA_TYPE_FROM_SIZE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4'\n};\n\n/** Adds GPU-based data filtering functionalities to layers. It allows the layer to show/hide objects based on user-defined properties. */\nexport default class DataFilterExtension extends LayerExtension<DataFilterExtensionOptions> {\n static defaultProps = defaultProps;\n static extensionName = 'DataFilterExtension';\n\n constructor({\n filterSize = 1,\n fp64 = false,\n countItems = false\n }: Partial<DataFilterExtensionOptions> = {}) {\n if (!DATA_TYPE_FROM_SIZE[filterSize]) {\n throw new Error('filterSize out of range');\n }\n\n super({filterSize, fp64, countItems});\n }\n\n getShaders(this: Layer<DataFilterExtensionProps>, extension: this): any {\n const {filterSize, fp64} = extension.opts;\n\n return {\n modules: [fp64 ? shaderModule64 : shaderModule],\n defines: {\n DATAFILTER_TYPE: DATA_TYPE_FROM_SIZE[filterSize],\n DATAFILTER_DOUBLE: Boolean(fp64)\n }\n };\n }\n\n initializeState(this: Layer<DataFilterExtensionProps>, context: LayerContext, extension: this) {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.add({\n filterValues: {\n size: extension.opts.filterSize,\n type: extension.opts.fp64 ? GL.DOUBLE : GL.FLOAT,\n accessor: 'getFilterValue',\n shaderAttributes: {\n filterValues: {\n divisor: 0\n },\n instanceFilterValues: {\n divisor: 1\n }\n }\n }\n });\n }\n\n const {gl} = this.context;\n if (attributeManager && extension.opts.countItems) {\n const useFloatTarget = aggregator.supportsFloatTarget(gl);\n // This attribute is needed for variable-width data, e.g. Path, SolidPolygon, Text\n // The vertex shader checks if a vertex has the same \"index\" as the previous vertex\n // so that we only write one count cross multiple vertices of the same object\n attributeManager.add({\n filterIndices: {\n size: useFloatTarget ? 1 : 2,\n vertexOffset: 1,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: (object, {index}) => {\n const i = object && object.__source ? object.__source.index : index;\n return useFloatTarget ? (i + 1) % 255 : [(i + 1) % 255, Math.floor(i / 255) % 255];\n },\n shaderAttributes: {\n filterPrevIndices: {\n vertexOffset: 0\n },\n filterIndices: {\n vertexOffset: 1\n }\n }\n }\n });\n\n const filterFBO = aggregator.getFramebuffer(gl, useFloatTarget);\n const filterModel = aggregator.getModel(\n gl,\n extension.getShaders.call(this, extension),\n useFloatTarget\n );\n this.setState({filterFBO, filterModel});\n }\n }\n\n updateState(\n this: Layer<DataFilterExtensionProps>,\n {props, oldProps}: UpdateParameters<Layer<DataFilterExtensionProps>>\n ) {\n if (this.state.filterModel) {\n const attributeManager = this.getAttributeManager();\n const filterNeedsUpdate =\n // attributeManager must be defined for filterModel to be set\n attributeManager!.attributes.filterValues.needsUpdate() ||\n props.filterEnabled !== oldProps.filterEnabled ||\n props.filterRange !== oldProps.filterRange ||\n props.filterSoftRange !== oldProps.filterSoftRange;\n if (filterNeedsUpdate) {\n this.setState({filterNeedsUpdate});\n }\n }\n }\n\n draw(this: Layer<DataFilterExtensionProps>, params: any, extension: this) {\n const {filterFBO, filterModel, filterNeedsUpdate} = this.state;\n const {onFilteredItemsChange} = this.props;\n if (filterNeedsUpdate && onFilteredItemsChange && filterModel) {\n const {\n attributes: {filterValues, filterIndices}\n } = this.getAttributeManager()!;\n filterModel.setVertexCount(this.getNumInstances());\n\n const {gl} = this.context;\n clear(gl, {framebuffer: filterFBO, color: [0, 0, 0, 0]});\n\n filterModel\n .updateModuleSettings(params.moduleParameters)\n .setAttributes({\n ...filterValues.getShaderAttributes(),\n ...(filterIndices && filterIndices.getShaderAttributes())\n })\n .draw({\n framebuffer: filterFBO,\n parameters: {\n ...aggregator.parameters,\n viewport: [0, 0, filterFBO.width, filterFBO.height]\n }\n });\n const color = readPixelsToArray(filterFBO);\n let count = 0;\n for (let i = 0; i < color.length; i++) {\n count += color[i];\n }\n onFilteredItemsChange({id: this.id, count});\n\n this.state.filterNeedsUpdate = false;\n }\n }\n\n finalizeState(this: Layer<DataFilterExtensionProps>) {\n const {filterFBO, filterModel} = this.state;\n if (filterFBO) {\n filterFBO.color.delete();\n filterFBO.delete();\n filterModel.delete();\n }\n }\n}\n"],"file":"data-filter.js"}
@@ -112,7 +112,7 @@ export default class MaskEffect {
112
112
  return didRender;
113
113
  }
114
114
 
115
- const maskChanged = channelInfo === oldChannelInfo || oldChannelInfo.layers.length !== channelInfo.layers.length || channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);
115
+ const maskChanged = channelInfo === oldChannelInfo || channelInfo.layers.length !== oldChannelInfo.layers.length || channelInfo.layers.some((layer, i) => layer !== oldChannelInfo.layers[i] || layer.props.transitions) || channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);
116
116
  channelInfo.bounds = oldChannelInfo.bounds;
117
117
  channelInfo.maskBounds = oldChannelInfo.maskBounds;
118
118
  this.channels[channelInfo.index] = channelInfo;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mask/mask-effect.ts"],"names":["log","Texture2D","equals","MaskPass","joinLayerBounds","getRenderBounds","makeViewport","MaskEffect","preRender","gl","layers","layerFilter","viewports","onViewportActive","views","isPicking","didRender","dummyMaskMap","width","height","maskLayers","filter","l","props","visible","operation","includes","length","masks","channels","maskPass","id","maskMap","channelMap","_sortMaskChannels","viewport","viewportChanged","lastViewport","resolution","undefined","warn","maskId","result","_renderChannel","channelInfo","oldChannelInfo","index","maskChanged","layerBounds","some","b","i","bounds","maskBounds","maskViewport","border","getBounds","render","pass","channel","moduleParameters","devicePixelRatio","coordinateOrigin","coordinateSystem","channelCount","layer","root","findIndex","c","push","getModuleParameters","maskChannels","cleanup","delete"],"mappings":"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","sourcesContent":["import {Layer, Viewport, Effect, PreRenderOptions, CoordinateSystem, log} from '@deck.gl/core';\nimport {Texture2D} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport MaskPass from './mask-pass';\nimport {joinLayerBounds, getRenderBounds, makeViewport, Bounds} from '../utils/projection-utils';\n// import {debugFBO} from '../utils/debug';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: Bounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: Bounds | null;\n maskBounds: Bounds;\n layerBounds: Bounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\nexport type MaskPreRenderStats = {\n didRender: boolean;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n order = 0;\n\n private dummyMaskMap?: Texture2D;\n private channels: (Channel | null)[] = [];\n private masks: Record<string, Mask> | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views, isPicking}: PreRenderOptions\n ): MaskPreRenderStats {\n let didRender = false;\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return {didRender};\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation.includes('mask'));\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return {didRender};\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(gl, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n if (viewport.resolution !== undefined) {\n log.warn('MaskExtension is not supported in GlobeView')();\n return {didRender};\n }\n\n for (const maskId in channelMap) {\n const result = this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n didRender ||= result;\n }\n\n // debugFBO(this.maskMap, {opaque: true});\n return {didRender};\n }\n\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ): boolean {\n let didRender = false;\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return didRender;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n oldChannelInfo.layers.length !== channelInfo.layers.length ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n const layerBounds = joinLayerBounds(channelInfo.layers, viewport);\n channelInfo.bounds = layerBounds && getRenderBounds(layerBounds, viewport);\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport =\n layerBounds &&\n makeViewport({\n bounds: channelInfo.bounds!,\n viewport,\n width: maskMap.width,\n height: maskMap.height,\n border: 1\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n\n didRender = true;\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n\n return didRender;\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record<string, Channel> {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture2D;\n maskChannels: Record<string, Mask> | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap : this.dummyMaskMap,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n"],"file":"mask-effect.js"}
1
+ {"version":3,"sources":["../../../src/mask/mask-effect.ts"],"names":["log","Texture2D","equals","MaskPass","joinLayerBounds","getRenderBounds","makeViewport","MaskEffect","preRender","gl","layers","layerFilter","viewports","onViewportActive","views","isPicking","didRender","dummyMaskMap","width","height","maskLayers","filter","l","props","visible","operation","includes","length","masks","channels","maskPass","id","maskMap","channelMap","_sortMaskChannels","viewport","viewportChanged","lastViewport","resolution","undefined","warn","maskId","result","_renderChannel","channelInfo","oldChannelInfo","index","maskChanged","some","layer","i","transitions","layerBounds","b","bounds","maskBounds","maskViewport","border","getBounds","render","pass","channel","moduleParameters","devicePixelRatio","coordinateOrigin","coordinateSystem","channelCount","root","findIndex","c","push","getModuleParameters","maskChannels","cleanup","delete"],"mappings":"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","sourcesContent":["import {Layer, Viewport, Effect, PreRenderOptions, CoordinateSystem, log} from '@deck.gl/core';\nimport {Texture2D} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport MaskPass from './mask-pass';\nimport {joinLayerBounds, getRenderBounds, makeViewport, Bounds} from '../utils/projection-utils';\n// import {debugFBO} from '../utils/debug';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: Bounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: Bounds | null;\n maskBounds: Bounds;\n layerBounds: Bounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\nexport type MaskPreRenderStats = {\n didRender: boolean;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n order = 0;\n\n private dummyMaskMap?: Texture2D;\n private channels: (Channel | null)[] = [];\n private masks: Record<string, Mask> | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views, isPicking}: PreRenderOptions\n ): MaskPreRenderStats {\n let didRender = false;\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return {didRender};\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation.includes('mask'));\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return {didRender};\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(gl, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n if (viewport.resolution !== undefined) {\n log.warn('MaskExtension is not supported in GlobeView')();\n return {didRender};\n }\n\n for (const maskId in channelMap) {\n const result = this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n didRender ||= result;\n }\n\n // debugFBO(this.maskMap, {opaque: true});\n return {didRender};\n }\n\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ): boolean {\n let didRender = false;\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return didRender;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n channelInfo.layers.length !== oldChannelInfo.layers.length ||\n channelInfo.layers.some(\n (layer, i) =>\n // Layer instance is updated\n // Layer props might have changed\n // Undetermined props could have an effect on the output geometry of a mask layer,\n // for example getRadius+updateTriggers, radiusScale, modelMatrix\n layer !== oldChannelInfo.layers[i] ||\n // Some prop is in transition\n layer.props.transitions\n ) ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n const layerBounds = joinLayerBounds(channelInfo.layers, viewport);\n channelInfo.bounds = layerBounds && getRenderBounds(layerBounds, viewport);\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport =\n layerBounds &&\n makeViewport({\n bounds: channelInfo.bounds!,\n viewport,\n width: maskMap.width,\n height: maskMap.height,\n border: 1\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n\n didRender = true;\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n\n return didRender;\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record<string, Channel> {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture2D;\n maskChannels: Record<string, Mask> | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap : this.dummyMaskMap,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n"],"file":"mask-effect.js"}
package/dist.min.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var deck=(()=>{var Ti=Object.create;var oe=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var Mi=Object.getOwnPropertyNames;var Ai=Object.getPrototypeOf,Ri=Object.prototype.hasOwnProperty;var O=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports),Si=(t,r)=>{for(var e in r)oe(t,e,{get:r[e],enumerable:!0})},ie=(t,r,e,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Mi(r))!Ri.call(t,i)&&i!==e&&oe(t,i,{get:()=>r[i],enumerable:!(n=wi(r,i))||n.enumerable});return t},j=(t,r,e)=>(ie(t,r,"default"),e&&ie(e,r,"default")),u=(t,r,e)=>(e=t!=null?Ti(Ai(t)):{},ie(r||!t||!t.__esModule?oe(e,"default",{value:t,enumerable:!0}):e,t)),Fi=t=>ie(oe({},"__esModule",{value:!0}),t);var h=O((Ma,ht)=>{ht.exports=globalThis.deck});var x=O((Ra,gt)=>{function ki(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}gt.exports=ki});var b=O((Sa,xt)=>{function Pt(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function Ci(t,r,e){return r&&Pt(t.prototype,r),e&&Pt(t,e),t}xt.exports=Ci});var bt=O((Fa,Ne)=>{function Le(t,r){return Ne.exports=Le=Object.setPrototypeOf||function(n,i){return n.__proto__=i,n},Le(t,r)}Ne.exports=Le});var w=O((ka,Ot)=>{var Ii=bt();function Li(t,r){if(typeof r!="function"&&r!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),r&&Ii(t,r)}Ot.exports=Li});var Et=O((Ca,se)=>{function ae(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?se.exports=ae=function(e){return typeof e}:se.exports=ae=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ae(t)}se.exports=ae});var fe=O((Ia,Tt)=>{function Ni(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}Tt.exports=Ni});var M=O((La,wt)=>{var Bi=Et(),Di=fe();function ji(t,r){return r&&(Bi(r)==="object"||typeof r=="function")?r:Di(t)}wt.exports=ji});var T=O((Na,De)=>{function Be(t){return De.exports=Be=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Be(t)}De.exports=Be});var g=O((Ba,Mt)=>{function Vi(t,r,e){return r in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}Mt.exports=Vi});var R=O((Ua,Gt)=>{Gt.exports=globalThis.luma});var ir=O((Wa,nr)=>{function ro(t){if(Array.isArray(t))return t}nr.exports=ro});var ar=O((Ha,or)=>{function no(t,r){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]"){var e=[],n=!0,i=!1,o=void 0;try{for(var a=t[Symbol.iterator](),s;!(n=(s=a.next()).done)&&(e.push(s.value),!(r&&e.length===r));n=!0);}catch(f){i=!0,o=f}finally{try{!n&&a.return!=null&&a.return()}finally{if(i)throw o}}return e}}or.exports=no});var fr=O((Ka,sr)=>{function io(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}sr.exports=io});var qe=O((Ya,lr)=>{var oo=ir(),ao=ar(),so=fr();function fo(t,r){return oo(t)||ao(t,r)||so()}lr.exports=fo});var Jr=O((Zs,Xr)=>{var Go=T();function Wo(t,r){for(;!Object.prototype.hasOwnProperty.call(t,r)&&(t=Go(t),t!==null););return t}Xr.exports=Wo});var rt=O((Xs,be)=>{var Ho=Jr();function xe(t,r,e){return typeof Reflect<"u"&&Reflect.get?be.exports=xe=Reflect.get:be.exports=xe=function(i,o,a){var s=Ho(i,o);if(s){var f=Object.getOwnPropertyDescriptor(s,o);return f.get?f.get.call(a):f.value}},xe(t,r,e||t)}be.exports=xe});var re={};Si(re,{BrushingExtension:()=>le,ClipExtension:()=>Pe,CollisionFilterExtension:()=>we,DataFilterExtension:()=>ve,FillStyleExtension:()=>ge,Fp64Extension:()=>$e,MaskExtension:()=>Me,PathStyleExtension:()=>he,_TerrainExtension:()=>Ce,project64:()=>me});var C={},yt=u(h());j(C,u(h()));if(!yt.Layer)throw new Error("@deck.gl/core is not found");j(re,C);var St=u(x()),Ft=u(b()),kt=u(w()),Ct=u(M()),je=u(T()),Ve=u(g()),It=u(h());var At=u(h()),zi=`
1
+ "use strict";var deck=(()=>{var Ti=Object.create;var oe=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var Mi=Object.getOwnPropertyNames;var Ai=Object.getPrototypeOf,Ri=Object.prototype.hasOwnProperty;var O=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports),Si=(t,r)=>{for(var e in r)oe(t,e,{get:r[e],enumerable:!0})},ie=(t,r,e,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Mi(r))!Ri.call(t,i)&&i!==e&&oe(t,i,{get:()=>r[i],enumerable:!(n=wi(r,i))||n.enumerable});return t},j=(t,r,e)=>(ie(t,r,"default"),e&&ie(e,r,"default")),u=(t,r,e)=>(e=t!=null?Ti(Ai(t)):{},ie(r||!t||!t.__esModule?oe(e,"default",{value:t,enumerable:!0}):e,t)),Fi=t=>ie(oe({},"__esModule",{value:!0}),t);var y=O((Ma,ht)=>{ht.exports=globalThis.deck});var x=O((Ra,gt)=>{function ki(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}gt.exports=ki});var b=O((Sa,xt)=>{function Pt(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function Ci(t,r,e){return r&&Pt(t.prototype,r),e&&Pt(t,e),t}xt.exports=Ci});var bt=O((Fa,Ne)=>{function Le(t,r){return Ne.exports=Le=Object.setPrototypeOf||function(n,i){return n.__proto__=i,n},Le(t,r)}Ne.exports=Le});var w=O((ka,Ot)=>{var Ii=bt();function Li(t,r){if(typeof r!="function"&&r!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),r&&Ii(t,r)}Ot.exports=Li});var Et=O((Ca,se)=>{function ae(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?se.exports=ae=function(e){return typeof e}:se.exports=ae=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ae(t)}se.exports=ae});var fe=O((Ia,Tt)=>{function Ni(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}Tt.exports=Ni});var M=O((La,wt)=>{var Bi=Et(),Di=fe();function ji(t,r){return r&&(Bi(r)==="object"||typeof r=="function")?r:Di(t)}wt.exports=ji});var T=O((Na,De)=>{function Be(t){return De.exports=Be=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Be(t)}De.exports=Be});var P=O((Ba,Mt)=>{function Vi(t,r,e){return r in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}Mt.exports=Vi});var R=O((Ua,Gt)=>{Gt.exports=globalThis.luma});var ir=O((Wa,nr)=>{function ro(t){if(Array.isArray(t))return t}nr.exports=ro});var ar=O((Ha,or)=>{function no(t,r){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]"){var e=[],n=!0,i=!1,o=void 0;try{for(var a=t[Symbol.iterator](),s;!(n=(s=a.next()).done)&&(e.push(s.value),!(r&&e.length===r));n=!0);}catch(f){i=!0,o=f}finally{try{!n&&a.return!=null&&a.return()}finally{if(i)throw o}}return e}}or.exports=no});var fr=O((Ka,sr)=>{function io(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}sr.exports=io});var qe=O((Ya,lr)=>{var oo=ir(),ao=ar(),so=fr();function fo(t,r){return oo(t)||ao(t,r)||so()}lr.exports=fo});var Jr=O((Zs,Xr)=>{var Go=T();function Wo(t,r){for(;!Object.prototype.hasOwnProperty.call(t,r)&&(t=Go(t),t!==null););return t}Xr.exports=Wo});var rt=O((Xs,be)=>{var Ho=Jr();function xe(t,r,e){return typeof Reflect<"u"&&Reflect.get?be.exports=xe=Reflect.get:be.exports=xe=function(i,o,a){var s=Ho(i,o);if(s){var f=Object.getOwnPropertyDescriptor(s,o);return f.get?f.get.call(a):f.value}},xe(t,r,e||t)}be.exports=xe});var re={};Si(re,{BrushingExtension:()=>le,ClipExtension:()=>Pe,CollisionFilterExtension:()=>we,DataFilterExtension:()=>ve,FillStyleExtension:()=>ge,Fp64Extension:()=>$e,MaskExtension:()=>Me,PathStyleExtension:()=>he,_TerrainExtension:()=>Ce,project64:()=>me});var C={},yt=u(y());j(C,u(y()));if(!yt.Layer)throw new Error("@deck.gl/core is not found");j(re,C);var St=u(x()),Ft=u(b()),kt=u(w()),Ct=u(M()),je=u(T()),Ve=u(P()),It=u(y());var At=u(y()),zi=`
2
2
  uniform bool brushing_enabled;
3
3
  uniform int brushing_target;
4
4
  uniform vec2 brushing_mousePos;
@@ -61,7 +61,7 @@
61
61
  if (brushing_enabled && brushing_isVisible < 0.5) {
62
62
  discard;
63
63
  }
64
- `},Rt={name:"brushing",dependencies:[At.project],vs:zi,fs:Ui,inject:Gi,getUniforms:function(r){if(!r||!("viewport"in r))return{};var e=r.brushingEnabled,n=e===void 0?!0:e,i=r.brushingRadius,o=i===void 0?1e4:i,a=r.brushingTarget,s=a===void 0?"source":a,f=r.mousePosition,l=r.viewport;return{brushing_enabled:Boolean(n&&f&&l.containsPixel(f)),brushing_radius:o,brushing_target:qi[s]||0,brushing_mousePos:f?l.unproject([f.x-l.x,f.y-l.y]):[0,0]}}};function Wi(t){var r=Hi();return function(){var n=(0,je.default)(t),i;if(r){var o=(0,je.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Ct.default)(this,i)}}function Hi(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Ki={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},le=function(t){(0,kt.default)(e,t);var r=Wi(e);function e(){return(0,St.default)(this,e),r.apply(this,arguments)}return(0,Ft.default)(e,[{key:"getShaders",value:function(){return{modules:[Rt]}}},{key:"initializeState",value:function(i,o){var a=this,s=this.getAttributeManager();s&&s.add({brushingTargets:{size:2,accessor:"getBrushingTarget",shaderAttributes:{brushingTargets:{divisor:0},instanceBrushingTargets:{divisor:1}}}}),this.state.onMouseMove=function(){var f;(f=a.getCurrentLayer())===null||f===void 0||f.setNeedsRedraw()},i.deck&&i.deck.eventManager.on({pointermove:this.state.onMouseMove,pointerleave:this.state.onMouseMove})}},{key:"finalizeState",value:function(i,o){i.deck&&i.deck.eventManager.off({pointermove:this.state.onMouseMove,pointerleave:this.state.onMouseMove})}}]),e}(It.LayerExtension);(0,Ve.default)(le,"defaultProps",Ki);(0,Ve.default)(le,"extensionName","BrushingExtension");var Jt=u(x()),Qt=u(b()),er=u(w()),tr=u(M()),Ue=u(T()),ce=u(g()),rr=u(h());var Bt=u(g());function Lt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Nt(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Lt(Object(e),!0).forEach(function(n){(0,Bt.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Lt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}var Dt=`
64
+ `},Rt={name:"brushing",dependencies:[At.project],vs:zi,fs:Ui,inject:Gi,getUniforms:function(r){if(!r||!("viewport"in r))return{};var e=r.brushingEnabled,n=e===void 0?!0:e,i=r.brushingRadius,o=i===void 0?1e4:i,a=r.brushingTarget,s=a===void 0?"source":a,f=r.mousePosition,l=r.viewport;return{brushing_enabled:Boolean(n&&f&&l.containsPixel(f)),brushing_radius:o,brushing_target:qi[s]||0,brushing_mousePos:f?l.unproject([f.x-l.x,f.y-l.y]):[0,0]}}};function Wi(t){var r=Hi();return function(){var n=(0,je.default)(t),i;if(r){var o=(0,je.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Ct.default)(this,i)}}function Hi(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Ki={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},le=function(t){(0,kt.default)(e,t);var r=Wi(e);function e(){return(0,St.default)(this,e),r.apply(this,arguments)}return(0,Ft.default)(e,[{key:"getShaders",value:function(){return{modules:[Rt]}}},{key:"initializeState",value:function(i,o){var a=this,s=this.getAttributeManager();s&&s.add({brushingTargets:{size:2,accessor:"getBrushingTarget",shaderAttributes:{brushingTargets:{divisor:0},instanceBrushingTargets:{divisor:1}}}}),this.state.onMouseMove=function(){var f;(f=a.getCurrentLayer())===null||f===void 0||f.setNeedsRedraw()},i.deck&&i.deck.eventManager.on({pointermove:this.state.onMouseMove,pointerleave:this.state.onMouseMove})}},{key:"finalizeState",value:function(i,o){i.deck&&i.deck.eventManager.off({pointermove:this.state.onMouseMove,pointerleave:this.state.onMouseMove})}}]),e}(It.LayerExtension);(0,Ve.default)(le,"defaultProps",Ki);(0,Ve.default)(le,"extensionName","BrushingExtension");var Jt=u(x()),Qt=u(b()),er=u(w()),tr=u(M()),Ue=u(T()),ce=u(P()),rr=u(y());var Bt=u(P());function Lt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Nt(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Lt(Object(e),!0).forEach(function(n){(0,Bt.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Lt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}var Dt=`
65
65
  uniform DATAFILTER_TYPE filter_min;
66
66
  uniform DATAFILTER_TYPE filter_softMin;
67
67
  uniform DATAFILTER_TYPE filter_softMax;
@@ -141,7 +141,7 @@ varying float dataFilter_value;
141
141
  if (filter_transformColor) {
142
142
  color.a *= dataFilter_value;
143
143
  }
144
- `},Ut={name:"data-filter",vs:Dt,fs:jt,inject:zt,getUniforms:Vt},qt={name:"data-filter-fp64",vs:Dt,fs:jt,inject:zt,getUniforms:Yi};var ze=u(g()),L=u(R());function Wt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function $i(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Wt(Object(e),!0).forEach(function(n){(0,ze.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Wt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}var Zi=`#define SHADER_NAME data-filter-vertex-shader
144
+ `},Ut={name:"data-filter",vs:Dt,fs:jt,inject:zt,getUniforms:Vt},qt={name:"data-filter-fp64",vs:Dt,fs:jt,inject:zt,getUniforms:Yi};var ze=u(P()),L=u(R());function Wt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function $i(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Wt(Object(e),!0).forEach(function(n){(0,ze.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Wt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}var Zi=`#define SHADER_NAME data-filter-vertex-shader
145
145
 
146
146
  #ifdef FLOAT_TARGET
147
147
  attribute float filterIndices;
@@ -182,7 +182,7 @@ void main() {
182
182
  }
183
183
  gl_FragColor = vColor;
184
184
  }
185
- `;function Ht(t){return Boolean(t.getExtension("EXT_float_blend")&&(t.getExtension("EXT_color_buffer_float")||t.getExtension("WEBGL_color_buffer_float")))}function Kt(t,r){return r?new L.Framebuffer(t,{width:1,height:1,attachments:(0,ze.default)({},36064,new L.Texture2D(t,{format:(0,L.isWebGL2)(t)?34836:6408,type:5126,mipmaps:!1}))}):new L.Framebuffer(t,{width:256,height:64,depth:!1})}function Yt(t,r,e){return r.defines.NON_INSTANCED_MODEL=1,e&&(r.defines.FLOAT_TARGET=1),new L.Model(t,$i({id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:Zi,fs:Xi},r))}var $t={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};var pe=u(R());function Zt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function ue(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Zt(Object(e),!0).forEach(function(n){(0,ce.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Zt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Qi(t){var r=eo();return function(){var n=(0,Ue.default)(t),i;if(r){var o=(0,Ue.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,tr.default)(this,i)}}function eo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var to={getFilterValue:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,compare:!1},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterTransformSize:!0,filterTransformColor:!0},Xt={1:"float",2:"vec2",3:"vec3",4:"vec4"},ve=function(t){(0,er.default)(e,t);var r=Qi(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.filterSize,o=i===void 0?1:i,a=n.fp64,s=a===void 0?!1:a,f=n.countItems,l=f===void 0?!1:f;if((0,Jt.default)(this,e),!Xt[o])throw new Error("filterSize out of range");return r.call(this,{filterSize:o,fp64:s,countItems:l})}return(0,Qt.default)(e,[{key:"getShaders",value:function(i){var o=i.opts,a=o.filterSize,s=o.fp64;return{modules:[s?qt:Ut],defines:{DATAFILTER_TYPE:Xt[a],DATAFILTER_DOUBLE:Boolean(s)}}}},{key:"initializeState",value:function(i,o){var a=this.getAttributeManager();a&&a.add({filterValues:{size:o.opts.filterSize,type:o.opts.fp64?5130:5126,accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}}});var s=this.context.gl;if(a&&o.opts.countItems){var f=Ht(s);a.add({filterIndices:{size:f?1:2,vertexOffset:1,type:5121,normalized:!0,accessor:function(v,_){var m=_.index,d=v&&v.__source?v.__source.index:m;return f?(d+1)%255:[(d+1)%255,Math.floor(d/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});var l=Kt(s,f),c=Yt(s,o.getShaders.call(this,o),f);this.setState({filterFBO:l,filterModel:c})}}},{key:"updateState",value:function(i){var o=i.props,a=i.oldProps;if(this.state.filterModel){var s=this.getAttributeManager(),f=s.attributes.filterValues.needsUpdate()||o.filterEnabled!==a.filterEnabled||o.filterRange!==a.filterRange||o.filterSoftRange!==a.filterSoftRange;f&&this.setState({filterNeedsUpdate:f})}}},{key:"draw",value:function(i,o){var a=this.state,s=a.filterFBO,f=a.filterModel,l=a.filterNeedsUpdate,c=this.props.onFilteredItemsChange;if(l&&c&&f){var p=this.getAttributeManager(),v=p.attributes,_=v.filterValues,m=v.filterIndices;f.setVertexCount(this.getNumInstances());var d=this.context.gl;(0,pe.clear)(d,{framebuffer:s,color:[0,0,0,0]}),f.updateModuleSettings(i.moduleParameters).setAttributes(ue(ue({},_.getShaderAttributes()),m&&m.getShaderAttributes())).draw({framebuffer:s,parameters:ue(ue({},$t),{},{viewport:[0,0,s.width,s.height]})});for(var y=(0,pe.readPixelsToArray)(s),P=0,A=0;A<y.length;A++)P+=y[A];c({id:this.id,count:P}),this.state.filterNeedsUpdate=!1}}},{key:"finalizeState",value:function(){var i=this.state,o=i.filterFBO,a=i.filterModel;o&&(o.color.delete(),o.delete(),a.delete())}}]),e}(rr.LayerExtension);(0,ce.default)(ve,"defaultProps",to);(0,ce.default)(ve,"extensionName","DataFilterExtension");var dr=u(x()),mr=u(b()),hr=u(w()),yr=u(M()),Ye=u(T()),gr=u(g()),J=u(h());function _e(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],e=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,n=Math.fround(t),i=t-n;return r[e]=n,r[e+1]=i,r}function Ge(t){return t-Math.fround(t)}function We(t){for(var r=new Float32Array(32),e=0;e<4;++e)for(var n=0;n<4;++n){var i=e*4+n;_e(t[n*4+e],r,i*2)}return r}var ur=`uniform float ONE;
185
+ `;function Ht(t){return Boolean(t.getExtension("EXT_float_blend")&&(t.getExtension("EXT_color_buffer_float")||t.getExtension("WEBGL_color_buffer_float")))}function Kt(t,r){return r?new L.Framebuffer(t,{width:1,height:1,attachments:(0,ze.default)({},36064,new L.Texture2D(t,{format:(0,L.isWebGL2)(t)?34836:6408,type:5126,mipmaps:!1}))}):new L.Framebuffer(t,{width:256,height:64,depth:!1})}function Yt(t,r,e){return r.defines.NON_INSTANCED_MODEL=1,e&&(r.defines.FLOAT_TARGET=1),new L.Model(t,$i({id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:Zi,fs:Xi},r))}var $t={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};var pe=u(R());function Zt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function ue(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Zt(Object(e),!0).forEach(function(n){(0,ce.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Zt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Qi(t){var r=eo();return function(){var n=(0,Ue.default)(t),i;if(r){var o=(0,Ue.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,tr.default)(this,i)}}function eo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var to={getFilterValue:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterTransformSize:!0,filterTransformColor:!0},Xt={1:"float",2:"vec2",3:"vec3",4:"vec4"},ve=function(t){(0,er.default)(e,t);var r=Qi(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.filterSize,o=i===void 0?1:i,a=n.fp64,s=a===void 0?!1:a,f=n.countItems,l=f===void 0?!1:f;if((0,Jt.default)(this,e),!Xt[o])throw new Error("filterSize out of range");return r.call(this,{filterSize:o,fp64:s,countItems:l})}return(0,Qt.default)(e,[{key:"getShaders",value:function(i){var o=i.opts,a=o.filterSize,s=o.fp64;return{modules:[s?qt:Ut],defines:{DATAFILTER_TYPE:Xt[a],DATAFILTER_DOUBLE:Boolean(s)}}}},{key:"initializeState",value:function(i,o){var a=this.getAttributeManager();a&&a.add({filterValues:{size:o.opts.filterSize,type:o.opts.fp64?5130:5126,accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}}});var s=this.context.gl;if(a&&o.opts.countItems){var f=Ht(s);a.add({filterIndices:{size:f?1:2,vertexOffset:1,type:5121,normalized:!0,accessor:function(v,_){var m=_.index,d=v&&v.__source?v.__source.index:m;return f?(d+1)%255:[(d+1)%255,Math.floor(d/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});var l=Kt(s,f),c=Yt(s,o.getShaders.call(this,o),f);this.setState({filterFBO:l,filterModel:c})}}},{key:"updateState",value:function(i){var o=i.props,a=i.oldProps;if(this.state.filterModel){var s=this.getAttributeManager(),f=s.attributes.filterValues.needsUpdate()||o.filterEnabled!==a.filterEnabled||o.filterRange!==a.filterRange||o.filterSoftRange!==a.filterSoftRange;f&&this.setState({filterNeedsUpdate:f})}}},{key:"draw",value:function(i,o){var a=this.state,s=a.filterFBO,f=a.filterModel,l=a.filterNeedsUpdate,c=this.props.onFilteredItemsChange;if(l&&c&&f){var p=this.getAttributeManager(),v=p.attributes,_=v.filterValues,m=v.filterIndices;f.setVertexCount(this.getNumInstances());var d=this.context.gl;(0,pe.clear)(d,{framebuffer:s,color:[0,0,0,0]}),f.updateModuleSettings(i.moduleParameters).setAttributes(ue(ue({},_.getShaderAttributes()),m&&m.getShaderAttributes())).draw({framebuffer:s,parameters:ue(ue({},$t),{},{viewport:[0,0,s.width,s.height]})});for(var h=(0,pe.readPixelsToArray)(s),g=0,A=0;A<h.length;A++)g+=h[A];c({id:this.id,count:g}),this.state.filterNeedsUpdate=!1}}},{key:"finalizeState",value:function(){var i=this.state,o=i.filterFBO,a=i.filterModel;o&&(o.color.delete(),o.delete(),a.delete())}}]),e}(rr.LayerExtension);(0,ce.default)(ve,"defaultProps",to);(0,ce.default)(ve,"extensionName","DataFilterExtension");var dr=u(x()),mr=u(b()),hr=u(w()),yr=u(M()),Ye=u(T()),gr=u(P()),J=u(y());function _e(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],e=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,n=Math.fround(t),i=t-n;return r[e]=n,r[e+1]=i,r}function Ge(t){return t-Math.fround(t)}function We(t){for(var r=new Float32Array(32),e=0;e<4;++e)for(var n=0;n<4;++n){var i=e*4+n;_e(t[n*4+e],r,i*2)}return r}var ur=`uniform float ONE;
186
186
  vec2 split(float a) {
187
187
  const float SPLIT = 4097.0;
188
188
  float t = a * SPLIT;
@@ -951,7 +951,7 @@ void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
951
951
  vec4_dot_fp64(a, tmp, out_val[i]);
952
952
  }
953
953
  }
954
- `;var lo={ONE:1};function uo(){return lo}var pr={name:"fp64-arithmetic",vs:ur,fs:null,getUniforms:uo,fp64ify:_e,fp64LowPart:Ge,fp64ifyMatrix4:We},Z={name:"fp64",vs:cr,fs:null,dependencies:[pr],fp64ify:_e,fp64LowPart:Ge,fp64ifyMatrix4:We};var os=1/Math.PI*180,as=1/180*Math.PI,X={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0};function He(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function U(t,r,e){var n=X.EPSILON;e&&(X.EPSILON=e);try{if(t===r)return!0;if(He(t)&&He(r)){if(t.length!==r.length)return!1;for(var i=0;i<t.length;++i)if(!U(t[i],r[i]))return!1;return!0}return t&&t.equals?t.equals(r):r&&r.equals?r.equals(t):typeof t=="number"&&typeof r=="number"?Math.abs(t-r)<=X.EPSILON*Math.max(1,Math.abs(t),Math.abs(r)):!1}finally{X.EPSILON=n}}var Ke=typeof Float32Array<"u"?Float32Array:Array;var fs=Math.PI/180;Math.hypot||(Math.hypot=function(){for(var t=0,r=arguments.length;r--;)t+=arguments[r]*arguments[r];return Math.sqrt(t)});function po(){var t=new Ke(3);return Ke!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function vo(t,r){var e=r[0]-t[0],n=r[1]-t[1],i=r[2]-t[2];return Math.hypot(e,n,i)}var vr=vo;var cs=function(){var t=po();return function(r,e,n,i,o,a){var s,f;for(e||(e=3),n||(n=0),i?f=Math.min(i*e+n,r.length):f=r.length,s=n;s<f;s+=e)t[0]=r[s],t[1]=r[s+1],t[2]=r[s+2],o(t,t,a),r[s]=t[0],r[s+1]=t[1],r[s+2]=t[2];return r}}();var de=u(h());var _r=`
954
+ `;var lo={ONE:1};function uo(){return lo}var pr={name:"fp64-arithmetic",vs:ur,fs:null,getUniforms:uo,fp64ify:_e,fp64LowPart:Ge,fp64ifyMatrix4:We},Z={name:"fp64",vs:cr,fs:null,dependencies:[pr],fp64ify:_e,fp64LowPart:Ge,fp64ifyMatrix4:We};var os=1/Math.PI*180,as=1/180*Math.PI,X={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0};function He(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function U(t,r,e){var n=X.EPSILON;e&&(X.EPSILON=e);try{if(t===r)return!0;if(He(t)&&He(r)){if(t.length!==r.length)return!1;for(var i=0;i<t.length;++i)if(!U(t[i],r[i]))return!1;return!0}return t&&t.equals?t.equals(r):r&&r.equals?r.equals(t):typeof t=="number"&&typeof r=="number"?Math.abs(t-r)<=X.EPSILON*Math.max(1,Math.abs(t),Math.abs(r)):!1}finally{X.EPSILON=n}}var Ke=typeof Float32Array<"u"?Float32Array:Array;var fs=Math.PI/180;Math.hypot||(Math.hypot=function(){for(var t=0,r=arguments.length;r--;)t+=arguments[r]*arguments[r];return Math.sqrt(t)});function po(){var t=new Ke(3);return Ke!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function vo(t,r){var e=r[0]-t[0],n=r[1]-t[1],i=r[2]-t[2];return Math.hypot(e,n,i)}var vr=vo;var cs=function(){var t=po();return function(r,e,n,i,o,a){var s,f;for(e||(e=3),n||(n=0),i?f=Math.min(i*e+n,r.length):f=r.length,s=n;s<f;s+=e)t[0]=r[s],t[1]=r[s+1],t[2]=r[s+2],o(t,t,a),r[s]=t[0],r[s+1]=t[1],r[s+2]=t[2];return r}}();var de=u(y());var _r=`
955
955
  const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
956
956
 
957
957
  uniform vec2 project_uViewProjectionMatrixFP64[16];
@@ -1025,7 +1025,7 @@ vec4 project_position_to_clipspace(
1025
1025
  position, position64xyLow, offset, commonPosition
1026
1026
  );
1027
1027
  }
1028
- `;var _o=Z.fp64ify,mo=Z.fp64ifyMatrix4,me={name:"project64",dependencies:[de.project,Z],vs:_r,getUniforms:yo},ho=(0,de._memoize)(go);function yo(t){if(t&&"viewport"in t){var r=t.viewport,e=r.viewProjectionMatrix,n=r.scale;return ho({viewProjectionMatrix:e,scale:n})}return{}}function go(t){var r=t.viewProjectionMatrix,e=t.scale,n=mo(r),i=_o(e);return{project_uViewProjectionMatrixFP64:n,project64_uViewProjectionMatrix:n,project64_uScale:i}}function Po(t){var r=xo();return function(){var n=(0,Ye.default)(t),i;if(r){var o=(0,Ye.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,yr.default)(this,i)}}function xo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var $e=function(t){(0,hr.default)(e,t);var r=Po(e);function e(){return(0,dr.default)(this,e),r.apply(this,arguments)}return(0,mr.default)(e,[{key:"getShaders",value:function(){var i=this.props.coordinateSystem;if(i!==J.COORDINATE_SYSTEM.LNGLAT&&i!==J.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[me]}}}]),e}(J.LayerExtension);(0,gr.default)($e,"extensionName","Fp64Extension");var br=u(x()),Or=u(b()),Er=u(w()),Tr=u(M()),Ze=u(T()),Xe=u(g()),Q=u(h());var Pr={inject:{"vs:#decl":`
1028
+ `;var _o=Z.fp64ify,mo=Z.fp64ifyMatrix4,me={name:"project64",dependencies:[de.project,Z],vs:_r,getUniforms:yo},ho=(0,de._memoize)(go);function yo(t){if(t&&"viewport"in t){var r=t.viewport,e=r.viewProjectionMatrix,n=r.scale;return ho({viewProjectionMatrix:e,scale:n})}return{}}function go(t){var r=t.viewProjectionMatrix,e=t.scale,n=mo(r),i=_o(e);return{project_uViewProjectionMatrixFP64:n,project64_uViewProjectionMatrix:n,project64_uScale:i}}function Po(t){var r=xo();return function(){var n=(0,Ye.default)(t),i;if(r){var o=(0,Ye.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,yr.default)(this,i)}}function xo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var $e=function(t){(0,hr.default)(e,t);var r=Po(e);function e(){return(0,dr.default)(this,e),r.apply(this,arguments)}return(0,mr.default)(e,[{key:"getShaders",value:function(){var i=this.props.coordinateSystem;if(i!==J.COORDINATE_SYSTEM.LNGLAT&&i!==J.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[me]}}}]),e}(J.LayerExtension);(0,gr.default)($e,"extensionName","Fp64Extension");var br=u(x()),Or=u(b()),Er=u(w()),Tr=u(M()),Ze=u(T()),Xe=u(P()),Q=u(y());var Pr={inject:{"vs:#decl":`
1029
1029
  attribute vec2 instanceDashArrays;
1030
1030
  attribute float instanceDashOffsets;
1031
1031
  varying vec2 vDashArray;
@@ -1093,7 +1093,7 @@ attribute float instanceOffsets;
1093
1093
  if (isInside == 0.0) {
1094
1094
  discard;
1095
1095
  }
1096
- `}};function bo(t){var r=Oo();return function(){var n=(0,Ze.default)(t),i;if(r){var o=(0,Ze.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Tr.default)(this,i)}}function Oo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Eo={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},he=function(t){(0,Er.default)(e,t);var r=bo(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.dash,o=i===void 0?!1:i,a=n.offset,s=a===void 0?!1:a,f=n.highPrecisionDash,l=f===void 0?!1:f;return(0,br.default)(this,e),r.call(this,{dash:o||l,offset:s,highPrecisionDash:l})}return(0,Or.default)(e,[{key:"isEnabled",value:function(i){return"pathTesselator"in i.state}},{key:"getShaders",value:function(i){if(!i.isEnabled(this))return null;var o={};return i.opts.dash&&(o=(0,Q._mergeShaders)(o,Pr)),i.opts.offset&&(o=(0,Q._mergeShaders)(o,xr)),o}},{key:"initializeState",value:function(i,o){var a=this.getAttributeManager();!a||!o.isEnabled(this)||(o.opts.dash&&a.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),o.opts.highPrecisionDash&&a.addInstanced({instanceDashOffsets:{size:1,accessor:"getPath",transform:o.getDashOffsets.bind(this)}}),o.opts.offset&&a.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}},{key:"updateState",value:function(i,o){if(o.isEnabled(this)){var a={};o.opts.dash&&(a.dashAlignMode=this.props.dashJustified?1:0,a.dashGapPickable=Boolean(this.props.dashGapPickable)),this.state.model.setUniforms(a)}}},{key:"getDashOffsets",value:function(i){for(var o=[0],a=this.props.positionFormat==="XY"?2:3,s=Array.isArray(i[0]),f=s?i.length:i.length/a,l,c,p=0;p<f-1;p++)l=s?i[p]:i.slice(p*a,p*a+a),l=this.projectPosition(l),p>0&&(o[p]=o[p-1]+vr(c,l)),c=l;return o}}]),e}(Q.LayerExtension);(0,Xe.default)(he,"defaultProps",Eo);(0,Xe.default)(he,"extensionName","PathStyleExtension");var Mr=u(x()),Ar=u(b()),Rr=u(w()),Sr=u(M()),Je=u(T()),ye=u(g()),Fr=u(h()),kr=u(R());var ee=u(h()),To=`
1096
+ `}};function bo(t){var r=Oo();return function(){var n=(0,Ze.default)(t),i;if(r){var o=(0,Ze.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Tr.default)(this,i)}}function Oo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Eo={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},he=function(t){(0,Er.default)(e,t);var r=bo(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.dash,o=i===void 0?!1:i,a=n.offset,s=a===void 0?!1:a,f=n.highPrecisionDash,l=f===void 0?!1:f;return(0,br.default)(this,e),r.call(this,{dash:o||l,offset:s,highPrecisionDash:l})}return(0,Or.default)(e,[{key:"isEnabled",value:function(i){return"pathTesselator"in i.state}},{key:"getShaders",value:function(i){if(!i.isEnabled(this))return null;var o={};return i.opts.dash&&(o=(0,Q._mergeShaders)(o,Pr)),i.opts.offset&&(o=(0,Q._mergeShaders)(o,xr)),o}},{key:"initializeState",value:function(i,o){var a=this.getAttributeManager();!a||!o.isEnabled(this)||(o.opts.dash&&a.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),o.opts.highPrecisionDash&&a.addInstanced({instanceDashOffsets:{size:1,accessor:"getPath",transform:o.getDashOffsets.bind(this)}}),o.opts.offset&&a.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}},{key:"updateState",value:function(i,o){if(o.isEnabled(this)){var a={};o.opts.dash&&(a.dashAlignMode=this.props.dashJustified?1:0,a.dashGapPickable=Boolean(this.props.dashGapPickable)),this.state.model.setUniforms(a)}}},{key:"getDashOffsets",value:function(i){for(var o=[0],a=this.props.positionFormat==="XY"?2:3,s=Array.isArray(i[0]),f=s?i.length:i.length/a,l,c,p=0;p<f-1;p++)l=s?i[p]:i.slice(p*a,p*a+a),l=this.projectPosition(l),p>0&&(o[p]=o[p-1]+vr(c,l)),c=l;return o}}]),e}(Q.LayerExtension);(0,Xe.default)(he,"defaultProps",Eo);(0,Xe.default)(he,"extensionName","PathStyleExtension");var Mr=u(x()),Ar=u(b()),Rr=u(w()),Sr=u(M()),Je=u(T()),ye=u(P()),Fr=u(y()),kr=u(R());var ee=u(y()),To=`
1097
1097
  #ifdef NON_INSTANCED_MODEL
1098
1098
  #define FILL_PATTERN_FRAME_ATTRIB fillPatternFrames
1099
1099
  #define FILL_PATTERN_SCALE_ATTRIB fillPatternScales
@@ -1148,7 +1148,7 @@ const float FILL_UV_SCALE = 512.0 / 40000000.0;
1148
1148
  color.rgb = patternColor.rgb;
1149
1149
  }
1150
1150
  }
1151
- `};function Ao(t,r){if(!t)return{};if("fillPatternTexture"in t){var e=t.fillPatternTexture;return{fill_patternTexture:e,fill_patternTextureSize:[e.width,e.height]}}if("viewport"in t){var n=t.fillPatternMask,i=n===void 0?!0:n,o=t.fillPatternEnabled,a=o===void 0?!0:o,s=r,f=s.project_uCommonOrigin,l=[(0,ee.fp64LowPart)(f[0]),(0,ee.fp64LowPart)(f[1])];return{fill_uvCoordinateOrigin:f.slice(0,2),fill_uvCoordinateOrigin64Low:l,fill_patternMask:i,fill_patternEnabled:a}}return{}}var wr={name:"fill-pattern",vs:To,fs:wo,inject:Mo,dependencies:[ee.project],getUniforms:Ao};function Ro(t){var r=So();return function(){var n=(0,Je.default)(t),i;if(r){var o=(0,Je.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Sr.default)(this,i)}}function So(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Fo={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:(0,ye.default)({},10241,9729)},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:function(r){return r.pattern}},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},ge=function(t){(0,Rr.default)(e,t);var r=Ro(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.pattern,o=i===void 0?!1:i;return(0,Mr.default)(this,e),r.call(this,{pattern:o})}return(0,Ar.default)(e,[{key:"isEnabled",value:function(i){return i.getAttributeManager()!==null&&!("pathTesselator"in i.state)}},{key:"getShaders",value:function(i){return i.isEnabled(this)?{modules:[i.opts.pattern&&wr].filter(Boolean)}:null}},{key:"initializeState",value:function(i,o){if(o.isEnabled(this)){var a=this.getAttributeManager();o.opts.pattern&&a.add({fillPatternFrames:{size:4,accessor:"getFillPattern",transform:o.getPatternFrame.bind(this),shaderAttributes:{fillPatternFrames:{divisor:0},instanceFillPatternFrames:{divisor:1}}},fillPatternScales:{size:1,accessor:"getFillPatternScale",defaultValue:1,shaderAttributes:{fillPatternScales:{divisor:0},instanceFillPatternScales:{divisor:1}}},fillPatternOffsets:{size:2,accessor:"getFillPatternOffset",shaderAttributes:{fillPatternOffsets:{divisor:0},instanceFillPatternOffsets:{divisor:1}}}}),this.setState({emptyTexture:new kr.Texture2D(this.context.gl,{data:new Uint8Array(4),width:1,height:1})})}}},{key:"updateState",value:function(i,o){var a=i.props,s=i.oldProps;o.isEnabled(this)&&a.fillPatternMapping&&a.fillPatternMapping!==s.fillPatternMapping&&this.getAttributeManager().invalidate("getFillPattern")}},{key:"draw",value:function(i,o){if(o.isEnabled(this)){var a=this.props.fillPatternAtlas;this.setModuleParameters({fillPatternTexture:a||this.state.emptyTexture})}}},{key:"finalizeState",value:function(){var i=this.state,o=i.patternTexture,a=i.emptyTexture;o?.delete(),a?.delete()}},{key:"getPatternFrame",value:function(i){var o=this.getCurrentLayer().props.fillPatternMapping,a=o&&o[i];return a?[a.x,a.y,a.width,a.height]:[0,0,0,0]}}]),e}(Fr.LayerExtension);(0,ye.default)(ge,"defaultProps",Fo);(0,ye.default)(ge,"extensionName","FillStyleExtension");var Cr=u(x()),Ir=u(b()),Lr=u(w()),Nr=u(M()),Qe=u(T()),et=u(g()),Br=u(h());function ko(t){var r=Co();return function(){var n=(0,Qe.default)(t),i;if(r){var o=(0,Qe.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Nr.default)(this,i)}}function Co(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Io={clipBounds:[0,0,1,1],clipByInstance:void 0},Dr=`
1151
+ `};function Ao(t,r){if(!t)return{};if("fillPatternTexture"in t){var e=t.fillPatternTexture;return{fill_patternTexture:e,fill_patternTextureSize:[e.width,e.height]}}if("viewport"in t){var n=t.fillPatternMask,i=n===void 0?!0:n,o=t.fillPatternEnabled,a=o===void 0?!0:o,s=r,f=s.project_uCommonOrigin,l=[(0,ee.fp64LowPart)(f[0]),(0,ee.fp64LowPart)(f[1])];return{fill_uvCoordinateOrigin:f.slice(0,2),fill_uvCoordinateOrigin64Low:l,fill_patternMask:i,fill_patternEnabled:a}}return{}}var wr={name:"fill-pattern",vs:To,fs:wo,inject:Mo,dependencies:[ee.project],getUniforms:Ao};function Ro(t){var r=So();return function(){var n=(0,Je.default)(t),i;if(r){var o=(0,Je.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Sr.default)(this,i)}}function So(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Fo={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:(0,ye.default)({},10241,9729)},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:function(r){return r.pattern}},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},ge=function(t){(0,Rr.default)(e,t);var r=Ro(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.pattern,o=i===void 0?!1:i;return(0,Mr.default)(this,e),r.call(this,{pattern:o})}return(0,Ar.default)(e,[{key:"isEnabled",value:function(i){return i.getAttributeManager()!==null&&!("pathTesselator"in i.state)}},{key:"getShaders",value:function(i){return i.isEnabled(this)?{modules:[i.opts.pattern&&wr].filter(Boolean)}:null}},{key:"initializeState",value:function(i,o){if(o.isEnabled(this)){var a=this.getAttributeManager();o.opts.pattern&&a.add({fillPatternFrames:{size:4,accessor:"getFillPattern",transform:o.getPatternFrame.bind(this),shaderAttributes:{fillPatternFrames:{divisor:0},instanceFillPatternFrames:{divisor:1}}},fillPatternScales:{size:1,accessor:"getFillPatternScale",defaultValue:1,shaderAttributes:{fillPatternScales:{divisor:0},instanceFillPatternScales:{divisor:1}}},fillPatternOffsets:{size:2,accessor:"getFillPatternOffset",shaderAttributes:{fillPatternOffsets:{divisor:0},instanceFillPatternOffsets:{divisor:1}}}}),this.setState({emptyTexture:new kr.Texture2D(this.context.gl,{data:new Uint8Array(4),width:1,height:1})})}}},{key:"updateState",value:function(i,o){var a=i.props,s=i.oldProps;o.isEnabled(this)&&a.fillPatternMapping&&a.fillPatternMapping!==s.fillPatternMapping&&this.getAttributeManager().invalidate("getFillPattern")}},{key:"draw",value:function(i,o){if(o.isEnabled(this)){var a=this.props.fillPatternAtlas;this.setModuleParameters({fillPatternTexture:a||this.state.emptyTexture})}}},{key:"finalizeState",value:function(){var i=this.state,o=i.patternTexture,a=i.emptyTexture;o?.delete(),a?.delete()}},{key:"getPatternFrame",value:function(i){var o=this.getCurrentLayer().props.fillPatternMapping,a=o&&o[i];return a?[a.x,a.y,a.width,a.height]:[0,0,0,0]}}]),e}(Fr.LayerExtension);(0,ye.default)(ge,"defaultProps",Fo);(0,ye.default)(ge,"extensionName","FillStyleExtension");var Cr=u(x()),Ir=u(b()),Lr=u(w()),Nr=u(M()),Qe=u(T()),et=u(P()),Br=u(y());function ko(t){var r=Co();return function(){var n=(0,Qe.default)(t),i;if(r){var o=(0,Qe.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Nr.default)(this,i)}}function Co(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Io={clipBounds:[0,0,1,1],clipByInstance:void 0},Dr=`
1152
1152
  uniform vec4 clip_bounds;
1153
1153
 
1154
1154
  bool clip_isInBounds(vec2 position) {
@@ -1170,7 +1170,7 @@ varying vec2 clip_commonPosition;
1170
1170
  varying vec2 clip_commonPosition;
1171
1171
  `,"fs:DECKGL_FILTER_COLOR":`
1172
1172
  if (!clip_isInBounds(clip_commonPosition)) discard;
1173
- `},Pe=function(t){(0,Lr.default)(e,t);var r=ko(e);function e(){return(0,Cr.default)(this,e),r.apply(this,arguments)}return(0,Ir.default)(e,[{key:"getShaders",value:function(){var i="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(i=Boolean(this.props.clipByInstance)),this.state.clipByInstance=i,i?{modules:[Lo],inject:No}:{modules:[Bo],inject:Do}}},{key:"draw",value:function(i){var o=i.uniforms,a=this.props.clipBounds;if(this.state.clipByInstance)o.clip_bounds=a;else{var s=this.projectPosition([a[0],a[1],0]),f=this.projectPosition([a[2],a[3],0]);o.clip_bounds=[Math.min(s[0],f[0]),Math.min(s[1],f[1]),Math.max(s[0],f[0]),Math.max(s[1],f[1])]}}}]),e}(Br.LayerExtension);(0,et.default)(Pe,"defaultProps",Io);(0,et.default)(Pe,"extensionName","ClipExtension");var Pn=u(x()),xn=u(b()),bn=u(w()),On=u(M()),at=u(T()),st=u(g()),En=u(h());var jr=u(h()),jo=`
1173
+ `},Pe=function(t){(0,Lr.default)(e,t);var r=ko(e);function e(){return(0,Cr.default)(this,e),r.apply(this,arguments)}return(0,Ir.default)(e,[{key:"getShaders",value:function(){var i="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(i=Boolean(this.props.clipByInstance)),this.state.clipByInstance=i,i?{modules:[Lo],inject:No}:{modules:[Bo],inject:Do}}},{key:"draw",value:function(i){var o=i.uniforms,a=this.props.clipBounds;if(this.state.clipByInstance)o.clip_bounds=a;else{var s=this.projectPosition([a[0],a[1],0]),f=this.projectPosition([a[2],a[3],0]);o.clip_bounds=[Math.min(s[0],f[0]),Math.min(s[1],f[1]),Math.max(s[0],f[0]),Math.max(s[1],f[1])]}}}]),e}(Br.LayerExtension);(0,et.default)(Pe,"defaultProps",Io);(0,et.default)(Pe,"extensionName","ClipExtension");var Pn=u(x()),xn=u(b()),bn=u(w()),On=u(M()),at=u(T()),st=u(P()),En=u(y());var jr=u(y()),jo=`
1174
1174
  #ifdef NON_INSTANCED_MODEL
1175
1175
  attribute float collisionPriorities;
1176
1176
  #else
@@ -1241,10 +1241,10 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
1241
1241
  }
1242
1242
  `,"vs:DECKGL_FILTER_COLOR":`
1243
1243
  color.a *= collision_fade;
1244
- `},zo=function(r,e){if(!r||!("dummyCollisionMap"in r))return{};var n=r.collisionFBO,i=r.drawToCollisionMap,o=r.dummyCollisionMap;return{collision_sort:Boolean(i),collision_texture:!i&&n?n:o}},Vr={name:"collision",dependencies:[jr.project],vs:jo,inject:Vo,getUniforms:zo};var mn=u(x()),hn=u(b()),E=u(g()),B=u(R());var yn=u(h());var qr=u(g()),Gr=u(x()),Wr=u(b()),Hr=u(w()),Kr=u(M()),tt=u(T()),Yr=u(R()),$r=u(h());function zr(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Ur(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?zr(Object(e),!0).forEach(function(n){(0,qr.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):zr(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Uo(t){var r=qo();return function(){var n=(0,tt.default)(t),i;if(r){var o=(0,tt.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Kr.default)(this,i)}}function qo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Zr=function(t){(0,Hr.default)(e,t);var r=Uo(e);function e(){return(0,Gr.default)(this,e),r.apply(this,arguments)}return(0,Wr.default)(e,[{key:"renderCollisionMap",value:function(i,o){var a=this,s=this.gl,f=1;return(0,Yr.withParameters)(s,{scissorTest:!0,scissor:[f,f,i.width-2*f,i.height-2*f],clearColor:[0,0,0,0],blend:!1,depthTest:!0,depthRange:[0,1]},function(){return a.render(Ur(Ur({},o),{},{target:i,pass:"collision"}))})}},{key:"getModuleParameters",value:function(){return{drawToCollisionMap:!0,pickingActive:1,pickingAttribute:!1,lightSources:{}}}}]),e}($r._LayersPass);var pn=u(x()),vn=u(b()),F=u(g()),it=u(h()),_n=u(R());var tn=u(x()),rn=u(b()),nt=u(fe()),nn=u(rt()),on=u(w()),an=u(M()),Oe=u(T()),N=u(g()),q=u(R()),sn=u(h());function Qr(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function en(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Qr(Object(e),!0).forEach(function(n){(0,N.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Qr(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Ko(t){var r=Yo();return function(){var n=(0,Oe.default)(t),i;if(r){var o=(0,Oe.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,an.default)(this,i)}}function Yo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var fn=function(t){(0,on.default)(e,t);var r=Ko(e);function e(n,i){var o,a;(0,tn.default)(this,e),a=r.call(this,n,i),(0,N.default)((0,nt.default)(a),"maskMap",void 0),(0,N.default)((0,nt.default)(a),"fbo",void 0);var s=i.mapSize,f=s===void 0?2048:s;return a.maskMap=new q.Texture2D(n,{width:f,height:f,parameters:(o={},(0,N.default)(o,10241,9729),(0,N.default)(o,10240,9729),(0,N.default)(o,10242,33071),(0,N.default)(o,10243,33071),o)}),a.fbo=new q.Framebuffer(n,{id:"maskmap",width:f,height:f,attachments:(0,N.default)({},36064,a.maskMap)}),a}return(0,rn.default)(e,[{key:"render",value:function(i){var o=this,a=this.gl,s=[!1,!1,!1,!1];return s[i.channel]=!0,(0,q.withParameters)(a,{clearColor:[255,255,255,255],blend:!0,blendFunc:[0,1],blendEquation:32778,colorMask:s,depthTest:!1},function(){return(0,nn.default)((0,Oe.default)(e.prototype),"render",o).call(o,en(en({},i),{},{target:o.fbo,pass:"mask"}))})}},{key:"shouldDrawLayer",value:function(i){return i.props.operation.includes("mask")}},{key:"delete",value:function(){this.fbo.delete(),this.maskMap.delete()}}]),e}(sn._LayersPass);var un=u(qe()),Ee=u(h());function $o(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=Zo(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1244
+ `},zo=function(r,e){if(!r||!("dummyCollisionMap"in r))return{};var n=r.collisionFBO,i=r.drawToCollisionMap,o=r.dummyCollisionMap;return{collision_sort:Boolean(i),collision_texture:!i&&n?n:o}},Vr={name:"collision",dependencies:[jr.project],vs:jo,inject:Vo,getUniforms:zo};var mn=u(x()),hn=u(b()),E=u(P()),B=u(R());var yn=u(y());var qr=u(P()),Gr=u(x()),Wr=u(b()),Hr=u(w()),Kr=u(M()),tt=u(T()),Yr=u(R()),$r=u(y());function zr(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Ur(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?zr(Object(e),!0).forEach(function(n){(0,qr.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):zr(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Uo(t){var r=qo();return function(){var n=(0,tt.default)(t),i;if(r){var o=(0,tt.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Kr.default)(this,i)}}function qo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Zr=function(t){(0,Hr.default)(e,t);var r=Uo(e);function e(){return(0,Gr.default)(this,e),r.apply(this,arguments)}return(0,Wr.default)(e,[{key:"renderCollisionMap",value:function(i,o){var a=this,s=this.gl,f=1;return(0,Yr.withParameters)(s,{scissorTest:!0,scissor:[f,f,i.width-2*f,i.height-2*f],clearColor:[0,0,0,0],blend:!1,depthTest:!0,depthRange:[0,1]},function(){return a.render(Ur(Ur({},o),{},{target:i,pass:"collision"}))})}},{key:"getModuleParameters",value:function(){return{drawToCollisionMap:!0,pickingActive:1,pickingAttribute:!1,lightSources:{}}}}]),e}($r._LayersPass);var pn=u(x()),vn=u(b()),F=u(P()),it=u(y()),_n=u(R());var tn=u(x()),rn=u(b()),nt=u(fe()),nn=u(rt()),on=u(w()),an=u(M()),Oe=u(T()),N=u(P()),q=u(R()),sn=u(y());function Qr(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function en(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Qr(Object(e),!0).forEach(function(n){(0,N.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Qr(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Ko(t){var r=Yo();return function(){var n=(0,Oe.default)(t),i;if(r){var o=(0,Oe.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,an.default)(this,i)}}function Yo(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var fn=function(t){(0,on.default)(e,t);var r=Ko(e);function e(n,i){var o,a;(0,tn.default)(this,e),a=r.call(this,n,i),(0,N.default)((0,nt.default)(a),"maskMap",void 0),(0,N.default)((0,nt.default)(a),"fbo",void 0);var s=i.mapSize,f=s===void 0?2048:s;return a.maskMap=new q.Texture2D(n,{width:f,height:f,parameters:(o={},(0,N.default)(o,10241,9729),(0,N.default)(o,10240,9729),(0,N.default)(o,10242,33071),(0,N.default)(o,10243,33071),o)}),a.fbo=new q.Framebuffer(n,{id:"maskmap",width:f,height:f,attachments:(0,N.default)({},36064,a.maskMap)}),a}return(0,rn.default)(e,[{key:"render",value:function(i){var o=this,a=this.gl,s=[!1,!1,!1,!1];return s[i.channel]=!0,(0,q.withParameters)(a,{clearColor:[255,255,255,255],blend:!0,blendFunc:[0,1],blendEquation:32778,colorMask:s,depthTest:!1},function(){return(0,nn.default)((0,Oe.default)(e.prototype),"render",o).call(o,en(en({},i),{},{target:o.fbo,pass:"mask"}))})}},{key:"shouldDrawLayer",value:function(i){return i.props.operation.includes("mask")}},{key:"delete",value:function(){this.fbo.delete(),this.maskMap.delete()}}]),e}(sn._LayersPass);var un=u(qe()),Ee=u(y());function $o(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=Zo(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1245
1245
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function Zo(t,r){if(t){if(typeof t=="string")return ln(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ln(t,r)}}function ln(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}function G(t,r){var e=[1/0,1/0,-1/0,-1/0],n=$o(t),i;try{for(n.s();!(i=n.n()).done;){var o=i.value,a=o.getBounds();if(a){var s=o.projectPosition(a[0],{viewport:r,autoOffset:!1}),f=o.projectPosition(a[1],{viewport:r,autoOffset:!1});e[0]=Math.min(e[0],s[0]),e[1]=Math.min(e[1],s[1]),e[2]=Math.max(e[2],f[0]),e[3]=Math.max(e[3],f[1])}}}catch(l){n.e(l)}finally{n.f()}return Number.isFinite(e[0])?e:null}var Xo=2048;function W(t){var r=t.bounds,e=t.viewport,n=t.border,i=n===void 0?0:n,o=e.isGeospatial;if(r[2]<=r[0]||r[3]<=r[1])return null;var a=e.unprojectPosition([(r[0]+r[2])/2,(r[1]+r[3])/2,0]),s=t.width,f=t.height,l=t.zoom;if(l===void 0){s=s-i*2,f=f-i*2;var c=Math.min(s/(r[2]-r[0]),f/(r[3]-r[1]));l=Math.min(Math.log2(c),20)}else if(!s||!f){var p=Math.pow(2,l);s=Math.round(Math.abs(r[2]-r[0])*p),f=Math.round(Math.abs(r[3]-r[1])*p);var v=Xo-i*2;if(s>v||f>v){var _=v/Math.max(s,f);s=Math.round(s*_),f=Math.round(f*_),l+=Math.log2(_)}}return o?new Ee.WebMercatorViewport({x:i,y:i,width:s,height:f,longitude:a[0],latitude:a[1],zoom:l,orthographic:!0}):new Ee.OrthographicViewport({x:i,y:i,width:s,height:f,target:a,zoom:l,flipY:!1})}function Jo(t,r){var e;if(r&&r.length===2){var n=(0,un.default)(r,2),i=n[0],o=n[1],a=t.getBounds({z:i}),s=t.getBounds({z:o});e=[Math.min(a[0],s[0]),Math.min(a[1],s[1]),Math.max(a[2],s[2]),Math.max(a[3],s[3])]}else e=t.getBounds();var f=t.projectPosition(e.slice(0,2)),l=t.projectPosition(e.slice(2,4));return[f[0],f[1],l[0],l[1]]}function H(t,r,e){if(!t)return[0,0,1,1];var n=Jo(r,e),i=Qo(n);return t[2]-t[0]<=i[2]-i[0]&&t[3]-t[1]<=i[3]-i[1]?t:[Math.max(t[0],i[0]),Math.max(t[1],i[1]),Math.min(t[2],i[2]),Math.min(t[3],i[3])]}function Qo(t){var r=t[2]-t[0],e=t[3]-t[1],n=(t[0]+t[2])/2,i=(t[1]+t[3])/2;return[n-r,i-e,n+r,i+e]}function ea(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=ta(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1246
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function ta(t,r){if(t){if(typeof t=="string")return cn(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return cn(t,r)}}function cn(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var Te=function(){function t(){(0,pn.default)(this,t),(0,F.default)(this,"id","mask-effect"),(0,F.default)(this,"props",null),(0,F.default)(this,"useInPicking",!0),(0,F.default)(this,"order",0),(0,F.default)(this,"dummyMaskMap",void 0),(0,F.default)(this,"channels",[]),(0,F.default)(this,"masks",null),(0,F.default)(this,"maskPass",void 0),(0,F.default)(this,"maskMap",void 0),(0,F.default)(this,"lastViewport",void 0)}return(0,vn.default)(t,[{key:"preRender",value:function(e,n){var i=n.layers,o=n.layerFilter,a=n.viewports,s=n.onViewportActive,f=n.views,l=n.isPicking,c=!1;if(this.dummyMaskMap||(this.dummyMaskMap=new _n.Texture2D(e,{width:1,height:1})),l)return{didRender:c};var p=i.filter(function(P){return P.props.visible&&P.props.operation.includes("mask")});if(p.length===0)return this.masks=null,this.channels.length=0,{didRender:c};this.masks={},this.maskPass||(this.maskPass=new fn(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap);var v=this._sortMaskChannels(p),_=a[0],m=!this.lastViewport||!this.lastViewport.equals(_);if(_.resolution!==void 0)return it.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:c};for(var d in v){var y=this._renderChannel(v[d],{layerFilter:o,onViewportActive:s,views:f,viewport:_,viewportChanged:m});c||(c=y)}return{didRender:c}}},{key:"_renderChannel",value:function(e,n){var i=n.layerFilter,o=n.onViewportActive,a=n.views,s=n.viewport,f=n.viewportChanged,l=!1,c=this.channels[e.index];if(!c)return l;var p=e===c||c.layers.length!==e.layers.length||e.layerBounds.some(function(y,P){return y!==c.layerBounds[P]});if(e.bounds=c.bounds,e.maskBounds=c.maskBounds,this.channels[e.index]=e,p||f){this.lastViewport=s;var v=G(e.layers,s);if(e.bounds=v&&H(v,s),p||!U(e.bounds,c.bounds)){var _=this.maskPass,m=this.maskMap,d=v&&W({bounds:e.bounds,viewport:s,width:m.width,height:m.height,border:1});e.maskBounds=d?d.getBounds():[0,0,1,1],_.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:i,viewports:d?[d]:[],onViewportActive:o,views:a,moduleParameters:{devicePixelRatio:1}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}},{key:"_sortMaskChannels",value:function(e){var n=this,i={},o=0,a=ea(e),s;try{var f=function(){var d=s.value,y=d.root.id,P=i[y];if(!P){if(++o>4)return it.log.warn("Too many mask layers. The max supported is 4")(),"continue";P={id:y,index:n.channels.findIndex(function(A){return A?.id===y}),layers:[],layerBounds:[],coordinateOrigin:d.root.props.coordinateOrigin,coordinateSystem:d.root.props.coordinateSystem},i[y]=P}P.layers.push(d),P.layerBounds.push(d.getBounds())};for(a.s();!(s=a.n()).done;)var l=f()}catch(m){a.e(m)}finally{a.f()}for(var c=0;c<4;c++){var p=this.channels[c];(!p||!(p.id in i))&&(this.channels[c]=null)}for(var v in i){var _=i[v];_.index<0&&(_.index=this.channels.findIndex(function(m){return!m}),this.channels[_.index]=_)}return i}},{key:"getModuleParameters",value:function(){return{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}},{key:"cleanup",value:function(){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}}]),t}();function ra(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=na(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1247
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function na(t,r){if(t){if(typeof t=="string")return dn(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return dn(t,r)}}function dn(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var ot=2,gn=function(){function t(){(0,mn.default)(this,t),(0,E.default)(this,"id","collision-filter-effect"),(0,E.default)(this,"props",null),(0,E.default)(this,"useInPicking",!0),(0,E.default)(this,"order",1),(0,E.default)(this,"channels",{}),(0,E.default)(this,"collisionFilterPass",void 0),(0,E.default)(this,"collisionFBOs",{}),(0,E.default)(this,"dummyCollisionMap",void 0),(0,E.default)(this,"lastViewport",void 0)}return(0,hn.default)(t,[{key:"preRender",value:function(e,n){var i,o=n.effects,a=n.layers,s=n.layerFilter,f=n.viewports,l=n.onViewportActive,c=n.views,p=n.isPicking,v=n.preRenderStats,_=v===void 0?{}:v;if(this.dummyCollisionMap||(this.dummyCollisionMap=new B.Texture2D(e,{width:1,height:1})),!p){var m=a.filter(function(Ie){var mt=Ie.props,Oi=mt.visible,Ei=mt.collisionEnabled;return Oi&&Ei});if(m.length===0){this.channels={};return}this.collisionFilterPass||(this.collisionFilterPass=new Zr(e,{id:"default-collision-filter"}));var d=o?.filter(function(Ie){return Ie.constructor===Te}),y=(i=_["mask-effect"])===null||i===void 0?void 0:i.didRender,P=this._groupByCollisionGroup(e,m),A=f[0],ne=!this.lastViewport||!this.lastViewport.equals(A)||y;for(var $ in P){var xi=this.collisionFBOs[$],bi=P[$];xi.resize({width:e.canvas.width/ot,height:e.canvas.height/ot}),this._render(bi,{effects:d,layerFilter:s,onViewportActive:l,views:c,viewport:A,viewportChanged:ne})}}}},{key:"_render",value:function(e,n){var i=n.effects,o=n.layerFilter,a=n.onViewportActive,s=n.views,f=n.viewport,l=n.viewportChanged,c=e.collisionGroup,p=this.channels[c];if(p){var v=l||e===p||!(0,yn._deepEqual)(p.layers,e.layers,0)||e.layerBounds.some(function(m,d){return!U(m,p.layerBounds[d])})||e.allLayersLoaded!==p.allLayersLoaded||e.layers.some(function(m){return m.props.transitions});if(this.channels[c]=e,v){this.lastViewport=f;var _=this.collisionFBOs[c];this.collisionFilterPass.renderCollisionMap(_,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:i,layerFilter:o,viewports:f?[f]:[],onViewportActive:a,views:s,moduleParameters:{dummyCollisionMap:this.dummyCollisionMap,devicePixelRatio:(0,B.cssToDeviceRatio)(_.gl)/ot}})}}}},{key:"_groupByCollisionGroup",value:function(e,n){var i={},o=ra(n),a;try{for(o.s();!(a=o.n()).done;){var s=a.value,f=s.props.collisionGroup,l=i[f];l||(l={collisionGroup:f,layers:[],layerBounds:[],allLayersLoaded:!0},i[f]=l),l.layers.push(s),l.layerBounds.push(s.getBounds()),s.isLoaded||(l.allLayersLoaded=!1)}}catch(y){o.e(y)}finally{o.f()}for(var c=0,p=Object.keys(i);c<p.length;c++){var v=p[c];this.collisionFBOs[v]||this.createFBO(e,v),this.channels[v]||(this.channels[v]=i[v])}for(var _=0,m=Object.keys(this.collisionFBOs);_<m.length;_++){var d=m[_];i[d]||this.destroyFBO(d)}return i}},{key:"getModuleParameters",value:function(e){var n=e.props.collisionGroup,i=this.collisionFBOs,o=this.dummyCollisionMap;return{collisionFBO:i[n],dummyCollisionMap:o}}},{key:"cleanup",value:function(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(var e=0,n=Object.keys(this.collisionFBOs);e<n.length;e++){var i=n[e];this.destroyFBO(i)}this.collisionFBOs={},this.lastViewport=void 0}},{key:"createFBO",value:function(e,n){var i,o,a=e.canvas,s=a.width,f=a.height,l=new B.Texture2D(e,{width:s,height:f,parameters:(i={},(0,E.default)(i,10241,9728),(0,E.default)(i,10240,9728),(0,E.default)(i,10242,33071),(0,E.default)(i,10243,33071),i)}),c=new B.Renderbuffer(e,{format:33189,width:s,height:f});this.collisionFBOs[n]=new B.Framebuffer(e,{id:"Collision-".concat(n),width:s,height:f,attachments:(o={},(0,E.default)(o,36064,l),(0,E.default)(o,36096,c),o)})}},{key:"destroyFBO",value:function(e){for(var n=this.collisionFBOs[e],i=0,o=Object.values(n.attachments);i<o.length;i++){var a=o[i];a.delete()}n.delete(),delete this.collisionFBOs[e]}}]),t}();function ia(t){var r=oa();return function(){var n=(0,at.default)(t),i;if(r){var o=(0,at.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,On.default)(this,i)}}function oa(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var aa={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},we=function(t){(0,bn.default)(e,t);var r=ia(e);function e(){return(0,Pn.default)(this,e),r.apply(this,arguments)}return(0,xn.default)(e,[{key:"getShaders",value:function(){return{modules:[Vr]}}},{key:"draw",value:function(i){var o=i.uniforms,a=i.context,s=i.moduleParameters,f=this.props.collisionEnabled,l=s.collisionFBO,c=s.drawToCollisionMap,p=f&&Boolean(l);o.collision_enabled=p,c&&(this.props=this.clone(this.props.collisionTestProps).props)}},{key:"initializeState",value:function(i,o){var a;if(this.getAttributeManager()!==null){(a=this.context.deck)===null||a===void 0||a._addDefaultEffect(new gn);var s=this.getAttributeManager();s.add({collisionPriorities:{size:1,accessor:"getCollisionPriority",shaderAttributes:{collisionPriorities:{divisor:0},instanceCollisionPriorities:{divisor:1}}}})}}},{key:"getNeedsPickingBuffer",value:function(){return this.props.collisionEnabled}}]),e}(En.LayerExtension);(0,st.default)(we,"defaultProps",aa);(0,st.default)(we,"extensionName","CollisionFilterExtension");var Mn=u(x()),An=u(b()),Rn=u(w()),Sn=u(M()),ft=u(T()),lt=u(g()),V=u(h());var Tn=u(h()),sa=`
1246
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function ta(t,r){if(t){if(typeof t=="string")return cn(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return cn(t,r)}}function cn(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var Te=function(){function t(){(0,pn.default)(this,t),(0,F.default)(this,"id","mask-effect"),(0,F.default)(this,"props",null),(0,F.default)(this,"useInPicking",!0),(0,F.default)(this,"order",0),(0,F.default)(this,"dummyMaskMap",void 0),(0,F.default)(this,"channels",[]),(0,F.default)(this,"masks",null),(0,F.default)(this,"maskPass",void 0),(0,F.default)(this,"maskMap",void 0),(0,F.default)(this,"lastViewport",void 0)}return(0,vn.default)(t,[{key:"preRender",value:function(e,n){var i=n.layers,o=n.layerFilter,a=n.viewports,s=n.onViewportActive,f=n.views,l=n.isPicking,c=!1;if(this.dummyMaskMap||(this.dummyMaskMap=new _n.Texture2D(e,{width:1,height:1})),l)return{didRender:c};var p=i.filter(function(g){return g.props.visible&&g.props.operation.includes("mask")});if(p.length===0)return this.masks=null,this.channels.length=0,{didRender:c};this.masks={},this.maskPass||(this.maskPass=new fn(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap);var v=this._sortMaskChannels(p),_=a[0],m=!this.lastViewport||!this.lastViewport.equals(_);if(_.resolution!==void 0)return it.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:c};for(var d in v){var h=this._renderChannel(v[d],{layerFilter:o,onViewportActive:s,views:f,viewport:_,viewportChanged:m});c||(c=h)}return{didRender:c}}},{key:"_renderChannel",value:function(e,n){var i=n.layerFilter,o=n.onViewportActive,a=n.views,s=n.viewport,f=n.viewportChanged,l=!1,c=this.channels[e.index];if(!c)return l;var p=e===c||e.layers.length!==c.layers.length||e.layers.some(function(h,g){return h!==c.layers[g]||h.props.transitions})||e.layerBounds.some(function(h,g){return h!==c.layerBounds[g]});if(e.bounds=c.bounds,e.maskBounds=c.maskBounds,this.channels[e.index]=e,p||f){this.lastViewport=s;var v=G(e.layers,s);if(e.bounds=v&&H(v,s),p||!U(e.bounds,c.bounds)){var _=this.maskPass,m=this.maskMap,d=v&&W({bounds:e.bounds,viewport:s,width:m.width,height:m.height,border:1});e.maskBounds=d?d.getBounds():[0,0,1,1],_.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:i,viewports:d?[d]:[],onViewportActive:o,views:a,moduleParameters:{devicePixelRatio:1}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}},{key:"_sortMaskChannels",value:function(e){var n=this,i={},o=0,a=ea(e),s;try{var f=function(){var d=s.value,h=d.root.id,g=i[h];if(!g){if(++o>4)return it.log.warn("Too many mask layers. The max supported is 4")(),"continue";g={id:h,index:n.channels.findIndex(function(A){return A?.id===h}),layers:[],layerBounds:[],coordinateOrigin:d.root.props.coordinateOrigin,coordinateSystem:d.root.props.coordinateSystem},i[h]=g}g.layers.push(d),g.layerBounds.push(d.getBounds())};for(a.s();!(s=a.n()).done;)var l=f()}catch(m){a.e(m)}finally{a.f()}for(var c=0;c<4;c++){var p=this.channels[c];(!p||!(p.id in i))&&(this.channels[c]=null)}for(var v in i){var _=i[v];_.index<0&&(_.index=this.channels.findIndex(function(m){return!m}),this.channels[_.index]=_)}return i}},{key:"getModuleParameters",value:function(){return{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}},{key:"cleanup",value:function(){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}}]),t}();function ra(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=na(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1247
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function na(t,r){if(t){if(typeof t=="string")return dn(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return dn(t,r)}}function dn(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var ot=2,gn=function(){function t(){(0,mn.default)(this,t),(0,E.default)(this,"id","collision-filter-effect"),(0,E.default)(this,"props",null),(0,E.default)(this,"useInPicking",!0),(0,E.default)(this,"order",1),(0,E.default)(this,"channels",{}),(0,E.default)(this,"collisionFilterPass",void 0),(0,E.default)(this,"collisionFBOs",{}),(0,E.default)(this,"dummyCollisionMap",void 0),(0,E.default)(this,"lastViewport",void 0)}return(0,hn.default)(t,[{key:"preRender",value:function(e,n){var i,o=n.effects,a=n.layers,s=n.layerFilter,f=n.viewports,l=n.onViewportActive,c=n.views,p=n.isPicking,v=n.preRenderStats,_=v===void 0?{}:v;if(this.dummyCollisionMap||(this.dummyCollisionMap=new B.Texture2D(e,{width:1,height:1})),!p){var m=a.filter(function(Ie){var mt=Ie.props,Oi=mt.visible,Ei=mt.collisionEnabled;return Oi&&Ei});if(m.length===0){this.channels={};return}this.collisionFilterPass||(this.collisionFilterPass=new Zr(e,{id:"default-collision-filter"}));var d=o?.filter(function(Ie){return Ie.constructor===Te}),h=(i=_["mask-effect"])===null||i===void 0?void 0:i.didRender,g=this._groupByCollisionGroup(e,m),A=f[0],ne=!this.lastViewport||!this.lastViewport.equals(A)||h;for(var $ in g){var xi=this.collisionFBOs[$],bi=g[$];xi.resize({width:e.canvas.width/ot,height:e.canvas.height/ot}),this._render(bi,{effects:d,layerFilter:s,onViewportActive:l,views:c,viewport:A,viewportChanged:ne})}}}},{key:"_render",value:function(e,n){var i=n.effects,o=n.layerFilter,a=n.onViewportActive,s=n.views,f=n.viewport,l=n.viewportChanged,c=e.collisionGroup,p=this.channels[c];if(p){var v=l||e===p||!(0,yn._deepEqual)(p.layers,e.layers,1)||e.layerBounds.some(function(m,d){return!U(m,p.layerBounds[d])})||e.allLayersLoaded!==p.allLayersLoaded||e.layers.some(function(m){return m.props.transitions});if(this.channels[c]=e,v){this.lastViewport=f;var _=this.collisionFBOs[c];this.collisionFilterPass.renderCollisionMap(_,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:i,layerFilter:o,viewports:f?[f]:[],onViewportActive:a,views:s,moduleParameters:{dummyCollisionMap:this.dummyCollisionMap,devicePixelRatio:(0,B.cssToDeviceRatio)(_.gl)/ot}})}}}},{key:"_groupByCollisionGroup",value:function(e,n){var i={},o=ra(n),a;try{for(o.s();!(a=o.n()).done;){var s=a.value,f=s.props.collisionGroup,l=i[f];l||(l={collisionGroup:f,layers:[],layerBounds:[],allLayersLoaded:!0},i[f]=l),l.layers.push(s),l.layerBounds.push(s.getBounds()),s.isLoaded||(l.allLayersLoaded=!1)}}catch(h){o.e(h)}finally{o.f()}for(var c=0,p=Object.keys(i);c<p.length;c++){var v=p[c];this.collisionFBOs[v]||this.createFBO(e,v),this.channels[v]||(this.channels[v]=i[v])}for(var _=0,m=Object.keys(this.collisionFBOs);_<m.length;_++){var d=m[_];i[d]||this.destroyFBO(d)}return i}},{key:"getModuleParameters",value:function(e){var n=e.props.collisionGroup,i=this.collisionFBOs,o=this.dummyCollisionMap;return{collisionFBO:i[n],dummyCollisionMap:o}}},{key:"cleanup",value:function(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(var e=0,n=Object.keys(this.collisionFBOs);e<n.length;e++){var i=n[e];this.destroyFBO(i)}this.collisionFBOs={},this.lastViewport=void 0}},{key:"createFBO",value:function(e,n){var i,o,a=e.canvas,s=a.width,f=a.height,l=new B.Texture2D(e,{width:s,height:f,parameters:(i={},(0,E.default)(i,10241,9728),(0,E.default)(i,10240,9728),(0,E.default)(i,10242,33071),(0,E.default)(i,10243,33071),i)}),c=new B.Renderbuffer(e,{format:33189,width:s,height:f});this.collisionFBOs[n]=new B.Framebuffer(e,{id:"Collision-".concat(n),width:s,height:f,attachments:(o={},(0,E.default)(o,36064,l),(0,E.default)(o,36096,c),o)})}},{key:"destroyFBO",value:function(e){for(var n=this.collisionFBOs[e],i=0,o=Object.values(n.attachments);i<o.length;i++){var a=o[i];a.delete()}n.delete(),delete this.collisionFBOs[e]}}]),t}();function ia(t){var r=oa();return function(){var n=(0,at.default)(t),i;if(r){var o=(0,at.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,On.default)(this,i)}}function oa(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var aa={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},we=function(t){(0,bn.default)(e,t);var r=ia(e);function e(){return(0,Pn.default)(this,e),r.apply(this,arguments)}return(0,xn.default)(e,[{key:"getShaders",value:function(){return{modules:[Vr]}}},{key:"draw",value:function(i){var o=i.uniforms,a=i.context,s=i.moduleParameters,f=this.props.collisionEnabled,l=s.collisionFBO,c=s.drawToCollisionMap,p=f&&Boolean(l);o.collision_enabled=p,c&&(this.props=this.clone(this.props.collisionTestProps).props)}},{key:"initializeState",value:function(i,o){var a;if(this.getAttributeManager()!==null){(a=this.context.deck)===null||a===void 0||a._addDefaultEffect(new gn);var s=this.getAttributeManager();s.add({collisionPriorities:{size:1,accessor:"getCollisionPriority",shaderAttributes:{collisionPriorities:{divisor:0},instanceCollisionPriorities:{divisor:1}}}})}}},{key:"getNeedsPickingBuffer",value:function(){return this.props.collisionEnabled}}]),e}(En.LayerExtension);(0,st.default)(we,"defaultProps",aa);(0,st.default)(we,"extensionName","CollisionFilterExtension");var Mn=u(x()),An=u(b()),Rn=u(w()),Sn=u(M()),ft=u(T()),lt=u(P()),V=u(y());var Tn=u(y()),sa=`
1248
1248
  uniform vec4 mask_bounds;
1249
1249
  uniform bool mask_maskByInstance;
1250
1250
  vec2 mask_getCoords(vec4 position) {
@@ -1299,7 +1299,7 @@ varying vec2 mask_texCoords;
1299
1299
 
1300
1300
  if (!mask) discard;
1301
1301
  }
1302
- `},ua=function(r){return r&&"maskMap"in r?{mask_texture:r.maskMap}:{}},wn={name:"mask",dependencies:[Tn.project],vs:sa,fs:fa,inject:la,getUniforms:ua};function ca(t){var r=pa();return function(){var n=(0,ft.default)(t),i;if(r){var o=(0,ft.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Sn.default)(this,i)}}function pa(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var va={maskId:"",maskByInstance:void 0,maskInverted:!1},Me=function(t){(0,Rn.default)(e,t);var r=ca(e);function e(){return(0,Mn.default)(this,e),r.apply(this,arguments)}return(0,An.default)(e,[{key:"initializeState",value:function(){var i;(i=this.context.deck)===null||i===void 0||i._addDefaultEffect(new Te)}},{key:"getShaders",value:function(){var i="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(i=Boolean(this.props.maskByInstance)),this.state.maskByInstance=i,{modules:[wn]}}},{key:"draw",value:function(i){var o=i.uniforms,a=i.context,s=i.moduleParameters;o.mask_maskByInstance=this.state.maskByInstance;var f=this.props,l=f.maskId,c=f.maskInverted,p=s.maskChannels,v=a.viewport;if(p&&p[l]){var _=p[l],m=_.index,d=_.bounds,y=_.coordinateOrigin,P=p[l].coordinateSystem;o.mask_enabled=!0,o.mask_channel=m,o.mask_inverted=c,P===V.COORDINATE_SYSTEM.DEFAULT&&(P=v.isGeospatial?V.COORDINATE_SYSTEM.LNGLAT:V.COORDINATE_SYSTEM.CARTESIAN);var A={modelMatrix:null,fromCoordinateOrigin:y,fromCoordinateSystem:P},ne=this.projectPosition([d[0],d[1],0],A),$=this.projectPosition([d[2],d[3],0],A);o.mask_bounds=[ne[0],ne[1],$[0],$[1]]}else l&&V.log.warn("Could not find a mask layer with id: ".concat(l))(),o.mask_enabled=!1}}]),e}(V.LayerExtension);(0,lt.default)(Me,"defaultProps",va);(0,lt.default)(Me,"extensionName","MaskExtension");var mi=u(x()),hi=u(b()),yi=u(w()),gi=u(M()),_t=u(T()),dt=u(g()),Pi=u(h());var ci=u(qe()),pi=u(x()),vi=u(b()),S=u(g()),ke=u(R()),_i=u(h());var kn=u(h()),I={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},Fn=Object.keys(I).map(function(t){return"const float TERRAIN_MODE_".concat(t," = ").concat(I[t],".0;")}).join(`
1302
+ `},ua=function(r){return r&&"maskMap"in r?{mask_texture:r.maskMap}:{}},wn={name:"mask",dependencies:[Tn.project],vs:sa,fs:fa,inject:la,getUniforms:ua};function ca(t){var r=pa();return function(){var n=(0,ft.default)(t),i;if(r){var o=(0,ft.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Sn.default)(this,i)}}function pa(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var va={maskId:"",maskByInstance:void 0,maskInverted:!1},Me=function(t){(0,Rn.default)(e,t);var r=ca(e);function e(){return(0,Mn.default)(this,e),r.apply(this,arguments)}return(0,An.default)(e,[{key:"initializeState",value:function(){var i;(i=this.context.deck)===null||i===void 0||i._addDefaultEffect(new Te)}},{key:"getShaders",value:function(){var i="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(i=Boolean(this.props.maskByInstance)),this.state.maskByInstance=i,{modules:[wn]}}},{key:"draw",value:function(i){var o=i.uniforms,a=i.context,s=i.moduleParameters;o.mask_maskByInstance=this.state.maskByInstance;var f=this.props,l=f.maskId,c=f.maskInverted,p=s.maskChannels,v=a.viewport;if(p&&p[l]){var _=p[l],m=_.index,d=_.bounds,h=_.coordinateOrigin,g=p[l].coordinateSystem;o.mask_enabled=!0,o.mask_channel=m,o.mask_inverted=c,g===V.COORDINATE_SYSTEM.DEFAULT&&(g=v.isGeospatial?V.COORDINATE_SYSTEM.LNGLAT:V.COORDINATE_SYSTEM.CARTESIAN);var A={modelMatrix:null,fromCoordinateOrigin:h,fromCoordinateSystem:g},ne=this.projectPosition([d[0],d[1],0],A),$=this.projectPosition([d[2],d[3],0],A);o.mask_bounds=[ne[0],ne[1],$[0],$[1]]}else l&&V.log.warn("Could not find a mask layer with id: ".concat(l))(),o.mask_enabled=!1}}]),e}(V.LayerExtension);(0,lt.default)(Me,"defaultProps",va);(0,lt.default)(Me,"extensionName","MaskExtension");var mi=u(x()),hi=u(b()),yi=u(w()),gi=u(M()),_t=u(T()),dt=u(P()),Pi=u(y());var ci=u(qe()),pi=u(x()),vi=u(b()),S=u(P()),ke=u(R()),_i=u(y());var kn=u(y()),I={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},Fn=Object.keys(I).map(function(t){return"const float TERRAIN_MODE_".concat(t," = ").concat(I[t],".0;")}).join(`
1303
1303
  `),Ae={name:"terrain",dependencies:[kn.project],inject:{"vs:#decl":`
1304
1304
  uniform float terrain_mode;
1305
1305
  uniform sampler2D terrain_map;
@@ -1351,6 +1351,6 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US
1351
1351
  }
1352
1352
  return;
1353
1353
  }
1354
- `},getUniforms:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;if("dummyHeightMap"in r){var n=r.drawToTerrainHeightMap,i=r.heightMap,o=r.heightMapBounds,a=r.dummyHeightMap,s=r.terrainCover,f=r.useTerrainHeightMap,l=r.terrainSkipRender,c=e.project_uCommonOrigin,p=l?I.SKIP:I.NONE,v=a,_=null;if(n)p=I.WRITE_HEIGHT_MAP,_=o;else if(f&&i)p=I.USE_HEIGHT_MAP,v=i,_=o;else if(s){var m=r.pickingActive;v=m?s.getPickingFramebuffer():s.getRenderFramebuffer(),m&&(p=I.SKIP),v?(p=p===I.SKIP?I.USE_COVER_ONLY:I.USE_COVER,_=s.bounds):v=a}return{terrain_mode:p,terrain_map:v,terrain_bounds:_?[_[0]-c[0],_[1]-c[1],_[2]-_[0],_[3]-_[1]]:[0,0,0,0]}}return null}};var Nn=u(x()),Bn=u(b()),k=u(g());var z=u(g()),K=u(R());function Cn(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function In(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Cn(Object(e),!0).forEach(function(n){(0,z.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Cn(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function te(t,r){var e;return new K.Framebuffer(t,{id:r.id,attachments:(0,z.default)({},36064,new K.Texture2D(t,In(In({},r.float&&{format:(0,K.isWebGL2)(t)?34836:6408,type:5126}),{},{mipmaps:!1,parameters:(e={},(0,z.default)(e,10241,9729),(0,z.default)(e,10240,9729),(0,z.default)(e,10242,33071),(0,z.default)(e,10243,33071),e)})))})}function _a(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=da(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1355
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function da(t,r){if(t){if(typeof t=="string")return Ln(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Ln(t,r)}}function Ln(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var Dn=function(){function t(r){(0,Nn.default)(this,t),(0,k.default)(this,"isDirty",!0),(0,k.default)(this,"targetLayer",void 0),(0,k.default)(this,"renderViewport",null),(0,k.default)(this,"bounds",null),(0,k.default)(this,"fbo",void 0),(0,k.default)(this,"pickingFbo",void 0),(0,k.default)(this,"layers",[]),(0,k.default)(this,"tile",void 0),(0,k.default)(this,"targetBounds",null),(0,k.default)(this,"targetBoundsCommon",null),this.targetLayer=r,this.tile=jn(r)}return(0,Bn.default)(t,[{key:"id",get:function(){return this.targetLayer.id}},{key:"isActive",get:function(){return Boolean(this.targetLayer.getCurrentLayer())}},{key:"shouldUpdate",value:function(e){var n=e.targetLayer,i=e.viewport,o=e.layers,a=e.layerNeedsRedraw;n&&(this.targetLayer=n);var s=i?this._updateViewport(i):!1,f=o?this._updateLayers(o):!1;if(a){var l=_a(this.layers),c;try{for(l.s();!(c=l.n()).done;){var p=c.value;if(a[p]){f=!0;break}}}catch(v){l.e(v)}finally{l.f()}}return f||s}},{key:"_updateLayers",value:function(e){var n=!1;if(e=this.tile?ma(this.tile,e):e,e.length!==this.layers.length)n=!0;else for(var i=0;i<e.length;i++){var o=e[i].id;if(o!==this.layers[i]){n=!0;break}}return n&&(this.layers=e.map(function(a){return a.id})),n}},{key:"_updateViewport",value:function(e){var n=this.targetLayer,i=!1;if(this.targetBounds!==n.getBounds()&&(i=!0,this.targetBounds=n.getBounds(),this.targetBoundsCommon=G([n],e)),!this.targetBoundsCommon)return!1;var o=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{var a,s=(a=this.renderViewport)===null||a===void 0?void 0:a.zoom;i=i||o!==s;var f=H(this.targetBoundsCommon,e),l=this.bounds;i=i||!l||f.some(function(c,p){return c!==l[p]}),this.bounds=f}return i&&(this.renderViewport=W({bounds:this.bounds,zoom:o,viewport:e})),i}},{key:"getRenderFramebuffer",value:function(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=te(this.targetLayer.context.gl,{id:this.id})),this.fbo)}},{key:"getPickingFramebuffer",value:function(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=te(this.targetLayer.context.gl,{id:"".concat(this.id,"-picking")})),this.pickingFbo)}},{key:"filterLayers",value:function(e){var n=this;return e.filter(function(i){var o=i.id;return n.layers.includes(o)})}},{key:"delete",value:function(){var e=this.fbo,n=this.pickingFbo;e&&(e.texture.delete(),e.delete()),n&&(n.texture.delete(),n.delete())}}]),t}();function ma(t,r){return r.filter(function(e){var n=jn(e);return n?ha(t.bbox,n.bbox):!0})}function jn(t){for(;t;){var r=t.props.tile;if(r)return r;t=t.parent}return null}function ha(t,r){return"west"in t&&"west"in r?t.west<r.east&&r.west<t.east&&t.south<r.north&&r.south<t.north:"left"in t&&"left"in r?t.left<r.right&&r.left<t.right&&t.top<r.bottom&&r.top<t.bottom:!1}var zn=u(g()),Un=u(x()),qn=u(b()),Gn=u(w()),Wn=u(M()),ut=u(T()),ct=u(R()),Hn=u(h());function Vn(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Re(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Vn(Object(e),!0).forEach(function(n){(0,zn.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Vn(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function ya(t){var r=ga();return function(){var n=(0,ut.default)(t),i;if(r){var o=(0,ut.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Wn.default)(this,i)}}function ga(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Kn=function(t){(0,Gn.default)(e,t);var r=ya(e);function e(){return(0,Un.default)(this,e),r.apply(this,arguments)}return(0,qn.default)(e,[{key:"getRenderableLayers",value:function(i,o){for(var a=o.layers,s=[],f=this._getDrawLayerParams(i,o,!0),l=0;l<a.length;l++){var c=a[l];!c.isComposite&&f[l].shouldDrawLayer&&s.push(c)}return s}},{key:"renderHeightMap",value:function(i,o){var a=this,s=i.getRenderFramebuffer(),f=i.renderViewport;!s||!f||(s.resize(f),(0,ct.withParameters)(this.gl,{clearColor:[0,0,0,0],blend:!0,blendFunc:[1,1],blendEquation:32776,depthTest:!1},function(){return a.render(Re(Re({},o),{},{target:s,pass:"terrain-height-map",layers:o.layers,viewports:[f],effects:[]}))}))}},{key:"renderTerrainCover",value:function(i,o){var a=this,s=i.getRenderFramebuffer(),f=i.renderViewport;if(!(!s||!f)){var l=i.filterLayers(o.layers);s.resize(f),(0,ct.withParameters)(this.gl,{depthTest:!1},function(){return a.render(Re(Re({},o),{},{target:s,pass:"terrain-cover-".concat(i.id),layers:l,effects:[],viewports:[f]}))})}}}]),e}(Hn._LayersPass);var Zn=u(x()),Xn=u(b()),Jn=u(fe()),Qn=u(rt()),ei=u(w()),ti=u(M()),Se=u(T()),pt=u(g()),ri=u(h()),ni=u(R());function Yn(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function $n(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Yn(Object(e),!0).forEach(function(n){(0,pt.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Yn(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Pa(t){var r=xa();return function(){var n=(0,Se.default)(t),i;if(r){var o=(0,Se.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,ti.default)(this,i)}}function xa(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var ii=function(t){(0,ei.default)(e,t);var r=Pa(e);function e(){var n;(0,Zn.default)(this,e);for(var i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];return n=r.call.apply(r,[this].concat(o)),(0,pt.default)((0,Jn.default)(n),"drawParameters",{}),n}return(0,Xn.default)(e,[{key:"getRenderableLayers",value:function(i,o){var a=o.layers,s=[];this.drawParameters={},this._resetColorEncoder(o.pickZ);for(var f=this._getDrawLayerParams(i,o),l=0;l<a.length;l++){var c=a[l];!c.isComposite&&f[l].shouldDrawLayer&&(s.push(c),this.drawParameters[c.id]=f[l].layerParameters)}return s}},{key:"renderTerrainCover",value:function(i,o){var a=this,s=i.getPickingFramebuffer(),f=i.renderViewport;if(!(!s||!f)){var l=i.filterLayers(o.layers),c=i.targetLayer;c.props.pickable&&l.unshift(c),s.resize(f),(0,ni.withParameters)(this.gl,{depthTest:!1},function(){return a.render($n($n({},o),{},{pickingFBO:s,pass:"terrain-cover-picking-".concat(i.id),layers:l,effects:[],viewports:[f],cullRect:void 0,deviceRect:f,pickZ:!1}))})}}},{key:"getLayerParameters",value:function(i,o,a){if(this.drawParameters[i.id])return this.drawParameters[i.id];var s=(0,Qn.default)((0,Se.default)(e.prototype),"getLayerParameters",this).call(this,i,o,a);return s.blend=!0,s}}]),e}(ri._PickLayersPass);var ai=u(x()),si=u(b()),D=u(g()),fi=u(R());var oi=2048,vt=function(){function t(r){(0,ai.default)(this,t),(0,D.default)(this,"renderViewport",null),(0,D.default)(this,"bounds",null),(0,D.default)(this,"fbo",void 0),(0,D.default)(this,"gl",void 0),(0,D.default)(this,"layers",[]),(0,D.default)(this,"layersBounds",[]),(0,D.default)(this,"layersBoundsCommon",null),(0,D.default)(this,"lastViewport",null),this.gl=r}return(0,si.default)(t,[{key:"getRenderFramebuffer",value:function(){return this.renderViewport?(this.fbo||(this.fbo=te(this.gl,{id:"height-map",float:!0})),this.fbo):null}},{key:"shouldUpdate",value:function(e){var n=this,i=e.layers,o=e.viewport,a=i.length!==this.layers.length||i.some(function(v,_){return v!==n.layers[_]||v.props.transitions||v.getBounds()!==n.layersBounds[_]});a&&(this.layers=i,this.layersBounds=i.map(function(v){return v.getBounds()}),this.layersBoundsCommon=G(i,o));var s=!this.lastViewport||!o.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(a||s){var f=H(this.layersBoundsCommon,o);this.bounds=f,this.lastViewport=o;var l=o.scale,c=(f[2]-f[0])*l,p=(f[3]-f[1])*l;return this.renderViewport=c>0||p>0?W({bounds:[o.center[0]-1,o.center[1]-1,o.center[0]+1,o.center[1]+1],zoom:o.zoom,width:Math.min(c,oi),height:Math.min(p,oi),viewport:o}):null,!0}return!1}},{key:"delete",value:function(){this.fbo&&(this.fbo.color.delete(),this.fbo.delete())}}],[{key:"isSupported",value:function(e){return fi.Framebuffer.isSupported(e,{colorBufferFloat:!0})}}]),t}();function li(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Fe(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?li(Object(e),!0).forEach(function(n){(0,S.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):li(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Y(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=ba(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1356
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function ba(t,r){if(t){if(typeof t=="string")return ui(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ui(t,r)}}function ui(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var di=function(){function t(){(0,pi.default)(this,t),(0,S.default)(this,"id","terrain-effect"),(0,S.default)(this,"props",null),(0,S.default)(this,"useInPicking",!0),(0,S.default)(this,"isPicking",!1),(0,S.default)(this,"isDrapingEnabled",!1),(0,S.default)(this,"dummyHeightMap",void 0),(0,S.default)(this,"heightMap",void 0),(0,S.default)(this,"terrainPass",void 0),(0,S.default)(this,"terrainPickingPass",void 0),(0,S.default)(this,"terrainCovers",new Map)}return(0,vi.default)(t,[{key:"initialize",value:function(e){this.dummyHeightMap=new ke.Texture2D(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Kn(e,{id:"terrain"}),this.terrainPickingPass=new ii(e,{id:"terrain-picking"}),vt.isSupported(e)?this.heightMap=new vt(e):_i.log.warn("Terrain offset mode is not supported by this browser")(),ke.ProgramManager.getDefaultProgramManager(e).addDefaultModule(Ae)}},{key:"preRender",value:function(e,n){if(!this.dummyHeightMap){this.initialize(e);var i=Y(n.layers),o;try{for(i.s();!(o=i.n()).done;){var a=o.value;a.props.operation.includes("terrain")&&a.setChangeFlags({extensionsChanged:!0})}}catch(d){i.e(d)}finally{i.f()}}if(n.pickZ){this.isDrapingEnabled=!1;return}var s=n.viewports,f=n.isPicking,l=f===void 0?!1:f;this.isPicking=l,this.isDrapingEnabled=!0;var c=s[0],p=(l?this.terrainPickingPass:this.terrainPass).getRenderableLayers(c,n),v=p.filter(function(d){return d.props.operation.includes("terrain")});if(v.length!==0){if(!l){var _=p.filter(function(d){return d.state.terrainDrawMode==="offset"});_.length>0&&this._updateHeightMap(v,c,n)}var m=p.filter(function(d){return d.state.terrainDrawMode==="drape"});this._updateTerrainCovers(v,m,c,n)}}},{key:"getModuleParameters",value:function(e){var n,i,o=e.state.terrainDrawMode;return{heightMap:(n=this.heightMap)===null||n===void 0?void 0:n.getRenderFramebuffer(),heightMapBounds:(i=this.heightMap)===null||i===void 0?void 0:i.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap:o==="offset",terrainSkipRender:o==="drape"||!e.props.operation.includes("draw")}}},{key:"cleanup",value:function(){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);var e=Y(this.terrainCovers.values()),n;try{for(e.s();!(n=e.n()).done;){var i=n.value;i.delete()}}catch(o){e.e(o)}finally{e.f()}this.terrainCovers.clear()}},{key:"_updateHeightMap",value:function(e,n,i){if(this.heightMap){var o=this.heightMap.shouldUpdate({layers:e,viewport:n});o&&this.terrainPass.renderHeightMap(this.heightMap,Fe(Fe({},i),{},{layers:e,moduleParameters:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,devicePixelRatio:1,drawToTerrainHeightMap:!0}}))}}},{key:"_updateTerrainCovers",value:function(e,n,i,o){var a={},s=Y(n),f;try{for(s.s();!(f=s.n()).done;){var l=f.value;l.state.terrainCoverNeedsRedraw&&(a[l.id]=!0,l.state.terrainCoverNeedsRedraw=!1)}}catch(y){s.e(y)}finally{s.f()}var c=Y(this.terrainCovers.values()),p;try{for(c.s();!(p=c.n()).done;){var v=p.value;v.isDirty=v.isDirty||v.shouldUpdate({layerNeedsRedraw:a})}}catch(y){c.e(y)}finally{c.f()}var _=Y(e),m;try{for(_.s();!(m=_.n()).done;){var d=m.value;this._updateTerrainCover(d,n,i,o)}}catch(y){_.e(y)}finally{_.f()}this.isPicking||this._pruneTerrainCovers()}},{key:"_updateTerrainCover",value:function(e,n,i,o){var a=this.isPicking?this.terrainPickingPass:this.terrainPass,s=this.terrainCovers.get(e.id);s||(s=new Dn(e),this.terrainCovers.set(e.id,s));try{var f=s.shouldUpdate({targetLayer:e,viewport:i,layers:n});(this.isPicking||s.isDirty||f)&&(a.renderTerrainCover(s,Fe(Fe({},o),{},{layers:n,moduleParameters:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1,devicePixelRatio:1}})),s.isDirty=!1)}catch(l){e.raiseError(l,"Error rendering terrain cover ".concat(s.id))}}},{key:"_pruneTerrainCovers",value:function(){var e=[],n=Y(this.terrainCovers),i;try{for(n.s();!(i=n.n()).done;){var o=(0,ci.default)(i.value,2),a=o[0],s=o[1];s.isActive||e.push(a)}}catch(p){n.e(p)}finally{n.f()}for(var f=0,l=e;f<l.length;f++){var c=l[f];this.terrainCovers.delete(c)}}}]),t}();function Oa(t){var r=Ea();return function(){var n=(0,_t.default)(t),i;if(r){var o=(0,_t.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,gi.default)(this,i)}}function Ea(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Ta={terrainDrawMode:void 0},Ce=function(t){(0,yi.default)(e,t);var r=Oa(e);function e(){return(0,mi.default)(this,e),r.apply(this,arguments)}return(0,hi.default)(e,[{key:"getShaders",value:function(){return{modules:[Ae]}}},{key:"initializeState",value:function(){var i;(i=this.context.deck)===null||i===void 0||i._addDefaultEffect(new di)}},{key:"updateState",value:function(i){var o=i.props,a=i.oldProps;if(!(this.state.terrainDrawMode&&o.terrainDrawMode===a.terrainDrawMode&&o.extruded===a.extruded)){var s=o.terrainDrawMode;if(!s){var f,l=this.props.extruded,c=(f=this.getAttributeManager())===null||f===void 0?void 0:f.attributes,p=c&&"instancePositions"in c;s=l||p?"offset":"drape"}this.setState({terrainDrawMode:s})}}},{key:"onNeedsRedraw",value:function(){var i=this.state;i.terrainDrawMode==="drape"&&(i.terrainCoverNeedsRedraw=!0)}}]),e}(Pi.LayerExtension);(0,dt.default)(Ce,"defaultProps",Ta);(0,dt.default)(Ce,"extensionName","TerrainExtension");return Fi(re);})();
1354
+ `},getUniforms:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;if("dummyHeightMap"in r){var n=r.drawToTerrainHeightMap,i=r.heightMap,o=r.heightMapBounds,a=r.dummyHeightMap,s=r.terrainCover,f=r.useTerrainHeightMap,l=r.terrainSkipRender,c=e.project_uCommonOrigin,p=l?I.SKIP:I.NONE,v=a,_=null;if(n)p=I.WRITE_HEIGHT_MAP,_=o;else if(f&&i)p=I.USE_HEIGHT_MAP,v=i,_=o;else if(s){var m=r.pickingActive;v=m?s.getPickingFramebuffer():s.getRenderFramebuffer(),m&&(p=I.SKIP),v?(p=p===I.SKIP?I.USE_COVER_ONLY:I.USE_COVER,_=s.bounds):v=a}return{terrain_mode:p,terrain_map:v,terrain_bounds:_?[_[0]-c[0],_[1]-c[1],_[2]-_[0],_[3]-_[1]]:[0,0,0,0]}}return null}};var Nn=u(x()),Bn=u(b()),k=u(P());var z=u(P()),K=u(R());function Cn(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function In(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Cn(Object(e),!0).forEach(function(n){(0,z.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Cn(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function te(t,r){var e;return new K.Framebuffer(t,{id:r.id,attachments:(0,z.default)({},36064,new K.Texture2D(t,In(In({},r.float&&{format:(0,K.isWebGL2)(t)?34836:6408,type:5126}),{},{mipmaps:!1,parameters:(e={},(0,z.default)(e,10241,9729),(0,z.default)(e,10240,9729),(0,z.default)(e,10242,33071),(0,z.default)(e,10243,33071),e)})))})}function _a(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=da(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1355
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function da(t,r){if(t){if(typeof t=="string")return Ln(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Ln(t,r)}}function Ln(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var Dn=function(){function t(r){(0,Nn.default)(this,t),(0,k.default)(this,"isDirty",!0),(0,k.default)(this,"targetLayer",void 0),(0,k.default)(this,"renderViewport",null),(0,k.default)(this,"bounds",null),(0,k.default)(this,"fbo",void 0),(0,k.default)(this,"pickingFbo",void 0),(0,k.default)(this,"layers",[]),(0,k.default)(this,"tile",void 0),(0,k.default)(this,"targetBounds",null),(0,k.default)(this,"targetBoundsCommon",null),this.targetLayer=r,this.tile=jn(r)}return(0,Bn.default)(t,[{key:"id",get:function(){return this.targetLayer.id}},{key:"isActive",get:function(){return Boolean(this.targetLayer.getCurrentLayer())}},{key:"shouldUpdate",value:function(e){var n=e.targetLayer,i=e.viewport,o=e.layers,a=e.layerNeedsRedraw;n&&(this.targetLayer=n);var s=i?this._updateViewport(i):!1,f=o?this._updateLayers(o):!1;if(a){var l=_a(this.layers),c;try{for(l.s();!(c=l.n()).done;){var p=c.value;if(a[p]){f=!0;break}}}catch(v){l.e(v)}finally{l.f()}}return f||s}},{key:"_updateLayers",value:function(e){var n=!1;if(e=this.tile?ma(this.tile,e):e,e.length!==this.layers.length)n=!0;else for(var i=0;i<e.length;i++){var o=e[i].id;if(o!==this.layers[i]){n=!0;break}}return n&&(this.layers=e.map(function(a){return a.id})),n}},{key:"_updateViewport",value:function(e){var n=this.targetLayer,i=!1;if(this.targetBounds!==n.getBounds()&&(i=!0,this.targetBounds=n.getBounds(),this.targetBoundsCommon=G([n],e)),!this.targetBoundsCommon)return!1;var o=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{var a,s=(a=this.renderViewport)===null||a===void 0?void 0:a.zoom;i=i||o!==s;var f=H(this.targetBoundsCommon,e),l=this.bounds;i=i||!l||f.some(function(c,p){return c!==l[p]}),this.bounds=f}return i&&(this.renderViewport=W({bounds:this.bounds,zoom:o,viewport:e})),i}},{key:"getRenderFramebuffer",value:function(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=te(this.targetLayer.context.gl,{id:this.id})),this.fbo)}},{key:"getPickingFramebuffer",value:function(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=te(this.targetLayer.context.gl,{id:"".concat(this.id,"-picking")})),this.pickingFbo)}},{key:"filterLayers",value:function(e){var n=this;return e.filter(function(i){var o=i.id;return n.layers.includes(o)})}},{key:"delete",value:function(){var e=this.fbo,n=this.pickingFbo;e&&(e.texture.delete(),e.delete()),n&&(n.texture.delete(),n.delete())}}]),t}();function ma(t,r){return r.filter(function(e){var n=jn(e);return n?ha(t.bbox,n.bbox):!0})}function jn(t){for(;t;){var r=t.props.tile;if(r)return r;t=t.parent}return null}function ha(t,r){return"west"in t&&"west"in r?t.west<r.east&&r.west<t.east&&t.south<r.north&&r.south<t.north:"left"in t&&"left"in r?t.left<r.right&&r.left<t.right&&t.top<r.bottom&&r.top<t.bottom:!1}var zn=u(P()),Un=u(x()),qn=u(b()),Gn=u(w()),Wn=u(M()),ut=u(T()),ct=u(R()),Hn=u(y());function Vn(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Re(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Vn(Object(e),!0).forEach(function(n){(0,zn.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Vn(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function ya(t){var r=ga();return function(){var n=(0,ut.default)(t),i;if(r){var o=(0,ut.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,Wn.default)(this,i)}}function ga(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Kn=function(t){(0,Gn.default)(e,t);var r=ya(e);function e(){return(0,Un.default)(this,e),r.apply(this,arguments)}return(0,qn.default)(e,[{key:"getRenderableLayers",value:function(i,o){for(var a=o.layers,s=[],f=this._getDrawLayerParams(i,o,!0),l=0;l<a.length;l++){var c=a[l];!c.isComposite&&f[l].shouldDrawLayer&&s.push(c)}return s}},{key:"renderHeightMap",value:function(i,o){var a=this,s=i.getRenderFramebuffer(),f=i.renderViewport;!s||!f||(s.resize(f),(0,ct.withParameters)(this.gl,{clearColor:[0,0,0,0],blend:!0,blendFunc:[1,1],blendEquation:32776,depthTest:!1},function(){return a.render(Re(Re({},o),{},{target:s,pass:"terrain-height-map",layers:o.layers,viewports:[f],effects:[]}))}))}},{key:"renderTerrainCover",value:function(i,o){var a=this,s=i.getRenderFramebuffer(),f=i.renderViewport;if(!(!s||!f)){var l=i.filterLayers(o.layers);s.resize(f),(0,ct.withParameters)(this.gl,{depthTest:!1},function(){return a.render(Re(Re({},o),{},{target:s,pass:"terrain-cover-".concat(i.id),layers:l,effects:[],viewports:[f]}))})}}}]),e}(Hn._LayersPass);var Zn=u(x()),Xn=u(b()),Jn=u(fe()),Qn=u(rt()),ei=u(w()),ti=u(M()),Se=u(T()),pt=u(P()),ri=u(y()),ni=u(R());function Yn(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function $n(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Yn(Object(e),!0).forEach(function(n){(0,pt.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Yn(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Pa(t){var r=xa();return function(){var n=(0,Se.default)(t),i;if(r){var o=(0,Se.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,ti.default)(this,i)}}function xa(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var ii=function(t){(0,ei.default)(e,t);var r=Pa(e);function e(){var n;(0,Zn.default)(this,e);for(var i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];return n=r.call.apply(r,[this].concat(o)),(0,pt.default)((0,Jn.default)(n),"drawParameters",{}),n}return(0,Xn.default)(e,[{key:"getRenderableLayers",value:function(i,o){var a=o.layers,s=[];this.drawParameters={},this._resetColorEncoder(o.pickZ);for(var f=this._getDrawLayerParams(i,o),l=0;l<a.length;l++){var c=a[l];!c.isComposite&&f[l].shouldDrawLayer&&(s.push(c),this.drawParameters[c.id]=f[l].layerParameters)}return s}},{key:"renderTerrainCover",value:function(i,o){var a=this,s=i.getPickingFramebuffer(),f=i.renderViewport;if(!(!s||!f)){var l=i.filterLayers(o.layers),c=i.targetLayer;c.props.pickable&&l.unshift(c),s.resize(f),(0,ni.withParameters)(this.gl,{depthTest:!1},function(){return a.render($n($n({},o),{},{pickingFBO:s,pass:"terrain-cover-picking-".concat(i.id),layers:l,effects:[],viewports:[f],cullRect:void 0,deviceRect:f,pickZ:!1}))})}}},{key:"getLayerParameters",value:function(i,o,a){if(this.drawParameters[i.id])return this.drawParameters[i.id];var s=(0,Qn.default)((0,Se.default)(e.prototype),"getLayerParameters",this).call(this,i,o,a);return s.blend=!0,s}}]),e}(ri._PickLayersPass);var ai=u(x()),si=u(b()),D=u(P()),fi=u(R());var oi=2048,vt=function(){function t(r){(0,ai.default)(this,t),(0,D.default)(this,"renderViewport",null),(0,D.default)(this,"bounds",null),(0,D.default)(this,"fbo",void 0),(0,D.default)(this,"gl",void 0),(0,D.default)(this,"layers",[]),(0,D.default)(this,"layersBounds",[]),(0,D.default)(this,"layersBoundsCommon",null),(0,D.default)(this,"lastViewport",null),this.gl=r}return(0,si.default)(t,[{key:"getRenderFramebuffer",value:function(){return this.renderViewport?(this.fbo||(this.fbo=te(this.gl,{id:"height-map",float:!0})),this.fbo):null}},{key:"shouldUpdate",value:function(e){var n=this,i=e.layers,o=e.viewport,a=i.length!==this.layers.length||i.some(function(v,_){return v!==n.layers[_]||v.props.transitions||v.getBounds()!==n.layersBounds[_]});a&&(this.layers=i,this.layersBounds=i.map(function(v){return v.getBounds()}),this.layersBoundsCommon=G(i,o));var s=!this.lastViewport||!o.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(a||s){var f=H(this.layersBoundsCommon,o);this.bounds=f,this.lastViewport=o;var l=o.scale,c=(f[2]-f[0])*l,p=(f[3]-f[1])*l;return this.renderViewport=c>0||p>0?W({bounds:[o.center[0]-1,o.center[1]-1,o.center[0]+1,o.center[1]+1],zoom:o.zoom,width:Math.min(c,oi),height:Math.min(p,oi),viewport:o}):null,!0}return!1}},{key:"delete",value:function(){this.fbo&&(this.fbo.color.delete(),this.fbo.delete())}}],[{key:"isSupported",value:function(e){return fi.Framebuffer.isSupported(e,{colorBufferFloat:!0})}}]),t}();function li(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Fe(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?li(Object(e),!0).forEach(function(n){(0,S.default)(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):li(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function Y(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=ba(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1356
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,s;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,s=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw s}}}}function ba(t,r){if(t){if(typeof t=="string")return ui(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ui(t,r)}}function ui(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var di=function(){function t(){(0,pi.default)(this,t),(0,S.default)(this,"id","terrain-effect"),(0,S.default)(this,"props",null),(0,S.default)(this,"useInPicking",!0),(0,S.default)(this,"isPicking",!1),(0,S.default)(this,"isDrapingEnabled",!1),(0,S.default)(this,"dummyHeightMap",void 0),(0,S.default)(this,"heightMap",void 0),(0,S.default)(this,"terrainPass",void 0),(0,S.default)(this,"terrainPickingPass",void 0),(0,S.default)(this,"terrainCovers",new Map)}return(0,vi.default)(t,[{key:"initialize",value:function(e){this.dummyHeightMap=new ke.Texture2D(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Kn(e,{id:"terrain"}),this.terrainPickingPass=new ii(e,{id:"terrain-picking"}),vt.isSupported(e)?this.heightMap=new vt(e):_i.log.warn("Terrain offset mode is not supported by this browser")(),ke.ProgramManager.getDefaultProgramManager(e).addDefaultModule(Ae)}},{key:"preRender",value:function(e,n){if(!this.dummyHeightMap){this.initialize(e);var i=Y(n.layers),o;try{for(i.s();!(o=i.n()).done;){var a=o.value;a.props.operation.includes("terrain")&&a.setChangeFlags({extensionsChanged:!0})}}catch(d){i.e(d)}finally{i.f()}}if(n.pickZ){this.isDrapingEnabled=!1;return}var s=n.viewports,f=n.isPicking,l=f===void 0?!1:f;this.isPicking=l,this.isDrapingEnabled=!0;var c=s[0],p=(l?this.terrainPickingPass:this.terrainPass).getRenderableLayers(c,n),v=p.filter(function(d){return d.props.operation.includes("terrain")});if(v.length!==0){if(!l){var _=p.filter(function(d){return d.state.terrainDrawMode==="offset"});_.length>0&&this._updateHeightMap(v,c,n)}var m=p.filter(function(d){return d.state.terrainDrawMode==="drape"});this._updateTerrainCovers(v,m,c,n)}}},{key:"getModuleParameters",value:function(e){var n,i,o=e.state.terrainDrawMode;return{heightMap:(n=this.heightMap)===null||n===void 0?void 0:n.getRenderFramebuffer(),heightMapBounds:(i=this.heightMap)===null||i===void 0?void 0:i.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap:o==="offset",terrainSkipRender:o==="drape"||!e.props.operation.includes("draw")}}},{key:"cleanup",value:function(){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);var e=Y(this.terrainCovers.values()),n;try{for(e.s();!(n=e.n()).done;){var i=n.value;i.delete()}}catch(o){e.e(o)}finally{e.f()}this.terrainCovers.clear()}},{key:"_updateHeightMap",value:function(e,n,i){if(this.heightMap){var o=this.heightMap.shouldUpdate({layers:e,viewport:n});o&&this.terrainPass.renderHeightMap(this.heightMap,Fe(Fe({},i),{},{layers:e,moduleParameters:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,devicePixelRatio:1,drawToTerrainHeightMap:!0}}))}}},{key:"_updateTerrainCovers",value:function(e,n,i,o){var a={},s=Y(n),f;try{for(s.s();!(f=s.n()).done;){var l=f.value;l.state.terrainCoverNeedsRedraw&&(a[l.id]=!0,l.state.terrainCoverNeedsRedraw=!1)}}catch(h){s.e(h)}finally{s.f()}var c=Y(this.terrainCovers.values()),p;try{for(c.s();!(p=c.n()).done;){var v=p.value;v.isDirty=v.isDirty||v.shouldUpdate({layerNeedsRedraw:a})}}catch(h){c.e(h)}finally{c.f()}var _=Y(e),m;try{for(_.s();!(m=_.n()).done;){var d=m.value;this._updateTerrainCover(d,n,i,o)}}catch(h){_.e(h)}finally{_.f()}this.isPicking||this._pruneTerrainCovers()}},{key:"_updateTerrainCover",value:function(e,n,i,o){var a=this.isPicking?this.terrainPickingPass:this.terrainPass,s=this.terrainCovers.get(e.id);s||(s=new Dn(e),this.terrainCovers.set(e.id,s));try{var f=s.shouldUpdate({targetLayer:e,viewport:i,layers:n});(this.isPicking||s.isDirty||f)&&(a.renderTerrainCover(s,Fe(Fe({},o),{},{layers:n,moduleParameters:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1,devicePixelRatio:1}})),s.isDirty=!1)}catch(l){e.raiseError(l,"Error rendering terrain cover ".concat(s.id))}}},{key:"_pruneTerrainCovers",value:function(){var e=[],n=Y(this.terrainCovers),i;try{for(n.s();!(i=n.n()).done;){var o=(0,ci.default)(i.value,2),a=o[0],s=o[1];s.isActive||e.push(a)}}catch(p){n.e(p)}finally{n.f()}for(var f=0,l=e;f<l.length;f++){var c=l[f];this.terrainCovers.delete(c)}}}]),t}();function Oa(t){var r=Ea();return function(){var n=(0,_t.default)(t),i;if(r){var o=(0,_t.default)(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return(0,gi.default)(this,i)}}function Ea(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Ta={terrainDrawMode:void 0},Ce=function(t){(0,yi.default)(e,t);var r=Oa(e);function e(){return(0,mi.default)(this,e),r.apply(this,arguments)}return(0,hi.default)(e,[{key:"getShaders",value:function(){return{modules:[Ae]}}},{key:"initializeState",value:function(){var i;(i=this.context.deck)===null||i===void 0||i._addDefaultEffect(new di)}},{key:"updateState",value:function(i){var o=i.props,a=i.oldProps;if(!(this.state.terrainDrawMode&&o.terrainDrawMode===a.terrainDrawMode&&o.extruded===a.extruded)){var s=o.terrainDrawMode;if(!s){var f,l=this.props.extruded,c=(f=this.getAttributeManager())===null||f===void 0?void 0:f.attributes,p=c&&"instancePositions"in c;s=l||p?"offset":"drape"}this.setState({terrainDrawMode:s})}}},{key:"onNeedsRedraw",value:function(){var i=this.state;i.terrainDrawMode==="drape"&&(i.terrainCoverNeedsRedraw=!0)}}]),e}(Pi.LayerExtension);(0,dt.default)(Ce,"defaultProps",Ta);(0,dt.default)(Ce,"extensionName","TerrainExtension");return Fi(re);})();
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@deck.gl/extensions",
3
3
  "description": "Plug-and-play functionalities for deck.gl layers",
4
4
  "license": "MIT",
5
- "version": "8.9.0-beta.3",
5
+ "version": "8.9.0-beta.4",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -40,5 +40,5 @@
40
40
  "@math.gl/web-mercator": "^3.6.2",
41
41
  "gl-matrix": "^3.0.0"
42
42
  },
43
- "gitHead": "da509f9b00415a8d0700951663b65b59077c0cae"
43
+ "gitHead": "f7c0eeaed1e62b0ae44ee45136b444f647e6cbd9"
44
44
  }
@@ -129,7 +129,7 @@ export default class CollisionFilterEffect implements Effect {
129
129
  // If render info is new
130
130
  renderInfo === oldRenderInfo ||
131
131
  // If sublayers have changed
132
- !deepEqual(oldRenderInfo.layers, renderInfo.layers, 0) ||
132
+ !deepEqual(oldRenderInfo.layers, renderInfo.layers, 1) ||
133
133
  // If a sublayer's bounds have been updated
134
134
  renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i])) ||
135
135
  // If a sublayer's isLoaded state has been updated
@@ -28,7 +28,7 @@ import type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/cor
28
28
 
29
29
  const defaultProps = {
30
30
  getFilterValue: {type: 'accessor', value: 0},
31
- onFilteredItemsChange: {type: 'function', value: null, compare: false},
31
+ onFilteredItemsChange: {type: 'function', value: null, optional: true},
32
32
 
33
33
  filterEnabled: true,
34
34
  filterRange: [-1, 1],
@@ -124,7 +124,17 @@ export default class MaskEffect implements Effect {
124
124
  // If a channel is new
125
125
  channelInfo === oldChannelInfo ||
126
126
  // If sublayers have changed
127
- oldChannelInfo.layers.length !== channelInfo.layers.length ||
127
+ channelInfo.layers.length !== oldChannelInfo.layers.length ||
128
+ channelInfo.layers.some(
129
+ (layer, i) =>
130
+ // Layer instance is updated
131
+ // Layer props might have changed
132
+ // Undetermined props could have an effect on the output geometry of a mask layer,
133
+ // for example getRadius+updateTriggers, radiusScale, modelMatrix
134
+ layer !== oldChannelInfo.layers[i] ||
135
+ // Some prop is in transition
136
+ layer.props.transitions
137
+ ) ||
128
138
  // If a sublayer's positions have been updated, the cached bounds will change shallowly
129
139
  channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);
130
140
 
@@ -70,7 +70,7 @@ export default class DataFilterExtension extends LayerExtension<DataFilterExtens
70
70
  onFilteredItemsChange: {
71
71
  type: string;
72
72
  value: null;
73
- compare: boolean;
73
+ optional: boolean;
74
74
  };
75
75
  filterEnabled: boolean;
76
76
  filterRange: number[];
@@ -1 +1 @@
1
- {"version":3,"file":"mask-effect.d.ts","sourceRoot":"","sources":["../../src/mask/mask-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAM,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAiD,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAGjG,aAAK,IAAI,GAAG;IACV,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAaF,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,UAAW,YAAW,MAAM;IAC/C,EAAE,SAAiB;IACnB,KAAK,OAAQ;IACb,YAAY,UAAQ;IACpB,KAAK,SAAK;IAEV,OAAO,CAAC,YAAY,CAAC,CAAY;IACjC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAW;IAEhC,SAAS,CACP,EAAE,EAAE,qBAAqB,EACzB,EAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAC,EAAE,gBAAgB,GACrF,kBAAkB;IAqDrB,OAAO,CAAC,cAAc;IAsFtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA4CzB,mBAAmB,IAAI;QACrB,OAAO,EAAE,SAAS,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;KAC3C;IAOD,OAAO,IAAI,IAAI;CAgBhB"}
1
+ {"version":3,"file":"mask-effect.d.ts","sourceRoot":"","sources":["../../src/mask/mask-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAM,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAiD,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAGjG,aAAK,IAAI,GAAG;IACV,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAaF,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,UAAW,YAAW,MAAM;IAC/C,EAAE,SAAiB;IACnB,KAAK,OAAQ;IACb,YAAY,UAAQ;IACpB,KAAK,SAAK;IAEV,OAAO,CAAC,YAAY,CAAC,CAAY;IACjC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAW;IAEhC,SAAS,CACP,EAAE,EAAE,qBAAqB,EACzB,EAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAC,EAAE,gBAAgB,GACrF,kBAAkB;IAqDrB,OAAO,CAAC,cAAc;IAgGtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA4CzB,mBAAmB,IAAI;QACrB,OAAO,EAAE,SAAS,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;KAC3C;IAOD,OAAO,IAAI,IAAI;CAgBhB"}