@kepler.gl/deckgl-layers 3.3.0-alpha.0 → 3.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
  2. package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
  3. package/dist/cjs/3d-building-layer/types.js +6 -0
  4. package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
  5. package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
  6. package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
  7. package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
  8. package/dist/cjs/globe/atmosphere-layer.js +341 -0
  9. package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
  10. package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
  11. package/dist/cjs/globe/globe-layers.js +574 -0
  12. package/dist/cjs/globe/globe-stars-layer.js +99 -0
  13. package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
  14. package/dist/cjs/globe/globe-view.js +404 -0
  15. package/dist/cjs/globe/index.js +140 -0
  16. package/dist/cjs/globe/mvt-label-layer.js +190 -0
  17. package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
  18. package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
  19. package/dist/cjs/index.js +163 -0
  20. package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
  21. package/dist/cjs/layer-utils/cluster-utils.js +95 -0
  22. package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
  23. package/dist/cjs/layer-utils/globe-cell-utils.js +203 -0
  24. package/dist/cjs/layer-utils/globe-cell-utils.spec.js +118 -0
  25. package/dist/cjs/layer-utils/shader-utils.js +38 -0
  26. package/dist/cjs/line-layer/line-layer.js +95 -0
  27. package/dist/cjs/raster/images.js +271 -0
  28. package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
  29. package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
  30. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
  31. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
  32. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
  33. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
  34. package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
  35. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  36. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
  37. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
  38. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
  39. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
  40. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
  41. package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
  42. package/dist/cjs/raster/types.js +6 -0
  43. package/dist/cjs/raster/util.js +139 -0
  44. package/dist/cjs/raster/webgl/color/colormap.js +45 -0
  45. package/dist/cjs/raster/webgl/color/filter.js +58 -0
  46. package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
  47. package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
  48. package/dist/cjs/raster/webgl/color/saturation.js +42 -0
  49. package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
  50. package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
  51. package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
  52. package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
  53. package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
  54. package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
  55. package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
  56. package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
  57. package/dist/cjs/raster/webgl/texture/mask.js +50 -0
  58. package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
  59. package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
  60. package/dist/cjs/raster/webgl/types.js +6 -0
  61. package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
  62. package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
  63. package/dist/cjs/wms/wms-layer.js +624 -0
  64. package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
  65. package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
  66. package/dist/esm/3d-building-layer/types.js +3 -0
  67. package/dist/esm/cluster-layer/cluster-layer.js +286 -0
  68. package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
  69. package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
  70. package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
  71. package/dist/esm/globe/atmosphere-layer.js +335 -0
  72. package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
  73. package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
  74. package/dist/esm/globe/globe-layers.js +566 -0
  75. package/dist/esm/globe/globe-stars-layer.js +92 -0
  76. package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
  77. package/dist/esm/globe/globe-view.js +398 -0
  78. package/dist/esm/globe/index.js +26 -0
  79. package/dist/esm/globe/mvt-label-layer.js +187 -0
  80. package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
  81. package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
  82. package/dist/esm/index.js +22 -0
  83. package/dist/esm/layer-utils/aggregation-utils.js +172 -0
  84. package/dist/esm/layer-utils/cluster-utils.js +89 -0
  85. package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
  86. package/dist/esm/layer-utils/globe-cell-utils.js +197 -0
  87. package/dist/esm/layer-utils/globe-cell-utils.spec.js +115 -0
  88. package/dist/esm/layer-utils/shader-utils.js +32 -0
  89. package/dist/esm/line-layer/line-layer.js +91 -0
  90. package/dist/esm/raster/images.js +267 -0
  91. package/dist/esm/raster/pipeline-validation-patch.js +94 -0
  92. package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
  93. package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
  94. package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
  95. package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
  96. package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
  97. package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
  98. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
  99. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
  100. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
  101. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
  102. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
  103. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
  104. package/dist/esm/raster/raster-processing-uniforms.js +118 -0
  105. package/dist/esm/raster/types.js +3 -0
  106. package/dist/esm/raster/util.js +134 -0
  107. package/dist/esm/raster/webgl/color/colormap.js +39 -0
  108. package/dist/esm/raster/webgl/color/filter.js +52 -0
  109. package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
  110. package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
  111. package/dist/esm/raster/webgl/color/saturation.js +36 -0
  112. package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
  113. package/dist/esm/raster/webgl/index.js +26 -0
  114. package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
  115. package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
  116. package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
  117. package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
  118. package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
  119. package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
  120. package/dist/esm/raster/webgl/texture/mask.js +44 -0
  121. package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
  122. package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
  123. package/dist/esm/raster/webgl/types.js +3 -0
  124. package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
  125. package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
  126. package/dist/esm/wms/wms-layer.js +619 -0
  127. package/dist/globe/atmosphere-layer.d.ts +58 -0
  128. package/dist/globe/enhanced-multi-icon-layer.d.ts +6 -0
  129. package/dist/globe/globe-depth-disk-layer.d.ts +19 -0
  130. package/dist/globe/globe-layers.d.ts +108 -0
  131. package/dist/globe/globe-stars-layer.d.ts +10 -0
  132. package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
  133. package/dist/globe/globe-view.d.ts +23 -0
  134. package/dist/globe/index.d.ts +8 -0
  135. package/dist/globe/mvt-label-layer.d.ts +7928 -0
  136. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +145 -56
  137. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +145 -56
  138. package/dist/index.d.ts +2 -0
  139. package/dist/layer-utils/aggregation-utils.d.ts +44 -0
  140. package/dist/layer-utils/cluster-utils.d.ts +6 -1
  141. package/dist/layer-utils/globe-cell-utils.d.ts +30 -0
  142. package/dist/layer-utils/globe-cell-utils.spec.d.ts +1 -0
  143. package/dist/layer-utils/shader-utils.d.ts +1 -0
  144. package/dist/raster/images.d.ts +10 -1
  145. package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
  146. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
  147. package/dist/raster/raster-processing-uniforms.d.ts +38 -0
  148. package/dist/raster/util.d.ts +15 -0
  149. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +4 -1
  150. package/dist/wms/wms-layer.d.ts +32 -2
  151. package/package.json +37 -25
  152. package/dist/3d-building-layer/3d-building-layer.js +0 -66
  153. package/dist/3d-building-layer/3d-building-utils.js +0 -166
  154. package/dist/3d-building-layer/types.js +0 -6
  155. package/dist/cluster-layer/cluster-layer.js +0 -296
  156. package/dist/column-layer/enhanced-column-layer.js +0 -135
  157. package/dist/deckgl-extensions/filter-shader-module.js +0 -26
  158. package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -69
  159. package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -87
  160. package/dist/index.js +0 -140
  161. package/dist/layer-utils/cluster-utils.js +0 -93
  162. package/dist/layer-utils/cpu-aggregator.js +0 -798
  163. package/dist/layer-utils/shader-utils.js +0 -29
  164. package/dist/line-layer/line-layer.js +0 -95
  165. package/dist/raster/images.js +0 -259
  166. package/dist/raster/pipeline-validation-patch.js +0 -60
  167. package/dist/raster/raster-layer/raster-layer-shaders.js +0 -129
  168. package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
  169. package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
  170. package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
  171. package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
  172. package/dist/raster/raster-layer/raster-layer.js +0 -256
  173. package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
  174. package/dist/raster/raster-mesh-layer/matrix.js +0 -18
  175. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
  176. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
  177. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
  178. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
  179. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
  180. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -282
  181. package/dist/raster/types.js +0 -6
  182. package/dist/raster/util.js +0 -29
  183. package/dist/raster/webgl/color/colormap.js +0 -45
  184. package/dist/raster/webgl/color/filter.js +0 -58
  185. package/dist/raster/webgl/color/gamma-contrast.js +0 -68
  186. package/dist/raster/webgl/color/linear-rescale.js +0 -35
  187. package/dist/raster/webgl/color/saturation.js +0 -42
  188. package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
  189. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
  190. package/dist/raster/webgl/spectral-indices/evi.js +0 -26
  191. package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
  192. package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
  193. package/dist/raster/webgl/spectral-indices/savi.js +0 -21
  194. package/dist/raster/webgl/texture/combine-bands.js +0 -65
  195. package/dist/raster/webgl/texture/mask.js +0 -50
  196. package/dist/raster/webgl/texture/reorder-bands.js +0 -72
  197. package/dist/raster/webgl/texture/rgba-image.js +0 -34
  198. package/dist/raster/webgl/types.js +0 -6
  199. package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -51
  200. package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
  201. package/dist/wms/wms-layer.js +0 -351
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.editShader = editShader;
7
- var _window = require("global/window");
8
- // SPDX-License-Identifier: MIT
9
- // Copyright contributors to the kepler.gl project
10
-
11
- /*
12
- * Amendment to default layer vertex shader
13
- * @param {string} vs
14
- * @param {string} type
15
- * @param {string} originalText
16
- * @param {string} testToReplace
17
- * @return {string} output shader
18
- *
19
- */
20
- function editShader(vs, type, originalText, testToReplace) {
21
- if (!vs.includes(originalText)) {
22
- // Here we call Console.error when we fail to edit deck.gl shader
23
- // This should be caught by layer test
24
- _window.console.error("Cannot edit ".concat(type, " layer shader"));
25
- return vs;
26
- }
27
- return vs.replace(originalText, testToReplace);
28
- }
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsImVkaXRTaGFkZXIiLCJ2cyIsInR5cGUiLCJvcmlnaW5hbFRleHQiLCJ0ZXN0VG9SZXBsYWNlIiwiaW5jbHVkZXMiLCJDb25zb2xlIiwiZXJyb3IiLCJjb25jYXQiLCJyZXBsYWNlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVyLXV0aWxzL3NoYWRlci11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5cbi8qXG4gKiBBbWVuZG1lbnQgdG8gZGVmYXVsdCBsYXllciB2ZXJ0ZXggc2hhZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxUZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGVzdFRvUmVwbGFjZVxuICogQHJldHVybiB7c3RyaW5nfSBvdXRwdXQgc2hhZGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWRpdFNoYWRlcih2czogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIG9yaWdpbmFsVGV4dDogc3RyaW5nLCB0ZXN0VG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKCF2cy5pbmNsdWRlcyhvcmlnaW5hbFRleHQpKSB7XG4gICAgLy8gSGVyZSB3ZSBjYWxsIENvbnNvbGUuZXJyb3Igd2hlbiB3ZSBmYWlsIHRvIGVkaXQgZGVjay5nbCBzaGFkZXJcbiAgICAvLyBUaGlzIHNob3VsZCBiZSBjYXVnaHQgYnkgbGF5ZXIgdGVzdFxuICAgIENvbnNvbGUuZXJyb3IoYENhbm5vdCBlZGl0ICR7dHlwZX0gbGF5ZXIgc2hhZGVyYCk7XG4gICAgcmV0dXJuIHZzO1xuICB9XG5cbiAgcmV0dXJuIHZzLnJlcGxhY2Uob3JpZ2luYWxUZXh0LCB0ZXN0VG9SZXBsYWNlKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBSEE7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFVQSxDQUFDQyxFQUFVLEVBQUVDLElBQVksRUFBRUMsWUFBb0IsRUFBRUMsYUFBcUIsRUFBRTtFQUNoRyxJQUFJLENBQUNILEVBQUUsQ0FBQ0ksUUFBUSxDQUFDRixZQUFZLENBQUMsRUFBRTtJQUM5QjtJQUNBO0lBQ0FHLGVBQU8sQ0FBQ0MsS0FBSyxnQkFBQUMsTUFBQSxDQUFnQk4sSUFBSSxrQkFBZSxDQUFDO0lBQ2pELE9BQU9ELEVBQUU7RUFDWDtFQUVBLE9BQU9BLEVBQUUsQ0FBQ1EsT0FBTyxDQUFDTixZQUFZLEVBQUVDLGFBQWEsQ0FBQztBQUNoRCIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,95 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports["default"] = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
- var _layers = require("@deck.gl/layers");
17
- var _ = require("../");
18
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
19
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
20
- function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; }
21
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
22
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
23
- // Copyright contributors to the kepler.gl project
24
- var elevationScaleUniforms = {
25
- name: 'elevationScale',
26
- vs: "uniform elevationScaleUniforms {\n float elevationScale;\n} elevationScaleProps;\n",
27
- uniformTypes: {
28
- elevationScale: 'f32'
29
- }
30
- };
31
- var defaultProps = _objectSpread(_objectSpread({}, _layers.LineLayer.defaultProps), {}, {
32
- getTargetColor: function getTargetColor(x) {
33
- return x.color || [0, 0, 0, 255];
34
- }
35
- });
36
- function addInstanceColorShader(vs) {
37
- var targetColorVs = (0, _.editShader)(vs, 'line target color vs', 'in vec4 instanceColors;', 'in vec4 instanceColors; in vec4 instanceTargetColors;');
38
- return (0, _.editShader)(targetColorVs, 'line color vs', 'vColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity);', "vec4 color = mix(instanceColors, instanceTargetColors, positions.x);" + "vColor = vec4(color.rgb, color.a * layer.opacity);");
39
- }
40
- function addElevationScale(vs) {
41
- return (0, _.editShader)(vs, 'line elevation scale vs - multiply by elevation scale', "geometry.worldPosition = instanceSourcePositions;\ngeometry.worldPositionAlt = instanceTargetPositions;\nvec3 source_world = instanceSourcePositions;\nvec3 target_world = instanceTargetPositions;", "vec3 source_world = instanceSourcePositions;\nvec3 target_world = instanceTargetPositions;\nsource_world.z *= elevationScaleProps.elevationScale;\ntarget_world.z *= elevationScaleProps.elevationScale;\ngeometry.worldPosition = source_world;\ngeometry.worldPositionAlt = target_world;");
42
- }
43
- var EnhancedLineLayer = exports["default"] = /*#__PURE__*/function (_LineLayer) {
44
- function EnhancedLineLayer() {
45
- (0, _classCallCheck2["default"])(this, EnhancedLineLayer);
46
- return _callSuper(this, EnhancedLineLayer, arguments);
47
- }
48
- (0, _inherits2["default"])(EnhancedLineLayer, _LineLayer);
49
- return (0, _createClass2["default"])(EnhancedLineLayer, [{
50
- key: "getShaders",
51
- value: function getShaders() {
52
- var shaders = _superPropGet(EnhancedLineLayer, "getShaders", this, 3)([]);
53
- var vs = addInstanceColorShader(shaders.vs);
54
- vs = addElevationScale(vs);
55
- return _objectSpread(_objectSpread({}, shaders), {}, {
56
- vs: vs,
57
- modules: [].concat((0, _toConsumableArray2["default"])(shaders.modules || []), [elevationScaleUniforms])
58
- });
59
- }
60
- }, {
61
- key: "draw",
62
- value: function draw(opts) {
63
- var model = this.state.model;
64
- if (model) {
65
- var _this$props$elevation;
66
- model.shaderInputs.setProps({
67
- elevationScale: {
68
- elevationScale: (_this$props$elevation = this.props.elevationScale) !== null && _this$props$elevation !== void 0 ? _this$props$elevation : 1
69
- }
70
- });
71
- }
72
- _superPropGet(EnhancedLineLayer, "draw", this, 3)([opts]);
73
- }
74
- }, {
75
- key: "initializeState",
76
- value: function initializeState() {
77
- var _this$props$colorForm;
78
- _superPropGet(EnhancedLineLayer, "initializeState", this, 3)([]);
79
- var _ref = this.state,
80
- attributeManager = _ref.attributeManager;
81
- attributeManager.addInstanced({
82
- instanceTargetColors: {
83
- size: (_this$props$colorForm = this.props.colorFormat) === null || _this$props$colorForm === void 0 ? void 0 : _this$props$colorForm.length,
84
- type: 'unorm8',
85
- transition: true,
86
- accessor: 'getTargetColor',
87
- defaultValue: [0, 0, 0, 255]
88
- }
89
- });
90
- }
91
- }]);
92
- }(_layers.LineLayer);
93
- EnhancedLineLayer.layerName = 'EnhancedLineLayer';
94
- EnhancedLineLayer.defaultProps = defaultProps;
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl8iLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJyIiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJlbGV2YXRpb25TY2FsZVVuaWZvcm1zIiwibmFtZSIsInZzIiwidW5pZm9ybVR5cGVzIiwiZWxldmF0aW9uU2NhbGUiLCJkZWZhdWx0UHJvcHMiLCJMaW5lTGF5ZXIiLCJnZXRUYXJnZXRDb2xvciIsIngiLCJjb2xvciIsImFkZEluc3RhbmNlQ29sb3JTaGFkZXIiLCJ0YXJnZXRDb2xvclZzIiwiZWRpdFNoYWRlciIsImFkZEVsZXZhdGlvblNjYWxlIiwiRW5oYW5jZWRMaW5lTGF5ZXIiLCJleHBvcnRzIiwiX0xpbmVMYXllciIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2hhZGVycyIsInNoYWRlcnMiLCJtb2R1bGVzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImRyYXciLCJvcHRzIiwibW9kZWwiLCJzdGF0ZSIsIl90aGlzJHByb3BzJGVsZXZhdGlvbiIsInNoYWRlcklucHV0cyIsInNldFByb3BzIiwicHJvcHMiLCJpbml0aWFsaXplU3RhdGUiLCJfdGhpcyRwcm9wcyRjb2xvckZvcm0iLCJfcmVmIiwiYXR0cmlidXRlTWFuYWdlciIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlVGFyZ2V0Q29sb3JzIiwic2l6ZSIsImNvbG9yRm9ybWF0IiwidHlwZSIsInRyYW5zaXRpb24iLCJhY2Nlc3NvciIsImRlZmF1bHRWYWx1ZSIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saW5lLWxheWVyL2xpbmUtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtMaW5lTGF5ZXIsIExpbmVMYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHR5cGUge0NvbG9yLCBBdHRyaWJ1dGVNYW5hZ2VyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7ZWRpdFNoYWRlcn0gZnJvbSAnLi4vJztcblxudHlwZSBSR0JBQ29sb3IgPSBDb2xvcjtcblxuY29uc3QgZWxldmF0aW9uU2NhbGVVbmlmb3JtcyA9IHtcbiAgbmFtZTogJ2VsZXZhdGlvblNjYWxlJyxcbiAgdnM6IGB1bmlmb3JtIGVsZXZhdGlvblNjYWxlVW5pZm9ybXMge1xuICBmbG9hdCBlbGV2YXRpb25TY2FsZTtcbn0gZWxldmF0aW9uU2NhbGVQcm9wcztcbmAsXG4gIHVuaWZvcm1UeXBlczoge1xuICAgIGVsZXZhdGlvblNjYWxlOiAnZjMyJ1xuICB9XG59O1xuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkxpbmVMYXllci5kZWZhdWx0UHJvcHMsXG4gIGdldFRhcmdldENvbG9yOiB4ID0+IHguY29sb3IgfHwgWzAsIDAsIDAsIDI1NV1cbn07XG5cbmZ1bmN0aW9uIGFkZEluc3RhbmNlQ29sb3JTaGFkZXIodnMpIHtcbiAgY29uc3QgdGFyZ2V0Q29sb3JWcyA9IGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2xpbmUgdGFyZ2V0IGNvbG9yIHZzJyxcbiAgICAnaW4gdmVjNCBpbnN0YW5jZUNvbG9yczsnLFxuICAgICdpbiB2ZWM0IGluc3RhbmNlQ29sb3JzOyBpbiB2ZWM0IGluc3RhbmNlVGFyZ2V0Q29sb3JzOydcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICB0YXJnZXRDb2xvclZzLFxuICAgICdsaW5lIGNvbG9yIHZzJyxcbiAgICAndkNvbG9yID0gdmVjNChpbnN0YW5jZUNvbG9ycy5yZ2IsIGluc3RhbmNlQ29sb3JzLmEgKiBsYXllci5vcGFjaXR5KTsnLFxuICAgIGB2ZWM0IGNvbG9yID0gbWl4KGluc3RhbmNlQ29sb3JzLCBpbnN0YW5jZVRhcmdldENvbG9ycywgcG9zaXRpb25zLngpO2AgK1xuICAgICAgYHZDb2xvciA9IHZlYzQoY29sb3IucmdiLCBjb2xvci5hICogbGF5ZXIub3BhY2l0eSk7YFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGRFbGV2YXRpb25TY2FsZSh2cykge1xuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICB2cyxcbiAgICAnbGluZSBlbGV2YXRpb24gc2NhbGUgdnMgLSBtdWx0aXBseSBieSBlbGV2YXRpb24gc2NhbGUnLFxuICAgIGBnZW9tZXRyeS53b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM7XG5nZW9tZXRyeS53b3JsZFBvc2l0aW9uQWx0ID0gaW5zdGFuY2VUYXJnZXRQb3NpdGlvbnM7XG52ZWMzIHNvdXJjZV93b3JsZCA9IGluc3RhbmNlU291cmNlUG9zaXRpb25zO1xudmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztgLFxuICAgIGB2ZWMzIHNvdXJjZV93b3JsZCA9IGluc3RhbmNlU291cmNlUG9zaXRpb25zO1xudmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbnNvdXJjZV93b3JsZC56ICo9IGVsZXZhdGlvblNjYWxlUHJvcHMuZWxldmF0aW9uU2NhbGU7XG50YXJnZXRfd29ybGQueiAqPSBlbGV2YXRpb25TY2FsZVByb3BzLmVsZXZhdGlvblNjYWxlO1xuZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IHNvdXJjZV93b3JsZDtcbmdlb21ldHJ5LndvcmxkUG9zaXRpb25BbHQgPSB0YXJnZXRfd29ybGQ7YFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmhhbmNlZExpbmVMYXllciBleHRlbmRzIExpbmVMYXllcjxcbiAgYW55LFxuICBMaW5lTGF5ZXJQcm9wczxhbnk+ICYge2VsZXZhdGlvblNjYWxlOiBudW1iZXI7IGdldFRhcmdldENvbG9yOiBSR0JBQ29sb3J9XG4+IHtcbiAgZ2V0U2hhZGVycygpIHtcbiAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuXG4gICAgbGV0IHZzID0gYWRkSW5zdGFuY2VDb2xvclNoYWRlcihzaGFkZXJzLnZzKTtcbiAgICB2cyA9IGFkZEVsZXZhdGlvblNjYWxlKHZzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgdnMsXG4gICAgICBtb2R1bGVzOiBbLi4uKHNoYWRlcnMubW9kdWxlcyB8fCBbXSksIGVsZXZhdGlvblNjYWxlVW5pZm9ybXNdXG4gICAgfTtcbiAgfVxuXG4gIGRyYXcob3B0cykge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zdGF0ZS5tb2RlbDtcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIG1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICAgIGVsZXZhdGlvblNjYWxlOiB7XG4gICAgICAgICAgZWxldmF0aW9uU2NhbGU6IHRoaXMucHJvcHMuZWxldmF0aW9uU2NhbGUgPz8gMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc3VwZXIuZHJhdyhvcHRzKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgICBjb25zdCB7YXR0cmlidXRlTWFuYWdlcn0gPSB0aGlzLnN0YXRlIGFzIHthdHRyaWJ1dGVNYW5hZ2VyOiBBdHRyaWJ1dGVNYW5hZ2VyfTtcbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVRhcmdldENvbG9yczoge1xuICAgICAgICBzaXplOiB0aGlzLnByb3BzLmNvbG9yRm9ybWF0Py5sZW5ndGgsXG4gICAgICAgIHR5cGU6ICd1bm9ybTgnLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFRhcmdldENvbG9yJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMCwgMCwgMCwgMjU1XVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbkVuaGFuY2VkTGluZUxheWVyLmxheWVyTmFtZSA9ICdFbmhhbmNlZExpbmVMYXllcic7XG5FbmhhbmNlZExpbmVMYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLENBQUEsR0FBQUQsT0FBQTtBQUErQixTQUFBRSxXQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE9BQUFFLGdCQUFBLGFBQUFGLENBQUEsT0FBQUcsMkJBQUEsYUFBQUosQ0FBQSxFQUFBSyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQU4sQ0FBQSxFQUFBQyxDQUFBLFlBQUFDLGdCQUFBLGFBQUFILENBQUEsRUFBQVEsV0FBQSxJQUFBUCxDQUFBLENBQUFRLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBRSxDQUFBO0FBQUEsU0FBQUcsMEJBQUEsY0FBQUwsQ0FBQSxJQUFBVSxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FB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
@@ -1,259 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.loadImages = loadImages;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _constants = require("@luma.gl/constants");
10
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
11
- var _constants2 = require("@kepler.gl/constants");
12
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
15
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
16
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // SPDX-License-Identifier: MIT
17
- // Copyright contributors to the kepler.gl project
18
- // @ts-ignore GL resolution depends on moduleResolution setting
19
- /**
20
- * Legacy texture creation descriptor used by raster shader modules.
21
- * Contains CPU-side data + old GL-enum-based parameters that get
22
- * translated to luma.gl 9's device.createTexture() props.
23
- */
24
-
25
- /**
26
- * Texture sampler parameters for luma.gl 9 textures
27
- */
28
- var DEFAULT_SAMPLER_PARAMETERS = {
29
- minFilter: _constants2.FILTER_MODE.NEAREST,
30
- magFilter: _constants2.FILTER_MODE.NEAREST,
31
- addressModeU: _constants2.ADDRESS_MODE.CLAMP_TO_EDGE,
32
- addressModeV: _constants2.ADDRESS_MODE.CLAMP_TO_EDGE
33
- };
34
-
35
- /** luma.gl device interface for texture creation */
36
-
37
- /**
38
- * Load image items to webgl context
39
- */
40
- function loadImageItem(gl, device, imageItem) {
41
- var result;
42
- if (Array.isArray(imageItem)) {
43
- var dirtyResult = imageItem.map(function (x) {
44
- return loadTexture(gl, device, x);
45
- });
46
- result = [];
47
- var _iterator = _createForOfIteratorHelper(dirtyResult),
48
- _step;
49
- try {
50
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
51
- var texture = _step.value;
52
- if (texture) {
53
- result.push(texture);
54
- }
55
- }
56
- } catch (err) {
57
- _iterator.e(err);
58
- } finally {
59
- _iterator.f();
60
- }
61
- if (!result.length) {
62
- result = null;
63
- }
64
- } else {
65
- result = loadTexture(gl, device, imageItem);
66
- }
67
- return result;
68
- }
69
-
70
- // eslint-disable-next-line complexity
71
- function loadImages(_ref) {
72
- var gl = _ref.gl,
73
- device = _ref.device,
74
- images = _ref.images,
75
- imagesData = _ref.imagesData,
76
- oldImagesData = _ref.oldImagesData;
77
- var imagesDirty = false;
78
- if (oldImagesData) {
79
- for (var key in oldImagesData) {
80
- if (imagesData && !(key in imagesData) && key in images) {
81
- delete images[key];
82
- imagesDirty = true;
83
- }
84
- }
85
- }
86
- var changedKeys = [];
87
- for (var _key in imagesData) {
88
- if (!oldImagesData || oldImagesData && !(_key in oldImagesData)) {
89
- changedKeys.push(_key);
90
- continue;
91
- }
92
- if (!(0, _isEqual["default"])(imagesData[_key], oldImagesData[_key])) {
93
- changedKeys.push(_key);
94
- }
95
- }
96
- for (var _i = 0, _changedKeys = changedKeys; _i < _changedKeys.length; _i++) {
97
- var _key2 = _changedKeys[_i];
98
- var imageData = imagesData[_key2];
99
- if (!imageData) {
100
- continue;
101
- }
102
- var loadedItem = loadImageItem(gl, device, imageData);
103
- if (loadedItem) {
104
- images[_key2] = loadedItem;
105
- }
106
- imagesDirty = true;
107
- }
108
- if (imagesDirty) {
109
- return images;
110
- }
111
- return null;
112
- }
113
-
114
- /**
115
- * Map old GL texture parameter constants to luma.gl 9 sampler parameters
116
- */
117
- function mapSamplerParameters(oldParams) {
118
- var result = _objectSpread({}, DEFAULT_SAMPLER_PARAMETERS);
119
- var magFilterMap = (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants.GL.NEAREST, _constants2.FILTER_MODE.NEAREST), _constants.GL.LINEAR, _constants2.FILTER_MODE.LINEAR);
120
- var minFilterMap = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants.GL.NEAREST, {
121
- minFilter: _constants2.FILTER_MODE.NEAREST
122
- }), _constants.GL.LINEAR, {
123
- minFilter: _constants2.FILTER_MODE.LINEAR
124
- }), _constants.GL.NEAREST_MIPMAP_NEAREST, {
125
- minFilter: _constants2.FILTER_MODE.NEAREST,
126
- mipmapFilter: _constants2.FILTER_MODE.NEAREST
127
- }), _constants.GL.NEAREST_MIPMAP_LINEAR, {
128
- minFilter: _constants2.FILTER_MODE.NEAREST,
129
- mipmapFilter: _constants2.FILTER_MODE.LINEAR
130
- }), _constants.GL.LINEAR_MIPMAP_NEAREST, {
131
- minFilter: _constants2.FILTER_MODE.LINEAR,
132
- mipmapFilter: _constants2.FILTER_MODE.NEAREST
133
- }), _constants.GL.LINEAR_MIPMAP_LINEAR, {
134
- minFilter: _constants2.FILTER_MODE.LINEAR,
135
- mipmapFilter: _constants2.FILTER_MODE.LINEAR
136
- });
137
- var wrapMap = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants.GL.CLAMP_TO_EDGE, _constants2.ADDRESS_MODE.CLAMP_TO_EDGE), _constants.GL.REPEAT, _constants2.ADDRESS_MODE.REPEAT), _constants.GL.MIRRORED_REPEAT, _constants2.ADDRESS_MODE.MIRROR_REPEAT);
138
- if (oldParams) {
139
- if (oldParams[_constants.GL.TEXTURE_MIN_FILTER] !== undefined) {
140
- var mapped = minFilterMap[oldParams[_constants.GL.TEXTURE_MIN_FILTER]];
141
- if (mapped) {
142
- result.minFilter = mapped.minFilter;
143
- if (mapped.mipmapFilter) {
144
- result.mipmapFilter = mapped.mipmapFilter;
145
- }
146
- }
147
- }
148
- if (oldParams[_constants.GL.TEXTURE_MAG_FILTER] !== undefined) {
149
- result.magFilter = magFilterMap[oldParams[_constants.GL.TEXTURE_MAG_FILTER]] || _constants2.FILTER_MODE.NEAREST;
150
- }
151
- if (oldParams[_constants.GL.TEXTURE_WRAP_S] !== undefined) {
152
- result.addressModeU = wrapMap[oldParams[_constants.GL.TEXTURE_WRAP_S]] || _constants2.ADDRESS_MODE.CLAMP_TO_EDGE;
153
- }
154
- if (oldParams[_constants.GL.TEXTURE_WRAP_T] !== undefined) {
155
- result.addressModeV = wrapMap[oldParams[_constants.GL.TEXTURE_WRAP_T]] || _constants2.ADDRESS_MODE.CLAMP_TO_EDGE;
156
- }
157
- }
158
- return result;
159
- }
160
-
161
- /**
162
- * Map old GL format/type to luma.gl 9 texture format string
163
- */
164
- function mapTextureFormat(glFormat, _glType) {
165
- switch (glFormat) {
166
- case _constants.GL.R8UI:
167
- return _constants2.TEXTURE_FORMAT.R8_UINT;
168
- case _constants.GL.R16UI:
169
- return _constants2.TEXTURE_FORMAT.R16_UINT;
170
- case _constants.GL.R32UI:
171
- return _constants2.TEXTURE_FORMAT.R32_UINT;
172
- case _constants.GL.R8I:
173
- return _constants2.TEXTURE_FORMAT.R8_SINT;
174
- case _constants.GL.R16I:
175
- return _constants2.TEXTURE_FORMAT.R16_SINT;
176
- case _constants.GL.R32I:
177
- return _constants2.TEXTURE_FORMAT.R32_SINT;
178
- case _constants.GL.R32F:
179
- return _constants2.TEXTURE_FORMAT.R32_FLOAT;
180
- case _constants.GL.RGBA:
181
- return _constants2.TEXTURE_FORMAT.RGBA8_UNORM;
182
- case _constants.GL.RGB:
183
- return _constants2.TEXTURE_FORMAT.RGBA8_UNORM;
184
- default:
185
- return _constants2.TEXTURE_FORMAT.RGBA8_UNORM;
186
- }
187
- }
188
-
189
- /**
190
- * Expand 3-byte-per-pixel RGB data to 4-byte-per-pixel RGBA.
191
- * Needed because WebGPU/luma.gl 9 has no 3-channel texture format.
192
- */
193
- function expandRGBtoRGBA(data, width, height) {
194
- var pixelCount = width * height;
195
- var rgba = new Uint8Array(pixelCount * 4);
196
- for (var i = 0; i < pixelCount; i++) {
197
- rgba[i * 4] = data[i * 3];
198
- rgba[i * 4 + 1] = data[i * 3 + 1];
199
- rgba[i * 4 + 2] = data[i * 3 + 2];
200
- rgba[i * 4 + 3] = 255;
201
- }
202
- return rgba;
203
- }
204
-
205
- /**
206
- * Create texture object from image data using luma.gl 9 device API.
207
- * Returns a proper luma.gl Texture object that works with the binding system.
208
- */
209
- function loadTexture(gl, device, imageData) {
210
- var _rasterTextureData$id, _rasterTextureData$id2, _gl$luma;
211
- if (!imageData) {
212
- return null;
213
- }
214
-
215
- // If already a luma.gl Texture instance, return as-is
216
- var rasterTextureData = imageData;
217
- if (rasterTextureData.handle || (_rasterTextureData$id = rasterTextureData.id) !== null && _rasterTextureData$id !== void 0 && (_rasterTextureData$id2 = _rasterTextureData$id.startsWith) !== null && _rasterTextureData$id2 !== void 0 && _rasterTextureData$id2.call(_rasterTextureData$id, 'luma') || rasterTextureData.device) {
218
- return imageData;
219
- }
220
- var rawData = imageData;
221
-
222
- // @ts-expect-error luma internal properties not in WebGL2RenderingContext type
223
- var lumaDevice = device || ((_gl$luma = gl.luma) === null || _gl$luma === void 0 ? void 0 : _gl$luma.device) || gl.__luma_device;
224
- if (!(lumaDevice !== null && lumaDevice !== void 0 && lumaDevice.createTexture)) {
225
- console.warn('RasterLayer: No luma.gl device available for texture creation');
226
- return null;
227
- }
228
- try {
229
- var _rawData$data, _rawData$data2;
230
- var samplerParams = mapSamplerParameters(rawData.parameters || {});
231
- var textureFormat = rawData.format ? mapTextureFormat(rawData.format, rawData.type) : _constants2.TEXTURE_FORMAT.RGBA8_UNORM;
232
- var width = rawData.width || ((_rawData$data = rawData.data) === null || _rawData$data === void 0 ? void 0 : _rawData$data.width) || 1;
233
- var height = rawData.height || ((_rawData$data2 = rawData.data) === null || _rawData$data2 === void 0 ? void 0 : _rawData$data2.height) || 1;
234
- var textureProps = _objectSpread({
235
- width: width,
236
- height: height,
237
- format: textureFormat,
238
- sampler: samplerParams
239
- }, rawData.mipmaps === false ? {
240
- mipmaps: false
241
- } : {});
242
- if (rawData.data) {
243
- if (rawData.data instanceof HTMLImageElement || rawData.data instanceof HTMLCanvasElement || rawData.data instanceof ImageBitmap || rawData.data instanceof ImageData) {
244
- textureProps.data = rawData.data;
245
- } else if (ArrayBuffer.isView(rawData.data)) {
246
- if (rawData.format === _constants.GL.RGB && (rawData.data instanceof Uint8Array || rawData.data instanceof Uint8ClampedArray)) {
247
- textureProps.data = expandRGBtoRGBA(rawData.data, width, height);
248
- } else {
249
- textureProps.data = rawData.data;
250
- }
251
- }
252
- }
253
- return lumaDevice.createTexture(textureProps);
254
- } catch (e) {
255
- console.warn('RasterLayer: Failed to create texture via device.createTexture:', e);
256
- return null;
257
- }
258
- }
259
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9pc0VxdWFsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb25zdGFudHMyIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiREVGQVVMVF9TQU1QTEVSX1BBUkFNRVRFUlMiLCJtaW5GaWx0ZXIiLCJGSUxURVJfTU9ERSIsIk5FQVJFU1QiLCJtYWdGaWx0ZXIiLCJhZGRyZXNzTW9kZVUiLCJBRERSRVNTX01PREUiLCJDTEFNUF9UT19FREdFIiwiYWRkcmVzc01vZGVWIiwibG9hZEltYWdlSXRlbSIsImdsIiwiZGV2aWNlIiwiaW1hZ2VJdGVtIiwicmVzdWx0IiwiZGlydHlSZXN1bHQiLCJtYXAiLCJ4IiwibG9hZFRleHR1cmUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInRleHR1cmUiLCJlcnIiLCJsb2FkSW1hZ2VzIiwiX3JlZiIsImltYWdlcyIsImltYWdlc0RhdGEiLCJvbGRJbWFnZXNEYXRhIiwiaW1hZ2VzRGlydHkiLCJrZXkiLCJjaGFuZ2VkS2V5cyIsImlzRXF1YWwiLCJfaSIsIl9jaGFuZ2VkS2V5cyIsImltYWdlRGF0YSIsImxvYWRlZEl0ZW0iLCJtYXBTYW1wbGVyUGFyYW1ldGVycyIsIm9sZFBhcmFtcyIsIm1hZ0ZpbHRlck1hcCIsIkdMIiwiTElORUFSIiwibWluRmlsdGVyTWFwIiwiTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCIsIm1pcG1hcEZpbHRlciIsIk5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsIkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsIkxJTkVBUl9NSVBNQVBfTElORUFSIiwid3JhcE1hcCIsIlJFUEVBVCIsIk1JUlJPUkVEX1JFUEVBVCIsIk1JUlJPUl9SRVBFQVQiLCJURVhUVVJFX01JTl9GSUxURVIiLCJ1bmRlZmluZWQiLCJtYXBwZWQiLCJURVhUVVJFX01BR19GSUxURVIiLCJURVhUVVJFX1dSQVBfUyIsIlRFWFRVUkVfV1JBUF9UIiwibWFwVGV4dHVyZUZvcm1hdCIsImdsRm9ybWF0IiwiX2dsVHlwZSIsIlI4VUkiLCJURVhUVVJFX0ZPUk1BVCIsIlI4X1VJTlQiLCJSMTZVSSIsIlIxNl9VSU5UIiwiUjMyVUkiLCJSMzJfVUlOVCIsIlI4SSIsIlI4X1NJTlQiLCJSMTZJIiwiUjE2X1NJTlQiLCJSMzJJIiwiUjMyX1NJTlQiLCJSMzJGIiwiUjMyX0ZMT0FUIiwiUkdCQSIsIlJHQkE4X1VOT1JNIiwiUkdCIiwiZXhwYW5kUkdCdG9SR0JBIiwiZGF0YSIsIndpZHRoIiwiaGVpZ2h0IiwicGl4ZWxDb3VudCIsInJnYmEiLCJVaW50OEFycmF5IiwiaSIsIl9yYXN0ZXJUZXh0dXJlRGF0YSRpZCIsIl9yYXN0ZXJUZXh0dXJlRGF0YSRpZDIiLCJfZ2wkbHVtYSIsInJhc3RlclRleHR1cmVEYXRhIiwiaGFuZGxlIiwiaWQiLCJzdGFydHNXaXRoIiwicmF3RGF0YSIsImx1bWFEZXZpY2UiLCJsdW1hIiwiX19sdW1hX2RldmljZSIsImNyZWF0ZVRleHR1cmUiLCJjb25zb2xlIiwid2FybiIsIl9yYXdEYXRhJGRhdGEiLCJfcmF3RGF0YSRkYXRhMiIsInNhbXBsZXJQYXJhbXMiLCJwYXJhbWV0ZXJzIiwidGV4dHVyZUZvcm1hdCIsImZvcm1hdCIsInR5cGUiLCJ0ZXh0dXJlUHJvcHMiLCJzYW1wbGVyIiwibWlwbWFwcyIsIkhUTUxJbWFnZUVsZW1lbnQiLCJIVE1MQ2FudmFzRWxlbWVudCIsIkltYWdlQml0bWFwIiwiSW1hZ2VEYXRhIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJVaW50OENsYW1wZWRBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXIvaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIEB0cy1pZ25vcmUgR0wgcmVzb2x1dGlvbiBkZXBlbmRzIG9uIG1vZHVsZVJlc29sdXRpb24gc2V0dGluZ1xuaW1wb3J0IHtHTH0gZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuaW1wb3J0IHtGSUxURVJfTU9ERSwgQUREUkVTU19NT0RFLCBURVhUVVJFX0ZPUk1BVH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUge1RleHR1cmV9IGZyb20gJ0BsdW1hLmdsL2NvcmUnO1xuaW1wb3J0IHR5cGUge0ltYWdlSW5wdXQsIEltYWdlU3RhdGV9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIExlZ2FjeSB0ZXh0dXJlIGNyZWF0aW9uIGRlc2NyaXB0b3IgdXNlZCBieSByYXN0ZXIgc2hhZGVyIG1vZHVsZXMuXG4gKiBDb250YWlucyBDUFUtc2lkZSBkYXRhICsgb2xkIEdMLWVudW0tYmFzZWQgcGFyYW1ldGVycyB0aGF0IGdldFxuICogdHJhbnNsYXRlZCB0byBsdW1hLmdsIDkncyBkZXZpY2UuY3JlYXRlVGV4dHVyZSgpIHByb3BzLlxuICovXG50eXBlIFRleHR1cmVEYXRhU291cmNlID1cbiAgfCBIVE1MSW1hZ2VFbGVtZW50XG4gIHwgSFRNTENhbnZhc0VsZW1lbnRcbiAgfCBJbWFnZUJpdG1hcFxuICB8IEltYWdlRGF0YVxuICB8IEFycmF5QnVmZmVyVmlldztcblxudHlwZSBSYXN0ZXJUZXh0dXJlRGF0YSA9IHtcbiAgaGFuZGxlPzogdW5rbm93bjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRldmljZT86IHVua25vd247XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIGZvcm1hdD86IG51bWJlcjtcbiAgdHlwZT86IG51bWJlcjtcbiAgcGFyYW1ldGVycz86IFJlY29yZDxudW1iZXIsIG51bWJlcj47XG4gIG1pcG1hcHM/OiBib29sZWFuO1xuICBkYXRhPzogVGV4dHVyZURhdGFTb3VyY2UgJiB7d2lkdGg/OiBudW1iZXI7IGhlaWdodD86IG51bWJlcn07XG59O1xuXG4vKipcbiAqIFRleHR1cmUgc2FtcGxlciBwYXJhbWV0ZXJzIGZvciBsdW1hLmdsIDkgdGV4dHVyZXNcbiAqL1xuY29uc3QgREVGQVVMVF9TQU1QTEVSX1BBUkFNRVRFUlMgPSB7XG4gIG1pbkZpbHRlcjogRklMVEVSX01PREUuTkVBUkVTVCxcbiAgbWFnRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNULFxuICBhZGRyZXNzTW9kZVU6IEFERFJFU1NfTU9ERS5DTEFNUF9UT19FREdFLFxuICBhZGRyZXNzTW9kZVY6IEFERFJFU1NfTU9ERS5DTEFNUF9UT19FREdFXG59O1xuXG4vKiogbHVtYS5nbCBkZXZpY2UgaW50ZXJmYWNlIGZvciB0ZXh0dXJlIGNyZWF0aW9uICovXG5pbnRlcmZhY2UgTHVtYURldmljZSB7XG4gIGNyZWF0ZVRleHR1cmUocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogVGV4dHVyZTtcbiAgZ2w/OiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O1xufVxuXG50eXBlIExvYWRJbWFnZXNPcHRpb25zID0ge1xuICBnbDogV2ViR0wyUmVuZGVyaW5nQ29udGV4dDtcbiAgZGV2aWNlPzogTHVtYURldmljZTtcbiAgaW1hZ2VzOiBJbWFnZVN0YXRlO1xuICBpbWFnZXNEYXRhOiBJbWFnZUlucHV0O1xuICBvbGRJbWFnZXNEYXRhOiBJbWFnZUlucHV0O1xufTtcblxuLyoqXG4gKiBMb2FkIGltYWdlIGl0ZW1zIHRvIHdlYmdsIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gbG9hZEltYWdlSXRlbShcbiAgZ2w6IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQsXG4gIGRldmljZTogTHVtYURldmljZSB8IHVuZGVmaW5lZCxcbiAgaW1hZ2VJdGVtOiBSYXN0ZXJUZXh0dXJlRGF0YSB8IFRleHR1cmUgfCAoUmFzdGVyVGV4dHVyZURhdGEgfCBUZXh0dXJlKVtdXG4pOiBudWxsIHwgVGV4dHVyZSB8IFRleHR1cmVbXSB7XG4gIGxldCByZXN1bHQ6IG51bGwgfCBUZXh0dXJlIHwgVGV4dHVyZVtdO1xuICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZUl0ZW0pKSB7XG4gICAgY29uc3QgZGlydHlSZXN1bHQgPSBpbWFnZUl0ZW0ubWFwKHggPT4gbG9hZFRleHR1cmUoZ2wsIGRldmljZSwgeCkpO1xuICAgIHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgdGV4dHVyZSBvZiBkaXJ0eVJlc3VsdCkge1xuICAgICAgaWYgKHRleHR1cmUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGV4dHVyZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gbG9hZFRleHR1cmUoZ2wsIGRldmljZSwgaW1hZ2VJdGVtKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRJbWFnZXMoe1xuICBnbCxcbiAgZGV2aWNlLFxuICBpbWFnZXMsXG4gIGltYWdlc0RhdGEsXG4gIG9sZEltYWdlc0RhdGFcbn06IExvYWRJbWFnZXNPcHRpb25zKTogSW1hZ2VTdGF0ZSB8IG51bGwge1xuICBsZXQgaW1hZ2VzRGlydHkgPSBmYWxzZTtcblxuICBpZiAob2xkSW1hZ2VzRGF0YSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9sZEltYWdlc0RhdGEpIHtcbiAgICAgIGlmIChpbWFnZXNEYXRhICYmICEoa2V5IGluIGltYWdlc0RhdGEpICYmIGtleSBpbiBpbWFnZXMpIHtcbiAgICAgICAgZGVsZXRlIGltYWdlc1trZXldO1xuICAgICAgICBpbWFnZXNEaXJ0eSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hhbmdlZEtleXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qga2V5IGluIGltYWdlc0RhdGEpIHtcbiAgICBpZiAoIW9sZEltYWdlc0RhdGEgfHwgKG9sZEltYWdlc0RhdGEgJiYgIShrZXkgaW4gb2xkSW1hZ2VzRGF0YSkpKSB7XG4gICAgICBjaGFuZ2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoaW1hZ2VzRGF0YVtrZXldLCBvbGRJbWFnZXNEYXRhW2tleV0pKSB7XG4gICAgICBjaGFuZ2VkS2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgY2hhbmdlZEtleXMpIHtcbiAgICBjb25zdCBpbWFnZURhdGEgPSBpbWFnZXNEYXRhW2tleV07XG4gICAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZEl0ZW0gPSBsb2FkSW1hZ2VJdGVtKGdsLCBkZXZpY2UsIGltYWdlRGF0YSk7XG4gICAgaWYgKGxvYWRlZEl0ZW0pIHtcbiAgICAgIGltYWdlc1trZXldID0gbG9hZGVkSXRlbTtcbiAgICB9XG4gICAgaW1hZ2VzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGltYWdlc0RpcnR5KSB7XG4gICAgcmV0dXJuIGltYWdlcztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1hcCBvbGQgR0wgdGV4dHVyZSBwYXJhbWV0ZXIgY29uc3RhbnRzIHRvIGx1bWEuZ2wgOSBzYW1wbGVyIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gbWFwU2FtcGxlclBhcmFtZXRlcnMob2xkUGFyYW1zOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsuLi5ERUZBVUxUX1NBTVBMRVJfUEFSQU1FVEVSU307XG5cbiAgY29uc3QgbWFnRmlsdGVyTWFwID0ge1xuICAgIFtHTC5ORUFSRVNUXTogRklMVEVSX01PREUuTkVBUkVTVCxcbiAgICBbR0wuTElORUFSXTogRklMVEVSX01PREUuTElORUFSXG4gIH07XG5cbiAgY29uc3QgbWluRmlsdGVyTWFwOiBSZWNvcmQ8bnVtYmVyLCB7bWluRmlsdGVyOiBzdHJpbmc7IG1pcG1hcEZpbHRlcj86IHN0cmluZ30+ID0ge1xuICAgIFtHTC5ORUFSRVNUXToge21pbkZpbHRlcjogRklMVEVSX01PREUuTkVBUkVTVH0sXG4gICAgW0dMLkxJTkVBUl06IHttaW5GaWx0ZXI6IEZJTFRFUl9NT0RFLkxJTkVBUn0sXG4gICAgW0dMLk5FQVJFU1RfTUlQTUFQX05FQVJFU1RdOiB7XG4gICAgICBtaW5GaWx0ZXI6IEZJTFRFUl9NT0RFLk5FQVJFU1QsXG4gICAgICBtaXBtYXBGaWx0ZXI6IEZJTFRFUl9NT0RFLk5FQVJFU1RcbiAgICB9LFxuICAgIFtHTC5ORUFSRVNUX01JUE1BUF9MSU5FQVJdOiB7bWluRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNULCBtaXBtYXBGaWx0ZXI6IEZJTFRFUl9NT0RFLkxJTkVBUn0sXG4gICAgW0dMLkxJTkVBUl9NSVBNQVBfTkVBUkVTVF06IHttaW5GaWx0ZXI6IEZJTFRFUl9NT0RFLkxJTkVBUiwgbWlwbWFwRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNUfSxcbiAgICBbR0wuTElORUFSX01JUE1BUF9MSU5FQVJdOiB7bWluRmlsdGVyOiBGSUxURVJfTU9ERS5MSU5FQVIsIG1pcG1hcEZpbHRlcjogRklMVEVSX01PREUuTElORUFSfVxuICB9O1xuXG4gIGNvbnN0IHdyYXBNYXAgPSB7XG4gICAgW0dMLkNMQU1QX1RPX0VER0VdOiBBRERSRVNTX01PREUuQ0xBTVBfVE9fRURHRSxcbiAgICBbR0wuUkVQRUFUXTogQUREUkVTU19NT0RFLlJFUEVBVCxcbiAgICBbR0wuTUlSUk9SRURfUkVQRUFUXTogQUREUkVTU19NT0RFLk1JUlJPUl9SRVBFQVRcbiAgfTtcblxuICBpZiAob2xkUGFyYW1zKSB7XG4gICAgaWYgKG9sZFBhcmFtc1tHTC5URVhUVVJFX01JTl9GSUxURVJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBlZCA9IG1pbkZpbHRlck1hcFtvbGRQYXJhbXNbR0wuVEVYVFVSRV9NSU5fRklMVEVSXV07XG4gICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgIHJlc3VsdC5taW5GaWx0ZXIgPSBtYXBwZWQubWluRmlsdGVyO1xuICAgICAgICBpZiAobWFwcGVkLm1pcG1hcEZpbHRlcikge1xuICAgICAgICAgIHJlc3VsdC5taXBtYXBGaWx0ZXIgPSBtYXBwZWQubWlwbWFwRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRQYXJhbXNbR0wuVEVYVFVSRV9NQUdfRklMVEVSXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQubWFnRmlsdGVyID0gbWFnRmlsdGVyTWFwW29sZFBhcmFtc1tHTC5URVhUVVJFX01BR19GSUxURVJdXSB8fCBGSUxURVJfTU9ERS5ORUFSRVNUO1xuICAgIH1cbiAgICBpZiAob2xkUGFyYW1zW0dMLlRFWFRVUkVfV1JBUF9TXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQuYWRkcmVzc01vZGVVID0gd3JhcE1hcFtvbGRQYXJhbXNbR0wuVEVYVFVSRV9XUkFQX1NdXSB8fCBBRERSRVNTX01PREUuQ0xBTVBfVE9fRURHRTtcbiAgICB9XG4gICAgaWYgKG9sZFBhcmFtc1tHTC5URVhUVVJFX1dSQVBfVF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0LmFkZHJlc3NNb2RlViA9IHdyYXBNYXBbb2xkUGFyYW1zW0dMLlRFWFRVUkVfV1JBUF9UXV0gfHwgQUREUkVTU19NT0RFLkNMQU1QX1RPX0VER0U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBNYXAgb2xkIEdMIGZvcm1hdC90eXBlIHRvIGx1bWEuZ2wgOSB0ZXh0dXJlIGZvcm1hdCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbWFwVGV4dHVyZUZvcm1hdChnbEZvcm1hdDogbnVtYmVyLCBfZ2xUeXBlPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgc3dpdGNoIChnbEZvcm1hdCkge1xuICAgIGNhc2UgR0wuUjhVSTpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SOF9VSU5UO1xuICAgIGNhc2UgR0wuUjE2VUk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjE2X1VJTlQ7XG4gICAgY2FzZSBHTC5SMzJVSTpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SMzJfVUlOVDtcbiAgICBjYXNlIEdMLlI4STpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SOF9TSU5UO1xuICAgIGNhc2UgR0wuUjE2STpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SMTZfU0lOVDtcbiAgICBjYXNlIEdMLlIzMkk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjMyX1NJTlQ7XG4gICAgY2FzZSBHTC5SMzJGOlxuICAgICAgcmV0dXJuIFRFWFRVUkVfRk9STUFULlIzMl9GTE9BVDtcbiAgICBjYXNlIEdMLlJHQkE6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUkdCQThfVU5PUk07XG4gICAgY2FzZSBHTC5SR0I6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUkdCQThfVU5PUk07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SR0JBOF9VTk9STTtcbiAgfVxufVxuXG4vKipcbiAqIEV4cGFuZCAzLWJ5dGUtcGVyLXBpeGVsIFJHQiBkYXRhIHRvIDQtYnl0ZS1wZXItcGl4ZWwgUkdCQS5cbiAqIE5lZWRlZCBiZWNhdXNlIFdlYkdQVS9sdW1hLmdsIDkgaGFzIG5vIDMtY2hhbm5lbCB0ZXh0dXJlIGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gZXhwYW5kUkdCdG9SR0JBKFxuICBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXksXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyXG4pOiBVaW50OEFycmF5IHtcbiAgY29uc3QgcGl4ZWxDb3VudCA9IHdpZHRoICogaGVpZ2h0O1xuICBjb25zdCByZ2JhID0gbmV3IFVpbnQ4QXJyYXkocGl4ZWxDb3VudCAqIDQpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7IGkrKykge1xuICAgIHJnYmFbaSAqIDRdID0gZGF0YVtpICogM107XG4gICAgcmdiYVtpICogNCArIDFdID0gZGF0YVtpICogMyArIDFdO1xuICAgIHJnYmFbaSAqIDQgKyAyXSA9IGRhdGFbaSAqIDMgKyAyXTtcbiAgICByZ2JhW2kgKiA0ICsgM10gPSAyNTU7XG4gIH1cbiAgcmV0dXJuIHJnYmE7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRleHR1cmUgb2JqZWN0IGZyb20gaW1hZ2UgZGF0YSB1c2luZyBsdW1hLmdsIDkgZGV2aWNlIEFQSS5cbiAqIFJldHVybnMgYSBwcm9wZXIgbHVtYS5nbCBUZXh0dXJlIG9iamVjdCB0aGF0IHdvcmtzIHdpdGggdGhlIGJpbmRpbmcgc3lzdGVtLlxuICovXG5mdW5jdGlvbiBsb2FkVGV4dHVyZShcbiAgZ2w6IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQsXG4gIGRldmljZTogTHVtYURldmljZSB8IHVuZGVmaW5lZCxcbiAgaW1hZ2VEYXRhOiBUZXh0dXJlIHwgUmFzdGVyVGV4dHVyZURhdGFcbik6IFRleHR1cmUgfCBudWxsIHtcbiAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIElmIGFscmVhZHkgYSBsdW1hLmdsIFRleHR1cmUgaW5zdGFuY2UsIHJldHVybiBhcy1pc1xuICBjb25zdCByYXN0ZXJUZXh0dXJlRGF0YSA9IGltYWdlRGF0YSBhcyBSYXN0ZXJUZXh0dXJlRGF0YTtcbiAgaWYgKFxuICAgIHJhc3RlclRleHR1cmVEYXRhLmhhbmRsZSB8fFxuICAgIHJhc3RlclRleHR1cmVEYXRhLmlkPy5zdGFydHNXaXRoPy4oJ2x1bWEnKSB8fFxuICAgIHJhc3RlclRleHR1cmVEYXRhLmRldmljZVxuICApIHtcbiAgICByZXR1cm4gaW1hZ2VEYXRhIGFzIFRleHR1cmU7XG4gIH1cblxuICBjb25zdCByYXdEYXRhID0gaW1hZ2VEYXRhIGFzIFJhc3RlclRleHR1cmVEYXRhO1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgbHVtYSBpbnRlcm5hbCBwcm9wZXJ0aWVzIG5vdCBpbiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IHR5cGVcbiAgY29uc3QgbHVtYURldmljZSA9IGRldmljZSB8fCBnbC5sdW1hPy5kZXZpY2UgfHwgZ2wuX19sdW1hX2RldmljZTtcblxuICBpZiAoIWx1bWFEZXZpY2U/LmNyZWF0ZVRleHR1cmUpIHtcbiAgICBjb25zb2xlLndhcm4oJ1Jhc3RlckxheWVyOiBObyBsdW1hLmdsIGRldmljZSBhdmFpbGFibGUgZm9yIHRleHR1cmUgY3JlYXRpb24nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2FtcGxlclBhcmFtcyA9IG1hcFNhbXBsZXJQYXJhbWV0ZXJzKHJhd0RhdGEucGFyYW1ldGVycyB8fCB7fSk7XG4gICAgY29uc3QgdGV4dHVyZUZvcm1hdCA9IHJhd0RhdGEuZm9ybWF0XG4gICAgICA/IG1hcFRleHR1cmVGb3JtYXQocmF3RGF0YS5mb3JtYXQsIHJhd0RhdGEudHlwZSlcbiAgICAgIDogVEVYVFVSRV9GT1JNQVQuUkdCQThfVU5PUk07XG5cbiAgICBjb25zdCB3aWR0aCA9IHJhd0RhdGEud2lkdGggfHwgcmF3RGF0YS5kYXRhPy53aWR0aCB8fCAxO1xuICAgIGNvbnN0IGhlaWdodCA9IHJhd0RhdGEuaGVpZ2h0IHx8IHJhd0RhdGEuZGF0YT8uaGVpZ2h0IHx8IDE7XG5cbiAgICBjb25zdCB0ZXh0dXJlUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmb3JtYXQ6IHRleHR1cmVGb3JtYXQsXG4gICAgICBzYW1wbGVyOiBzYW1wbGVyUGFyYW1zLFxuICAgICAgLi4uKHJhd0RhdGEubWlwbWFwcyA9PT0gZmFsc2UgPyB7bWlwbWFwczogZmFsc2V9IDoge30pXG4gICAgfTtcblxuICAgIGlmIChyYXdEYXRhLmRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fFxuICAgICAgICByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fFxuICAgICAgICByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCB8fFxuICAgICAgICByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBJbWFnZURhdGFcbiAgICAgICkge1xuICAgICAgICB0ZXh0dXJlUHJvcHMuZGF0YSA9IHJhd0RhdGEuZGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHJhd0RhdGEuZGF0YSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJhd0RhdGEuZm9ybWF0ID09PSBHTC5SR0IgJiZcbiAgICAgICAgICAocmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGV4dHVyZVByb3BzLmRhdGEgPSBleHBhbmRSR0J0b1JHQkEocmF3RGF0YS5kYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0dXJlUHJvcHMuZGF0YSA9IHJhd0RhdGEuZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsdW1hRGV2aWNlLmNyZWF0ZVRleHR1cmUodGV4dHVyZVByb3BzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignUmFzdGVyTGF5ZXI6IEZhaWxlZCB0byBjcmVhdGUgdGV4dHVyZSB2aWEgZGV2aWNlLmNyZWF0ZVRleHR1cmU6JywgZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFBK0UsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUos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
@@ -1,60 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.patchPipelineValidation = patchPipelineValidation;
7
- var _webgl = require("@luma.gl/webgl");
8
- // SPDX-License-Identifier: MIT
9
- // Copyright contributors to the kepler.gl project
10
-
11
- /**
12
- * Patch luma.gl 9's WEBGLRenderPipeline to tolerate mixed-sampler-type
13
- * validation errors in _getLinkStatus().
14
- *
15
- * WebGL2's validateProgram checks that sampler uniforms of different types
16
- * (sampler2D, usampler2D, isampler2D) are not assigned to the same texture
17
- * unit. Before any draw call the default texture unit for all samplers is 0,
18
- * so programs that mix sampler types (e.g. raster band data as usampler2D +
19
- * colormap as sampler2D) always fail validation even though the program linked
20
- * successfully and will work correctly once texture units are assigned at draw
21
- * time.
22
- *
23
- * luma.gl calls validateProgram inside _getLinkStatus() immediately after
24
- * linkProgram, before any texture units can be assigned. This patch keeps the
25
- * full validateProgram call but ignores only the known false-positive about
26
- * mixed sampler types. All other validation errors are still reported.
27
- */
28
-
29
- // @ts-ignore WEBGLRenderPipeline resolution depends on moduleResolution setting
30
-
31
- var MIXED_SAMPLER_RE = /different type[s]? use the same sampler location/i;
32
- var _patched = false;
33
- function patchPipelineValidation() {
34
- var _WEBGLRenderPipeline$;
35
- if (_patched) return;
36
- _patched = true;
37
- if (!(_webgl.WEBGLRenderPipeline !== null && _webgl.WEBGLRenderPipeline !== void 0 && (_WEBGLRenderPipeline$ = _webgl.WEBGLRenderPipeline.prototype) !== null && _WEBGLRenderPipeline$ !== void 0 && _WEBGLRenderPipeline$._getLinkStatus)) {
38
- return;
39
- }
40
- _webgl.WEBGLRenderPipeline.prototype._getLinkStatus = function () {
41
- var gl = this.device.gl;
42
- var linked = gl.getProgramParameter(this.handle, 0x8b82 /* LINK_STATUS */);
43
- if (!linked) {
44
- this.linkStatus = 'error';
45
- return 'link-error';
46
- }
47
- gl.validateProgram(this.handle);
48
- var validated = gl.getProgramParameter(this.handle, 0x8b83 /* VALIDATE_STATUS */);
49
- if (!validated) {
50
- var infoLog = gl.getProgramInfoLog(this.handle) || '';
51
- if (!MIXED_SAMPLER_RE.test(infoLog)) {
52
- this.linkStatus = 'error';
53
- return 'validation-error';
54
- }
55
- }
56
- this.linkStatus = 'success';
57
- return 'success';
58
- };
59
- }
60
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2ViZ2wiLCJyZXF1aXJlIiwiTUlYRURfU0FNUExFUl9SRSIsIl9wYXRjaGVkIiwicGF0Y2hQaXBlbGluZVZhbGlkYXRpb24iLCJfV0VCR0xSZW5kZXJQaXBlbGluZSQiLCJXRUJHTFJlbmRlclBpcGVsaW5lIiwicHJvdG90eXBlIiwiX2dldExpbmtTdGF0dXMiLCJnbCIsImRldmljZSIsImxpbmtlZCIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJoYW5kbGUiLCJsaW5rU3RhdHVzIiwidmFsaWRhdGVQcm9ncmFtIiwidmFsaWRhdGVkIiwiaW5mb0xvZyIsImdldFByb2dyYW1JbmZvTG9nIiwidGVzdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXIvcGlwZWxpbmUtdmFsaWRhdGlvbi1wYXRjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIFBhdGNoIGx1bWEuZ2wgOSdzIFdFQkdMUmVuZGVyUGlwZWxpbmUgdG8gdG9sZXJhdGUgbWl4ZWQtc2FtcGxlci10eXBlXG4gKiB2YWxpZGF0aW9uIGVycm9ycyBpbiBfZ2V0TGlua1N0YXR1cygpLlxuICpcbiAqIFdlYkdMMidzIHZhbGlkYXRlUHJvZ3JhbSBjaGVja3MgdGhhdCBzYW1wbGVyIHVuaWZvcm1zIG9mIGRpZmZlcmVudCB0eXBlc1xuICogKHNhbXBsZXIyRCwgdXNhbXBsZXIyRCwgaXNhbXBsZXIyRCkgYXJlIG5vdCBhc3NpZ25lZCB0byB0aGUgc2FtZSB0ZXh0dXJlXG4gKiB1bml0LiBCZWZvcmUgYW55IGRyYXcgY2FsbCB0aGUgZGVmYXVsdCB0ZXh0dXJlIHVuaXQgZm9yIGFsbCBzYW1wbGVycyBpcyAwLFxuICogc28gcHJvZ3JhbXMgdGhhdCBtaXggc2FtcGxlciB0eXBlcyAoZS5nLiByYXN0ZXIgYmFuZCBkYXRhIGFzIHVzYW1wbGVyMkQgK1xuICogY29sb3JtYXAgYXMgc2FtcGxlcjJEKSBhbHdheXMgZmFpbCB2YWxpZGF0aW9uIGV2ZW4gdGhvdWdoIHRoZSBwcm9ncmFtIGxpbmtlZFxuICogc3VjY2Vzc2Z1bGx5IGFuZCB3aWxsIHdvcmsgY29ycmVjdGx5IG9uY2UgdGV4dHVyZSB1bml0cyBhcmUgYXNzaWduZWQgYXQgZHJhd1xuICogdGltZS5cbiAqXG4gKiBsdW1hLmdsIGNhbGxzIHZhbGlkYXRlUHJvZ3JhbSBpbnNpZGUgX2dldExpbmtTdGF0dXMoKSBpbW1lZGlhdGVseSBhZnRlclxuICogbGlua1Byb2dyYW0sIGJlZm9yZSBhbnkgdGV4dHVyZSB1bml0cyBjYW4gYmUgYXNzaWduZWQuIFRoaXMgcGF0Y2gga2VlcHMgdGhlXG4gKiBmdWxsIHZhbGlkYXRlUHJvZ3JhbSBjYWxsIGJ1dCBpZ25vcmVzIG9ubHkgdGhlIGtub3duIGZhbHNlLXBvc2l0aXZlIGFib3V0XG4gKiBtaXhlZCBzYW1wbGVyIHR5cGVzLiBBbGwgb3RoZXIgdmFsaWRhdGlvbiBlcnJvcnMgYXJlIHN0aWxsIHJlcG9ydGVkLlxuICovXG5cbi8vIEB0cy1pZ25vcmUgV0VCR0xSZW5kZXJQaXBlbGluZSByZXNvbHV0aW9uIGRlcGVuZHMgb24gbW9kdWxlUmVzb2x1dGlvbiBzZXR0aW5nXG5pbXBvcnQge1dFQkdMUmVuZGVyUGlwZWxpbmV9IGZyb20gJ0BsdW1hLmdsL3dlYmdsJztcblxuY29uc3QgTUlYRURfU0FNUExFUl9SRSA9IC9kaWZmZXJlbnQgdHlwZVtzXT8gdXNlIHRoZSBzYW1lIHNhbXBsZXIgbG9jYXRpb24vaTtcblxubGV0IF9wYXRjaGVkID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgaWYgKF9wYXRjaGVkKSByZXR1cm47XG4gIF9wYXRjaGVkID0gdHJ1ZTtcblxuICBpZiAoIVdFQkdMUmVuZGVyUGlwZWxpbmU/LnByb3RvdHlwZT8uX2dldExpbmtTdGF0dXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBXRUJHTFJlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5fZ2V0TGlua1N0YXR1cyA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBXRUJHTFJlbmRlclBpcGVsaW5lICYge2xpbmtTdGF0dXM6IHN0cmluZ31cbiAgKSB7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuZGV2aWNlO1xuICAgIGNvbnN0IGxpbmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5oYW5kbGUsIDB4OGI4MiAvKiBMSU5LX1NUQVRVUyAqLyk7XG4gICAgaWYgKCFsaW5rZWQpIHtcbiAgICAgIHRoaXMubGlua1N0YXR1cyA9ICdlcnJvcic7XG4gICAgICByZXR1cm4gJ2xpbmstZXJyb3InO1xuICAgIH1cblxuICAgIGdsLnZhbGlkYXRlUHJvZ3JhbSh0aGlzLmhhbmRsZSk7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLmhhbmRsZSwgMHg4YjgzIC8qIFZBTElEQVRFX1NUQVRVUyAqLyk7XG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IGluZm9Mb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLmhhbmRsZSkgfHwgJyc7XG4gICAgICBpZiAoIU1JWEVEX1NBTVBMRVJfUkUudGVzdChpbmZvTG9nKSkge1xuICAgICAgICB0aGlzLmxpbmtTdGF0dXMgPSAnZXJyb3InO1xuICAgICAgICByZXR1cm4gJ3ZhbGlkYXRpb24tZXJyb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGlua1N0YXR1cyA9ICdzdWNjZXNzJztcbiAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFzQkEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBdEJBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFHQSxJQUFNQyxnQkFBZ0IsR0FBRyxtREFBbUQ7QUFFNUUsSUFBSUMsUUFBUSxHQUFHLEtBQUs7QUFFYixTQUFTQyx1QkFBdUJBLENBQUEsRUFBUztFQUFBLElBQUFDLHFCQUFBO0VBQzlDLElBQUlGLFFBQVEsRUFBRTtFQUNkQSxRQUFRLEdBQUcsSUFBSTtFQUVmLElBQUksRUFBQ0csMEJBQW1CLGFBQW5CQSwwQkFBbUIsZ0JBQUFELHFCQUFBLEdBQW5CQywwQkFBbUIsQ0FBRUMsU0FBUyxjQUFBRixxQkFBQSxlQUE5QkEscUJBQUEsQ0FBZ0NHLGNBQWMsR0FBRTtJQUNuRDtFQUNGO0VBRUFGLDBCQUFtQixDQUFDQyxTQUFTLENBQUNDLGNBQWMsR0FBRyxZQUU3QztJQUNBLElBQU9DLEVBQUUsR0FBSSxJQUFJLENBQUNDLE1BQU0sQ0FBakJELEVBQUU7SUFDVCxJQUFNRSxNQUFNLEdBQUdGLEVBQUUsQ0FBQ0csbUJBQW1CLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQzVFLElBQUksQ0FBQ0YsTUFBTSxFQUFFO01BQ1gsSUFBSSxDQUFDRyxVQUFVLEdBQUcsT0FBTztNQUN6QixPQUFPLFlBQVk7SUFDckI7SUFFQUwsRUFBRSxDQUFDTSxlQUFlLENBQUMsSUFBSSxDQUFDRixNQUFNLENBQUM7SUFDL0IsSUFBTUcsU0FBUyxHQUFHUCxFQUFFLENBQUNHLG1CQUFtQixDQUFDLElBQUksQ0FBQ0MsTUFBTSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztJQUNuRixJQUFJLENBQUNHLFNBQVMsRUFBRTtNQUNkLElBQU1DLE9BQU8sR0FBR1IsRUFBRSxDQUFDUyxpQkFBaUIsQ0FBQyxJQUFJLENBQUNMLE1BQU0sQ0FBQyxJQUFJLEVBQUU7TUFDdkQsSUFBSSxDQUFDWCxnQkFBZ0IsQ0FBQ2lCLElBQUksQ0FBQ0YsT0FBTyxDQUFDLEVBQUU7UUFDbkMsSUFBSSxDQUFDSCxVQUFVLEdBQUcsT0FBTztRQUN6QixPQUFPLGtCQUFrQjtNQUMzQjtJQUNGO0lBRUEsSUFBSSxDQUFDQSxVQUFVLEdBQUcsU0FBUztJQUMzQixPQUFPLFNBQVM7RUFDbEIsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119