@deck.gl/extensions 8.7.0-beta.1 → 8.7.0-beta.5

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
@@ -16799,7 +16799,7 @@ __webpack_require__.r(__webpack_exports__);
16799
16799
 
16800
16800
 
16801
16801
  const defaultProps = {
16802
- maskEnabled: true
16802
+ maskId: ''
16803
16803
  };
16804
16804
  class MaskExtension extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["LayerExtension"] {
16805
16805
  getShaders() {
@@ -16818,17 +16818,50 @@ class MaskExtension extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["LayerExt
16818
16818
 
16819
16819
  draw({
16820
16820
  uniforms,
16821
+ context,
16821
16822
  moduleParameters
16822
16823
  }) {
16823
16824
  uniforms.mask_maskByInstance = this.state.maskByInstance;
16824
16825
  const {
16825
- maskBounds
16826
+ maskId
16827
+ } = this.props;
16828
+ const {
16829
+ maskChannels
16826
16830
  } = moduleParameters;
16831
+ const {
16832
+ viewport
16833
+ } = context;
16827
16834
 
16828
- if (maskBounds) {
16829
- const bl = this.projectPosition([maskBounds[0], maskBounds[1], 0]);
16830
- const tr = this.projectPosition([maskBounds[2], maskBounds[3], 0]);
16835
+ if (maskChannels && maskChannels[maskId]) {
16836
+ const {
16837
+ index,
16838
+ bounds,
16839
+ coordinateOrigin: fromCoordinateOrigin
16840
+ } = maskChannels[maskId];
16841
+ let {
16842
+ coordinateSystem: fromCoordinateSystem
16843
+ } = maskChannels[maskId];
16844
+ uniforms.mask_enabled = true;
16845
+ uniforms.mask_channel = index;
16846
+
16847
+ if (fromCoordinateSystem === _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["COORDINATE_SYSTEM"].DEFAULT) {
16848
+ fromCoordinateSystem = viewport.isGeospatial ? _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["COORDINATE_SYSTEM"].LNGLAT : _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["COORDINATE_SYSTEM"].CARTESIAN;
16849
+ }
16850
+
16851
+ const opts = {
16852
+ modelMatrix: null,
16853
+ fromCoordinateOrigin,
16854
+ fromCoordinateSystem
16855
+ };
16856
+ const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);
16857
+ const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);
16831
16858
  uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];
16859
+ } else {
16860
+ if (maskId) {
16861
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].warn(`Could not find a mask layer with id: ${maskId}`)();
16862
+ }
16863
+
16864
+ uniforms.mask_enabled = false;
16832
16865
  }
16833
16866
  }
16834
16867
 
@@ -16859,13 +16892,24 @@ vec2 mask_getCoords(vec4 position) {
16859
16892
  `;
16860
16893
  const fs = `
16861
16894
  uniform sampler2D mask_texture;
16895
+ uniform int mask_channel;
16862
16896
  uniform bool mask_enabled;
16863
16897
  bool mask_isInBounds(vec2 texCoords) {
16864
16898
  if (!mask_enabled) {
16865
16899
  return true;
16866
16900
  }
16867
16901
  vec4 maskColor = texture2D(mask_texture, texCoords);
16868
- return maskColor.a > 0.5;
16902
+ float maskValue = 1.0;
16903
+ if (mask_channel == 0) {
16904
+ maskValue = maskColor.r;
16905
+ } else if (mask_channel == 1) {
16906
+ maskValue = maskColor.g;
16907
+ } else if (mask_channel == 2) {
16908
+ maskValue = maskColor.b;
16909
+ } else if (mask_channel == 3) {
16910
+ maskValue = maskColor.a;
16911
+ }
16912
+ return maskValue < 0.5;
16869
16913
  }
16870
16914
  `;
16871
16915
  const inject = {
@@ -16897,11 +16941,10 @@ varying vec2 mask_texCoords;
16897
16941
  `
16898
16942
  };
16899
16943
 
16900
- const getMaskUniforms = (opts = {}, context = {}) => {
16944
+ const getMaskUniforms = (opts = {}) => {
16901
16945
  const uniforms = {};
16902
16946
 
16903
16947
  if (opts.maskMap) {
16904
- uniforms.mask_enabled = opts.maskEnabled !== false;
16905
16948
  uniforms.mask_texture = opts.maskMap;
16906
16949
  }
16907
16950
 
@@ -26,7 +26,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
26
26
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
27
27
 
28
28
  var defaultProps = {
29
- maskEnabled: true
29
+ maskId: ''
30
30
  };
31
31
 
32
32
  var MaskExtension = function (_LayerExtension) {
@@ -57,14 +57,40 @@ var MaskExtension = function (_LayerExtension) {
57
57
  key: "draw",
58
58
  value: function draw(_ref) {
59
59
  var uniforms = _ref.uniforms,
60
+ context = _ref.context,
60
61
  moduleParameters = _ref.moduleParameters;
61
62
  uniforms.mask_maskByInstance = this.state.maskByInstance;
62
- var maskBounds = moduleParameters.maskBounds;
63
-
64
- if (maskBounds) {
65
- var bl = this.projectPosition([maskBounds[0], maskBounds[1], 0]);
66
- var tr = this.projectPosition([maskBounds[2], maskBounds[3], 0]);
63
+ var maskId = this.props.maskId;
64
+ var maskChannels = moduleParameters.maskChannels;
65
+ var viewport = context.viewport;
66
+
67
+ if (maskChannels && maskChannels[maskId]) {
68
+ var _maskChannels$maskId = maskChannels[maskId],
69
+ index = _maskChannels$maskId.index,
70
+ bounds = _maskChannels$maskId.bounds,
71
+ fromCoordinateOrigin = _maskChannels$maskId.coordinateOrigin;
72
+ var fromCoordinateSystem = maskChannels[maskId].coordinateSystem;
73
+ uniforms.mask_enabled = true;
74
+ uniforms.mask_channel = index;
75
+
76
+ if (fromCoordinateSystem === _core.COORDINATE_SYSTEM.DEFAULT) {
77
+ fromCoordinateSystem = viewport.isGeospatial ? _core.COORDINATE_SYSTEM.LNGLAT : _core.COORDINATE_SYSTEM.CARTESIAN;
78
+ }
79
+
80
+ var opts = {
81
+ modelMatrix: null,
82
+ fromCoordinateOrigin: fromCoordinateOrigin,
83
+ fromCoordinateSystem: fromCoordinateSystem
84
+ };
85
+ var bl = this.projectPosition([bounds[0], bounds[1], 0], opts);
86
+ var tr = this.projectPosition([bounds[2], bounds[3], 0], opts);
67
87
  uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];
88
+ } else {
89
+ if (maskId) {
90
+ _core.log.warn("Could not find a mask layer with id: ".concat(maskId))();
91
+ }
92
+
93
+ uniforms.mask_enabled = false;
68
94
  }
69
95
  }
70
96
  }]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mask/mask.js"],"names":["defaultProps","maskEnabled","MaskExtension","maskByInstance","getAttributeManager","attributes","props","state","modules","mask","uniforms","moduleParameters","mask_maskByInstance","maskBounds","bl","projectPosition","tr","mask_bounds","LayerExtension","extensionName"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,WAAW,EAAE;AADM,CAArB;;IAIqBC,a;;;;;;;;;;;;WACnB,sBAAa;AAEX,UAAIC,cAAc,IAAG,uBAAuB,KAAKC,mBAAL,GAA2BC,UAArD,CAAlB;;AAEA,UAAI,oBAAoB,KAAKC,KAA7B,EAAoC;AAClCH,QAAAA,cAAc,GAAG,KAAKG,KAAL,CAAWH,cAA5B;AACD;;AACD,WAAKI,KAAL,CAAWJ,cAAX,GAA4BA,cAA5B;AAEA,aAAO;AACLK,QAAAA,OAAO,EAAE,CAACC,qBAAD;AADJ,OAAP;AAGD;;;WAED,oBAAmC;AAAA,UAA7BC,QAA6B,QAA7BA,QAA6B;AAAA,UAAnBC,gBAAmB,QAAnBA,gBAAmB;AACjCD,MAAAA,QAAQ,CAACE,mBAAT,GAA+B,KAAKL,KAAL,CAAWJ,cAA1C;AACA,UAAOU,UAAP,GAAqBF,gBAArB,CAAOE,UAAP;;AACA,UAAIA,UAAJ,EAAgB;AACd,YAAMC,EAAE,GAAG,KAAKC,eAAL,CAAqB,CAACF,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAX;AACA,YAAMG,EAAE,GAAG,KAAKD,eAAL,CAAqB,CAACF,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAX;AACAH,QAAAA,QAAQ,CAACO,WAAT,GAAuB,CAACH,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAeE,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB,CAAvB;AACD;AACF;;;EAvBwCE,oB;;;AA0B3ChB,aAAa,CAACiB,aAAd,GAA8B,eAA9B;AACAjB,aAAa,CAACF,YAAd,GAA6BA,YAA7B","sourcesContent":["import {LayerExtension} from '@deck.gl/core';\nimport mask from './shader-module';\n\nconst defaultProps = {\n maskEnabled: true\n};\n\nexport default class MaskExtension extends LayerExtension {\n getShaders() {\n // Infer by geometry if 'maskByInstance' prop isn't explictly set\n let maskByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `maskByInstance` prop\n if ('maskByInstance' in this.props) {\n maskByInstance = this.props.maskByInstance;\n }\n this.state.maskByInstance = maskByInstance;\n\n return {\n modules: [mask]\n };\n }\n\n draw({uniforms, moduleParameters}) {\n uniforms.mask_maskByInstance = this.state.maskByInstance;\n const {maskBounds} = moduleParameters;\n if (maskBounds) {\n const bl = this.projectPosition([maskBounds[0], maskBounds[1], 0]);\n const tr = this.projectPosition([maskBounds[2], maskBounds[3], 0]);\n uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];\n }\n }\n}\n\nMaskExtension.extensionName = 'MaskExtension';\nMaskExtension.defaultProps = defaultProps;\n"],"file":"mask.js"}
1
+ {"version":3,"sources":["../../../src/mask/mask.js"],"names":["defaultProps","maskId","MaskExtension","maskByInstance","getAttributeManager","attributes","props","state","modules","mask","uniforms","context","moduleParameters","mask_maskByInstance","maskChannels","viewport","index","bounds","fromCoordinateOrigin","coordinateOrigin","fromCoordinateSystem","coordinateSystem","mask_enabled","mask_channel","COORDINATE_SYSTEM","DEFAULT","isGeospatial","LNGLAT","CARTESIAN","opts","modelMatrix","bl","projectPosition","tr","mask_bounds","log","warn","LayerExtension","extensionName"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,MAAM,EAAE;AADW,CAArB;;IAIqBC,a;;;;;;;;;;;;WACnB,sBAAa;AAEX,UAAIC,cAAc,IAAG,uBAAuB,KAAKC,mBAAL,GAA2BC,UAArD,CAAlB;;AAEA,UAAI,oBAAoB,KAAKC,KAA7B,EAAoC;AAClCH,QAAAA,cAAc,GAAG,KAAKG,KAAL,CAAWH,cAA5B;AACD;;AACD,WAAKI,KAAL,CAAWJ,cAAX,GAA4BA,cAA5B;AAEA,aAAO;AACLK,QAAAA,OAAO,EAAE,CAACC,qBAAD;AADJ,OAAP;AAGD;;;WAED,oBAA4C;AAAA,UAAtCC,QAAsC,QAAtCA,QAAsC;AAAA,UAA5BC,OAA4B,QAA5BA,OAA4B;AAAA,UAAnBC,gBAAmB,QAAnBA,gBAAmB;AAC1CF,MAAAA,QAAQ,CAACG,mBAAT,GAA+B,KAAKN,KAAL,CAAWJ,cAA1C;AACA,UAAOF,MAAP,GAAiB,KAAKK,KAAtB,CAAOL,MAAP;AACA,UAAOa,YAAP,GAAuBF,gBAAvB,CAAOE,YAAP;AACA,UAAOC,QAAP,GAAmBJ,OAAnB,CAAOI,QAAP;;AACA,UAAID,YAAY,IAAIA,YAAY,CAACb,MAAD,CAAhC,EAA0C;AACxC,mCAAgEa,YAAY,CAACb,MAAD,CAA5E;AAAA,YAAOe,KAAP,wBAAOA,KAAP;AAAA,YAAcC,MAAd,wBAAcA,MAAd;AAAA,YAAwCC,oBAAxC,wBAAsBC,gBAAtB;AACA,YAAuBC,oBAAvB,GAA+CN,YAAY,CAACb,MAAD,CAA3D,CAAKoB,gBAAL;AACAX,QAAAA,QAAQ,CAACY,YAAT,GAAwB,IAAxB;AACAZ,QAAAA,QAAQ,CAACa,YAAT,GAAwBP,KAAxB;;AAEA,YAAII,oBAAoB,KAAKI,wBAAkBC,OAA/C,EAAwD;AACtDL,UAAAA,oBAAoB,GAAGL,QAAQ,CAACW,YAAT,GACnBF,wBAAkBG,MADC,GAEnBH,wBAAkBI,SAFtB;AAGD;;AACD,YAAMC,IAAI,GAAG;AAACC,UAAAA,WAAW,EAAE,IAAd;AAAoBZ,UAAAA,oBAAoB,EAApBA,oBAApB;AAA0CE,UAAAA,oBAAoB,EAApBA;AAA1C,SAAb;AACA,YAAMW,EAAE,GAAG,KAAKC,eAAL,CAAqB,CAACf,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,EAAuB,CAAvB,CAArB,EAAgDY,IAAhD,CAAX;AACA,YAAMI,EAAE,GAAG,KAAKD,eAAL,CAAqB,CAACf,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,EAAuB,CAAvB,CAArB,EAAgDY,IAAhD,CAAX;AACAnB,QAAAA,QAAQ,CAACwB,WAAT,GAAuB,CAACH,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAeE,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB,CAAvB;AACD,OAfD,MAeO;AACL,YAAIhC,MAAJ,EAAY;AACVkC,oBAAIC,IAAJ,gDAAiDnC,MAAjD;AACD;;AACDS,QAAAA,QAAQ,CAACY,YAAT,GAAwB,KAAxB;AACD;AACF;;;EAzCwCe,oB;;;AA4C3CnC,aAAa,CAACoC,aAAd,GAA8B,eAA9B;AACApC,aAAa,CAACF,YAAd,GAA6BA,YAA7B","sourcesContent":["import {COORDINATE_SYSTEM, LayerExtension, log} from '@deck.gl/core';\nimport mask from './shader-module';\n\nconst defaultProps = {\n maskId: ''\n};\n\nexport default class MaskExtension extends LayerExtension {\n getShaders() {\n // Infer by geometry if 'maskByInstance' prop isn't explictly set\n let maskByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `maskByInstance` prop\n if ('maskByInstance' in this.props) {\n maskByInstance = this.props.maskByInstance;\n }\n this.state.maskByInstance = maskByInstance;\n\n return {\n modules: [mask]\n };\n }\n\n draw({uniforms, context, moduleParameters}) {\n uniforms.mask_maskByInstance = this.state.maskByInstance;\n const {maskId} = this.props;\n const {maskChannels} = moduleParameters;\n const {viewport} = context;\n if (maskChannels && maskChannels[maskId]) {\n const {index, bounds, coordinateOrigin: fromCoordinateOrigin} = maskChannels[maskId];\n let {coordinateSystem: fromCoordinateSystem} = maskChannels[maskId];\n uniforms.mask_enabled = true;\n uniforms.mask_channel = index;\n\n if (fromCoordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n fromCoordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n const opts = {modelMatrix: null, fromCoordinateOrigin, fromCoordinateSystem};\n const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);\n const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);\n uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];\n } else {\n if (maskId) {\n log.warn(`Could not find a mask layer with id: ${maskId}`)();\n }\n uniforms.mask_enabled = false;\n }\n }\n}\n\nMaskExtension.extensionName = 'MaskExtension';\nMaskExtension.defaultProps = defaultProps;\n"],"file":"mask.js"}
@@ -8,7 +8,7 @@ exports.default = void 0;
8
8
  var _core = require("@deck.gl/core");
9
9
 
10
10
  var vs = "\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n";
11
- var fs = "\nuniform sampler2D mask_texture;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n return maskColor.a > 0.5;\n}\n";
11
+ var fs = "\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n return maskValue < 0.5;\n}\n";
12
12
  var inject = {
13
13
  'vs:#decl': "\nvarying vec2 mask_texCoords;\n",
14
14
  'vs:#main-end': "\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n",
@@ -18,11 +18,9 @@ var inject = {
18
18
 
19
19
  var getMaskUniforms = function getMaskUniforms() {
20
20
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21
- var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
22
21
  var uniforms = {};
23
22
 
24
23
  if (opts.maskMap) {
25
- uniforms.mask_enabled = opts.maskEnabled !== false;
26
24
  uniforms.mask_texture = opts.maskMap;
27
25
  }
28
26
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mask/shader-module.js"],"names":["vs","fs","inject","getMaskUniforms","opts","context","uniforms","maskMap","mask_enabled","maskEnabled","mask_texture","name","dependencies","project","getUniforms"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,EAAE,4LAAR;AAQA,IAAMC,EAAE,mPAAR;AAYA,IAAMC,MAAM,GAAG;AACb,gDADa;AAIb,oSAJa;AAab,gDAba;AAgBb;AAhBa,CAAf;;AA6BA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,GAA6B;AAAA,MAA5BC,IAA4B,uEAArB,EAAqB;AAAA,MAAjBC,OAAiB,uEAAP,EAAO;AACnD,MAAMC,QAAQ,GAAG,EAAjB;;AACA,MAAIF,IAAI,CAACG,OAAT,EAAkB;AAChBD,IAAAA,QAAQ,CAACE,YAAT,GAAwBJ,IAAI,CAACK,WAAL,KAAqB,KAA7C;AACAH,IAAAA,QAAQ,CAACI,YAAT,GAAwBN,IAAI,CAACG,OAA7B;AACD;;AACD,SAAOD,QAAP;AACD,CAPD;;eASe;AACbK,EAAAA,IAAI,EAAE,MADO;AAEbC,EAAAA,YAAY,EAAE,CAACC,aAAD,CAFD;AAGbb,EAAAA,EAAE,EAAFA,EAHa;AAIbC,EAAAA,EAAE,EAAFA,EAJa;AAKbC,EAAAA,MAAM,EAANA,MALa;AAMbY,EAAAA,WAAW,EAAEX;AANA,C","sourcesContent":["import {project} from '@deck.gl/core';\n\nconst vs = `\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n`;\n\nconst fs = `\nuniform sampler2D mask_texture;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n return maskColor.a > 0.5;\n}\n`;\n\nconst inject = {\n 'vs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'vs:#main-end': `\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n`,\n 'fs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'fs:#main-start': `\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // gl_FragColor = vec4(mask_texCoords, 0.0, 1.0);\n gl_FragColor = texture2D(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n`\n};\n\nconst getMaskUniforms = (opts = {}, context = {}) => {\n const uniforms = {};\n if (opts.maskMap) {\n uniforms.mask_enabled = opts.maskEnabled !== false;\n uniforms.mask_texture = opts.maskMap;\n }\n return uniforms;\n};\n\nexport default {\n name: 'mask',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: getMaskUniforms\n};\n"],"file":"shader-module.js"}
1
+ {"version":3,"sources":["../../../src/mask/shader-module.js"],"names":["vs","fs","inject","getMaskUniforms","opts","uniforms","maskMap","mask_texture","name","dependencies","project","getUniforms"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,EAAE,4LAAR;AAQA,IAAMC,EAAE,wiBAAR;AAuBA,IAAMC,MAAM,GAAG;AACb,gDADa;AAIb,oSAJa;AAab,gDAba;AAgBb;AAhBa,CAAf;;AA6BA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,GAAe;AAAA,MAAdC,IAAc,uEAAP,EAAO;AACrC,MAAMC,QAAQ,GAAG,EAAjB;;AACA,MAAID,IAAI,CAACE,OAAT,EAAkB;AAChBD,IAAAA,QAAQ,CAACE,YAAT,GAAwBH,IAAI,CAACE,OAA7B;AACD;;AACD,SAAOD,QAAP;AACD,CAND;;eAQe;AACbG,EAAAA,IAAI,EAAE,MADO;AAEbC,EAAAA,YAAY,EAAE,CAACC,aAAD,CAFD;AAGbV,EAAAA,EAAE,EAAFA,EAHa;AAIbC,EAAAA,EAAE,EAAFA,EAJa;AAKbC,EAAAA,MAAM,EAANA,MALa;AAMbS,EAAAA,WAAW,EAAER;AANA,C","sourcesContent":["import {project} from '@deck.gl/core';\n\nconst vs = `\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n`;\n\nconst fs = `\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n return maskValue < 0.5;\n}\n`;\n\nconst inject = {\n 'vs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'vs:#main-end': `\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n`,\n 'fs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'fs:#main-start': `\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // gl_FragColor = vec4(mask_texCoords, 0.0, 1.0);\n gl_FragColor = texture2D(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n`\n};\n\nconst getMaskUniforms = (opts = {}) => {\n const uniforms = {};\n if (opts.maskMap) {\n uniforms.mask_texture = opts.maskMap;\n }\n return uniforms;\n};\n\nexport default {\n name: 'mask',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: getMaskUniforms\n};\n"],"file":"shader-module.js"}
@@ -1,7 +1,7 @@
1
- import { LayerExtension } from '@deck.gl/core';
1
+ import { COORDINATE_SYSTEM, LayerExtension, log } from '@deck.gl/core';
2
2
  import mask from './shader-module';
3
3
  const defaultProps = {
4
- maskEnabled: true
4
+ maskId: ''
5
5
  };
6
6
  export default class MaskExtension extends LayerExtension {
7
7
  getShaders() {
@@ -19,17 +19,50 @@ export default class MaskExtension extends LayerExtension {
19
19
 
20
20
  draw({
21
21
  uniforms,
22
+ context,
22
23
  moduleParameters
23
24
  }) {
24
25
  uniforms.mask_maskByInstance = this.state.maskByInstance;
25
26
  const {
26
- maskBounds
27
+ maskId
28
+ } = this.props;
29
+ const {
30
+ maskChannels
27
31
  } = moduleParameters;
32
+ const {
33
+ viewport
34
+ } = context;
35
+
36
+ if (maskChannels && maskChannels[maskId]) {
37
+ const {
38
+ index,
39
+ bounds,
40
+ coordinateOrigin: fromCoordinateOrigin
41
+ } = maskChannels[maskId];
42
+ let {
43
+ coordinateSystem: fromCoordinateSystem
44
+ } = maskChannels[maskId];
45
+ uniforms.mask_enabled = true;
46
+ uniforms.mask_channel = index;
28
47
 
29
- if (maskBounds) {
30
- const bl = this.projectPosition([maskBounds[0], maskBounds[1], 0]);
31
- const tr = this.projectPosition([maskBounds[2], maskBounds[3], 0]);
48
+ if (fromCoordinateSystem === COORDINATE_SYSTEM.DEFAULT) {
49
+ fromCoordinateSystem = viewport.isGeospatial ? COORDINATE_SYSTEM.LNGLAT : COORDINATE_SYSTEM.CARTESIAN;
50
+ }
51
+
52
+ const opts = {
53
+ modelMatrix: null,
54
+ fromCoordinateOrigin,
55
+ fromCoordinateSystem
56
+ };
57
+ const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);
58
+ const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);
32
59
  uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];
60
+ } else {
61
+ if (maskId) {
62
+ log.warn("Could not find a mask layer with id: ".concat(maskId))();
63
+ }
64
+
65
+ uniforms.mask_enabled = false;
33
66
  }
34
67
  }
35
68
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mask/mask.js"],"names":["LayerExtension","mask","defaultProps","maskEnabled","MaskExtension","getShaders","maskByInstance","getAttributeManager","attributes","props","state","modules","draw","uniforms","moduleParameters","mask_maskByInstance","maskBounds","bl","projectPosition","tr","mask_bounds","extensionName"],"mappings":"AAAA,SAAQA,cAAR,QAA6B,eAA7B;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AAEA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,WAAW,EAAE;AADM,CAArB;AAIA,eAAe,MAAMC,aAAN,SAA4BJ,cAA5B,CAA2C;AACxDK,EAAAA,UAAU,GAAG;AAEX,QAAIC,cAAc,IAAG,uBAAuB,KAAKC,mBAAL,GAA2BC,UAArD,CAAlB;;AAEA,QAAI,oBAAoB,KAAKC,KAA7B,EAAoC;AAClCH,MAAAA,cAAc,GAAG,KAAKG,KAAL,CAAWH,cAA5B;AACD;;AACD,SAAKI,KAAL,CAAWJ,cAAX,GAA4BA,cAA5B;AAEA,WAAO;AACLK,MAAAA,OAAO,EAAE,CAACV,IAAD;AADJ,KAAP;AAGD;;AAEDW,EAAAA,IAAI,CAAC;AAACC,IAAAA,QAAD;AAAWC,IAAAA;AAAX,GAAD,EAA+B;AACjCD,IAAAA,QAAQ,CAACE,mBAAT,GAA+B,KAAKL,KAAL,CAAWJ,cAA1C;AACA,UAAM;AAACU,MAAAA;AAAD,QAAeF,gBAArB;;AACA,QAAIE,UAAJ,EAAgB;AACd,YAAMC,EAAE,GAAG,KAAKC,eAAL,CAAqB,CAACF,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAX;AACA,YAAMG,EAAE,GAAG,KAAKD,eAAL,CAAqB,CAACF,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAX;AACAH,MAAAA,QAAQ,CAACO,WAAT,GAAuB,CAACH,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAeE,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB,CAAvB;AACD;AACF;;AAvBuD;AA0B1Df,aAAa,CAACiB,aAAd,GAA8B,eAA9B;AACAjB,aAAa,CAACF,YAAd,GAA6BA,YAA7B","sourcesContent":["import {LayerExtension} from '@deck.gl/core';\nimport mask from './shader-module';\n\nconst defaultProps = {\n maskEnabled: true\n};\n\nexport default class MaskExtension extends LayerExtension {\n getShaders() {\n // Infer by geometry if 'maskByInstance' prop isn't explictly set\n let maskByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `maskByInstance` prop\n if ('maskByInstance' in this.props) {\n maskByInstance = this.props.maskByInstance;\n }\n this.state.maskByInstance = maskByInstance;\n\n return {\n modules: [mask]\n };\n }\n\n draw({uniforms, moduleParameters}) {\n uniforms.mask_maskByInstance = this.state.maskByInstance;\n const {maskBounds} = moduleParameters;\n if (maskBounds) {\n const bl = this.projectPosition([maskBounds[0], maskBounds[1], 0]);\n const tr = this.projectPosition([maskBounds[2], maskBounds[3], 0]);\n uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];\n }\n }\n}\n\nMaskExtension.extensionName = 'MaskExtension';\nMaskExtension.defaultProps = defaultProps;\n"],"file":"mask.js"}
1
+ {"version":3,"sources":["../../../src/mask/mask.js"],"names":["COORDINATE_SYSTEM","LayerExtension","log","mask","defaultProps","maskId","MaskExtension","getShaders","maskByInstance","getAttributeManager","attributes","props","state","modules","draw","uniforms","context","moduleParameters","mask_maskByInstance","maskChannels","viewport","index","bounds","coordinateOrigin","fromCoordinateOrigin","coordinateSystem","fromCoordinateSystem","mask_enabled","mask_channel","DEFAULT","isGeospatial","LNGLAT","CARTESIAN","opts","modelMatrix","bl","projectPosition","tr","mask_bounds","warn","extensionName"],"mappings":"AAAA,SAAQA,iBAAR,EAA2BC,cAA3B,EAA2CC,GAA3C,QAAqD,eAArD;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AAEA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,MAAM,EAAE;AADW,CAArB;AAIA,eAAe,MAAMC,aAAN,SAA4BL,cAA5B,CAA2C;AACxDM,EAAAA,UAAU,GAAG;AAEX,QAAIC,cAAc,IAAG,uBAAuB,KAAKC,mBAAL,GAA2BC,UAArD,CAAlB;;AAEA,QAAI,oBAAoB,KAAKC,KAA7B,EAAoC;AAClCH,MAAAA,cAAc,GAAG,KAAKG,KAAL,CAAWH,cAA5B;AACD;;AACD,SAAKI,KAAL,CAAWJ,cAAX,GAA4BA,cAA5B;AAEA,WAAO;AACLK,MAAAA,OAAO,EAAE,CAACV,IAAD;AADJ,KAAP;AAGD;;AAEDW,EAAAA,IAAI,CAAC;AAACC,IAAAA,QAAD;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA;AAApB,GAAD,EAAwC;AAC1CF,IAAAA,QAAQ,CAACG,mBAAT,GAA+B,KAAKN,KAAL,CAAWJ,cAA1C;AACA,UAAM;AAACH,MAAAA;AAAD,QAAW,KAAKM,KAAtB;AACA,UAAM;AAACQ,MAAAA;AAAD,QAAiBF,gBAAvB;AACA,UAAM;AAACG,MAAAA;AAAD,QAAaJ,OAAnB;;AACA,QAAIG,YAAY,IAAIA,YAAY,CAACd,MAAD,CAAhC,EAA0C;AACxC,YAAM;AAACgB,QAAAA,KAAD;AAAQC,QAAAA,MAAR;AAAgBC,QAAAA,gBAAgB,EAAEC;AAAlC,UAA0DL,YAAY,CAACd,MAAD,CAA5E;AACA,UAAI;AAACoB,QAAAA,gBAAgB,EAAEC;AAAnB,UAA2CP,YAAY,CAACd,MAAD,CAA3D;AACAU,MAAAA,QAAQ,CAACY,YAAT,GAAwB,IAAxB;AACAZ,MAAAA,QAAQ,CAACa,YAAT,GAAwBP,KAAxB;;AAEA,UAAIK,oBAAoB,KAAK1B,iBAAiB,CAAC6B,OAA/C,EAAwD;AACtDH,QAAAA,oBAAoB,GAAGN,QAAQ,CAACU,YAAT,GACnB9B,iBAAiB,CAAC+B,MADC,GAEnB/B,iBAAiB,CAACgC,SAFtB;AAGD;;AACD,YAAMC,IAAI,GAAG;AAACC,QAAAA,WAAW,EAAE,IAAd;AAAoBV,QAAAA,oBAApB;AAA0CE,QAAAA;AAA1C,OAAb;AACA,YAAMS,EAAE,GAAG,KAAKC,eAAL,CAAqB,CAACd,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,EAAuB,CAAvB,CAArB,EAAgDW,IAAhD,CAAX;AACA,YAAMI,EAAE,GAAG,KAAKD,eAAL,CAAqB,CAACd,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,EAAuB,CAAvB,CAArB,EAAgDW,IAAhD,CAAX;AACAlB,MAAAA,QAAQ,CAACuB,WAAT,GAAuB,CAACH,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAeE,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB,CAAvB;AACD,KAfD,MAeO;AACL,UAAIhC,MAAJ,EAAY;AACVH,QAAAA,GAAG,CAACqC,IAAJ,gDAAiDlC,MAAjD;AACD;;AACDU,MAAAA,QAAQ,CAACY,YAAT,GAAwB,KAAxB;AACD;AACF;;AAzCuD;AA4C1DrB,aAAa,CAACkC,aAAd,GAA8B,eAA9B;AACAlC,aAAa,CAACF,YAAd,GAA6BA,YAA7B","sourcesContent":["import {COORDINATE_SYSTEM, LayerExtension, log} from '@deck.gl/core';\nimport mask from './shader-module';\n\nconst defaultProps = {\n maskId: ''\n};\n\nexport default class MaskExtension extends LayerExtension {\n getShaders() {\n // Infer by geometry if 'maskByInstance' prop isn't explictly set\n let maskByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `maskByInstance` prop\n if ('maskByInstance' in this.props) {\n maskByInstance = this.props.maskByInstance;\n }\n this.state.maskByInstance = maskByInstance;\n\n return {\n modules: [mask]\n };\n }\n\n draw({uniforms, context, moduleParameters}) {\n uniforms.mask_maskByInstance = this.state.maskByInstance;\n const {maskId} = this.props;\n const {maskChannels} = moduleParameters;\n const {viewport} = context;\n if (maskChannels && maskChannels[maskId]) {\n const {index, bounds, coordinateOrigin: fromCoordinateOrigin} = maskChannels[maskId];\n let {coordinateSystem: fromCoordinateSystem} = maskChannels[maskId];\n uniforms.mask_enabled = true;\n uniforms.mask_channel = index;\n\n if (fromCoordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n fromCoordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n const opts = {modelMatrix: null, fromCoordinateOrigin, fromCoordinateSystem};\n const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);\n const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);\n uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];\n } else {\n if (maskId) {\n log.warn(`Could not find a mask layer with id: ${maskId}`)();\n }\n uniforms.mask_enabled = false;\n }\n }\n}\n\nMaskExtension.extensionName = 'MaskExtension';\nMaskExtension.defaultProps = defaultProps;\n"],"file":"mask.js"}
@@ -1,6 +1,6 @@
1
1
  import { project } from '@deck.gl/core';
2
2
  const vs = "\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n";
3
- const fs = "\nuniform sampler2D mask_texture;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n return maskColor.a > 0.5;\n}\n";
3
+ const fs = "\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n return maskValue < 0.5;\n}\n";
4
4
  const inject = {
5
5
  'vs:#decl': "\nvarying vec2 mask_texCoords;\n",
6
6
  'vs:#main-end': "\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n",
@@ -8,11 +8,10 @@ const inject = {
8
8
  'fs:#main-start': "\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // gl_FragColor = vec4(mask_texCoords, 0.0, 1.0);\n gl_FragColor = texture2D(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n"
9
9
  };
10
10
 
11
- const getMaskUniforms = (opts = {}, context = {}) => {
11
+ const getMaskUniforms = (opts = {}) => {
12
12
  const uniforms = {};
13
13
 
14
14
  if (opts.maskMap) {
15
- uniforms.mask_enabled = opts.maskEnabled !== false;
16
15
  uniforms.mask_texture = opts.maskMap;
17
16
  }
18
17
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mask/shader-module.js"],"names":["project","vs","fs","inject","getMaskUniforms","opts","context","uniforms","maskMap","mask_enabled","maskEnabled","mask_texture","name","dependencies","getUniforms"],"mappings":"AAAA,SAAQA,OAAR,QAAsB,eAAtB;AAEA,MAAMC,EAAE,4LAAR;AAQA,MAAMC,EAAE,mPAAR;AAYA,MAAMC,MAAM,GAAG;AACb,gDADa;AAIb,oSAJa;AAab,gDAba;AAgBb;AAhBa,CAAf;;AA6BA,MAAMC,eAAe,GAAG,CAACC,IAAI,GAAG,EAAR,EAAYC,OAAO,GAAG,EAAtB,KAA6B;AACnD,QAAMC,QAAQ,GAAG,EAAjB;;AACA,MAAIF,IAAI,CAACG,OAAT,EAAkB;AAChBD,IAAAA,QAAQ,CAACE,YAAT,GAAwBJ,IAAI,CAACK,WAAL,KAAqB,KAA7C;AACAH,IAAAA,QAAQ,CAACI,YAAT,GAAwBN,IAAI,CAACG,OAA7B;AACD;;AACD,SAAOD,QAAP;AACD,CAPD;;AASA,eAAe;AACbK,EAAAA,IAAI,EAAE,MADO;AAEbC,EAAAA,YAAY,EAAE,CAACb,OAAD,CAFD;AAGbC,EAAAA,EAHa;AAIbC,EAAAA,EAJa;AAKbC,EAAAA,MALa;AAMbW,EAAAA,WAAW,EAAEV;AANA,CAAf","sourcesContent":["import {project} from '@deck.gl/core';\n\nconst vs = `\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n`;\n\nconst fs = `\nuniform sampler2D mask_texture;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n return maskColor.a > 0.5;\n}\n`;\n\nconst inject = {\n 'vs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'vs:#main-end': `\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n`,\n 'fs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'fs:#main-start': `\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // gl_FragColor = vec4(mask_texCoords, 0.0, 1.0);\n gl_FragColor = texture2D(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n`\n};\n\nconst getMaskUniforms = (opts = {}, context = {}) => {\n const uniforms = {};\n if (opts.maskMap) {\n uniforms.mask_enabled = opts.maskEnabled !== false;\n uniforms.mask_texture = opts.maskMap;\n }\n return uniforms;\n};\n\nexport default {\n name: 'mask',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: getMaskUniforms\n};\n"],"file":"shader-module.js"}
1
+ {"version":3,"sources":["../../../src/mask/shader-module.js"],"names":["project","vs","fs","inject","getMaskUniforms","opts","uniforms","maskMap","mask_texture","name","dependencies","getUniforms"],"mappings":"AAAA,SAAQA,OAAR,QAAsB,eAAtB;AAEA,MAAMC,EAAE,4LAAR;AAQA,MAAMC,EAAE,wiBAAR;AAuBA,MAAMC,MAAM,GAAG;AACb,gDADa;AAIb,oSAJa;AAab,gDAba;AAgBb;AAhBa,CAAf;;AA6BA,MAAMC,eAAe,GAAG,CAACC,IAAI,GAAG,EAAR,KAAe;AACrC,QAAMC,QAAQ,GAAG,EAAjB;;AACA,MAAID,IAAI,CAACE,OAAT,EAAkB;AAChBD,IAAAA,QAAQ,CAACE,YAAT,GAAwBH,IAAI,CAACE,OAA7B;AACD;;AACD,SAAOD,QAAP;AACD,CAND;;AAQA,eAAe;AACbG,EAAAA,IAAI,EAAE,MADO;AAEbC,EAAAA,YAAY,EAAE,CAACV,OAAD,CAFD;AAGbC,EAAAA,EAHa;AAIbC,EAAAA,EAJa;AAKbC,EAAAA,MALa;AAMbQ,EAAAA,WAAW,EAAEP;AANA,CAAf","sourcesContent":["import {project} from '@deck.gl/core';\n\nconst vs = `\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n`;\n\nconst fs = `\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n return maskValue < 0.5;\n}\n`;\n\nconst inject = {\n 'vs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'vs:#main-end': `\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n`,\n 'fs:#decl': `\nvarying vec2 mask_texCoords;\n`,\n 'fs:#main-start': `\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // gl_FragColor = vec4(mask_texCoords, 0.0, 1.0);\n gl_FragColor = texture2D(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n`\n};\n\nconst getMaskUniforms = (opts = {}) => {\n const uniforms = {};\n if (opts.maskMap) {\n uniforms.mask_texture = opts.maskMap;\n }\n return uniforms;\n};\n\nexport default {\n name: 'mask',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: getMaskUniforms\n};\n"],"file":"shader-module.js"}
package/dist.min.js CHANGED
@@ -1 +1 @@
1
- !function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("deck"),require("luma")):"function"==typeof define&&define.amd?define(["deck","luma"],e):"object"==typeof exports?exports.deck=e(require("deck"),require("luma")):n.deck=e(n.deck,n.luma)}(window,(function(n,e){return function(n){var e={};function t(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return n[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}return t.m=n,t.c=e,t.d=function(n,e,r){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:r})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var i in n)t.d(r,i,function(e){return n[e]}.bind(null,i));return r},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=10)}([function(e,t){e.exports=n},function(n,e){function t(e){return n.exports=t=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},t(e)}n.exports=t},function(n,e){n.exports=function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}},function(n,e){function t(n,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,r.key,r)}}n.exports=function(n,e,r){return e&&t(n.prototype,e),r&&t(n,r),n}},function(n,e,t){var r=t(11);n.exports=function(n,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&r(n,e)}},function(n,e,t){var r=t(12),i=t(13);n.exports=function(n,e){return!e||"object"!==r(e)&&"function"!=typeof e?i(n):e}},function(n,t){n.exports=e},function(n,e){n.exports=function(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}},function(n,e,t){n.exports=t(14)},function(n,e){function t(n,e,t,r,i,o,a){try{var s=n[o](a),f=s.value}catch(n){return void t(n)}s.done?e(f):Promise.resolve(f).then(r,i)}n.exports=function(n){return function(){var e=this,r=arguments;return new Promise((function(i,o){var a=n.apply(e,r);function s(n){t(a,i,o,s,f,"next",n)}function f(n){t(a,i,o,s,f,"throw",n)}s(void 0)}))}}},function(n,e,t){var r=t(15),i=globalThis.deck||{};if(!i.Layer)throw new Error("@deck.gl/core is not found");n.exports=Object.assign(i,r)},function(n,e){function t(e,r){return n.exports=t=Object.setPrototypeOf||function(n,e){return n.__proto__=e,n},t(e,r)}n.exports=t},function(n,e){function t(e){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?n.exports=t=function(n){return typeof n}:n.exports=t=function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},t(e)}n.exports=t},function(n,e){n.exports=function(n){if(void 0===n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}},function(n,e,t){var r=function(n){"use strict";var e=Object.prototype,t=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},i=r.iterator||"@@iterator",o=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function s(n,e,t,r){var i=e&&e.prototype instanceof c?e:c,o=Object.create(i.prototype),a=new x(r||[]);return o._invoke=function(n,e,t){var r="suspendedStart";return function(i,o){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw o;return E()}for(t.method=i,t.arg=o;;){var a=t.delegate;if(a){var s=b(a,t);if(s){if(s===l)continue;return s}}if("next"===t.method)t.sent=t._sent=t.arg;else if("throw"===t.method){if("suspendedStart"===r)throw r="completed",t.arg;t.dispatchException(t.arg)}else"return"===t.method&&t.abrupt("return",t.arg);r="executing";var c=f(n,e,t);if("normal"===c.type){if(r=t.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:t.done}}"throw"===c.type&&(r="completed",t.method="throw",t.arg=c.arg)}}}(n,t,a),o}function f(n,e,t){try{return{type:"normal",arg:n.call(e,t)}}catch(n){return{type:"throw",arg:n}}}n.wrap=s;var l={};function c(){}function u(){}function _(){}var p={};p[i]=function(){return this};var v=Object.getPrototypeOf,d=v&&v(v(T([])));d&&d!==e&&t.call(d,i)&&(p=d);var m=_.prototype=c.prototype=Object.create(p);function h(n){["next","throw","return"].forEach((function(e){n[e]=function(n){return this._invoke(e,n)}}))}function y(n){var e;this._invoke=function(r,i){function o(){return new Promise((function(e,o){!function e(r,i,o,a){var s=f(n[r],n,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&t.call(c,"__await")?Promise.resolve(c.__await).then((function(n){e("next",n,o,a)}),(function(n){e("throw",n,o,a)})):Promise.resolve(c).then((function(n){l.value=n,o(l)}),(function(n){return e("throw",n,o,a)}))}a(s.arg)}(r,i,e,o)}))}return e=e?e.then(o,o):o()}}function b(n,e){var t=n.iterator[e.method];if(void 0===t){if(e.delegate=null,"throw"===e.method){if(n.iterator.return&&(e.method="return",e.arg=void 0,b(n,e),"throw"===e.method))return l;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=f(t,n.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,l;var i=r.arg;return i?i.done?(e[n.resultName]=i.value,e.next=n.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function g(n){var e={tryLoc:n[0]};1 in n&&(e.catchLoc=n[1]),2 in n&&(e.finallyLoc=n[2],e.afterLoc=n[3]),this.tryEntries.push(e)}function P(n){var e=n.completion||{};e.type="normal",delete e.arg,n.completion=e}function x(n){this.tryEntries=[{tryLoc:"root"}],n.forEach(g,this),this.reset(!0)}function T(n){if(n){var e=n[i];if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var r=-1,o=function e(){for(;++r<n.length;)if(t.call(n,r))return e.value=n[r],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:E}}function E(){return{value:void 0,done:!0}}return u.prototype=m.constructor=_,_.constructor=u,_[a]=u.displayName="GeneratorFunction",n.isGeneratorFunction=function(n){var e="function"==typeof n&&n.constructor;return!!e&&(e===u||"GeneratorFunction"===(e.displayName||e.name))},n.mark=function(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,_):(n.__proto__=_,a in n||(n[a]="GeneratorFunction")),n.prototype=Object.create(m),n},n.awrap=function(n){return{__await:n}},h(y.prototype),y.prototype[o]=function(){return this},n.AsyncIterator=y,n.async=function(e,t,r,i){var o=new y(s(e,t,r,i));return n.isGeneratorFunction(t)?o:o.next().then((function(n){return n.done?n.value:o.next()}))},h(m),m[a]="Generator",m[i]=function(){return this},m.toString=function(){return"[object Generator]"},n.keys=function(n){var e=[];for(var t in n)e.push(t);return e.reverse(),function t(){for(;e.length;){var r=e.pop();if(r in n)return t.value=r,t.done=!1,t}return t.done=!0,t}},n.values=T,x.prototype={constructor:x,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(P),!n)for(var e in this)"t"===e.charAt(0)&&t.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var n=this.tryEntries[0].completion;if("throw"===n.type)throw n.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var e=this;function r(t,r){return a.type="throw",a.arg=n,e.next=t,r&&(e.method="next",e.arg=void 0),!!r}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=t.call(o,"catchLoc"),f=t.call(o,"finallyLoc");if(s&&f){if(this.prev<o.catchLoc)return r(o.catchLoc,!0);if(this.prev<o.finallyLoc)return r(o.finallyLoc)}else if(s){if(this.prev<o.catchLoc)return r(o.catchLoc,!0)}else{if(!f)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return r(o.finallyLoc)}}}},abrupt:function(n,e){for(var r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&t.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===n||"continue"===n)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=n,a.arg=e,o?(this.method="next",this.next=o.finallyLoc,l):this.complete(a)},complete:function(n,e){if("throw"===n.type)throw n.arg;return"break"===n.type||"continue"===n.type?this.next=n.arg:"return"===n.type?(this.rval=this.arg=n.arg,this.method="return",this.next="end"):"normal"===n.type&&e&&(this.next=e),l},finish:function(n){for(var e=this.tryEntries.length-1;e>=0;--e){var t=this.tryEntries[e];if(t.finallyLoc===n)return this.complete(t.completion,t.afterLoc),P(t),l}},catch:function(n){for(var e=this.tryEntries.length-1;e>=0;--e){var t=this.tryEntries[e];if(t.tryLoc===n){var r=t.completion;if("throw"===r.type){var i=r.arg;P(t)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(n,e,t){return this.delegate={iterator:T(n),resultName:e,nextLoc:t},"next"===this.method&&(this.arg=void 0),l}},n}(n.exports);try{regeneratorRuntime=r}catch(n){Function("r","regeneratorRuntime = r")(r)}},function(n,e,t){"use strict";t.r(e);var r=t(2),i=t.n(r),o=t(3),a=t.n(o),s=t(4),f=t.n(s),l=t(5),c=t.n(l),u=t(1),_=t.n(u),p=t(0),v={source:0,target:1,custom:2,source_target:3},d={name:"brushing",dependencies:[p.project],vs:"\n uniform bool brushing_enabled;\n uniform int brushing_target;\n uniform vec2 brushing_mousePos;\n uniform float brushing_radius;\n\n #ifdef NON_INSTANCED_MODEL\n attribute vec2 brushingTargets;\n #else\n attribute vec2 instanceBrushingTargets;\n #endif\n\n varying float brushing_isVisible;\n\n bool brushing_isPointInRange(vec2 position) {\n if (!brushing_enabled) {\n return true;\n }\n vec2 source_commonspace = project_position(position);\n vec2 target_commonspace = project_position(brushing_mousePos);\n float distance = length((target_commonspace - source_commonspace) / project_uCommonUnitsPerMeter.xy);\n\n return distance <= brushing_radius;\n }\n\n bool brushing_arePointsInRange(vec2 sourcePos, vec2 targetPos) {\n return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);\n }\n\n void brushing_setVisible(bool visible) {\n brushing_isVisible = float(visible);\n }\n",fs:"\n uniform bool brushing_enabled;\n varying float brushing_isVisible;\n",inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n vec2 brushingTarget;\n vec2 brushingSource;\n if (brushing_target == 3) {\n brushingTarget = geometry.worldPositionAlt.xy;\n brushingSource = geometry.worldPosition.xy;\n } else if (brushing_target == 0) {\n brushingTarget = geometry.worldPosition.xy;\n } else if (brushing_target == 1) {\n brushingTarget = geometry.worldPositionAlt.xy;\n } else {\n #ifdef NON_INSTANCED_MODEL\n brushingTarget = brushingTargets;\n #else\n brushingTarget = instanceBrushingTargets;\n #endif\n }\n bool visible;\n if (brushing_target == 3) {\n visible = brushing_arePointsInRange(brushingSource, brushingTarget);\n } else {\n visible = brushing_isPointInRange(brushingTarget);\n }\n brushing_setVisible(visible);\n ","fs:DECKGL_FILTER_COLOR":"\n if (brushing_enabled && brushing_isVisible < 0.5) {\n discard;\n }\n "},getUniforms:function(n){if(!n||!n.viewport)return{};var e=n.brushingEnabled,t=void 0===e||e,r=n.brushingRadius,i=void 0===r?1e4:r,o=n.brushingTarget,a=void 0===o?"source":o,s=n.mousePosition,f=n.viewport;return{brushing_enabled:Boolean(t&&s&&f.containsPixel(s)),brushing_radius:i,brushing_target:v[a]||0,brushing_mousePos:s?f.unproject([s.x-f.x,s.y-f.y]):[0,0]}}};function m(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var h=function(n){f()(t,n);var e=m(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(n){return{modules:[d]}}},{key:"initializeState",value:function(n,e){var t=this,r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,accessor:"getBrushingTarget",update:!this.props.getBrushingTarget&&e.useConstantTargetPositions,shaderAttributes:{brushingTargets:{divisor:0},instanceBrushingTargets:{divisor:1}}}}),e.onMouseMove=function(){t.getCurrentLayer().setNeedsRedraw()},this.context.deck&&this.context.deck.eventManager.on({pointermove:e.onMouseMove,pointerleave:e.onMouseMove})}},{key:"finalizeState",value:function(n){this.context.deck&&this.context.deck.eventManager.off({pointermove:n.onMouseMove,pointerleave:n.onMouseMove})}},{key:"useConstantTargetPositions",value:function(n){n.constant=!0,n.value=new Float32Array(2)}}]),t}(p.LayerExtension);h.extensionName="BrushingExtension",h.defaultProps={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4};var y=t(7),b=t.n(y),g="\nuniform DATAFILTER_TYPE filter_min;\nuniform DATAFILTER_TYPE filter_softMin;\nuniform DATAFILTER_TYPE filter_softMax;\nuniform DATAFILTER_TYPE filter_max;\nuniform bool filter_useSoftMargin;\nuniform bool filter_enabled;\nuniform bool filter_transformSize;\n\n#ifdef NON_INSTANCED_MODEL\n #define DATAFILTER_ATTRIB filterValues\n #define DATAFILTER_ATTRIB_64LOW filterValues64Low\n#else\n #define DATAFILTER_ATTRIB instanceFilterValues\n #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low\n#endif\n\nattribute DATAFILTER_TYPE DATAFILTER_ATTRIB;\n#ifdef DATAFILTER_DOUBLE\n attribute DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;\n\n uniform DATAFILTER_TYPE filter_min64High;\n uniform DATAFILTER_TYPE filter_max64High;\n#endif\n\nvarying float dataFilter_value;\n\nfloat dataFilter_reduceValue(float value) {\n return value;\n}\nfloat dataFilter_reduceValue(vec2 value) {\n return min(value.x, value.y);\n}\nfloat dataFilter_reduceValue(vec3 value) {\n return min(min(value.x, value.y), value.z);\n}\nfloat dataFilter_reduceValue(vec4 value) {\n return min(min(value.x, value.y), min(value.z, value.w));\n}\nvoid dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {\n if (filter_enabled) {\n if (filter_useSoftMargin) {\n dataFilter_value = dataFilter_reduceValue(\n smoothstep(filter_min, filter_softMin, valueFromMin) *\n (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))\n );\n } else {\n dataFilter_value = dataFilter_reduceValue(\n step(filter_min, valueFromMin) * step(valueFromMax, filter_max)\n );\n }\n } else {\n dataFilter_value = 1.0;\n }\n}\n",P="\nuniform bool filter_transformColor;\nvarying float dataFilter_value;\n",x=function(n){if(!n||!n.extensions)return{};var e=n.filterRange,t=void 0===e?[-1,1]:e,r=n.filterEnabled,i=void 0===r||r,o=n.filterTransformSize,a=void 0===o||o,s=n.filterTransformColor,f=void 0===s||s,l=n.filterSoftRange||t,c=Number.isFinite(t[0])?{filter_min:t[0],filter_softMin:l[0],filter_softMax:l[1],filter_max:t[1]}:{filter_min:t.map((function(n){return n[0]})),filter_softMin:l.map((function(n){return n[0]})),filter_softMax:l.map((function(n){return n[1]})),filter_max:t.map((function(n){return n[1]}))};return c.filter_enabled=i,c.filter_useSoftMargin=Boolean(n.filterSoftRange),c.filter_transformSize=i&&a,c.filter_transformColor=i&&f,c},T={"vs:#main-start":"\n #ifdef DATAFILTER_DOUBLE\n dataFilter_setValue(\n DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,\n DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW\n );\n #else\n dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB);\n #endif\n ","vs:DECKGL_FILTER_SIZE":"\n if (filter_transformSize) {\n size = size * dataFilter_value;\n }\n ","fs:DECKGL_FILTER_COLOR":"\n if (dataFilter_value == 0.0) discard;\n if (filter_transformColor) {\n color.a *= dataFilter_value;\n }\n "},E={name:"data-filter",vs:g,fs:P,inject:T,getUniforms:x},O={name:"data-filter-fp64",vs:g,fs:P,inject:T,getUniforms:function(n){if(!n||!n.extensions)return{};var e=x(n);if(Number.isFinite(e.filter_min)){var t=Math.fround(e.filter_min);e.filter_min-=t,e.filter_softMin-=t,e.filter_min64High=t;var r=Math.fround(e.filter_max);e.filter_max-=r,e.filter_softMax-=r,e.filter_max64High=r}else{var i=e.filter_min.map(Math.fround);e.filter_min=e.filter_min.map((function(n,e){return n-i[e]})),e.filter_softMin=e.filter_softMin.map((function(n,e){return n-i[e]})),e.filter_min64High=i;var o=e.filter_max.map(Math.fround);e.filter_max=e.filter_max.map((function(n,e){return n-o[e]})),e.filter_softMax=e.filter_softMax.map((function(n,e){return n-o[e]})),e.filter_max64High=o}return e}},A=t(6);function F(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,r)}return t}function L(n,e,t){return e.defines.NON_INSTANCED_MODEL=1,t&&(e.defines.FLOAT_TARGET=1),new A.Model(n,function(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?F(Object(t),!0).forEach((function(e){b()(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):F(Object(t)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}))}return n}({id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:"#define SHADER_NAME data-filter-vertex-shader\n\n#ifdef FLOAT_TARGET\n attribute float filterIndices;\n attribute float filterPrevIndices;\n#else\n attribute vec2 filterIndices;\n attribute vec2 filterPrevIndices;\n#endif\n\nvarying vec4 vColor;\nconst float component = 1.0 / 255.0;\n\nvoid main() {\n #ifdef FLOAT_TARGET\n dataFilter_value *= float(filterIndices != filterPrevIndices);\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n vColor = vec4(0.0, 0.0, 0.0, 1.0);\n #else\n // Float texture is not supported: pack result into 4 channels x 256 px x 64px\n dataFilter_value *= float(filterIndices.x != filterPrevIndices.x);\n float col = filterIndices.x;\n float row = filterIndices.y * 4.0;\n float channel = floor(row);\n row = fract(row);\n vColor = component * vec4(bvec4(channel == 0.0, channel == 1.0, channel == 2.0, channel == 3.0));\n gl_Position = vec4(col * 2.0 - 1.0, row * 2.0 - 1.0, 0.0, 1.0);\n #endif\n gl_PointSize = 1.0;\n}\n",fs:"#define SHADER_NAME data-filter-fragment-shader\nprecision highp float;\n\nvarying vec4 vColor;\n\nvoid main() {\n if (dataFilter_value < 0.5) {\n discard;\n }\n gl_FragColor = vColor;\n}\n"},e))}var I={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};function R(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,r)}return t}function S(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?R(Object(t),!0).forEach((function(e){b()(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):R(Object(t)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}))}return n}function N(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var k={1:"float",2:"vec2",3:"vec3",4:"vec4"},w=function(n){f()(t,n);var e=N(t);function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.filterSize,o=void 0===r?1:r,a=n.fp64,s=void 0!==a&&a,f=n.countItems,l=void 0!==f&&f;if(i()(this,t),!k[o])throw new Error("filterSize out of range");return e.call(this,{filterSize:o,fp64:s,countItems:l})}return a()(t,[{key:"getShaders",value:function(n){var e=n.opts,t=e.filterSize,r=e.fp64;return{modules:[r?O:E],defines:{DATAFILTER_TYPE:k[t],DATAFILTER_DOUBLE:Boolean(r)}}}},{key:"initializeState",value:function(n,e){var t=this.getAttributeManager();t&&t.add({filterValues:{size:e.opts.filterSize,type:e.opts.fp64?5130:5126,accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}}});var r=this.context.gl;if(t&&e.opts.countItems){var i=function(n){return n.getExtension("EXT_float_blend")&&(n.getExtension("EXT_color_buffer_float")||n.getExtension("WEBGL_color_buffer_float"))}(r);t.add({filterIndices:{size:i?1:2,vertexOffset:1,type:5121,normalized:!0,accessor:function(n,e){var t=e.index,r=n&&n.__source?n.__source.index:t;return i?(r+1)%255:[(r+1)%255,Math.floor(r/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});var o=function(n,e){return e?new A.Framebuffer(n,{width:1,height:1,attachments:b()({},36064,new A.Texture2D(n,{format:Object(A.isWebGL2)(n)?34836:6408,type:5126,mipmaps:!1}))}):new A.Framebuffer(n,{width:256,height:64,depth:!1})}(r,i),a=L(r,e.getShaders(e),i);this.setState({filterFBO:o,filterModel:a})}}},{key:"updateState",value:function(n){var e=n.props,t=n.oldProps;if(this.state.filterModel){var r=this.getAttributeManager().attributes.filterValues.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange;r&&this.setState({filterNeedsUpdate:r})}}},{key:"draw",value:function(n,e){var t=this.state,r=t.filterFBO,i=t.filterModel,o=t.filterNeedsUpdate,a=this.props.onFilteredItemsChange;if(o&&a&&i){var s=this.getAttributeManager().attributes,f=s.filterValues,l=s.filterIndices;i.setVertexCount(this.getNumInstances());var c=this.context.gl;Object(A.clear)(c,{framebuffer:r,color:[0,0,0,0]}),i.updateModuleSettings(n.moduleParameters).setAttributes(S(S({},f.getShaderAttributes()),l&&l.getShaderAttributes())).draw({framebuffer:r,parameters:S(S({},I),{},{viewport:[0,0,r.width,r.height]})});for(var u=Object(A.readPixelsToArray)(r),_=0,p=0;p<u.length;p++)_+=u[p];a({id:this.id,count:_}),this.state.filterNeedsUpdate=!1}}},{key:"finalizeState",value:function(){var n=this.state,e=n.filterFBO,t=n.filterModel;e&&(e.color.delete(),e.delete(),t.delete())}}]),t}(p.LayerExtension);function j(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=Math.fround(n),i=n-r;return e[t]=r,e[t+1]=i,e}function B(n){return n-Math.fround(n)}function M(n){for(var e=new Float32Array(32),t=0;t<4;++t)for(var r=0;r<4;++r){var i=4*t+r;j(n[4*r+t],e,2*i)}return e}w.extensionName="DataFilterExtension",w.defaultProps={getFilterValue:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,compare:!1},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterTransformSize:!0,filterTransformColor:!0};var C={ONE:1};var D={name:"fp64",vs:"const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);\nconst vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);\nconst vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);\nconst vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);\nconst vec2 PI_2_FP64 = vec2(1.5707963705062866, -4.371139006309477e-8);\nconst vec2 PI_4_FP64 = vec2(0.7853981852531433, -2.1855695031547384e-8);\nconst vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);\nconst vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);\nconst vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);\nconst vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);\n\nconst vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);\nconst vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);\nconst vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);\nconst vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);\n\nconst vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);\nconst vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);\nconst vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);\nconst vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);\n\nconst vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);\nconst vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);\nconst vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);\nconst vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);\nconst vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);\nconst vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);\nconst vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);\nconst vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);\n\nfloat nint(float d) {\n if (d == floor(d)) return d;\n return floor(d + 0.5);\n}\n\nvec2 nint_fp64(vec2 a) {\n float hi = nint(a.x);\n float lo;\n vec2 tmp;\n if (hi == a.x) {\n lo = nint(a.y);\n tmp = quickTwoSum(hi, lo);\n } else {\n lo = 0.0;\n if (abs(hi - a.x) == 0.5 && a.y < 0.0) {\n hi -= 1.0;\n }\n tmp = vec2(hi, lo);\n }\n return tmp;\n}\n\nvec2 exp_fp64(vec2 a) {\n\n const int k_power = 4;\n const float k = 16.0;\n\n const float inv_k = 1.0 / k;\n\n if (a.x <= -88.0) return vec2(0.0, 0.0);\n if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);\n if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);\n if (a.x == 1.0 && a.y == 0.0) return E_FP64;\n\n float m = floor(a.x / LOG2_FP64.x + 0.5);\n vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;\n vec2 s, t, p;\n\n p = mul_fp64(r, r);\n s = sum_fp64(r, p * 0.5);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);\n\n\n\n\n\n\n s = sum_fp64(s, t);\n for (int i = 0; i < k_power; i++) {\n s = sum_fp64(s * 2.0, mul_fp64(s, s));\n }\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = sum_fp64(s, vec2(ONE, 0.0));\n#else\n s = sum_fp64(s, vec2(1.0, 0.0));\n#endif\n\n return s * pow(2.0, m);\n}\n\nvec2 log_fp64(vec2 a)\n{\n if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n vec2 x = vec2(log(a.x), 0.0);\n vec2 s;\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = vec2(ONE, 0.0);\n#else\n s = vec2(1.0, 0.0);\n#endif\n\n x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);\n return x;\n}\n\nvec2 sin_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n s = a;\n r = a;\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);\n s = sum_fp64(s, t);\n\n\n\n\n\n\n return s;\n}\n\nvec2 cos_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n r = x;\n s = sum_fp64(vec2(1.0, 0.0), r * 0.5);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);\n s = sum_fp64(s, t);\n\n\n\n\n\n\n return s;\n}\n\nvoid sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {\n if (a.x == 0.0 && a.y == 0.0) {\n sin_t = vec2(0.0, 0.0);\n cos_t = vec2(1.0, 0.0);\n }\n\n sin_t = sin_taylor_fp64(a);\n cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));\n}\n\nvec2 sin_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return sin_taylor_fp64(t);\n } else if (j == 1) {\n return cos_taylor_fp64(t);\n } else if (j == -1) {\n return -cos_taylor_fp64(t);\n } else {\n return -sin_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n }\n } else {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 cos_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return cos_taylor_fp64(t);\n } else if (j == 1) {\n return -sin_taylor_fp64(t);\n } else if (j == -1) {\n return sin_taylor_fp64(t);\n } else {\n return -cos_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 tan_fp64(vec2 a) {\n vec2 sin_a;\n vec2 cos_a;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n vec2 sin_t, cos_t;\n vec2 s, c;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n if (k > 0) {\n s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return div_fp64(sin_a, cos_a);\n}\n\nvec2 radians_fp64(vec2 degree) {\n return mul_fp64(degree, PI_180_FP64);\n}\n\nvec2 mix_fp64(vec2 a, vec2 b, float x) {\n vec2 range = sub_fp64(b, a);\n return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));\n}\n\nvoid vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sum_fp64(a[0], b[0]);\n out_val[1] = sum_fp64(a[1], b[1]);\n}\n\nvoid vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sub_fp64(a[0], b[0]);\n out_val[1] = sub_fp64(a[1], b[1]);\n}\n\nvoid vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = mul_fp64(a[0], b[0]);\n out_val[1] = mul_fp64(a[1], b[1]);\n}\n\nvoid vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = div_fp64(a[0], b[0]);\n out_val[1] = div_fp64(a[1], b[1]);\n}\n\nvoid vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {\n vec2 range[2];\n vec2_sub_fp64(y, x, range);\n vec2 portion[2];\n portion[0] = range[0] * a;\n portion[1] = range[1] * a;\n vec2_sum_fp64(x, portion, out_val);\n}\n\nvec2 vec2_length_fp64(vec2 x[2]) {\n return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));\n}\n\nvoid vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {\n vec2 length = vec2_length_fp64(x);\n vec2 length_vec2[2];\n length_vec2[0] = length;\n length_vec2[1] = length;\n\n vec2_div_fp64(x, length_vec2, out_val);\n}\n\nvec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {\n vec2 diff[2];\n vec2_sub_fp64(x, y, diff);\n return vec2_length_fp64(diff);\n}\n\nvec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {\n vec2 v[2];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n\n return sum_fp64(v[0], v[1]);\n}\nvoid vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvec2 vec3_length_fp64(vec2 x[3]) {\n return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),\n mul_fp64(x[2], x[2])));\n}\n\nvec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {\n vec2 diff[3];\n vec3_sub_fp64(x, y, diff);\n return vec3_length_fp64(diff);\n}\nvoid vec4_fp64(vec4 a, out vec2 out_val[4]) {\n out_val[0].x = a[0];\n out_val[0].y = 0.0;\n\n out_val[1].x = a[1];\n out_val[1].y = 0.0;\n\n out_val[2].x = a[2];\n out_val[2].y = 0.0;\n\n out_val[3].x = a[3];\n out_val[3].y = 0.0;\n}\n\nvoid vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {\n out_val[0] = mul_fp64(a[0], b);\n out_val[1] = mul_fp64(a[1], b);\n out_val[2] = mul_fp64(a[2], b);\n out_val[3] = mul_fp64(a[3], b);\n}\n\nvoid vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {\n for (int i = 0; i < 4; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {\n vec2 v[4];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n v[2] = mul_fp64(a[2], b[2]);\n v[3] = mul_fp64(a[3], b[3]);\n\n out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));\n}\n\nvoid mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {\n vec2 tmp[4];\n\n for (int i = 0; i < 4; i++)\n {\n for (int j = 0; j < 4; j++)\n {\n tmp[j] = b[j + i * 4];\n }\n vec4_dot_fp64(a, tmp, out_val[i]);\n }\n}\n",fs:null,dependencies:[{name:"fp64-arithmetic",vs:"uniform float ONE;\nvec2 split(float a) {\n const float SPLIT = 4097.0;\n float t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float a_hi = t * ONE - (t - a);\n float a_lo = a * ONE - a_hi;\n#else\n float a_hi = t - (t - a);\n float a_lo = a - a_hi;\n#endif\n return vec2(a_hi, a_lo);\n}\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * ONE;\n float err = b - (sum - a) * ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *\n a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n",fs:null,getUniforms:function(){return C},fp64ify:j,fp64LowPart:B,fp64ifyMatrix4:M}],fp64ify:j,fp64LowPart:B,fp64ifyMatrix4:M},V=D.fp64ify,z=D.fp64ifyMatrix4,U={name:"project64",dependencies:[p.project,D],vs:"\nconst vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);\n\nuniform vec2 project_uViewProjectionMatrixFP64[16];\nvoid mercatorProject_fp64(vec4 lnglat_fp64, out vec2 out_val[2]) {\n\n#if defined(NVIDIA_FP64_WORKAROUND)\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64 * ONE);\n#else\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64);\n#endif\n out_val[1] = sum_fp64(PI_FP64,\n log_fp64(tan_fp64(sum_fp64(PI_4_FP64, radians_fp64(lnglat_fp64.zw) / 2.0))));\n return;\n}\n\nvoid project_position_fp64(vec4 position_fp64, out vec2 out_val[2]) {\n vec2 pos_fp64[2];\n mercatorProject_fp64(position_fp64, pos_fp64);\n out_val[0] = mul_fp64(pos_fp64[0], WORLD_SCALE_FP64);\n out_val[1] = mul_fp64(pos_fp64[1], WORLD_SCALE_FP64);\n\n return;\n}\n\nvoid project_position_fp64(vec2 position, vec2 position64xyLow, out vec2 out_val[2]) {\n vec4 position64xy = vec4(\n position.x, position64xyLow.x,\n position.y, position64xyLow.y);\n\n project_position_fp64(position64xy, out_val);\n}\n\nvec4 project_common_position_to_clipspace_fp64(vec2 vertex_pos_modelspace[4]) {\n vec2 vertex_pos_clipspace[4];\n mat4_vec4_mul_fp64(project_uViewProjectionMatrixFP64, vertex_pos_modelspace,\n vertex_pos_clipspace);\n return vec4(\n vertex_pos_clipspace[0].x,\n vertex_pos_clipspace[1].x,\n vertex_pos_clipspace[2].x,\n vertex_pos_clipspace[3].x\n );\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64xyLow, vec3 offset, out vec4 commonPosition\n) {\n vec2 offset64[4];\n vec4_fp64(vec4(offset, 0.0), offset64);\n\n float z = project_size(position.z);\n vec2 projectedPosition64xy[2];\n project_position_fp64(position.xy, position64xyLow.xy, projectedPosition64xy);\n\n vec2 commonPosition64[4];\n commonPosition64[0] = sum_fp64(offset64[0], projectedPosition64xy[0]);\n commonPosition64[1] = sum_fp64(offset64[1], projectedPosition64xy[1]);\n commonPosition64[2] = sum_fp64(offset64[2], vec2(z, 0.0));\n commonPosition64[3] = vec2(1.0, 0.0);\n\n commonPosition = vec4(projectedPosition64xy[0].x, projectedPosition64xy[1].x, z, 1.0);\n\n return project_common_position_to_clipspace_fp64(commonPosition64);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64xyLow, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(\n position, position64xyLow, offset, commonPosition\n );\n}\n",getUniforms:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:W;if(n.viewport){var e=n.viewport,t=e.viewProjectionMatrix,r=e.scale;return G({viewProjectionMatrix:t,scale:r})}return{}}},W={},G=Object(p._memoize)((function(n){var e=n.viewProjectionMatrix,t=n.scale,r=z(e),i=V(t);return{project_uViewProjectionMatrixFP64:r,project64_uViewProjectionMatrix:r,project64_uScale:i}}));function q(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var K=function(n){f()(t,n);var e=q(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(n){var e=this.props.coordinateSystem;if(e!==p.COORDINATE_SYSTEM.LNGLAT&&e!==p.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[U]}}}]),t}(p.LayerExtension);K.extensionName="Fp64Extension";var H={inject:{"vs:#decl":"\nattribute vec2 instanceDashArrays;\nattribute float instanceDashOffsets;\nvarying vec2 vDashArray;\nvarying float vDashOffset;\n","vs:#main-end":"\nvDashArray = instanceDashArrays;\nvDashOffset = instanceDashOffsets / width.x;\n","fs:#decl":"\nuniform float dashAlignMode;\nuniform float capType;\nuniform bool dashGapPickable;\nvarying vec2 vDashArray;\nvarying float vDashOffset;\n\nfloat round(float x) {\n return floor(x + 0.5);\n}\n","fs:#main-start":"\n float solidLength = vDashArray.x;\n float gapLength = vDashArray.y;\n float unitLength = solidLength + gapLength;\n\n float offset;\n\n if (unitLength > 0.0) {\n if (dashAlignMode == 0.0) {\n offset = vDashOffset;\n } else {\n unitLength = vPathLength / round(vPathLength / unitLength);\n offset = solidLength / 2.0;\n }\n\n float unitOffset = mod(clamp(vPathPosition.y, 0.0, vPathLength) + offset, unitLength);\n\n if (gapLength > 0.0 && unitOffset > solidLength) {\n if (capType <= 0.5) {\n if (!(dashGapPickable && picking_uActive)) {\n discard;\n }\n } else {\n float distToEnd = length(vec2(\n min(unitOffset - solidLength, unitLength - unitOffset),\n vPathPosition.x\n ));\n if (distToEnd > 1.0) {\n if (!(dashGapPickable && picking_uActive)) {\n discard;\n }\n }\n }\n }\n }\n"}},Y={inject:{"vs:#decl":"\nattribute float instanceOffsets;\n","vs:DECKGL_FILTER_SIZE":"\n float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;\n size *= offsetWidth;\n","vCornerOffset = offsetVec;":"\n float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;\n vec2 offsetCenter = -instanceOffsets * (isCap ? perp : miterVec * miterSize) * 2.0;\n vCornerOffset = vCornerOffset * offsetWidth - offsetCenter;\n","fs:#main-start":"\n float isInside;\n isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);\n if (isInside == 0.0) {\n discard;\n }\n"}},X="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;Math.PI;Math.hypot||(Math.hypot=function(){for(var n=0,e=arguments.length;e--;)n+=arguments[e]*arguments[e];return Math.sqrt(n)});var J,Z,Q=function(n,e){var t=e[0]-n[0],r=e[1]-n[1],i=e[2]-n[2];return Math.hypot(t,r,i)};J=new X(3),X!=Float32Array&&(J[0]=0,J[1]=0,J[2]=0),Z=J;function $(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var nn=function(n){f()(t,n);var e=$(t);function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.dash,o=void 0!==r&&r,a=n.offset,s=void 0!==a&&a,f=n.highPrecisionDash,l=void 0!==f&&f;return i()(this,t),e.call(this,{dash:o||l,offset:s,highPrecisionDash:l})}return a()(t,[{key:"isEnabled",value:function(n){return n.state.pathTesselator}},{key:"getShaders",value:function(n){if(!n.isEnabled(this))return null;var e={};return n.opts.dash&&(e=Object(p._mergeShaders)(e,H)),n.opts.offset&&(e=Object(p._mergeShaders)(e,Y)),e}},{key:"initializeState",value:function(n,e){var t=this.getAttributeManager();t&&e.isEnabled(this)&&(e.enabled=!0,e.opts.dash&&t.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),e.opts.highPrecisionDash&&t.addInstanced({instanceDashOffsets:{size:1,accessor:"getPath",transform:e.getDashOffsets.bind(this)}}),e.opts.offset&&t.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}},{key:"updateState",value:function(n,e){if(e.isEnabled(this)){var t={};e.opts.dash&&(t.dashAlignMode=this.props.dashJustified?1:0,t.dashGapPickable=Boolean(this.props.dashGapPickable)),this.state.model.setUniforms(t)}}},{key:"getDashOffsets",value:function(n){for(var e,t,r=[0],i="XY"===this.props.positionFormat?2:3,o=Array.isArray(n[0]),a=o?n.length:n.length/i,s=0;s<a-1;s++)e=o?n[s]:n.slice(s*i,s*i+i),e=this.projectPosition(e),s>0&&(r[s]=r[s-1]+Q(t,e)),t=e;return r}}]),t}(p.LayerExtension);nn.extensionName="PathStyleExtension",nn.defaultProps={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1};var en=t(9),tn=t.n(en),rn=t(8),on=t.n(rn);var an,sn={name:"fill-pattern",vs:"\n#ifdef NON_INSTANCED_MODEL\n #define FILL_PATTERN_FRAME_ATTRIB fillPatternFrames\n #define FILL_PATTERN_SCALE_ATTRIB fillPatternScales\n #define FILL_PATTERN_OFFSET_ATTRIB fillPatternOffsets\n#else\n #define FILL_PATTERN_FRAME_ATTRIB instanceFillPatternFrames\n #define FILL_PATTERN_SCALE_ATTRIB instanceFillPatternScales\n #define FILL_PATTERN_OFFSET_ATTRIB instanceFillPatternOffsets\n#endif\n\nattribute vec4 FILL_PATTERN_FRAME_ATTRIB;\nattribute float FILL_PATTERN_SCALE_ATTRIB;\nattribute vec2 FILL_PATTERN_OFFSET_ATTRIB;\n\nuniform bool fill_patternEnabled;\nuniform vec2 fill_patternTextureSize;\n\nvarying vec2 fill_uv;\nvarying vec4 fill_patternBounds;\nvarying vec3 fill_patternPlacement;\n",fs:"\nuniform bool fill_patternEnabled;\nuniform bool fill_patternMask;\nuniform sampler2D fill_patternTexture;\nuniform vec2 fill_uvCoordinateOrigin;\n\nvarying vec4 fill_patternBounds;\nvarying vec3 fill_patternPlacement;\nvarying vec2 fill_uv;\n\nconst float FILL_UV_SCALE = 512.0 / 40000000.0;\n",inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n fill_uv = geometry.position.xy;\n ","vs:DECKGL_FILTER_COLOR":"\n if (fill_patternEnabled) {\n fill_patternBounds = FILL_PATTERN_FRAME_ATTRIB / vec4(fill_patternTextureSize, fill_patternTextureSize);\n fill_patternPlacement.xy = FILL_PATTERN_OFFSET_ATTRIB;\n fill_patternPlacement.z = FILL_PATTERN_SCALE_ATTRIB * FILL_PATTERN_FRAME_ATTRIB.w;\n }\n ","fs:DECKGL_FILTER_COLOR":"\n if (fill_patternEnabled) {\n float scale = FILL_UV_SCALE * fill_patternPlacement.z;\n vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + fill_uv, scale) / scale;\n patternUV = mod(fill_patternPlacement.xy + patternUV, 1.0);\n\n vec2 texCoords = fill_patternBounds.xy + fill_patternBounds.zw * patternUV;\n\n vec4 patternColor = texture2D(fill_patternTexture, texCoords);\n color.a *= patternColor.a;\n if (!fill_patternMask) {\n color.rgb = patternColor.rgb;\n }\n }\n "},dependencies:[p.project],getUniforms:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;if("fillPatternTexture"in n){var t=n.fillPatternTexture;return{fill_patternTexture:t,fill_patternTextureSize:[t.width,t.height]}}if(n.viewport){var r=n.viewport,i=n.fillPatternMask,o=void 0===i||i,a=n.fillPatternEnabled,s=void 0===a||a,f=e.project_uCoordinateOrigin,l=e.project_uCoordinateSystem,c=l===p.COORDINATE_SYSTEM.CARTESIAN?f:r.projectPosition(f);return{fill_uvCoordinateOrigin:c.slice(0,2),fill_patternMask:o,fill_patternEnabled:s}}return{}}};function fn(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var ln=(an={},b()(an,10241,9729),b()(an,10240,9729),b()(an,10242,33071),b()(an,10243,33071),an),cn=function(n){f()(o,n);var e,t,r=fn(o);function o(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=n.pattern,t=void 0!==e&&e;return i()(this,o),r.call(this,{pattern:t})}return a()(o,[{key:"isEnabled",value:function(n){return n.getAttributeManager()&&!n.state.pathTesselator}},{key:"getShaders",value:function(n){return n.isEnabled(this)?{modules:[n.opts.pattern&&sn].filter(Boolean)}:null}},{key:"initializeState",value:function(n,e){if(e.isEnabled(this)){var t=this.getAttributeManager();e.opts.pattern&&t.add({fillPatternFrames:{size:4,accessor:"getFillPattern",transform:e.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 A.Texture2D(this.context.gl,{data:new Uint8Array(4),width:1,height:1})})}}},{key:"updateState",value:function(n,e){var t=n.props,r=n.oldProps;e.isEnabled(this)&&(t.fillPatternAtlas&&t.fillPatternAtlas!==r.fillPatternAtlas&&e.loadPatternAtlas.call(this,t),t.fillPatternMapping&&t.fillPatternMapping!==r.fillPatternMapping&&e.loadPatternMapping.call(this,t))}},{key:"draw",value:function(n,e){if(e.isEnabled(this)){var t=this.state.patternTexture;this.setModuleParameters({fillPatternTexture:t||this.state.emptyTexture})}}},{key:"finalizeState",value:function(){var n=this.state,e=n.patternTexture,t=n.emptyTexture;null==e||e.delete(),null==t||t.delete()}},{key:"loadPatternAtlas",value:(t=tn()(on.a.mark((function n(e){var t,r,i,o,a;return on.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(r=e.fillPatternAtlas,i=e.fetch,null===(t=this.state.patternTexture)||void 0===t||t.delete(),this.setState({patternTexture:null}),"string"!=typeof(o=r)){n.next=8;break}return n.next=7,i(o,{propName:"fillPatternAtlas",layer:this});case 7:o=n.sent;case 8:a=o instanceof A.Texture2D?o:new A.Texture2D(this.context.gl,{data:o,parameters:ln}),this.setState({patternTexture:a});case 10:case"end":return n.stop()}}),n,this)}))),function(n){return t.apply(this,arguments)})},{key:"loadPatternMapping",value:(e=tn()(on.a.mark((function n(e){var t,r,i;return on.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(t=e.fillPatternMapping,r=e.fetch,this.setState({patternMapping:null}),"string"!=typeof(i=t)){n.next=7;break}return n.next=6,r(i,{propName:"fillPatternMapping",layer:this});case 6:i=n.sent;case 7:this.setState({patternMapping:i}),this.getAttributeManager().invalidate("getFillPattern"),this.setNeedsUpdate();case 10:case"end":return n.stop()}}),n,this)}))),function(n){return e.apply(this,arguments)})},{key:"getPatternFrame",value:function(n){var e=this.state.patternMapping,t=e&&e[n];return t?[t.x,t.y,t.width,t.height]:[0,0,0,0]}}]),o}(p.LayerExtension);function un(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}cn.extensionName="FillStyleExtension",cn.defaultProps={fillPatternEnabled:!0,fillPatternAtlas:null,fillPatternMapping:null,fillPatternMask:!0,getFillPattern:{type:"accessor",value:function(n){return n.pattern}},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}};var _n={clipBounds:[0,0,1,1]},pn="\nuniform vec4 clip_bounds;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n",vn={name:"clip-vs",vs:pn},dn={"vs:#decl":"\nvarying float clip_isVisible;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n","fs:#decl":"\nvarying float clip_isVisible;\n","fs:DECKGL_FILTER_COLOR":"\n if (clip_isVisible < 0.5) discard;\n"},mn={name:"clip-fs",fs:pn},hn={"vs:#decl":"\nvarying vec2 clip_commonPosition;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_commonPosition = geometry.position.xy;\n","fs:#decl":"\nvarying vec2 clip_commonPosition;\n","fs:DECKGL_FILTER_COLOR":"\n if (!clip_isInBounds(clip_commonPosition)) discard;\n"},yn=function(n){f()(t,n);var e=un(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(){var n="instancePositions"in this.getAttributeManager().attributes;return"clipByInstance"in this.props&&(n=this.props.clipByInstance),this.state.clipByInstance=n,n?{modules:[vn],inject:dn}:{modules:[mn],inject:hn}}},{key:"draw",value:function(n){var e=n.uniforms,t=this.props.clipBounds,r=void 0===t?_n.clipBounds:t;if(this.state.clipByInstance)e.clip_bounds=r;else{var i=this.projectPosition([r[0],r[1],0]),o=this.projectPosition([r[2],r[3],0]);e.clip_bounds=[Math.min(i[0],o[0]),Math.min(i[1],o[1]),Math.max(i[0],o[0]),Math.max(i[1],o[1])]}}}]),t}(p.LayerExtension);yn.extensionName="ClipExtension",yn.defaultProps=_n;var bn={name:"mask",dependencies:[p.project],vs:"\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n",fs:"\nuniform sampler2D mask_texture;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n return maskColor.a > 0.5;\n}\n",inject:{"vs:#decl":"\nvarying vec2 mask_texCoords;\n","vs:#main-end":"\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n","fs:#decl":"\nvarying vec2 mask_texCoords;\n","fs:#main-start":"\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // gl_FragColor = vec4(mask_texCoords, 0.0, 1.0);\n gl_FragColor = texture2D(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n"},getUniforms:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(arguments.length>1&&void 0!==arguments[1]&&arguments[1],{});return n.maskMap&&(e.mask_enabled=!1!==n.maskEnabled,e.mask_texture=n.maskMap),e}};function gn(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var Pn=function(n){f()(t,n);var e=gn(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(){var n="instancePositions"in this.getAttributeManager().attributes;return"maskByInstance"in this.props&&(n=this.props.maskByInstance),this.state.maskByInstance=n,{modules:[bn]}}},{key:"draw",value:function(n){var e=n.uniforms,t=n.moduleParameters;e.mask_maskByInstance=this.state.maskByInstance;var r=t.maskBounds;if(r){var i=this.projectPosition([r[0],r[1],0]),o=this.projectPosition([r[2],r[3],0]);e.mask_bounds=[i[0],i[1],o[0],o[1]]}}}]),t}(p.LayerExtension);Pn.extensionName="MaskExtension",Pn.defaultProps={maskEnabled:!0},t.d(e,"BrushingExtension",(function(){return h})),t.d(e,"DataFilterExtension",(function(){return w})),t.d(e,"Fp64Extension",(function(){return K})),t.d(e,"PathStyleExtension",(function(){return nn})),t.d(e,"FillStyleExtension",(function(){return cn})),t.d(e,"ClipExtension",(function(){return yn})),t.d(e,"MaskExtension",(function(){return Pn})),t.d(e,"project64",(function(){return U}))}])}));
1
+ !function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("deck"),require("luma")):"function"==typeof define&&define.amd?define(["deck","luma"],e):"object"==typeof exports?exports.deck=e(require("deck"),require("luma")):n.deck=e(n.deck,n.luma)}(window,(function(n,e){return function(n){var e={};function t(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return n[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}return t.m=n,t.c=e,t.d=function(n,e,r){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:r})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var i in n)t.d(r,i,function(e){return n[e]}.bind(null,i));return r},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=10)}([function(e,t){e.exports=n},function(n,e){function t(e){return n.exports=t=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},t(e)}n.exports=t},function(n,e){n.exports=function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}},function(n,e){function t(n,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,r.key,r)}}n.exports=function(n,e,r){return e&&t(n.prototype,e),r&&t(n,r),n}},function(n,e,t){var r=t(11);n.exports=function(n,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&r(n,e)}},function(n,e,t){var r=t(12),i=t(13);n.exports=function(n,e){return!e||"object"!==r(e)&&"function"!=typeof e?i(n):e}},function(n,t){n.exports=e},function(n,e){n.exports=function(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}},function(n,e,t){n.exports=t(14)},function(n,e){function t(n,e,t,r,i,o,a){try{var s=n[o](a),f=s.value}catch(n){return void t(n)}s.done?e(f):Promise.resolve(f).then(r,i)}n.exports=function(n){return function(){var e=this,r=arguments;return new Promise((function(i,o){var a=n.apply(e,r);function s(n){t(a,i,o,s,f,"next",n)}function f(n){t(a,i,o,s,f,"throw",n)}s(void 0)}))}}},function(n,e,t){var r=t(15),i=globalThis.deck||{};if(!i.Layer)throw new Error("@deck.gl/core is not found");n.exports=Object.assign(i,r)},function(n,e){function t(e,r){return n.exports=t=Object.setPrototypeOf||function(n,e){return n.__proto__=e,n},t(e,r)}n.exports=t},function(n,e){function t(e){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?n.exports=t=function(n){return typeof n}:n.exports=t=function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},t(e)}n.exports=t},function(n,e){n.exports=function(n){if(void 0===n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}},function(n,e,t){var r=function(n){"use strict";var e=Object.prototype,t=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},i=r.iterator||"@@iterator",o=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function s(n,e,t,r){var i=e&&e.prototype instanceof c?e:c,o=Object.create(i.prototype),a=new x(r||[]);return o._invoke=function(n,e,t){var r="suspendedStart";return function(i,o){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw o;return E()}for(t.method=i,t.arg=o;;){var a=t.delegate;if(a){var s=b(a,t);if(s){if(s===l)continue;return s}}if("next"===t.method)t.sent=t._sent=t.arg;else if("throw"===t.method){if("suspendedStart"===r)throw r="completed",t.arg;t.dispatchException(t.arg)}else"return"===t.method&&t.abrupt("return",t.arg);r="executing";var c=f(n,e,t);if("normal"===c.type){if(r=t.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:t.done}}"throw"===c.type&&(r="completed",t.method="throw",t.arg=c.arg)}}}(n,t,a),o}function f(n,e,t){try{return{type:"normal",arg:n.call(e,t)}}catch(n){return{type:"throw",arg:n}}}n.wrap=s;var l={};function c(){}function u(){}function _(){}var p={};p[i]=function(){return this};var v=Object.getPrototypeOf,d=v&&v(v(T([])));d&&d!==e&&t.call(d,i)&&(p=d);var m=_.prototype=c.prototype=Object.create(p);function h(n){["next","throw","return"].forEach((function(e){n[e]=function(n){return this._invoke(e,n)}}))}function y(n){var e;this._invoke=function(r,i){function o(){return new Promise((function(e,o){!function e(r,i,o,a){var s=f(n[r],n,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&t.call(c,"__await")?Promise.resolve(c.__await).then((function(n){e("next",n,o,a)}),(function(n){e("throw",n,o,a)})):Promise.resolve(c).then((function(n){l.value=n,o(l)}),(function(n){return e("throw",n,o,a)}))}a(s.arg)}(r,i,e,o)}))}return e=e?e.then(o,o):o()}}function b(n,e){var t=n.iterator[e.method];if(void 0===t){if(e.delegate=null,"throw"===e.method){if(n.iterator.return&&(e.method="return",e.arg=void 0,b(n,e),"throw"===e.method))return l;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=f(t,n.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,l;var i=r.arg;return i?i.done?(e[n.resultName]=i.value,e.next=n.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function g(n){var e={tryLoc:n[0]};1 in n&&(e.catchLoc=n[1]),2 in n&&(e.finallyLoc=n[2],e.afterLoc=n[3]),this.tryEntries.push(e)}function P(n){var e=n.completion||{};e.type="normal",delete e.arg,n.completion=e}function x(n){this.tryEntries=[{tryLoc:"root"}],n.forEach(g,this),this.reset(!0)}function T(n){if(n){var e=n[i];if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var r=-1,o=function e(){for(;++r<n.length;)if(t.call(n,r))return e.value=n[r],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:E}}function E(){return{value:void 0,done:!0}}return u.prototype=m.constructor=_,_.constructor=u,_[a]=u.displayName="GeneratorFunction",n.isGeneratorFunction=function(n){var e="function"==typeof n&&n.constructor;return!!e&&(e===u||"GeneratorFunction"===(e.displayName||e.name))},n.mark=function(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,_):(n.__proto__=_,a in n||(n[a]="GeneratorFunction")),n.prototype=Object.create(m),n},n.awrap=function(n){return{__await:n}},h(y.prototype),y.prototype[o]=function(){return this},n.AsyncIterator=y,n.async=function(e,t,r,i){var o=new y(s(e,t,r,i));return n.isGeneratorFunction(t)?o:o.next().then((function(n){return n.done?n.value:o.next()}))},h(m),m[a]="Generator",m[i]=function(){return this},m.toString=function(){return"[object Generator]"},n.keys=function(n){var e=[];for(var t in n)e.push(t);return e.reverse(),function t(){for(;e.length;){var r=e.pop();if(r in n)return t.value=r,t.done=!1,t}return t.done=!0,t}},n.values=T,x.prototype={constructor:x,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(P),!n)for(var e in this)"t"===e.charAt(0)&&t.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var n=this.tryEntries[0].completion;if("throw"===n.type)throw n.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var e=this;function r(t,r){return a.type="throw",a.arg=n,e.next=t,r&&(e.method="next",e.arg=void 0),!!r}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=t.call(o,"catchLoc"),f=t.call(o,"finallyLoc");if(s&&f){if(this.prev<o.catchLoc)return r(o.catchLoc,!0);if(this.prev<o.finallyLoc)return r(o.finallyLoc)}else if(s){if(this.prev<o.catchLoc)return r(o.catchLoc,!0)}else{if(!f)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return r(o.finallyLoc)}}}},abrupt:function(n,e){for(var r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&t.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===n||"continue"===n)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=n,a.arg=e,o?(this.method="next",this.next=o.finallyLoc,l):this.complete(a)},complete:function(n,e){if("throw"===n.type)throw n.arg;return"break"===n.type||"continue"===n.type?this.next=n.arg:"return"===n.type?(this.rval=this.arg=n.arg,this.method="return",this.next="end"):"normal"===n.type&&e&&(this.next=e),l},finish:function(n){for(var e=this.tryEntries.length-1;e>=0;--e){var t=this.tryEntries[e];if(t.finallyLoc===n)return this.complete(t.completion,t.afterLoc),P(t),l}},catch:function(n){for(var e=this.tryEntries.length-1;e>=0;--e){var t=this.tryEntries[e];if(t.tryLoc===n){var r=t.completion;if("throw"===r.type){var i=r.arg;P(t)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(n,e,t){return this.delegate={iterator:T(n),resultName:e,nextLoc:t},"next"===this.method&&(this.arg=void 0),l}},n}(n.exports);try{regeneratorRuntime=r}catch(n){Function("r","regeneratorRuntime = r")(r)}},function(n,e,t){"use strict";t.r(e);var r=t(2),i=t.n(r),o=t(3),a=t.n(o),s=t(4),f=t.n(s),l=t(5),c=t.n(l),u=t(1),_=t.n(u),p=t(0),v={source:0,target:1,custom:2,source_target:3},d={name:"brushing",dependencies:[p.project],vs:"\n uniform bool brushing_enabled;\n uniform int brushing_target;\n uniform vec2 brushing_mousePos;\n uniform float brushing_radius;\n\n #ifdef NON_INSTANCED_MODEL\n attribute vec2 brushingTargets;\n #else\n attribute vec2 instanceBrushingTargets;\n #endif\n\n varying float brushing_isVisible;\n\n bool brushing_isPointInRange(vec2 position) {\n if (!brushing_enabled) {\n return true;\n }\n vec2 source_commonspace = project_position(position);\n vec2 target_commonspace = project_position(brushing_mousePos);\n float distance = length((target_commonspace - source_commonspace) / project_uCommonUnitsPerMeter.xy);\n\n return distance <= brushing_radius;\n }\n\n bool brushing_arePointsInRange(vec2 sourcePos, vec2 targetPos) {\n return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);\n }\n\n void brushing_setVisible(bool visible) {\n brushing_isVisible = float(visible);\n }\n",fs:"\n uniform bool brushing_enabled;\n varying float brushing_isVisible;\n",inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n vec2 brushingTarget;\n vec2 brushingSource;\n if (brushing_target == 3) {\n brushingTarget = geometry.worldPositionAlt.xy;\n brushingSource = geometry.worldPosition.xy;\n } else if (brushing_target == 0) {\n brushingTarget = geometry.worldPosition.xy;\n } else if (brushing_target == 1) {\n brushingTarget = geometry.worldPositionAlt.xy;\n } else {\n #ifdef NON_INSTANCED_MODEL\n brushingTarget = brushingTargets;\n #else\n brushingTarget = instanceBrushingTargets;\n #endif\n }\n bool visible;\n if (brushing_target == 3) {\n visible = brushing_arePointsInRange(brushingSource, brushingTarget);\n } else {\n visible = brushing_isPointInRange(brushingTarget);\n }\n brushing_setVisible(visible);\n ","fs:DECKGL_FILTER_COLOR":"\n if (brushing_enabled && brushing_isVisible < 0.5) {\n discard;\n }\n "},getUniforms:function(n){if(!n||!n.viewport)return{};var e=n.brushingEnabled,t=void 0===e||e,r=n.brushingRadius,i=void 0===r?1e4:r,o=n.brushingTarget,a=void 0===o?"source":o,s=n.mousePosition,f=n.viewport;return{brushing_enabled:Boolean(t&&s&&f.containsPixel(s)),brushing_radius:i,brushing_target:v[a]||0,brushing_mousePos:s?f.unproject([s.x-f.x,s.y-f.y]):[0,0]}}};function m(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var h=function(n){f()(t,n);var e=m(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(n){return{modules:[d]}}},{key:"initializeState",value:function(n,e){var t=this,r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,accessor:"getBrushingTarget",update:!this.props.getBrushingTarget&&e.useConstantTargetPositions,shaderAttributes:{brushingTargets:{divisor:0},instanceBrushingTargets:{divisor:1}}}}),e.onMouseMove=function(){t.getCurrentLayer().setNeedsRedraw()},this.context.deck&&this.context.deck.eventManager.on({pointermove:e.onMouseMove,pointerleave:e.onMouseMove})}},{key:"finalizeState",value:function(n){this.context.deck&&this.context.deck.eventManager.off({pointermove:n.onMouseMove,pointerleave:n.onMouseMove})}},{key:"useConstantTargetPositions",value:function(n){n.constant=!0,n.value=new Float32Array(2)}}]),t}(p.LayerExtension);h.extensionName="BrushingExtension",h.defaultProps={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4};var y=t(7),b=t.n(y),g="\nuniform DATAFILTER_TYPE filter_min;\nuniform DATAFILTER_TYPE filter_softMin;\nuniform DATAFILTER_TYPE filter_softMax;\nuniform DATAFILTER_TYPE filter_max;\nuniform bool filter_useSoftMargin;\nuniform bool filter_enabled;\nuniform bool filter_transformSize;\n\n#ifdef NON_INSTANCED_MODEL\n #define DATAFILTER_ATTRIB filterValues\n #define DATAFILTER_ATTRIB_64LOW filterValues64Low\n#else\n #define DATAFILTER_ATTRIB instanceFilterValues\n #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low\n#endif\n\nattribute DATAFILTER_TYPE DATAFILTER_ATTRIB;\n#ifdef DATAFILTER_DOUBLE\n attribute DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;\n\n uniform DATAFILTER_TYPE filter_min64High;\n uniform DATAFILTER_TYPE filter_max64High;\n#endif\n\nvarying float dataFilter_value;\n\nfloat dataFilter_reduceValue(float value) {\n return value;\n}\nfloat dataFilter_reduceValue(vec2 value) {\n return min(value.x, value.y);\n}\nfloat dataFilter_reduceValue(vec3 value) {\n return min(min(value.x, value.y), value.z);\n}\nfloat dataFilter_reduceValue(vec4 value) {\n return min(min(value.x, value.y), min(value.z, value.w));\n}\nvoid dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {\n if (filter_enabled) {\n if (filter_useSoftMargin) {\n dataFilter_value = dataFilter_reduceValue(\n smoothstep(filter_min, filter_softMin, valueFromMin) *\n (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))\n );\n } else {\n dataFilter_value = dataFilter_reduceValue(\n step(filter_min, valueFromMin) * step(valueFromMax, filter_max)\n );\n }\n } else {\n dataFilter_value = 1.0;\n }\n}\n",P="\nuniform bool filter_transformColor;\nvarying float dataFilter_value;\n",x=function(n){if(!n||!n.extensions)return{};var e=n.filterRange,t=void 0===e?[-1,1]:e,r=n.filterEnabled,i=void 0===r||r,o=n.filterTransformSize,a=void 0===o||o,s=n.filterTransformColor,f=void 0===s||s,l=n.filterSoftRange||t,c=Number.isFinite(t[0])?{filter_min:t[0],filter_softMin:l[0],filter_softMax:l[1],filter_max:t[1]}:{filter_min:t.map((function(n){return n[0]})),filter_softMin:l.map((function(n){return n[0]})),filter_softMax:l.map((function(n){return n[1]})),filter_max:t.map((function(n){return n[1]}))};return c.filter_enabled=i,c.filter_useSoftMargin=Boolean(n.filterSoftRange),c.filter_transformSize=i&&a,c.filter_transformColor=i&&f,c},T={"vs:#main-start":"\n #ifdef DATAFILTER_DOUBLE\n dataFilter_setValue(\n DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,\n DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW\n );\n #else\n dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB);\n #endif\n ","vs:DECKGL_FILTER_SIZE":"\n if (filter_transformSize) {\n size = size * dataFilter_value;\n }\n ","fs:DECKGL_FILTER_COLOR":"\n if (dataFilter_value == 0.0) discard;\n if (filter_transformColor) {\n color.a *= dataFilter_value;\n }\n "},E={name:"data-filter",vs:g,fs:P,inject:T,getUniforms:x},O={name:"data-filter-fp64",vs:g,fs:P,inject:T,getUniforms:function(n){if(!n||!n.extensions)return{};var e=x(n);if(Number.isFinite(e.filter_min)){var t=Math.fround(e.filter_min);e.filter_min-=t,e.filter_softMin-=t,e.filter_min64High=t;var r=Math.fround(e.filter_max);e.filter_max-=r,e.filter_softMax-=r,e.filter_max64High=r}else{var i=e.filter_min.map(Math.fround);e.filter_min=e.filter_min.map((function(n,e){return n-i[e]})),e.filter_softMin=e.filter_softMin.map((function(n,e){return n-i[e]})),e.filter_min64High=i;var o=e.filter_max.map(Math.fround);e.filter_max=e.filter_max.map((function(n,e){return n-o[e]})),e.filter_softMax=e.filter_softMax.map((function(n,e){return n-o[e]})),e.filter_max64High=o}return e}},A=t(6);function F(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,r)}return t}function L(n,e,t){return e.defines.NON_INSTANCED_MODEL=1,t&&(e.defines.FLOAT_TARGET=1),new A.Model(n,function(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?F(Object(t),!0).forEach((function(e){b()(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):F(Object(t)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}))}return n}({id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:"#define SHADER_NAME data-filter-vertex-shader\n\n#ifdef FLOAT_TARGET\n attribute float filterIndices;\n attribute float filterPrevIndices;\n#else\n attribute vec2 filterIndices;\n attribute vec2 filterPrevIndices;\n#endif\n\nvarying vec4 vColor;\nconst float component = 1.0 / 255.0;\n\nvoid main() {\n #ifdef FLOAT_TARGET\n dataFilter_value *= float(filterIndices != filterPrevIndices);\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n vColor = vec4(0.0, 0.0, 0.0, 1.0);\n #else\n // Float texture is not supported: pack result into 4 channels x 256 px x 64px\n dataFilter_value *= float(filterIndices.x != filterPrevIndices.x);\n float col = filterIndices.x;\n float row = filterIndices.y * 4.0;\n float channel = floor(row);\n row = fract(row);\n vColor = component * vec4(bvec4(channel == 0.0, channel == 1.0, channel == 2.0, channel == 3.0));\n gl_Position = vec4(col * 2.0 - 1.0, row * 2.0 - 1.0, 0.0, 1.0);\n #endif\n gl_PointSize = 1.0;\n}\n",fs:"#define SHADER_NAME data-filter-fragment-shader\nprecision highp float;\n\nvarying vec4 vColor;\n\nvoid main() {\n if (dataFilter_value < 0.5) {\n discard;\n }\n gl_FragColor = vColor;\n}\n"},e))}var I={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};function R(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,r)}return t}function S(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?R(Object(t),!0).forEach((function(e){b()(n,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):R(Object(t)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}))}return n}function k(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var N={1:"float",2:"vec2",3:"vec3",4:"vec4"},w=function(n){f()(t,n);var e=k(t);function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.filterSize,o=void 0===r?1:r,a=n.fp64,s=void 0!==a&&a,f=n.countItems,l=void 0!==f&&f;if(i()(this,t),!N[o])throw new Error("filterSize out of range");return e.call(this,{filterSize:o,fp64:s,countItems:l})}return a()(t,[{key:"getShaders",value:function(n){var e=n.opts,t=e.filterSize,r=e.fp64;return{modules:[r?O:E],defines:{DATAFILTER_TYPE:N[t],DATAFILTER_DOUBLE:Boolean(r)}}}},{key:"initializeState",value:function(n,e){var t=this.getAttributeManager();t&&t.add({filterValues:{size:e.opts.filterSize,type:e.opts.fp64?5130:5126,accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}}});var r=this.context.gl;if(t&&e.opts.countItems){var i=function(n){return n.getExtension("EXT_float_blend")&&(n.getExtension("EXT_color_buffer_float")||n.getExtension("WEBGL_color_buffer_float"))}(r);t.add({filterIndices:{size:i?1:2,vertexOffset:1,type:5121,normalized:!0,accessor:function(n,e){var t=e.index,r=n&&n.__source?n.__source.index:t;return i?(r+1)%255:[(r+1)%255,Math.floor(r/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});var o=function(n,e){return e?new A.Framebuffer(n,{width:1,height:1,attachments:b()({},36064,new A.Texture2D(n,{format:Object(A.isWebGL2)(n)?34836:6408,type:5126,mipmaps:!1}))}):new A.Framebuffer(n,{width:256,height:64,depth:!1})}(r,i),a=L(r,e.getShaders(e),i);this.setState({filterFBO:o,filterModel:a})}}},{key:"updateState",value:function(n){var e=n.props,t=n.oldProps;if(this.state.filterModel){var r=this.getAttributeManager().attributes.filterValues.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange;r&&this.setState({filterNeedsUpdate:r})}}},{key:"draw",value:function(n,e){var t=this.state,r=t.filterFBO,i=t.filterModel,o=t.filterNeedsUpdate,a=this.props.onFilteredItemsChange;if(o&&a&&i){var s=this.getAttributeManager().attributes,f=s.filterValues,l=s.filterIndices;i.setVertexCount(this.getNumInstances());var c=this.context.gl;Object(A.clear)(c,{framebuffer:r,color:[0,0,0,0]}),i.updateModuleSettings(n.moduleParameters).setAttributes(S(S({},f.getShaderAttributes()),l&&l.getShaderAttributes())).draw({framebuffer:r,parameters:S(S({},I),{},{viewport:[0,0,r.width,r.height]})});for(var u=Object(A.readPixelsToArray)(r),_=0,p=0;p<u.length;p++)_+=u[p];a({id:this.id,count:_}),this.state.filterNeedsUpdate=!1}}},{key:"finalizeState",value:function(){var n=this.state,e=n.filterFBO,t=n.filterModel;e&&(e.color.delete(),e.delete(),t.delete())}}]),t}(p.LayerExtension);function C(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=Math.fround(n),i=n-r;return e[t]=r,e[t+1]=i,e}function j(n){return n-Math.fround(n)}function B(n){for(var e=new Float32Array(32),t=0;t<4;++t)for(var r=0;r<4;++r){var i=4*t+r;C(n[4*r+t],e,2*i)}return e}w.extensionName="DataFilterExtension",w.defaultProps={getFilterValue:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,compare:!1},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterTransformSize:!0,filterTransformColor:!0};var M={ONE:1};var D={name:"fp64",vs:"const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);\nconst vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);\nconst vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);\nconst vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);\nconst vec2 PI_2_FP64 = vec2(1.5707963705062866, -4.371139006309477e-8);\nconst vec2 PI_4_FP64 = vec2(0.7853981852531433, -2.1855695031547384e-8);\nconst vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);\nconst vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);\nconst vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);\nconst vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);\n\nconst vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);\nconst vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);\nconst vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);\nconst vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);\n\nconst vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);\nconst vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);\nconst vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);\nconst vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);\n\nconst vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);\nconst vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);\nconst vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);\nconst vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);\nconst vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);\nconst vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);\nconst vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);\nconst vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);\n\nfloat nint(float d) {\n if (d == floor(d)) return d;\n return floor(d + 0.5);\n}\n\nvec2 nint_fp64(vec2 a) {\n float hi = nint(a.x);\n float lo;\n vec2 tmp;\n if (hi == a.x) {\n lo = nint(a.y);\n tmp = quickTwoSum(hi, lo);\n } else {\n lo = 0.0;\n if (abs(hi - a.x) == 0.5 && a.y < 0.0) {\n hi -= 1.0;\n }\n tmp = vec2(hi, lo);\n }\n return tmp;\n}\n\nvec2 exp_fp64(vec2 a) {\n\n const int k_power = 4;\n const float k = 16.0;\n\n const float inv_k = 1.0 / k;\n\n if (a.x <= -88.0) return vec2(0.0, 0.0);\n if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);\n if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);\n if (a.x == 1.0 && a.y == 0.0) return E_FP64;\n\n float m = floor(a.x / LOG2_FP64.x + 0.5);\n vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;\n vec2 s, t, p;\n\n p = mul_fp64(r, r);\n s = sum_fp64(r, p * 0.5);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);\n\n\n\n\n\n\n s = sum_fp64(s, t);\n for (int i = 0; i < k_power; i++) {\n s = sum_fp64(s * 2.0, mul_fp64(s, s));\n }\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = sum_fp64(s, vec2(ONE, 0.0));\n#else\n s = sum_fp64(s, vec2(1.0, 0.0));\n#endif\n\n return s * pow(2.0, m);\n}\n\nvec2 log_fp64(vec2 a)\n{\n if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n vec2 x = vec2(log(a.x), 0.0);\n vec2 s;\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = vec2(ONE, 0.0);\n#else\n s = vec2(1.0, 0.0);\n#endif\n\n x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);\n return x;\n}\n\nvec2 sin_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n s = a;\n r = a;\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);\n s = sum_fp64(s, t);\n\n\n\n\n\n\n return s;\n}\n\nvec2 cos_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n r = x;\n s = sum_fp64(vec2(1.0, 0.0), r * 0.5);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);\n s = sum_fp64(s, t);\n\n\n\n\n\n\n return s;\n}\n\nvoid sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {\n if (a.x == 0.0 && a.y == 0.0) {\n sin_t = vec2(0.0, 0.0);\n cos_t = vec2(1.0, 0.0);\n }\n\n sin_t = sin_taylor_fp64(a);\n cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));\n}\n\nvec2 sin_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return sin_taylor_fp64(t);\n } else if (j == 1) {\n return cos_taylor_fp64(t);\n } else if (j == -1) {\n return -cos_taylor_fp64(t);\n } else {\n return -sin_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n }\n } else {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 cos_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return cos_taylor_fp64(t);\n } else if (j == 1) {\n return -sin_taylor_fp64(t);\n } else if (j == -1) {\n return sin_taylor_fp64(t);\n } else {\n return -cos_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 tan_fp64(vec2 a) {\n vec2 sin_a;\n vec2 cos_a;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n vec2 sin_t, cos_t;\n vec2 s, c;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n if (k > 0) {\n s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return div_fp64(sin_a, cos_a);\n}\n\nvec2 radians_fp64(vec2 degree) {\n return mul_fp64(degree, PI_180_FP64);\n}\n\nvec2 mix_fp64(vec2 a, vec2 b, float x) {\n vec2 range = sub_fp64(b, a);\n return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));\n}\n\nvoid vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sum_fp64(a[0], b[0]);\n out_val[1] = sum_fp64(a[1], b[1]);\n}\n\nvoid vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sub_fp64(a[0], b[0]);\n out_val[1] = sub_fp64(a[1], b[1]);\n}\n\nvoid vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = mul_fp64(a[0], b[0]);\n out_val[1] = mul_fp64(a[1], b[1]);\n}\n\nvoid vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = div_fp64(a[0], b[0]);\n out_val[1] = div_fp64(a[1], b[1]);\n}\n\nvoid vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {\n vec2 range[2];\n vec2_sub_fp64(y, x, range);\n vec2 portion[2];\n portion[0] = range[0] * a;\n portion[1] = range[1] * a;\n vec2_sum_fp64(x, portion, out_val);\n}\n\nvec2 vec2_length_fp64(vec2 x[2]) {\n return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));\n}\n\nvoid vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {\n vec2 length = vec2_length_fp64(x);\n vec2 length_vec2[2];\n length_vec2[0] = length;\n length_vec2[1] = length;\n\n vec2_div_fp64(x, length_vec2, out_val);\n}\n\nvec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {\n vec2 diff[2];\n vec2_sub_fp64(x, y, diff);\n return vec2_length_fp64(diff);\n}\n\nvec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {\n vec2 v[2];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n\n return sum_fp64(v[0], v[1]);\n}\nvoid vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvec2 vec3_length_fp64(vec2 x[3]) {\n return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),\n mul_fp64(x[2], x[2])));\n}\n\nvec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {\n vec2 diff[3];\n vec3_sub_fp64(x, y, diff);\n return vec3_length_fp64(diff);\n}\nvoid vec4_fp64(vec4 a, out vec2 out_val[4]) {\n out_val[0].x = a[0];\n out_val[0].y = 0.0;\n\n out_val[1].x = a[1];\n out_val[1].y = 0.0;\n\n out_val[2].x = a[2];\n out_val[2].y = 0.0;\n\n out_val[3].x = a[3];\n out_val[3].y = 0.0;\n}\n\nvoid vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {\n out_val[0] = mul_fp64(a[0], b);\n out_val[1] = mul_fp64(a[1], b);\n out_val[2] = mul_fp64(a[2], b);\n out_val[3] = mul_fp64(a[3], b);\n}\n\nvoid vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {\n for (int i = 0; i < 4; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {\n vec2 v[4];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n v[2] = mul_fp64(a[2], b[2]);\n v[3] = mul_fp64(a[3], b[3]);\n\n out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));\n}\n\nvoid mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {\n vec2 tmp[4];\n\n for (int i = 0; i < 4; i++)\n {\n for (int j = 0; j < 4; j++)\n {\n tmp[j] = b[j + i * 4];\n }\n vec4_dot_fp64(a, tmp, out_val[i]);\n }\n}\n",fs:null,dependencies:[{name:"fp64-arithmetic",vs:"uniform float ONE;\nvec2 split(float a) {\n const float SPLIT = 4097.0;\n float t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float a_hi = t * ONE - (t - a);\n float a_lo = a * ONE - a_hi;\n#else\n float a_hi = t - (t - a);\n float a_lo = a - a_hi;\n#endif\n return vec2(a_hi, a_lo);\n}\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * ONE;\n float err = b - (sum - a) * ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *\n a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n",fs:null,getUniforms:function(){return M},fp64ify:C,fp64LowPart:j,fp64ifyMatrix4:B}],fp64ify:C,fp64LowPart:j,fp64ifyMatrix4:B},V=D.fp64ify,U=D.fp64ifyMatrix4,z={name:"project64",dependencies:[p.project,D],vs:"\nconst vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);\n\nuniform vec2 project_uViewProjectionMatrixFP64[16];\nvoid mercatorProject_fp64(vec4 lnglat_fp64, out vec2 out_val[2]) {\n\n#if defined(NVIDIA_FP64_WORKAROUND)\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64 * ONE);\n#else\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64);\n#endif\n out_val[1] = sum_fp64(PI_FP64,\n log_fp64(tan_fp64(sum_fp64(PI_4_FP64, radians_fp64(lnglat_fp64.zw) / 2.0))));\n return;\n}\n\nvoid project_position_fp64(vec4 position_fp64, out vec2 out_val[2]) {\n vec2 pos_fp64[2];\n mercatorProject_fp64(position_fp64, pos_fp64);\n out_val[0] = mul_fp64(pos_fp64[0], WORLD_SCALE_FP64);\n out_val[1] = mul_fp64(pos_fp64[1], WORLD_SCALE_FP64);\n\n return;\n}\n\nvoid project_position_fp64(vec2 position, vec2 position64xyLow, out vec2 out_val[2]) {\n vec4 position64xy = vec4(\n position.x, position64xyLow.x,\n position.y, position64xyLow.y);\n\n project_position_fp64(position64xy, out_val);\n}\n\nvec4 project_common_position_to_clipspace_fp64(vec2 vertex_pos_modelspace[4]) {\n vec2 vertex_pos_clipspace[4];\n mat4_vec4_mul_fp64(project_uViewProjectionMatrixFP64, vertex_pos_modelspace,\n vertex_pos_clipspace);\n return vec4(\n vertex_pos_clipspace[0].x,\n vertex_pos_clipspace[1].x,\n vertex_pos_clipspace[2].x,\n vertex_pos_clipspace[3].x\n );\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64xyLow, vec3 offset, out vec4 commonPosition\n) {\n vec2 offset64[4];\n vec4_fp64(vec4(offset, 0.0), offset64);\n\n float z = project_size(position.z);\n vec2 projectedPosition64xy[2];\n project_position_fp64(position.xy, position64xyLow.xy, projectedPosition64xy);\n\n vec2 commonPosition64[4];\n commonPosition64[0] = sum_fp64(offset64[0], projectedPosition64xy[0]);\n commonPosition64[1] = sum_fp64(offset64[1], projectedPosition64xy[1]);\n commonPosition64[2] = sum_fp64(offset64[2], vec2(z, 0.0));\n commonPosition64[3] = vec2(1.0, 0.0);\n\n commonPosition = vec4(projectedPosition64xy[0].x, projectedPosition64xy[1].x, z, 1.0);\n\n return project_common_position_to_clipspace_fp64(commonPosition64);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64xyLow, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(\n position, position64xyLow, offset, commonPosition\n );\n}\n",getUniforms:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:G;if(n.viewport){var e=n.viewport,t=e.viewProjectionMatrix,r=e.scale;return W({viewProjectionMatrix:t,scale:r})}return{}}},G={},W=Object(p._memoize)((function(n){var e=n.viewProjectionMatrix,t=n.scale,r=U(e),i=V(t);return{project_uViewProjectionMatrixFP64:r,project64_uViewProjectionMatrix:r,project64_uScale:i}}));function q(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var K=function(n){f()(t,n);var e=q(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(n){var e=this.props.coordinateSystem;if(e!==p.COORDINATE_SYSTEM.LNGLAT&&e!==p.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[z]}}}]),t}(p.LayerExtension);K.extensionName="Fp64Extension";var Y={inject:{"vs:#decl":"\nattribute vec2 instanceDashArrays;\nattribute float instanceDashOffsets;\nvarying vec2 vDashArray;\nvarying float vDashOffset;\n","vs:#main-end":"\nvDashArray = instanceDashArrays;\nvDashOffset = instanceDashOffsets / width.x;\n","fs:#decl":"\nuniform float dashAlignMode;\nuniform float capType;\nuniform bool dashGapPickable;\nvarying vec2 vDashArray;\nvarying float vDashOffset;\n\nfloat round(float x) {\n return floor(x + 0.5);\n}\n","fs:#main-start":"\n float solidLength = vDashArray.x;\n float gapLength = vDashArray.y;\n float unitLength = solidLength + gapLength;\n\n float offset;\n\n if (unitLength > 0.0) {\n if (dashAlignMode == 0.0) {\n offset = vDashOffset;\n } else {\n unitLength = vPathLength / round(vPathLength / unitLength);\n offset = solidLength / 2.0;\n }\n\n float unitOffset = mod(clamp(vPathPosition.y, 0.0, vPathLength) + offset, unitLength);\n\n if (gapLength > 0.0 && unitOffset > solidLength) {\n if (capType <= 0.5) {\n if (!(dashGapPickable && picking_uActive)) {\n discard;\n }\n } else {\n float distToEnd = length(vec2(\n min(unitOffset - solidLength, unitLength - unitOffset),\n vPathPosition.x\n ));\n if (distToEnd > 1.0) {\n if (!(dashGapPickable && picking_uActive)) {\n discard;\n }\n }\n }\n }\n }\n"}},H={inject:{"vs:#decl":"\nattribute float instanceOffsets;\n","vs:DECKGL_FILTER_SIZE":"\n float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;\n size *= offsetWidth;\n","vCornerOffset = offsetVec;":"\n float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;\n vec2 offsetCenter = -instanceOffsets * (isCap ? perp : miterVec * miterSize) * 2.0;\n vCornerOffset = vCornerOffset * offsetWidth - offsetCenter;\n","fs:#main-start":"\n float isInside;\n isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);\n if (isInside == 0.0) {\n discard;\n }\n"}},X="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;Math.PI;Math.hypot||(Math.hypot=function(){for(var n=0,e=arguments.length;e--;)n+=arguments[e]*arguments[e];return Math.sqrt(n)});var J,Z,Q=function(n,e){var t=e[0]-n[0],r=e[1]-n[1],i=e[2]-n[2];return Math.hypot(t,r,i)};J=new X(3),X!=Float32Array&&(J[0]=0,J[1]=0,J[2]=0),Z=J;function $(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var nn=function(n){f()(t,n);var e=$(t);function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.dash,o=void 0!==r&&r,a=n.offset,s=void 0!==a&&a,f=n.highPrecisionDash,l=void 0!==f&&f;return i()(this,t),e.call(this,{dash:o||l,offset:s,highPrecisionDash:l})}return a()(t,[{key:"isEnabled",value:function(n){return n.state.pathTesselator}},{key:"getShaders",value:function(n){if(!n.isEnabled(this))return null;var e={};return n.opts.dash&&(e=Object(p._mergeShaders)(e,Y)),n.opts.offset&&(e=Object(p._mergeShaders)(e,H)),e}},{key:"initializeState",value:function(n,e){var t=this.getAttributeManager();t&&e.isEnabled(this)&&(e.enabled=!0,e.opts.dash&&t.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),e.opts.highPrecisionDash&&t.addInstanced({instanceDashOffsets:{size:1,accessor:"getPath",transform:e.getDashOffsets.bind(this)}}),e.opts.offset&&t.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}},{key:"updateState",value:function(n,e){if(e.isEnabled(this)){var t={};e.opts.dash&&(t.dashAlignMode=this.props.dashJustified?1:0,t.dashGapPickable=Boolean(this.props.dashGapPickable)),this.state.model.setUniforms(t)}}},{key:"getDashOffsets",value:function(n){for(var e,t,r=[0],i="XY"===this.props.positionFormat?2:3,o=Array.isArray(n[0]),a=o?n.length:n.length/i,s=0;s<a-1;s++)e=o?n[s]:n.slice(s*i,s*i+i),e=this.projectPosition(e),s>0&&(r[s]=r[s-1]+Q(t,e)),t=e;return r}}]),t}(p.LayerExtension);nn.extensionName="PathStyleExtension",nn.defaultProps={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1};var en=t(9),tn=t.n(en),rn=t(8),on=t.n(rn);var an,sn={name:"fill-pattern",vs:"\n#ifdef NON_INSTANCED_MODEL\n #define FILL_PATTERN_FRAME_ATTRIB fillPatternFrames\n #define FILL_PATTERN_SCALE_ATTRIB fillPatternScales\n #define FILL_PATTERN_OFFSET_ATTRIB fillPatternOffsets\n#else\n #define FILL_PATTERN_FRAME_ATTRIB instanceFillPatternFrames\n #define FILL_PATTERN_SCALE_ATTRIB instanceFillPatternScales\n #define FILL_PATTERN_OFFSET_ATTRIB instanceFillPatternOffsets\n#endif\n\nattribute vec4 FILL_PATTERN_FRAME_ATTRIB;\nattribute float FILL_PATTERN_SCALE_ATTRIB;\nattribute vec2 FILL_PATTERN_OFFSET_ATTRIB;\n\nuniform bool fill_patternEnabled;\nuniform vec2 fill_patternTextureSize;\n\nvarying vec2 fill_uv;\nvarying vec4 fill_patternBounds;\nvarying vec3 fill_patternPlacement;\n",fs:"\nuniform bool fill_patternEnabled;\nuniform bool fill_patternMask;\nuniform sampler2D fill_patternTexture;\nuniform vec2 fill_uvCoordinateOrigin;\n\nvarying vec4 fill_patternBounds;\nvarying vec3 fill_patternPlacement;\nvarying vec2 fill_uv;\n\nconst float FILL_UV_SCALE = 512.0 / 40000000.0;\n",inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n fill_uv = geometry.position.xy;\n ","vs:DECKGL_FILTER_COLOR":"\n if (fill_patternEnabled) {\n fill_patternBounds = FILL_PATTERN_FRAME_ATTRIB / vec4(fill_patternTextureSize, fill_patternTextureSize);\n fill_patternPlacement.xy = FILL_PATTERN_OFFSET_ATTRIB;\n fill_patternPlacement.z = FILL_PATTERN_SCALE_ATTRIB * FILL_PATTERN_FRAME_ATTRIB.w;\n }\n ","fs:DECKGL_FILTER_COLOR":"\n if (fill_patternEnabled) {\n float scale = FILL_UV_SCALE * fill_patternPlacement.z;\n vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + fill_uv, scale) / scale;\n patternUV = mod(fill_patternPlacement.xy + patternUV, 1.0);\n\n vec2 texCoords = fill_patternBounds.xy + fill_patternBounds.zw * patternUV;\n\n vec4 patternColor = texture2D(fill_patternTexture, texCoords);\n color.a *= patternColor.a;\n if (!fill_patternMask) {\n color.rgb = patternColor.rgb;\n }\n }\n "},dependencies:[p.project],getUniforms:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;if("fillPatternTexture"in n){var t=n.fillPatternTexture;return{fill_patternTexture:t,fill_patternTextureSize:[t.width,t.height]}}if(n.viewport){var r=n.viewport,i=n.fillPatternMask,o=void 0===i||i,a=n.fillPatternEnabled,s=void 0===a||a,f=e.project_uCoordinateOrigin,l=e.project_uCoordinateSystem,c=l===p.COORDINATE_SYSTEM.CARTESIAN?f:r.projectPosition(f);return{fill_uvCoordinateOrigin:c.slice(0,2),fill_patternMask:o,fill_patternEnabled:s}}return{}}};function fn(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var ln=(an={},b()(an,10241,9729),b()(an,10240,9729),b()(an,10242,33071),b()(an,10243,33071),an),cn=function(n){f()(o,n);var e,t,r=fn(o);function o(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=n.pattern,t=void 0!==e&&e;return i()(this,o),r.call(this,{pattern:t})}return a()(o,[{key:"isEnabled",value:function(n){return n.getAttributeManager()&&!n.state.pathTesselator}},{key:"getShaders",value:function(n){return n.isEnabled(this)?{modules:[n.opts.pattern&&sn].filter(Boolean)}:null}},{key:"initializeState",value:function(n,e){if(e.isEnabled(this)){var t=this.getAttributeManager();e.opts.pattern&&t.add({fillPatternFrames:{size:4,accessor:"getFillPattern",transform:e.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 A.Texture2D(this.context.gl,{data:new Uint8Array(4),width:1,height:1})})}}},{key:"updateState",value:function(n,e){var t=n.props,r=n.oldProps;e.isEnabled(this)&&(t.fillPatternAtlas&&t.fillPatternAtlas!==r.fillPatternAtlas&&e.loadPatternAtlas.call(this,t),t.fillPatternMapping&&t.fillPatternMapping!==r.fillPatternMapping&&e.loadPatternMapping.call(this,t))}},{key:"draw",value:function(n,e){if(e.isEnabled(this)){var t=this.state.patternTexture;this.setModuleParameters({fillPatternTexture:t||this.state.emptyTexture})}}},{key:"finalizeState",value:function(){var n=this.state,e=n.patternTexture,t=n.emptyTexture;null==e||e.delete(),null==t||t.delete()}},{key:"loadPatternAtlas",value:(t=tn()(on.a.mark((function n(e){var t,r,i,o,a;return on.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(r=e.fillPatternAtlas,i=e.fetch,null===(t=this.state.patternTexture)||void 0===t||t.delete(),this.setState({patternTexture:null}),"string"!=typeof(o=r)){n.next=8;break}return n.next=7,i(o,{propName:"fillPatternAtlas",layer:this});case 7:o=n.sent;case 8:a=o instanceof A.Texture2D?o:new A.Texture2D(this.context.gl,{data:o,parameters:ln}),this.setState({patternTexture:a});case 10:case"end":return n.stop()}}),n,this)}))),function(n){return t.apply(this,arguments)})},{key:"loadPatternMapping",value:(e=tn()(on.a.mark((function n(e){var t,r,i;return on.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(t=e.fillPatternMapping,r=e.fetch,this.setState({patternMapping:null}),"string"!=typeof(i=t)){n.next=7;break}return n.next=6,r(i,{propName:"fillPatternMapping",layer:this});case 6:i=n.sent;case 7:this.setState({patternMapping:i}),this.getAttributeManager().invalidate("getFillPattern"),this.setNeedsUpdate();case 10:case"end":return n.stop()}}),n,this)}))),function(n){return e.apply(this,arguments)})},{key:"getPatternFrame",value:function(n){var e=this.state.patternMapping,t=e&&e[n];return t?[t.x,t.y,t.width,t.height]:[0,0,0,0]}}]),o}(p.LayerExtension);function un(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}cn.extensionName="FillStyleExtension",cn.defaultProps={fillPatternEnabled:!0,fillPatternAtlas:null,fillPatternMapping:null,fillPatternMask:!0,getFillPattern:{type:"accessor",value:function(n){return n.pattern}},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}};var _n={clipBounds:[0,0,1,1]},pn="\nuniform vec4 clip_bounds;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n",vn={name:"clip-vs",vs:pn},dn={"vs:#decl":"\nvarying float clip_isVisible;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n","fs:#decl":"\nvarying float clip_isVisible;\n","fs:DECKGL_FILTER_COLOR":"\n if (clip_isVisible < 0.5) discard;\n"},mn={name:"clip-fs",fs:pn},hn={"vs:#decl":"\nvarying vec2 clip_commonPosition;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_commonPosition = geometry.position.xy;\n","fs:#decl":"\nvarying vec2 clip_commonPosition;\n","fs:DECKGL_FILTER_COLOR":"\n if (!clip_isInBounds(clip_commonPosition)) discard;\n"},yn=function(n){f()(t,n);var e=un(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(){var n="instancePositions"in this.getAttributeManager().attributes;return"clipByInstance"in this.props&&(n=this.props.clipByInstance),this.state.clipByInstance=n,n?{modules:[vn],inject:dn}:{modules:[mn],inject:hn}}},{key:"draw",value:function(n){var e=n.uniforms,t=this.props.clipBounds,r=void 0===t?_n.clipBounds:t;if(this.state.clipByInstance)e.clip_bounds=r;else{var i=this.projectPosition([r[0],r[1],0]),o=this.projectPosition([r[2],r[3],0]);e.clip_bounds=[Math.min(i[0],o[0]),Math.min(i[1],o[1]),Math.max(i[0],o[0]),Math.max(i[1],o[1])]}}}]),t}(p.LayerExtension);yn.extensionName="ClipExtension",yn.defaultProps=_n;var bn={name:"mask",dependencies:[p.project],vs:"\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n",fs:"\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n return maskValue < 0.5;\n}\n",inject:{"vs:#decl":"\nvarying vec2 mask_texCoords;\n","vs:#main-end":"\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n","fs:#decl":"\nvarying vec2 mask_texCoords;\n","fs:#main-start":"\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // gl_FragColor = vec4(mask_texCoords, 0.0, 1.0);\n gl_FragColor = texture2D(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n"},getUniforms:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e={};return n.maskMap&&(e.mask_texture=n.maskMap),e}};function gn(n){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}();return function(){var t,r=_()(n);if(e){var i=_()(this).constructor;t=Reflect.construct(r,arguments,i)}else t=r.apply(this,arguments);return c()(this,t)}}var Pn=function(n){f()(t,n);var e=gn(t);function t(){return i()(this,t),e.apply(this,arguments)}return a()(t,[{key:"getShaders",value:function(){var n="instancePositions"in this.getAttributeManager().attributes;return"maskByInstance"in this.props&&(n=this.props.maskByInstance),this.state.maskByInstance=n,{modules:[bn]}}},{key:"draw",value:function(n){var e=n.uniforms,t=n.context,r=n.moduleParameters;e.mask_maskByInstance=this.state.maskByInstance;var i=this.props.maskId,o=r.maskChannels,a=t.viewport;if(o&&o[i]){var s=o[i],f=s.index,l=s.bounds,c=s.coordinateOrigin,u=o[i].coordinateSystem;e.mask_enabled=!0,e.mask_channel=f,u===p.COORDINATE_SYSTEM.DEFAULT&&(u=a.isGeospatial?p.COORDINATE_SYSTEM.LNGLAT:p.COORDINATE_SYSTEM.CARTESIAN);var _={modelMatrix:null,fromCoordinateOrigin:c,fromCoordinateSystem:u},v=this.projectPosition([l[0],l[1],0],_),d=this.projectPosition([l[2],l[3],0],_);e.mask_bounds=[v[0],v[1],d[0],d[1]]}else i&&p.log.warn("Could not find a mask layer with id: ".concat(i))(),e.mask_enabled=!1}}]),t}(p.LayerExtension);Pn.extensionName="MaskExtension",Pn.defaultProps={maskId:""},t.d(e,"BrushingExtension",(function(){return h})),t.d(e,"DataFilterExtension",(function(){return w})),t.d(e,"Fp64Extension",(function(){return K})),t.d(e,"PathStyleExtension",(function(){return nn})),t.d(e,"FillStyleExtension",(function(){return cn})),t.d(e,"ClipExtension",(function(){return yn})),t.d(e,"MaskExtension",(function(){return Pn})),t.d(e,"project64",(function(){return z}))}])}));
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.7.0-beta.1",
5
+ "version": "8.7.0-beta.5",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -35,5 +35,5 @@
35
35
  "@deck.gl/core": "^8.0.0",
36
36
  "gl-matrix": "^3.0.0"
37
37
  },
38
- "gitHead": "0297ca9d2c85d980b075e2af4cfbeb75e31db55a"
38
+ "gitHead": "02b67ab8085c6283c0cae45e37a9b70b24f4434b"
39
39
  }
package/src/mask/mask.js CHANGED
@@ -1,8 +1,8 @@
1
- import {LayerExtension} from '@deck.gl/core';
1
+ import {COORDINATE_SYSTEM, LayerExtension, log} from '@deck.gl/core';
2
2
  import mask from './shader-module';
3
3
 
4
4
  const defaultProps = {
5
- maskEnabled: true
5
+ maskId: ''
6
6
  };
7
7
 
8
8
  export default class MaskExtension extends LayerExtension {
@@ -20,13 +20,31 @@ export default class MaskExtension extends LayerExtension {
20
20
  };
21
21
  }
22
22
 
23
- draw({uniforms, moduleParameters}) {
23
+ draw({uniforms, context, moduleParameters}) {
24
24
  uniforms.mask_maskByInstance = this.state.maskByInstance;
25
- const {maskBounds} = moduleParameters;
26
- if (maskBounds) {
27
- const bl = this.projectPosition([maskBounds[0], maskBounds[1], 0]);
28
- const tr = this.projectPosition([maskBounds[2], maskBounds[3], 0]);
25
+ const {maskId} = this.props;
26
+ const {maskChannels} = moduleParameters;
27
+ const {viewport} = context;
28
+ if (maskChannels && maskChannels[maskId]) {
29
+ const {index, bounds, coordinateOrigin: fromCoordinateOrigin} = maskChannels[maskId];
30
+ let {coordinateSystem: fromCoordinateSystem} = maskChannels[maskId];
31
+ uniforms.mask_enabled = true;
32
+ uniforms.mask_channel = index;
33
+
34
+ if (fromCoordinateSystem === COORDINATE_SYSTEM.DEFAULT) {
35
+ fromCoordinateSystem = viewport.isGeospatial
36
+ ? COORDINATE_SYSTEM.LNGLAT
37
+ : COORDINATE_SYSTEM.CARTESIAN;
38
+ }
39
+ const opts = {modelMatrix: null, fromCoordinateOrigin, fromCoordinateSystem};
40
+ const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);
41
+ const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);
29
42
  uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];
43
+ } else {
44
+ if (maskId) {
45
+ log.warn(`Could not find a mask layer with id: ${maskId}`)();
46
+ }
47
+ uniforms.mask_enabled = false;
30
48
  }
31
49
  }
32
50
  }
@@ -10,13 +10,24 @@ vec2 mask_getCoords(vec4 position) {
10
10
 
11
11
  const fs = `
12
12
  uniform sampler2D mask_texture;
13
+ uniform int mask_channel;
13
14
  uniform bool mask_enabled;
14
15
  bool mask_isInBounds(vec2 texCoords) {
15
16
  if (!mask_enabled) {
16
17
  return true;
17
18
  }
18
19
  vec4 maskColor = texture2D(mask_texture, texCoords);
19
- return maskColor.a > 0.5;
20
+ float maskValue = 1.0;
21
+ if (mask_channel == 0) {
22
+ maskValue = maskColor.r;
23
+ } else if (mask_channel == 1) {
24
+ maskValue = maskColor.g;
25
+ } else if (mask_channel == 2) {
26
+ maskValue = maskColor.b;
27
+ } else if (mask_channel == 3) {
28
+ maskValue = maskColor.a;
29
+ }
30
+ return maskValue < 0.5;
20
31
  }
21
32
  `;
22
33
 
@@ -49,10 +60,9 @@ varying vec2 mask_texCoords;
49
60
  `
50
61
  };
51
62
 
52
- const getMaskUniforms = (opts = {}, context = {}) => {
63
+ const getMaskUniforms = (opts = {}) => {
53
64
  const uniforms = {};
54
65
  if (opts.maskMap) {
55
- uniforms.mask_enabled = opts.maskEnabled !== false;
56
66
  uniforms.mask_texture = opts.maskMap;
57
67
  }
58
68
  return uniforms;