@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
@@ -0,0 +1,134 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ 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; } } }; }
4
+ 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; } }
5
+ 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; }
6
+ // SPDX-License-Identifier: MIT
7
+ // Copyright contributors to the kepler.gl project
8
+
9
+ import { UNIFORM_NAME_MAP } from './raster-processing-uniforms';
10
+
11
+ /**
12
+ * Test if two lists of modules are equal
13
+ *
14
+ * @param modules Modules list
15
+ * @param oldModules Modules list
16
+ *
17
+ * @return true if both lists are equal
18
+ */
19
+ export function modulesEqual(modules, oldModules) {
20
+ if (modules.length !== oldModules.length) {
21
+ return false;
22
+ }
23
+ for (var i = 0; i < modules.length; i++) {
24
+ if (modules[i].name !== oldModules[i].name) {
25
+ return false;
26
+ }
27
+ }
28
+ return true;
29
+ }
30
+ function isUniformValue(value) {
31
+ return typeof value === 'number' || typeof value === 'boolean' || ArrayBuffer.isView(value) || Array.isArray(value);
32
+ }
33
+
34
+ /**
35
+ * Apply module uniforms/bindings to shaderInputs, calling each module's
36
+ * getUniforms exactly once and writing the result directly — avoiding the
37
+ * double-getUniforms bug where shaderInputs.setProps() would re-invoke
38
+ * getUniforms on already-transformed values.
39
+ *
40
+ * For modules whose uniforms have been consolidated into the shared
41
+ * rasterProcessing UBO, the uniform values are remapped (prefixed) and
42
+ * written to the rasterProcessing slot instead of the individual module slot.
43
+ */
44
+ export function applyModuleUniforms(shaderInputs, modules, allModuleProps) {
45
+ var _iterator = _createForOfIteratorHelper(modules),
46
+ _step;
47
+ try {
48
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
49
+ var mod = _step.value;
50
+ if (mod.getUniforms) {
51
+ var result = mod.getUniforms(allModuleProps);
52
+ if (result) {
53
+ var uniforms = {};
54
+ var bindings = {};
55
+ for (var _i = 0, _Object$entries = Object.entries(result); _i < _Object$entries.length; _i++) {
56
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
57
+ key = _Object$entries$_i[0],
58
+ value = _Object$entries$_i[1];
59
+ if (isUniformValue(value)) {
60
+ uniforms[key] = value;
61
+ } else {
62
+ bindings[key] = value;
63
+ }
64
+ }
65
+ try {
66
+ var nameMap = UNIFORM_NAME_MAP[mod.name];
67
+ if (nameMap && mod.uniformTypes) {
68
+ // Consolidated module: remap uniforms to the shared rasterProcessing UBO
69
+ if (!shaderInputs.moduleUniforms.rasterProcessing) {
70
+ shaderInputs.moduleUniforms.rasterProcessing = {};
71
+ }
72
+ for (var _i2 = 0, _Object$entries2 = Object.entries(uniforms); _i2 < _Object$entries2.length; _i2++) {
73
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
74
+ _key = _Object$entries2$_i[0],
75
+ _value = _Object$entries2$_i[1];
76
+ var remapped = nameMap[_key];
77
+ if (remapped) {
78
+ shaderInputs.moduleUniforms.rasterProcessing[remapped] = _value;
79
+ }
80
+ }
81
+ // Bindings (textures) stay on the original module name
82
+ if (Object.keys(bindings).length > 0) {
83
+ if (!shaderInputs.moduleBindings[mod.name]) {
84
+ shaderInputs.moduleBindings[mod.name] = {};
85
+ }
86
+ Object.assign(shaderInputs.moduleBindings[mod.name], bindings);
87
+ }
88
+ } else {
89
+ // Non-consolidated module: write directly as before
90
+ if (!shaderInputs.moduleUniforms[mod.name]) {
91
+ shaderInputs.moduleUniforms[mod.name] = {};
92
+ }
93
+ if (!shaderInputs.moduleBindings[mod.name]) {
94
+ shaderInputs.moduleBindings[mod.name] = {};
95
+ }
96
+ Object.assign(shaderInputs.moduleUniforms[mod.name], uniforms);
97
+ Object.assign(shaderInputs.moduleBindings[mod.name], bindings);
98
+ }
99
+ } catch (_unused) {
100
+ var _nameMap = UNIFORM_NAME_MAP[mod.name];
101
+ if (_nameMap && mod.uniformTypes) {
102
+ var _shaderInputs$setProp;
103
+ var remappedUniforms = {};
104
+ for (var _i3 = 0, _Object$entries3 = Object.entries(uniforms); _i3 < _Object$entries3.length; _i3++) {
105
+ var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),
106
+ _key2 = _Object$entries3$_i[0],
107
+ val = _Object$entries3$_i[1];
108
+ var _remapped = _nameMap[_key2];
109
+ if (_remapped) {
110
+ remappedUniforms[_remapped] = val;
111
+ }
112
+ }
113
+ (_shaderInputs$setProp = shaderInputs.setProps) === null || _shaderInputs$setProp === void 0 || _shaderInputs$setProp.call(shaderInputs, {
114
+ rasterProcessing: remappedUniforms
115
+ });
116
+ if (Object.keys(bindings).length > 0) {
117
+ var _shaderInputs$setProp2;
118
+ (_shaderInputs$setProp2 = shaderInputs.setProps) === null || _shaderInputs$setProp2 === void 0 || _shaderInputs$setProp2.call(shaderInputs, _defineProperty({}, mod.name, bindings));
119
+ }
120
+ } else {
121
+ var _shaderInputs$setProp4;
122
+ (_shaderInputs$setProp4 = shaderInputs.setProps) === null || _shaderInputs$setProp4 === void 0 || _shaderInputs$setProp4.call(shaderInputs, _defineProperty({}, mod.name, result));
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+ } catch (err) {
129
+ _iterator.e(err);
130
+ } finally {
131
+ _iterator.f();
132
+ }
133
+ }
134
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVTklGT1JNX05BTUVfTUFQIiwibW9kdWxlc0VxdWFsIiwibW9kdWxlcyIsIm9sZE1vZHVsZXMiLCJsZW5ndGgiLCJpIiwibmFtZSIsImlzVW5pZm9ybVZhbHVlIiwidmFsdWUiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsIkFycmF5IiwiaXNBcnJheSIsImFwcGx5TW9kdWxlVW5pZm9ybXMiLCJzaGFkZXJJbnB1dHMiLCJhbGxNb2R1bGVQcm9wcyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJtb2QiLCJnZXRVbmlmb3JtcyIsInJlc3VsdCIsInVuaWZvcm1zIiwiYmluZGluZ3MiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIk9iamVjdCIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheSIsImtleSIsIm5hbWVNYXAiLCJ1bmlmb3JtVHlwZXMiLCJtb2R1bGVVbmlmb3JtcyIsInJhc3RlclByb2Nlc3NpbmciLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMyIiwiX09iamVjdCRlbnRyaWVzMiRfaSIsInJlbWFwcGVkIiwia2V5cyIsIm1vZHVsZUJpbmRpbmdzIiwiYXNzaWduIiwiX3VudXNlZCIsIl9zaGFkZXJJbnB1dHMkc2V0UHJvcCIsInJlbWFwcGVkVW5pZm9ybXMiLCJfaTMiLCJfT2JqZWN0JGVudHJpZXMzIiwiX09iamVjdCRlbnRyaWVzMyRfaSIsInZhbCIsInNldFByb3BzIiwiY2FsbCIsIl9zaGFkZXJJbnB1dHMkc2V0UHJvcDIiLCJfZGVmaW5lUHJvcGVydHkiLCJfc2hhZGVySW5wdXRzJHNldFByb3A0IiwiZXJyIiwiZSIsImYiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFzdGVyL3V0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtTaGFkZXJNb2R1bGV9IGZyb20gJy4vd2ViZ2wvdHlwZXMnO1xuaW1wb3J0IHtVTklGT1JNX05BTUVfTUFQfSBmcm9tICcuL3Jhc3Rlci1wcm9jZXNzaW5nLXVuaWZvcm1zJztcblxuLyoqXG4gKiBUZXN0IGlmIHR3byBsaXN0cyBvZiBtb2R1bGVzIGFyZSBlcXVhbFxuICpcbiAqIEBwYXJhbSBtb2R1bGVzICAgICBNb2R1bGVzIGxpc3RcbiAqIEBwYXJhbSBvbGRNb2R1bGVzICBNb2R1bGVzIGxpc3RcbiAqXG4gKiBAcmV0dXJuIHRydWUgaWYgYm90aCBsaXN0cyBhcmUgZXF1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZXNFcXVhbChtb2R1bGVzOiBTaGFkZXJNb2R1bGVbXSwgb2xkTW9kdWxlczogU2hhZGVyTW9kdWxlW10pOiBib29sZWFuIHtcbiAgaWYgKG1vZHVsZXMubGVuZ3RoICE9PSBvbGRNb2R1bGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtb2R1bGVzW2ldLm5hbWUgIT09IG9sZE1vZHVsZXNbaV0ubmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1VuaWZvcm1WYWx1ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fFxuICAgIEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgfHxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKVxuICApO1xufVxuXG4vKipcbiAqIEFwcGx5IG1vZHVsZSB1bmlmb3Jtcy9iaW5kaW5ncyB0byBzaGFkZXJJbnB1dHMsIGNhbGxpbmcgZWFjaCBtb2R1bGUnc1xuICogZ2V0VW5pZm9ybXMgZXhhY3RseSBvbmNlIGFuZCB3cml0aW5nIHRoZSByZXN1bHQgZGlyZWN0bHkg4oCUIGF2b2lkaW5nIHRoZVxuICogZG91YmxlLWdldFVuaWZvcm1zIGJ1ZyB3aGVyZSBzaGFkZXJJbnB1dHMuc2V0UHJvcHMoKSB3b3VsZCByZS1pbnZva2VcbiAqIGdldFVuaWZvcm1zIG9uIGFscmVhZHktdHJhbnNmb3JtZWQgdmFsdWVzLlxuICpcbiAqIEZvciBtb2R1bGVzIHdob3NlIHVuaWZvcm1zIGhhdmUgYmVlbiBjb25zb2xpZGF0ZWQgaW50byB0aGUgc2hhcmVkXG4gKiByYXN0ZXJQcm9jZXNzaW5nIFVCTywgdGhlIHVuaWZvcm0gdmFsdWVzIGFyZSByZW1hcHBlZCAocHJlZml4ZWQpIGFuZFxuICogd3JpdHRlbiB0byB0aGUgcmFzdGVyUHJvY2Vzc2luZyBzbG90IGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgbW9kdWxlIHNsb3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1vZHVsZVVuaWZvcm1zKFxuICBzaGFkZXJJbnB1dHM6IHtcbiAgICBtb2R1bGVVbmlmb3JtczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIG1vZHVsZUJpbmRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gICAgc2V0UHJvcHM/OiAocHJvcHM6IGFueSkgPT4gdm9pZDtcbiAgfSxcbiAgbW9kdWxlczogU2hhZGVyTW9kdWxlW10sXG4gIGFsbE1vZHVsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgbW9kIG9mIG1vZHVsZXMpIHtcbiAgICBpZiAobW9kLmdldFVuaWZvcm1zKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBtb2QuZ2V0VW5pZm9ybXMoYWxsTW9kdWxlUHJvcHMgYXMgb2JqZWN0KTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgdW5pZm9ybXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGNvbnN0IGJpbmRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGlzVW5pZm9ybVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdW5pZm9ybXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiaW5kaW5nc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbmFtZU1hcCA9IFVOSUZPUk1fTkFNRV9NQVBbbW9kLm5hbWVdO1xuICAgICAgICAgIGlmIChuYW1lTWFwICYmIG1vZC51bmlmb3JtVHlwZXMpIHtcbiAgICAgICAgICAgIC8vIENvbnNvbGlkYXRlZCBtb2R1bGU6IHJlbWFwIHVuaWZvcm1zIHRvIHRoZSBzaGFyZWQgcmFzdGVyUHJvY2Vzc2luZyBVQk9cbiAgICAgICAgICAgIGlmICghc2hhZGVySW5wdXRzLm1vZHVsZVVuaWZvcm1zLnJhc3RlclByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAgICAgc2hhZGVySW5wdXRzLm1vZHVsZVVuaWZvcm1zLnJhc3RlclByb2Nlc3NpbmcgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVuaWZvcm1zKSkge1xuICAgICAgICAgICAgICBjb25zdCByZW1hcHBlZCA9IG5hbWVNYXBba2V5XTtcbiAgICAgICAgICAgICAgaWYgKHJlbWFwcGVkKSB7XG4gICAgICAgICAgICAgICAgc2hhZGVySW5wdXRzLm1vZHVsZVVuaWZvcm1zLnJhc3RlclByb2Nlc3NpbmdbcmVtYXBwZWRdID0gdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEJpbmRpbmdzICh0ZXh0dXJlcykgc3RheSBvbiB0aGUgb3JpZ2luYWwgbW9kdWxlIG5hbWVcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhiaW5kaW5ncykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBpZiAoIXNoYWRlcklucHV0cy5tb2R1bGVCaW5kaW5nc1ttb2QubmFtZV0pIHtcbiAgICAgICAgICAgICAgICBzaGFkZXJJbnB1dHMubW9kdWxlQmluZGluZ3NbbW9kLm5hbWVdID0ge307XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzaGFkZXJJbnB1dHMubW9kdWxlQmluZGluZ3NbbW9kLm5hbWVdLCBiaW5kaW5ncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vbi1jb25zb2xpZGF0ZWQgbW9kdWxlOiB3cml0ZSBkaXJlY3RseSBhcyBiZWZvcmVcbiAgICAgICAgICAgIGlmICghc2hhZGVySW5wdXRzLm1vZHVsZVVuaWZvcm1zW21vZC5uYW1lXSkge1xuICAgICAgICAgICAgICBzaGFkZXJJbnB1dHMubW9kdWxlVW5pZm9ybXNbbW9kLm5hbWVdID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNoYWRlcklucHV0cy5tb2R1bGVCaW5kaW5nc1ttb2QubmFtZV0pIHtcbiAgICAgICAgICAgICAgc2hhZGVySW5wdXRzLm1vZHVsZUJpbmRpbmdzW21vZC5uYW1lXSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzaGFkZXJJbnB1dHMubW9kdWxlVW5pZm9ybXNbbW9kLm5hbWVdLCB1bmlmb3Jtcyk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNoYWRlcklucHV0cy5tb2R1bGVCaW5kaW5nc1ttb2QubmFtZV0sIGJpbmRpbmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGNvbnN0IG5hbWVNYXAgPSBVTklGT1JNX05BTUVfTUFQW21vZC5uYW1lXTtcbiAgICAgICAgICBpZiAobmFtZU1hcCAmJiBtb2QudW5pZm9ybVR5cGVzKSB7XG4gICAgICAgICAgICBjb25zdCByZW1hcHBlZFVuaWZvcm1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHVuaWZvcm1zKSkge1xuICAgICAgICAgICAgICBjb25zdCByZW1hcHBlZCA9IG5hbWVNYXBba2V5XTtcbiAgICAgICAgICAgICAgaWYgKHJlbWFwcGVkKSB7XG4gICAgICAgICAgICAgICAgcmVtYXBwZWRVbmlmb3Jtc1tyZW1hcHBlZF0gPSB2YWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWRlcklucHV0cy5zZXRQcm9wcz8uKHtyYXN0ZXJQcm9jZXNzaW5nOiByZW1hcHBlZFVuaWZvcm1zfSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYmluZGluZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgc2hhZGVySW5wdXRzLnNldFByb3BzPy4oe1ttb2QubmFtZV06IGJpbmRpbmdzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNoYWRlcklucHV0cy5zZXRQcm9wcz8uKHtbbW9kLm5hbWVdOiByZXN1bHR9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBOztBQUdBLFNBQVFBLGdCQUFnQixRQUFPLDhCQUE4Qjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsWUFBWUEsQ0FBQ0MsT0FBdUIsRUFBRUMs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
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ var fs = "uniform sampler2D uColormapTexture;\n\nuniform colormapUniforms {\n int hasCategoricalColors;\n int categoricalMinValue;\n int categoricalMaxValue;\n int maxPixelValue;\n} colormap;\n\n// Apply colormap texture given value\n// Since the texture only varies in the x direction, setting v to 0.5 as a\n// constant is fine\n// Assumes the input range of value is -1 to 1\nvec4 colormapApply(sampler2D cmap, vec4 image) {\n vec2 uv;\n if (colormap.hasCategoricalColors == 1) {\n float step = float(colormap.maxPixelValue) / float(colormap.categoricalMaxValue - colormap.categoricalMinValue);\n uv = vec2(image.r * step, 0.5);\n } else {\n uv = vec2(0.5 * image.r + 0.5, 0.5);\n }\n vec4 color = texture(cmap, uv);\n if(color.a <= 0.0) discard;\n return color;\n}\n";
5
+ function getUniforms() {
6
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7
+ var imageColormap = opts.imageColormap,
8
+ minCategoricalBandValue = opts.minCategoricalBandValue,
9
+ maxCategoricalBandValue = opts.maxCategoricalBandValue,
10
+ dataTypeMaxValue = opts.dataTypeMaxValue,
11
+ maxPixelValue = opts.maxPixelValue;
12
+ if (!imageColormap) {
13
+ return null;
14
+ }
15
+ var isSupportedDataType = Number.isFinite(dataTypeMaxValue);
16
+ var isCategorical = isSupportedDataType && Number.isFinite(maxPixelValue) && Number.isFinite(minCategoricalBandValue) && Number.isFinite(maxCategoricalBandValue);
17
+ return {
18
+ uColormapTexture: imageColormap,
19
+ hasCategoricalColors: isCategorical ? 1 : 0,
20
+ categoricalMinValue: Number.isFinite(minCategoricalBandValue) ? minCategoricalBandValue : 0,
21
+ categoricalMaxValue: Number.isFinite(maxCategoricalBandValue) ? maxCategoricalBandValue : 0,
22
+ maxPixelValue: Number.isFinite(maxPixelValue) ? maxPixelValue : 0
23
+ };
24
+ }
25
+ export var colormap = {
26
+ name: 'colormap',
27
+ fs: fs,
28
+ uniformTypes: {
29
+ hasCategoricalColors: 'i32',
30
+ categoricalMinValue: 'i32',
31
+ categoricalMaxValue: 'i32',
32
+ maxPixelValue: 'i32'
33
+ },
34
+ getUniforms: getUniforms,
35
+ inject: {
36
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = colormapApply(uColormapTexture, image);\n "
37
+ }
38
+ };
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImltYWdlQ29sb3JtYXAiLCJtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSIsIm1heENhdGVnb3JpY2FsQmFuZFZhbHVlIiwiZGF0YVR5cGVNYXhWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJpc1N1cHBvcnRlZERhdGFUeXBlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc0NhdGVnb3JpY2FsIiwidUNvbG9ybWFwVGV4dHVyZSIsImhhc0NhdGVnb3JpY2FsQ29sb3JzIiwiY2F0ZWdvcmljYWxNaW5WYWx1ZSIsImNhdGVnb3JpY2FsTWF4VmFsdWUiLCJjb2xvcm1hcCIsIm5hbWUiLCJ1bmlmb3JtVHlwZXMiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2NvbG9ybWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0eXBlIHtUZXh0dXJlfSBmcm9tICdAbHVtYS5nbC9jb3JlJztcbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBmcyA9IGBcXFxudW5pZm9ybSBzYW1wbGVyMkQgdUNvbG9ybWFwVGV4dHVyZTtcblxudW5pZm9ybSBjb2xvcm1hcFVuaWZvcm1zIHtcbiAgaW50IGhhc0NhdGVnb3JpY2FsQ29sb3JzO1xuICBpbnQgY2F0ZWdvcmljYWxNaW5WYWx1ZTtcbiAgaW50IGNhdGVnb3JpY2FsTWF4VmFsdWU7XG4gIGludCBtYXhQaXhlbFZhbHVlO1xufSBjb2xvcm1hcDtcblxuLy8gQXBwbHkgY29sb3JtYXAgdGV4dHVyZSBnaXZlbiB2YWx1ZVxuLy8gU2luY2UgdGhlIHRleHR1cmUgb25seSB2YXJpZXMgaW4gdGhlIHggZGlyZWN0aW9uLCBzZXR0aW5nIHYgdG8gMC41IGFzIGFcbi8vIGNvbnN0YW50IGlzIGZpbmVcbi8vIEFzc3VtZXMgdGhlIGlucHV0IHJhbmdlIG9mIHZhbHVlIGlzIC0xIHRvIDFcbnZlYzQgY29sb3JtYXBBcHBseShzYW1wbGVyMkQgY21hcCwgdmVjNCBpbWFnZSkge1xuICB2ZWMyIHV2O1xuICBpZiAoY29sb3JtYXAuaGFzQ2F0ZWdvcmljYWxDb2xvcnMgPT0gMSkge1xuICAgIGZsb2F0IHN0ZXAgPSBmbG9hdChjb2xvcm1hcC5tYXhQaXhlbFZhbHVlKSAvIGZsb2F0KGNvbG9ybWFwLmNhdGVnb3JpY2FsTWF4VmFsdWUgLSBjb2xvcm1hcC5jYXRlZ29yaWNhbE1pblZhbHVlKTtcbiAgICB1diA9IHZlYzIoaW1hZ2UuciAqIHN0ZXAsIDAuNSk7XG4gIH0gZWxzZSB7XG4gICAgdXYgPSB2ZWMyKDAuNSAqIGltYWdlLnIgKyAwLjUsIDAuNSk7XG4gIH1cbiAgdmVjNCBjb2xvciA9IHRleHR1cmUoY21hcCwgdXYpO1xuICBpZihjb2xvci5hIDw9IDAuMCkgZGlzY2FyZDtcbiAgcmV0dXJuIGNvbG9yO1xufVxuYDtcblxuZnVuY3Rpb24gZ2V0VW5pZm9ybXMoXG4gIG9wdHM6IHtcbiAgICBpbWFnZUNvbG9ybWFwPzogVGV4dHVyZTtcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBkYXRhVHlwZU1heFZhbHVlPzogbnVtYmVyO1xuICAgIG1heFBpeGVsVmFsdWU/OiBudW1iZXI7XG4gIH0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7XG4gICAgaW1hZ2VDb2xvcm1hcCxcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBkYXRhVHlwZU1heFZhbHVlLFxuICAgIG1heFBpeGVsVmFsdWVcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFpbWFnZUNvbG9ybWFwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpc1N1cHBvcnRlZERhdGFUeXBlID0gTnVtYmVyLmlzRmluaXRlKGRhdGFUeXBlTWF4VmFsdWUpO1xuICBjb25zdCBpc0NhdGVnb3JpY2FsID1cbiAgICBpc1N1cHBvcnRlZERhdGFUeXBlICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlKSAmJlxuICAgIE51bWJlci5pc0Zpbml0ZShtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSk7XG4gIHJldHVybiB7XG4gICAgdUNvbG9ybWFwVGV4dHVyZTogaW1hZ2VDb2xvcm1hcCxcbiAgICBoYXNDYXRlZ29yaWNhbENvbG9yczogaXNDYXRlZ29yaWNhbCA/IDEgOiAwLFxuICAgIGNhdGVnb3JpY2FsTWluVmFsdWU6IE51bWJlci5pc0Zpbml0ZShtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSkgPyBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSA6IDAsXG4gICAgY2F0ZWdvcmljYWxNYXhWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heENhdGVnb3JpY2FsQmFuZFZhbHVlKSA/IG1heENhdGVnb3JpY2FsQmFuZFZhbHVlIDogMCxcbiAgICBtYXhQaXhlbFZhbHVlOiBOdW1iZXIuaXNGaW5pdGUobWF4UGl4ZWxWYWx1ZSkgPyBtYXhQaXhlbFZhbHVlIDogMFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY29sb3JtYXA6IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ2NvbG9ybWFwJyxcbiAgZnMsXG4gIHVuaWZvcm1UeXBlczoge1xuICAgIGhhc0NhdGVnb3JpY2FsQ29sb3JzOiAnaTMyJyxcbiAgICBjYXRlZ29yaWNhbE1pblZhbHVlOiAnaTMyJyxcbiAgICBjYXRlZ29yaWNhbE1heFZhbHVlOiAnaTMyJyxcbiAgICBtYXhQaXhlbFZhbHVlOiAnaTMyJ1xuICB9LFxuICBnZXRVbmlmb3JtcyxcbiAgaW5qZWN0OiB7XG4gICAgJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1InOiBgXG4gICAgaW1hZ2UgPSBjb2xvcm1hcEFwcGx5KHVDb2xvcm1hcFRleHR1cmUsIGltYWdlKTtcbiAgICBgXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBS0EsSUFBTUEsRUFBRSxpeEJBMEJQO0FBRUQsU0FBU0MsV0FBV0EsQ0FBQSxFQVFDO0VBQUEsSUFQbkJDLElBTUMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRU4sSUFDRUcsYUFBYSxHQUtYSixJQUFJLENBTE5JLGFBQWE7SUFDYkMsdUJBQXVCLEdBSXJCTCxJQUFJLENBSk5LLHVCQUF1QjtJQUN2QkMsdUJBQXVCLEdBR3JCTixJQUFJLENBSE5NLHVCQUF1QjtJQUN2QkMsZ0JBQWdCLEdBRWRQLElBQUksQ0FGTk8sZ0JBQWdCO0lBQ2hCQyxhQUFhLEdBQ1hSLElBQUksQ0FETlEsYUFBYTtFQUdmLElBQUksQ0FBQ0osYUFBYSxFQUFFO0lBQ2xCLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBTUssbUJBQW1CLEdBQUdDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSixnQkFBZ0IsQ0FBQztFQUM3RCxJQUFNSyxhQUFhLEdBQ2pCSCxtQkFBbUIsSUFDbkJDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxhQUFhLENBQUMsSUFDOUJFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTix1QkFBdUIsQ0FBQyxJQUN4Q0ssTUFBTSxDQUFDQyxRQUFRLENBQUNMLHVCQUF1QixDQUFDO0VBQzFDLE9BQU87SUFDTE8sZ0JBQWdCLEVBQUVULGFBQWE7SUFDL0JVLG9CQUFvQixFQUFFRixhQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDM0NHLG1CQUFtQixFQUFFTCxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sdUJBQXVCLENBQUMsR0FBR0EsdUJBQXVCLEdBQUcsQ0FBQztJQUMzRlcsbUJBQW1CLEVBQUVOLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTCx1QkFBdUIsQ0FBQyxHQUFHQSx1QkFBdUIsR0FBRyxDQUFDO0lBQzNGRSxhQUFhLEVBQUVFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxhQUFhLENBQUMsR0FBR0EsYUFBYSxHQUFHO0VBQ2xFLENBQUM7QUFDSDtBQUVBLE9BQU8sSUFBTVMsUUFBc0IsR0FBRztFQUNwQ0MsSUFBSSxFQUFFLFVBQVU7RUFDaEJwQixFQUFFLEVBQUZBLEVBQUU7RUFDRnFCLFlBQVksRUFBRTtJQUNaTCxvQkFBb0IsRUFBRSxLQUFLO0lBQzNCQyxtQkFBbUIsRUFBRSxLQUFLO0lBQzFCQyxtQkFBbUIsRUFBRSxLQUFLO0lBQzFCUixhQUFhLEVBQUU7RUFDakIsQ0FBQztFQUNEVCxXQUFXLEVBQVhBLFdBQVc7RUFDWHFCLE1BQU0sRUFBRTtJQUNOLHdCQUF3QjtFQUcxQjtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,52 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ var fs = "uniform bandFilterUniforms {\n float min1;\n float max1;\n float min2;\n float max2;\n float min3;\n float max3;\n float min4;\n float max4;\n} bandFilter;\n";
5
+
6
+ // You can't pass JS' -Infinity or Infinity to a shader as a uniform
7
+ var inf = Math.pow(2, 62);
8
+
9
+ // eslint-disable-next-line complexity
10
+ function getUniforms() {
11
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
12
+ var filterMin1 = opts.filterMin1,
13
+ filterMin2 = opts.filterMin2,
14
+ filterMin3 = opts.filterMin3,
15
+ filterMin4 = opts.filterMin4,
16
+ filterMax1 = opts.filterMax1,
17
+ filterMax2 = opts.filterMax2,
18
+ filterMax3 = opts.filterMax3,
19
+ filterMax4 = opts.filterMax4;
20
+ if (Number.isFinite(filterMin1) || Number.isFinite(filterMin2) || Number.isFinite(filterMin3) || Number.isFinite(filterMin4) || Number.isFinite(filterMax1) || Number.isFinite(filterMax2) || Number.isFinite(filterMax3) || Number.isFinite(filterMax4)) {
21
+ return {
22
+ min1: Number.isFinite(filterMin1) ? filterMin1 : -inf,
23
+ min2: Number.isFinite(filterMin2) ? filterMin2 : -inf,
24
+ min3: Number.isFinite(filterMin3) ? filterMin3 : -inf,
25
+ min4: Number.isFinite(filterMin4) ? filterMin4 : -inf,
26
+ max1: Number.isFinite(filterMax1) ? filterMax1 : inf,
27
+ max2: Number.isFinite(filterMax2) ? filterMax2 : inf,
28
+ max3: Number.isFinite(filterMax3) ? filterMax3 : inf,
29
+ max4: Number.isFinite(filterMax4) ? filterMax4 : inf
30
+ };
31
+ }
32
+ return null;
33
+ }
34
+ export var filter = {
35
+ name: 'bandFilter',
36
+ fs: fs,
37
+ uniformTypes: {
38
+ min1: 'f32',
39
+ max1: 'f32',
40
+ min2: 'f32',
41
+ max2: 'f32',
42
+ min3: 'f32',
43
+ max3: 'f32',
44
+ min4: 'f32',
45
+ max4: 'f32'
46
+ },
47
+ getUniforms: getUniforms,
48
+ inject: {
49
+ 'fs:DECKGL_MUTATE_COLOR': "\n if (image.r < bandFilter.min1) discard;\n if (image.g < bandFilter.min2) discard;\n if (image.b < bandFilter.min3) discard;\n if (image.a < bandFilter.min4) discard;\n if (image.r > bandFilter.max1) discard;\n if (image.g > bandFilter.max2) discard;\n if (image.b > bandFilter.max3) discard;\n if (image.a > bandFilter.max4) discard;\n "
50
+ }
51
+ };
52
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImluZiIsIk1hdGgiLCJwb3ciLCJnZXRVbmlmb3JtcyIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXJNaW4xIiwiZmlsdGVyTWluMiIsImZpbHRlck1pbjMiLCJmaWx0ZXJNaW40IiwiZmlsdGVyTWF4MSIsImZpbHRlck1heDIiLCJmaWx0ZXJNYXgzIiwiZmlsdGVyTWF4NCIsIk51bWJlciIsImlzRmluaXRlIiwibWluMSIsIm1pbjIiLCJtaW4zIiwibWluNCIsIm1heDEiLCJtYXgyIiwibWF4MyIsIm1heDQiLCJmaWx0ZXIiLCJuYW1lIiwidW5pZm9ybVR5cGVzIiwiaW5qZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Jhc3Rlci93ZWJnbC9jb2xvci9maWx0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtHZXRVbmlmb3Jtc091dHB1dCwgU2hhZGVyTW9kdWxlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGZzID0gYFxcXG51bmlmb3JtIGJhbmRGaWx0ZXJVbmlmb3JtcyB7XG4gIGZsb2F0IG1pbjE7XG4gIGZsb2F0IG1heDE7XG4gIGZsb2F0IG1pbjI7XG4gIGZsb2F0IG1heDI7XG4gIGZsb2F0IG1pbjM7XG4gIGZsb2F0IG1heDM7XG4gIGZsb2F0IG1pbjQ7XG4gIGZsb2F0IG1heDQ7XG59IGJhbmRGaWx0ZXI7XG5gO1xuXG4vLyBZb3UgY2FuJ3QgcGFzcyBKUycgLUluZmluaXR5IG9yIEluZmluaXR5IHRvIGEgc2hhZGVyIGFzIGEgdW5pZm9ybVxuY29uc3QgaW5mID0gTWF0aC5wb3coMiwgNjIpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gZ2V0VW5pZm9ybXMoXG4gIG9wdHM6IHtcbiAgICBmaWx0ZXJNaW4xPzogbnVtYmVyO1xuICAgIGZpbHRlck1pbjI/OiBudW1iZXI7XG4gICAgZmlsdGVyTWluMz86IG51bWJlcjtcbiAgICBmaWx0ZXJNaW40PzogbnVtYmVyO1xuICAgIGZpbHRlck1heDE/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4Mj86IG51bWJlcjtcbiAgICBmaWx0ZXJNYXgzPzogbnVtYmVyO1xuICAgIGZpbHRlck1heDQ/OiBudW1iZXI7XG4gIH0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7XG4gICAgZmlsdGVyTWluMSxcbiAgICBmaWx0ZXJNaW4yLFxuICAgIGZpbHRlck1pbjMsXG4gICAgZmlsdGVyTWluNCxcbiAgICBmaWx0ZXJNYXgxLFxuICAgIGZpbHRlck1heDIsXG4gICAgZmlsdGVyTWF4MyxcbiAgICBmaWx0ZXJNYXg0XG4gIH0gPSBvcHRzO1xuXG4gIGlmIChcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMSkgfHxcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMikgfHxcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMykgfHxcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluNCkgfHxcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MSkgfHxcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MikgfHxcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MykgfHxcbiAgICBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4NClcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbjE6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4xKSA/IGZpbHRlck1pbjEgOiAtaW5mLFxuICAgICAgbWluMjogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjIpID8gZmlsdGVyTWluMiA6IC1pbmYsXG4gICAgICBtaW4zOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMykgPyBmaWx0ZXJNaW4zIDogLWluZixcbiAgICAgIG1pbjQ6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW40KSA/IGZpbHRlck1pbjQgOiAtaW5mLFxuICAgICAgbWF4MTogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDEpID8gZmlsdGVyTWF4MSA6IGluZixcbiAgICAgIG1heDI6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgyKSA/IGZpbHRlck1heDIgOiBpbmYsXG4gICAgICBtYXgzOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MykgPyBmaWx0ZXJNYXgzIDogaW5mLFxuICAgICAgbWF4NDogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDQpID8gZmlsdGVyTWF4NCA6IGluZlxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlcjogU2hhZGVyTW9kdWxlID0ge1xuICBuYW1lOiAnYmFuZEZpbHRlcicsXG4gIGZzLFxuICB1bmlmb3JtVHlwZXM6IHtcbiAgICBtaW4xOiAnZjMyJyxcbiAgICBtYXgxOiAnZjMyJyxcbiAgICBtaW4yOiAnZjMyJyxcbiAgICBtYXgyOiAnZjMyJyxcbiAgICBtaW4zOiAnZjMyJyxcbiAgICBtYXgzOiAnZjMyJyxcbiAgICBtaW40OiAnZjMyJyxcbiAgICBtYXg0OiAnZjMyJ1xuICB9LFxuICBnZXRVbmlmb3JtcyxcbiAgaW5qZWN0OiB7XG4gICAgJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1InOiBgXG4gICAgaWYgKGltYWdlLnIgPCBiYW5kRmlsdGVyLm1pbjEpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmcgPCBiYW5kRmlsdGVyLm1pbjIpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmIgPCBiYW5kRmlsdGVyLm1pbjMpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmEgPCBiYW5kRmlsdGVyLm1pbjQpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLnIgPiBiYW5kRmlsdGVyLm1heDEpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmcgPiBiYW5kRmlsdGVyLm1heDIpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmIgPiBiYW5kRmlsdGVyLm1heDMpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmEgPiBiYW5kRmlsdGVyLm1heDQpIGRpc2NhcmQ7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUlBLElBQU1BLEVBQUUsMEtBV1A7O0FBRUQ7QUFDQSxJQUFNQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7O0FBRTNCO0FBQ0EsU0FBU0MsV0FBV0EsQ0FBQSxFQVdDO0VBQUEsSUFWbkJDLElBU0MsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRU4sSUFDRUcsVUFBVSxHQVFSSixJQUFJLENBUk5JLFVBQVU7SUFDVkMsVUFBVSxHQU9STCxJQUFJLENBUE5LLFVBQVU7SUFDVkMsVUFBVSxHQU1STixJQUFJLENBTk5NLFVBQVU7SUFDVkMsVUFBVSxHQUtSUCxJQUFJLENBTE5PLFVBQVU7SUFDVkMsVUFBVSxHQUlSUixJQUFJLENBSk5RLFVBQVU7SUFDVkMsVUFBVSxHQUdSVCxJQUFJLENBSE5TLFVBQVU7SUFDVkMsVUFBVSxHQUVSVixJQUFJLENBRk5VLFVBQVU7SUFDVkMsVUFBVSxHQUNSWCxJQUFJLENBRE5XLFVBQVU7RUFHWixJQUNFQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ1QsVUFBVSxDQUFDLElBQzNCUSxNQUFNLENBQUNDLFFBQVEsQ0FBQ1IsVUFBVSxDQUFDLElBQzNCTyxNQUFNLENBQUNDLFFBQVEsQ0FBQ1AsVUFBVSxDQUFDLElBQzNCTSxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sVUFBVSxDQUFDLElBQzNCSyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0wsVUFBVSxDQUFDLElBQzNCSSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0osVUFBVSxDQUFDLElBQzNCRyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsVUFBVSxDQUFDLElBQzNCRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsVUFBVSxDQUFDLEVBQzNCO0lBQ0EsT0FBTztNQUNMRyxJQUFJLEVBQUVGLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDVCxVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHLENBQUNSLEdBQUc7TUFDckRtQixJQUFJLEVBQUVILE1BQU0sQ0FBQ0MsUUFBUSxDQUFDUixVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHLENBQUNULEdBQUc7TUFDckRvQixJQUFJLEVBQUVKLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDUCxVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHLENBQUNWLEdBQUc7TUFDckRxQixJQUFJLEVBQUVMLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTixVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHLENBQUNYLEdBQUc7TUFDckRzQixJQUFJLEVBQUVOLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTCxVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHWixHQUFHO01BQ3BEdUIsSUFBSSxFQUFFUCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0osVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBR2IsR0FBRztNQUNwRHdCLElBQUksRUFBRVIsTUFBTSxDQUFDQyxRQUFRLENBQUNILFVBQVUsQ0FBQyxHQUFHQSxVQUFVLEdBQUdkLEdBQUc7TUFDcER5QixJQUFJLEVBQUVULE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHZjtJQUNuRCxDQUFDO0VBQ0g7RUFFQSxPQUFPLElBQUk7QUFDYjtBQUVBLE9BQU8sSUFBTTBCLE1BQW9CLEdBQUc7RUFDbENDLElBQUksRUFBRSxZQUFZO0VBQ2xCNUIsRUFBRSxFQUFGQSxFQUFFO0VBQ0Y2QixZQUFZLEVBQUU7SUFDWlYsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFLEtBQUs7SUFDWEgsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFLEtBQUs7SUFDWEgsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFLEtBQUs7SUFDWEgsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFO0VBQ1IsQ0FBQztFQUNEdEIsV0FBVyxFQUFYQSxXQUFXO0VBQ1gwQixNQUFNLEVBQUU7SUFDTix3QkFBd0I7RUFVMUI7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ // Gamma correction is a nonlinear operation that
5
+ // adjusts the image's channel values pixel-by-pixel according
6
+ // to a power-law:
7
+ //
8
+ // .. math:: pixel_{out} = pixel_{in} ^ {gamma}
9
+ //
10
+ // Setting gamma (:math:gamma) to be less than 1.0 darkens the image and
11
+ // setting gamma to be greater than 1.0 lightens it.
12
+
13
+ // Parameters
14
+ // ----------
15
+ // gamma (:math:gamma): float
16
+ // Reasonable values range from 0.8 to 2.4.
17
+
18
+ // NOTE: Input array must have float values between 0 and 1!
19
+ // NOTE: gamma must be >= 0
20
+ var fs = "#define epsilon 0.00000001\n\nuniform gamma_contrastUniforms {\n float gamma1;\n float gamma2;\n float gamma3;\n float gamma4;\n} gamma_contrast;\n\nfloat gammaContrastCalc(float arr, float g) {\n // Gamma must be > 0\n g = clamp(g, epsilon, g);\n\n return pow(arr, 1.0 / g);\n}\n\nvec4 gammaContrastCalc(vec4 arr, float g1, float g2, float g3, float g4) {\n arr.r = gammaContrastCalc(arr.r, g1);\n arr.g = gammaContrastCalc(arr.g, g2);\n arr.b = gammaContrastCalc(arr.b, g3);\n arr.a = gammaContrastCalc(arr.a, g4);\n\n return arr;\n}\n";
21
+ function getUniforms() {
22
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
23
+ var gammaContrastValue = opts.gammaContrastValue,
24
+ gammaContrastValue1 = opts.gammaContrastValue1,
25
+ gammaContrastValue2 = opts.gammaContrastValue2,
26
+ gammaContrastValue3 = opts.gammaContrastValue3,
27
+ gammaContrastValue4 = opts.gammaContrastValue4;
28
+
29
+ // Gamma must be > 0, so not using Number.isFinite is fine
30
+
31
+ if (gammaContrastValue) {
32
+ return {
33
+ gamma1: gammaContrastValue,
34
+ gamma2: gammaContrastValue,
35
+ gamma3: gammaContrastValue,
36
+ gamma4: gammaContrastValue
37
+ };
38
+ } else if (gammaContrastValue1 || gammaContrastValue2 || gammaContrastValue3 || gammaContrastValue4) {
39
+ return {
40
+ gamma1: gammaContrastValue1 || 1,
41
+ gamma2: gammaContrastValue2 || 1,
42
+ gamma3: gammaContrastValue3 || 1,
43
+ gamma4: gammaContrastValue4 || 1
44
+ };
45
+ }
46
+ return null;
47
+ }
48
+ export var gammaContrast = {
49
+ name: 'gamma_contrast',
50
+ fs: fs,
51
+ uniformTypes: {
52
+ gamma1: 'f32',
53
+ gamma2: 'f32',
54
+ gamma3: 'f32',
55
+ gamma4: 'f32'
56
+ },
57
+ getUniforms: getUniforms,
58
+ inject: {
59
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = gammaContrastCalc(image, gamma_contrast.gamma1, gamma_contrast.gamma2, gamma_contrast.gamma3, gamma_contrast.gamma4);\n "
60
+ }
61
+ };
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdhbW1hQ29udHJhc3RWYWx1ZSIsImdhbW1hQ29udHJhc3RWYWx1ZTEiLCJnYW1tYUNvbnRyYXN0VmFsdWUyIiwiZ2FtbWFDb250cmFzdFZhbHVlMyIsImdhbW1hQ29udHJhc3RWYWx1ZTQiLCJnYW1tYTEiLCJnYW1tYTIiLCJnYW1tYTMiLCJnYW1tYTQiLCJnYW1tYUNvbnRyYXN0IiwibmFtZSIsInVuaWZvcm1UeXBlcyIsImluamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvd2ViZ2wvY29sb3IvZ2FtbWEtY29udHJhc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtHZXRVbmlmb3Jtc091dHB1dCwgU2hhZGVyTW9kdWxlfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIEdhbW1hIGNvcnJlY3Rpb24gaXMgYSBub25saW5lYXIgb3BlcmF0aW9uIHRoYXRcbi8vIGFkanVzdHMgdGhlIGltYWdlJ3MgY2hhbm5lbCB2YWx1ZXMgcGl4ZWwtYnktcGl4ZWwgYWNjb3JkaW5nXG4vLyB0byBhIHBvd2VyLWxhdzpcbi8vXG4vLyAuLiBtYXRoOjogcGl4ZWxfe291dH0gPSBwaXhlbF97aW59IF4ge2dhbW1hfVxuLy9cbi8vIFNldHRpbmcgZ2FtbWEgKDptYXRoOmdhbW1hKSB0byBiZSBsZXNzIHRoYW4gMS4wIGRhcmtlbnMgdGhlIGltYWdlIGFuZFxuLy8gc2V0dGluZyBnYW1tYSB0byBiZSBncmVhdGVyIHRoYW4gMS4wIGxpZ2h0ZW5zIGl0LlxuXG4vLyBQYXJhbWV0ZXJzXG4vLyAtLS0tLS0tLS0tXG4vLyBnYW1tYSAoOm1hdGg6Z2FtbWEpOiBmbG9hdFxuLy8gICAgIFJlYXNvbmFibGUgdmFsdWVzIHJhbmdlIGZyb20gMC44IHRvIDIuNC5cblxuLy8gTk9URTogSW5wdXQgYXJyYXkgbXVzdCBoYXZlIGZsb2F0IHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEhXG4vLyBOT1RFOiBnYW1tYSBtdXN0IGJlID49IDBcbmNvbnN0IGZzID0gYFxcXG4jZGVmaW5lIGVwc2lsb24gMC4wMDAwMDAwMVxuXG51bmlmb3JtIGdhbW1hX2NvbnRyYXN0VW5pZm9ybXMge1xuICBmbG9hdCBnYW1tYTE7XG4gIGZsb2F0IGdhbW1hMjtcbiAgZmxvYXQgZ2FtbWEzO1xuICBmbG9hdCBnYW1tYTQ7XG59IGdhbW1hX2NvbnRyYXN0O1xuXG5mbG9hdCBnYW1tYUNvbnRyYXN0Q2FsYyhmbG9hdCBhcnIsIGZsb2F0IGcpIHtcbiAgLy8gR2FtbWEgbXVzdCBiZSA+IDBcbiAgZyA9IGNsYW1wKGcsIGVwc2lsb24sIGcpO1xuXG4gIHJldHVybiBwb3coYXJyLCAxLjAgLyBnKTtcbn1cblxudmVjNCBnYW1tYUNvbnRyYXN0Q2FsYyh2ZWM0IGFyciwgZmxvYXQgZzEsIGZsb2F0IGcyLCBmbG9hdCBnMywgZmxvYXQgZzQpIHtcbiAgYXJyLnIgPSBnYW1tYUNvbnRyYXN0Q2FsYyhhcnIuciwgZzEpO1xuICBhcnIuZyA9IGdhbW1hQ29udHJhc3RDYWxjKGFyci5nLCBnMik7XG4gIGFyci5iID0gZ2FtbWFDb250cmFzdENhbGMoYXJyLmIsIGczKTtcbiAgYXJyLmEgPSBnYW1tYUNvbnRyYXN0Q2FsYyhhcnIuYSwgZzQpO1xuXG4gIHJldHVybiBhcnI7XG59XG5gO1xuXG5mdW5jdGlvbiBnZXRVbmlmb3JtcyhcbiAgb3B0czoge1xuICAgIGdhbW1hQ29udHJhc3RWYWx1ZT86IG51bWJlcjtcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUxPzogbnVtYmVyO1xuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTI/OiBudW1iZXI7XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMz86IG51bWJlcjtcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWU0PzogbnVtYmVyO1xuICB9ID0ge31cbik6IEdldFVuaWZvcm1zT3V0cHV0IHtcbiAgY29uc3Qge1xuICAgIGdhbW1hQ29udHJhc3RWYWx1ZSxcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUxLFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTIsXG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMyxcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWU0XG4gIH0gPSBvcHRzO1xuXG4gIC8vIEdhbW1hIG11c3QgYmUgPiAwLCBzbyBub3QgdXNpbmcgTnVtYmVyLmlzRmluaXRlIGlzIGZpbmVcblxuICBpZiAoZ2FtbWFDb250cmFzdFZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdhbW1hMTogZ2FtbWFDb250cmFzdFZhbHVlLFxuICAgICAgZ2FtbWEyOiBnYW1tYUNvbnRyYXN0VmFsdWUsXG4gICAgICBnYW1tYTM6IGdhbW1hQ29udHJhc3RWYWx1ZSxcbiAgICAgIGdhbW1hNDogZ2FtbWFDb250cmFzdFZhbHVlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUxIHx8XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMiB8fFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTMgfHxcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWU0XG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBnYW1tYTE6IGdhbW1hQ29udHJhc3RWYWx1ZTEgfHwgMSxcbiAgICAgIGdhbW1hMjogZ2FtbWFDb250cmFzdFZhbHVlMiB8fCAxLFxuICAgICAgZ2FtbWEzOiBnYW1tYUNvbnRyYXN0VmFsdWUzIHx8IDEsXG4gICAgICBnYW1tYTQ6IGdhbW1hQ29udHJhc3RWYWx1ZTQgfHwgMVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGdhbW1hQ29udHJhc3Q6IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ2dhbW1hX2NvbnRyYXN0JyxcbiAgZnMsXG4gIHVuaWZvcm1UeXBlczoge1xuICAgIGdhbW1hMTogJ2YzMicsXG4gICAgZ2FtbWEyOiAnZjMyJyxcbiAgICBnYW1tYTM6ICdmMzInLFxuICAgIGdhbW1hNDogJ2YzMidcbiAgfSxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGltYWdlID0gZ2FtbWFDb250cmFzdENhbGMoaW1hZ2UsIGdhbW1hX2NvbnRyYXN0LmdhbW1hMSwgZ2FtbWFfY29udHJhc3QuZ2FtbWEyLCBnYW1tYV9jb250cmFzdC5nYW1tYTMsIGdhbW1hX2NvbnRyYXN0LmdhbW1hNCk7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQU1BLEVBQUUsMGlCQXlCUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFRQztFQUFBLElBUG5CQyxJQU1DLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVOLElBQ0VHLGtCQUFrQixHQUtoQkosSUFBSSxDQUxOSSxrQkFBa0I7SUFDbEJDLG1CQUFtQixHQUlqQkwsSUFBSSxDQUpOSyxtQkFBbUI7SUFDbkJDLG1CQUFtQixHQUdqQk4sSUFBSSxDQUhOTSxtQkFBbUI7SUFDbkJDLG1CQUFtQixHQUVqQlAsSUFBSSxDQUZOTyxtQkFBbUI7SUFDbkJDLG1CQUFtQixHQUNqQlIsSUFBSSxDQUROUSxtQkFBbUI7O0VBR3JCOztFQUVBLElBQUlKLGtCQUFrQixFQUFFO0lBQ3RCLE9BQU87TUFDTEssTUFBTSxFQUFFTCxrQkFBa0I7TUFDMUJNLE1BQU0sRUFBRU4sa0JBQWtCO01BQzFCTyxNQUFNLEVBQUVQLGtCQUFrQjtNQUMxQlEsTUFBTSxFQUFFUjtJQUNWLENBQUM7RUFDSCxDQUFDLE1BQU0sSUFDTEMsbUJBQW1CLElBQ25CQyxtQkFBbUIsSUFDbkJDLG1CQUFtQixJQUNuQkMsbUJBQW1CLEVBQ25CO0lBQ0EsT0FBTztNQUNMQyxNQUFNLEVBQUVKLG1CQUFtQixJQUFJLENBQUM7TUFDaENLLE1BQU0sRUFBRUosbUJBQW1CLElBQUksQ0FBQztNQUNoQ0ssTUFBTSxFQUFFSixtQkFBbUIsSUFBSSxDQUFDO01BQ2hDSyxNQUFNLEVBQUVKLG1CQUFtQixJQUFJO0lBQ2pDLENBQUM7RUFDSDtFQUVBLE9BQU8sSUFBSTtBQUNiO0FBRUEsT0FBTyxJQUFNSyxhQUEyQixHQUFHO0VBQ3pDQyxJQUFJLEVBQUUsZ0JBQWdCO0VBQ3RCaEIsRUFBRSxFQUFGQSxFQUFFO0VBQ0ZpQixZQUFZLEVBQUU7SUFDWk4sTUFBTSxFQUFFLEtBQUs7SUFDYkMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsTUFBTSxFQUFFO0VBQ1YsQ0FBQztFQUNEYixXQUFXLEVBQVhBLFdBQVc7RUFDWGlCLE1BQU0sRUFBRTtJQUNOLHdCQUF3QjtFQUcxQjtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ var fs = "uniform linear_rescaleUniforms {\n float scaler;\n float offset;\n} linear_rescale;\n\n// Perform a linear rescaling of image\nvec4 linear_rescale_fn(vec4 arr, float scaler, float offset) {\n return arr * scaler + offset;\n}\n";
5
+ function getUniforms() {
6
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7
+ var linearRescaleScaler = opts.linearRescaleScaler,
8
+ linearRescaleOffset = opts.linearRescaleOffset;
9
+ if (!Number.isFinite(linearRescaleScaler) && !Number.isFinite(linearRescaleOffset)) {
10
+ return null;
11
+ }
12
+ return {
13
+ scaler: Number.isFinite(linearRescaleScaler) ? linearRescaleScaler : 1,
14
+ offset: Number.isFinite(linearRescaleOffset) ? linearRescaleOffset : 0
15
+ };
16
+ }
17
+ export var linearRescale = {
18
+ name: 'linear_rescale',
19
+ fs: fs,
20
+ uniformTypes: {
21
+ scaler: 'f32',
22
+ offset: 'f32'
23
+ },
24
+ getUniforms: getUniforms,
25
+ inject: {
26
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = linear_rescale_fn(image, linear_rescale.scaler, linear_rescale.offset);\n "
27
+ }
28
+ };
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImxpbmVhclJlc2NhbGVTY2FsZXIiLCJsaW5lYXJSZXNjYWxlT2Zmc2V0IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJzY2FsZXIiLCJvZmZzZXQiLCJsaW5lYXJSZXNjYWxlIiwibmFtZSIsInVuaWZvcm1UeXBlcyIsImluamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvd2ViZ2wvY29sb3IvbGluZWFyLXJlc2NhbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtHZXRVbmlmb3Jtc091dHB1dCwgU2hhZGVyTW9kdWxlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGZzID0gYFxcXG51bmlmb3JtIGxpbmVhcl9yZXNjYWxlVW5pZm9ybXMge1xuICBmbG9hdCBzY2FsZXI7XG4gIGZsb2F0IG9mZnNldDtcbn0gbGluZWFyX3Jlc2NhbGU7XG5cbi8vIFBlcmZvcm0gYSBsaW5lYXIgcmVzY2FsaW5nIG9mIGltYWdlXG52ZWM0IGxpbmVhcl9yZXNjYWxlX2ZuKHZlYzQgYXJyLCBmbG9hdCBzY2FsZXIsIGZsb2F0IG9mZnNldCkge1xuICByZXR1cm4gYXJyICogc2NhbGVyICsgb2Zmc2V0O1xufVxuYDtcblxuZnVuY3Rpb24gZ2V0VW5pZm9ybXMoXG4gIG9wdHM6IHtsaW5lYXJSZXNjYWxlU2NhbGVyPzogbnVtYmVyOyBsaW5lYXJSZXNjYWxlT2Zmc2V0PzogbnVtYmVyfSA9IHt9XG4pOiBHZXRVbmlmb3Jtc091dHB1dCB7XG4gIGNvbnN0IHtsaW5lYXJSZXNjYWxlU2NhbGVyLCBsaW5lYXJSZXNjYWxlT2Zmc2V0fSA9IG9wdHM7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobGluZWFyUmVzY2FsZVNjYWxlcikgJiYgIU51bWJlci5pc0Zpbml0ZShsaW5lYXJSZXNjYWxlT2Zmc2V0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY2FsZXI6IE51bWJlci5pc0Zpbml0ZShsaW5lYXJSZXNjYWxlU2NhbGVyKSA/IGxpbmVhclJlc2NhbGVTY2FsZXIgOiAxLFxuICAgIG9mZnNldDogTnVtYmVyLmlzRmluaXRlKGxpbmVhclJlc2NhbGVPZmZzZXQpID8gbGluZWFyUmVzY2FsZU9mZnNldCA6IDBcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGxpbmVhclJlc2NhbGU6IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ2xpbmVhcl9yZXNjYWxlJyxcbiAgZnMsXG4gIHVuaWZvcm1UeXBlczoge1xuICAgIHNjYWxlcjogJ2YzMicsXG4gICAgb2Zmc2V0OiAnZjMyJ1xuICB9LFxuICBnZXRVbmlmb3JtcyxcbiAgaW5qZWN0OiB7XG4gICAgJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1InOiBgXG4gICAgaW1hZ2UgPSBsaW5lYXJfcmVzY2FsZV9mbihpbWFnZSwgbGluZWFyX3Jlc2NhbGUuc2NhbGVyLCBsaW5lYXJfcmVzY2FsZS5vZmZzZXQpO1xuICAgIGBcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFJQSxJQUFNQSxFQUFFLDBPQVVQO0FBRUQsU0FBU0MsV0FBV0EsQ0FBQSxFQUVDO0VBQUEsSUFEbkJDLElBQWtFLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUV2RSxJQUFPRyxtQkFBbUIsR0FBeUJKLElBQUksQ0FBaERJLG1CQUFtQjtJQUFFQyxtQkFBbUIsR0FBSUwsSUFBSSxDQUEzQkssbUJBQW1CO0VBRS9DLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUNILG1CQUFtQixDQUFDLElBQUksQ0FBQ0UsTUFBTSxDQUFDQyxRQUFRLENBQUNGLG1CQUFtQixDQUFDLEVBQUU7SUFDbEYsT0FBTyxJQUFJO0VBQ2I7RUFFQSxPQUFPO0lBQ0xHLE1BQU0sRUFBRUYsTUFBTSxDQUFDQyxRQUFRLENBQUNILG1CQUFtQixDQUFDLEdBQUdBLG1CQUFtQixHQUFHLENBQUM7SUFDdEVLLE1BQU0sRUFBRUgsTUFBTSxDQUFDQyxRQUFRLENBQUNGLG1CQUFtQixDQUFDLEdBQUdBLG1CQUFtQixHQUFHO0VBQ3ZFLENBQUM7QUFDSDtBQUVBLE9BQU8sSUFBTUssYUFBMkIsR0FBRztFQUN6Q0MsSUFBSSxFQUFFLGdCQUFnQjtFQUN0QmIsRUFBRSxFQUFGQSxFQUFFO0VBQ0ZjLFlBQVksRUFBRTtJQUNaSixNQUFNLEVBQUUsS0FBSztJQUNiQyxNQUFNLEVBQUU7RUFDVixDQUFDO0VBQ0RWLFdBQVcsRUFBWEEsV0FBVztFQUNYYyxNQUFNLEVBQUU7SUFDTix3QkFBd0I7RUFHMUI7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,36 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ /**
5
+ * Adjusts the saturation of a color.
6
+ * From cesium:
7
+ * https://github.com/CesiumGS/cesium/blob/master/Source/Shaders/Builtin/Functions/saturation.glsl
8
+ *
9
+ * @param {vec3} rgb The color.
10
+ * @param {float} adjustment The amount to adjust the saturation of the color. Usually between 0 and 2.
11
+ *
12
+ * @returns {vec3} The color with the saturation adjusted.
13
+ */
14
+ var fs = "uniform saturationUniforms {\n float value;\n} saturation;\n\nvec3 saturate(vec3 rgb, float adjustment) {\n // Algorithm from Chapter 16 of OpenGL Shading Language\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n}\n";
15
+ function getUniforms() {
16
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17
+ var saturationValue = opts.saturationValue;
18
+ if (!saturationValue) {
19
+ return null;
20
+ }
21
+ return {
22
+ value: Number.isFinite(saturationValue) ? saturationValue : 1
23
+ };
24
+ }
25
+ export var saturation = {
26
+ name: 'saturation',
27
+ fs: fs,
28
+ uniformTypes: {
29
+ value: 'f32'
30
+ },
31
+ getUniforms: getUniforms,
32
+ inject: {
33
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = vec4(saturate(image.rgb, saturation.value), image.a);\n "
34
+ }
35
+ };
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInNhdHVyYXRpb25WYWx1ZSIsInZhbHVlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJzYXR1cmF0aW9uIiwibmFtZSIsInVuaWZvcm1UeXBlcyIsImluamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvd2ViZ2wvY29sb3Ivc2F0dXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0dldFVuaWZvcm1zT3V0cHV0LCBTaGFkZXJNb2R1bGV9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBBZGp1c3RzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IuXG4gKiBGcm9tIGNlc2l1bTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9DZXNpdW1HUy9jZXNpdW0vYmxvYi9tYXN0ZXIvU291cmNlL1NoYWRlcnMvQnVpbHRpbi9GdW5jdGlvbnMvc2F0dXJhdGlvbi5nbHNsXG4gKlxuICogQHBhcmFtIHt2ZWMzfSByZ2IgVGhlIGNvbG9yLlxuICogQHBhcmFtIHtmbG9hdH0gYWRqdXN0bWVudCBUaGUgYW1vdW50IHRvIGFkanVzdCB0aGUgc2F0dXJhdGlvbiBvZiB0aGUgY29sb3IuIFVzdWFsbHkgYmV0d2VlbiAwIGFuZCAyLlxuICpcbiAqIEByZXR1cm5zIHt2ZWMzfSBUaGUgY29sb3Igd2l0aCB0aGUgc2F0dXJhdGlvbiBhZGp1c3RlZC5cbiAqL1xuY29uc3QgZnMgPSBgXFxcbnVuaWZvcm0gc2F0dXJhdGlvblVuaWZvcm1zIHtcbiAgZmxvYXQgdmFsdWU7XG59IHNhdHVyYXRpb247XG5cbnZlYzMgc2F0dXJhdGUodmVjMyByZ2IsIGZsb2F0IGFkanVzdG1lbnQpIHtcbiAgICAvLyBBbGdvcml0aG0gZnJvbSBDaGFwdGVyIDE2IG9mIE9wZW5HTCBTaGFkaW5nIExhbmd1YWdlXG4gICAgY29uc3QgdmVjMyBXID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcbiAgICB2ZWMzIGludGVuc2l0eSA9IHZlYzMoZG90KHJnYiwgVykpO1xuICAgIHJldHVybiBtaXgoaW50ZW5zaXR5LCByZ2IsIGFkanVzdG1lbnQpO1xufVxuYDtcblxuZnVuY3Rpb24gZ2V0VW5pZm9ybXMob3B0czoge3NhdHVyYXRpb25WYWx1ZT86IG51bWJlcn0gPSB7fSk6IEdldFVuaWZvcm1zT3V0cHV0IHtcbiAgY29uc3Qge3NhdHVyYXRpb25WYWx1ZX0gPSBvcHRzO1xuXG4gIGlmICghc2F0dXJhdGlvblZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiBOdW1iZXIuaXNGaW5pdGUoc2F0dXJhdGlvblZhbHVlKSA/IHNhdHVyYXRpb25WYWx1ZSA6IDFcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHNhdHVyYXRpb246IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ3NhdHVyYXRpb24nLFxuICBmcyxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgdmFsdWU6ICdmMzInXG4gIH0sXG4gIGdldFVuaWZvcm1zLFxuICBpbmplY3Q6IHtcbiAgICAnZnM6REVDS0dMX01VVEFURV9DT0xPUic6IGBcbiAgICBpbWFnZSA9IHZlYzQoc2F0dXJhdGUoaW1hZ2UucmdiLCBzYXR1cmF0aW9uLnZhbHVlKSwgaW1hZ2UuYSk7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsRUFBRSx5VEFXUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFBMkQ7RUFBQSxJQUExREMsSUFBZ0MsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQ3hELElBQU9HLGVBQWUsR0FBSUosSUFBSSxDQUF2QkksZUFBZTtFQUV0QixJQUFJLENBQUNBLGVBQWUsRUFBRTtJQUNwQixPQUFPLElBQUk7RUFDYjtFQUVBLE9BQU87SUFDTEMsS0FBSyxFQUFFQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsZUFBZSxDQUFDLEdBQUdBLGVBQWUsR0FBRztFQUM5RCxDQUFDO0FBQ0g7QUFFQSxPQUFPLElBQU1JLFVBQXdCLEdBQUc7RUFDdENDLElBQUksRUFBRSxZQUFZO0VBQ2xCWCxFQUFFLEVBQUZBLEVBQUU7RUFDRlksWUFBWSxFQUFFO0lBQ1pMLEtBQUssRUFBRTtFQUNULENBQUM7RUFDRE4sV0FBVyxFQUFYQSxXQUFXO0VBQ1hZLE1BQU0sRUFBRTtJQUNOLHdCQUF3QjtFQUcxQjtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ // From mapbox/rio-color under the MIT License
5
+ //
6
+ // Sigmoidal contrast is a type of contrast control that
7
+ // adjusts the contrast without saturating highlights or shadows.
8
+ // It allows control over two factors:
9
+ // the contrast range from light to dark, and where the middle value
10
+ // of the mid-tones falls. The result is a non-linear and smooth
11
+ // contrast change.
12
+ // Parameters
13
+ // ----------
14
+ // arr : ndarray, float, 0 .. 1
15
+ // Array of color values to adjust
16
+ // contrast : integer
17
+ // Enhances the intensity differences between the lighter and darker
18
+ // elements of the image. For example, 0 is none, 3 is typical and
19
+ // 20 is a lot.
20
+ // bias : float, between 0 and 1
21
+ // Threshold level for the contrast function to center on
22
+ // (typically centered at 0.5)
23
+ // Notes
24
+ // ----------
25
+ // Sigmoidal contrast is based on the sigmoidal transfer function:
26
+ // .. math:: g(u) = ( 1/(1 + e^{- \alpha * u + \beta)})
27
+ // This sigmoid function is scaled so that the output is bound by
28
+ // the interval [0, 1].
29
+ // .. math:: ( 1/(1 + e^(\beta * (\alpha - u))) - 1/(1 + e^(\beta * \alpha)))/
30
+ // ( 1/(1 + e^(\beta*(\alpha - 1))) - 1/(1 + e^(\beta * \alpha)) )
31
+ // Where :math: `\alpha` is the threshold level, and :math: `\beta` the
32
+ // contrast factor to be applied.
33
+ // References
34
+ // ----------
35
+ // .. [CT] Hany Farid "Fundamentals of Image Processing"
36
+ // http://www.cs.dartmouth.edu/farid/downloads/tutorials/fip.pdf
37
+ var fs = "#define epsilon 0.00000001\n\nuniform sigmoidalContrastUniforms {\n float contrast;\n float bias;\n} sigmoidalContrast;\n\n// NOTE: Input array must have float values between 0 and 1!\n// NOTE: bias must be a scalar float between 0 and 1!\nvec4 calculateSigmoidalContrast(vec4 arr, float contrast, float bias) {\n // We use the names alpha and beta to match documentation.\n float alpha = bias;\n float beta = contrast;\n\n // alpha must be >= 0\n alpha = clamp(alpha, epsilon, alpha);\n\n if (beta > 0.) {\n vec4 numerator = 1. / (1. + exp(beta * (alpha - arr))) - 1. / (\n 1. + exp(beta * alpha)\n );\n float denominator = 1. / (1. + exp(beta * (alpha - 1.))) - 1. / (\n 1. + exp(beta * alpha)\n );\n arr = numerator / denominator;\n } else if (beta < 0.) {\n arr = (\n (beta * alpha) - log(\n (\n 1.0 / (\n (arr / (1.0 + exp((beta * alpha) - beta))) -\n (arr / (1.0 + exp(beta * alpha))) +\n (1.0 / (1.0 + exp(beta * alpha)))\n )\n ) - 1.0)\n ) / beta;\n }\n\n return arr;\n}\n";
38
+ function getUniforms() {
39
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
40
+ var sigmoidalContrast = opts.sigmoidalContrast,
41
+ sigmoidalBias = opts.sigmoidalBias;
42
+ if (!(Number.isFinite(sigmoidalContrast) || Number.isFinite(sigmoidalBias))) {
43
+ return null;
44
+ }
45
+ return {
46
+ contrast: Number.isFinite(sigmoidalContrast) ? sigmoidalContrast : 0,
47
+ bias: Number.isFinite(sigmoidalBias) ? sigmoidalBias : 0.5
48
+ };
49
+ }
50
+ export var sigmoidalContrast = {
51
+ name: 'sigmoidalContrast',
52
+ fs: fs,
53
+ uniformTypes: {
54
+ contrast: 'f32',
55
+ bias: 'f32'
56
+ },
57
+ getUniforms: getUniforms,
58
+ inject: {
59
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = calculateSigmoidalContrast(image, sigmoidalContrast.contrast, sigmoidalContrast.bias);\n "
60
+ }
61
+ };
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInNpZ21vaWRhbENvbnRyYXN0Iiwic2lnbW9pZGFsQmlhcyIsIk51bWJlciIsImlzRmluaXRlIiwiY29udHJhc3QiLCJiaWFzIiwibmFtZSIsInVuaWZvcm1UeXBlcyIsImluamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvd2ViZ2wvY29sb3Ivc2lnbW9pZGFsLWNvbnRyYXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyBGcm9tIG1hcGJveC9yaW8tY29sb3IgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4vL1xuLy8gU2lnbW9pZGFsIGNvbnRyYXN0IGlzIGEgdHlwZSBvZiBjb250cmFzdCBjb250cm9sIHRoYXRcbi8vIGFkanVzdHMgdGhlIGNvbnRyYXN0IHdpdGhvdXQgc2F0dXJhdGluZyBoaWdobGlnaHRzIG9yIHNoYWRvd3MuXG4vLyBJdCBhbGxvd3MgY29udHJvbCBvdmVyIHR3byBmYWN0b3JzOlxuLy8gdGhlIGNvbnRyYXN0IHJhbmdlIGZyb20gbGlnaHQgdG8gZGFyaywgYW5kIHdoZXJlIHRoZSBtaWRkbGUgdmFsdWVcbi8vIG9mIHRoZSBtaWQtdG9uZXMgZmFsbHMuIFRoZSByZXN1bHQgaXMgYSBub24tbGluZWFyIGFuZCBzbW9vdGhcbi8vIGNvbnRyYXN0IGNoYW5nZS5cbi8vIFBhcmFtZXRlcnNcbi8vIC0tLS0tLS0tLS1cbi8vIGFyciA6IG5kYXJyYXksIGZsb2F0LCAwIC4uIDFcbi8vICAgICBBcnJheSBvZiBjb2xvciB2YWx1ZXMgdG8gYWRqdXN0XG4vLyBjb250cmFzdCA6IGludGVnZXJcbi8vICAgICBFbmhhbmNlcyB0aGUgaW50ZW5zaXR5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGxpZ2h0ZXIgYW5kIGRhcmtlclxuLy8gICAgIGVsZW1lbnRzIG9mIHRoZSBpbWFnZS4gRm9yIGV4YW1wbGUsIDAgaXMgbm9uZSwgMyBpcyB0eXBpY2FsIGFuZFxuLy8gICAgIDIwIGlzIGEgbG90LlxuLy8gYmlhcyA6IGZsb2F0LCBiZXR3ZWVuIDAgYW5kIDFcbi8vICAgICBUaHJlc2hvbGQgbGV2ZWwgZm9yIHRoZSBjb250cmFzdCBmdW5jdGlvbiB0byBjZW50ZXIgb25cbi8vICAgICAodHlwaWNhbGx5IGNlbnRlcmVkIGF0IDAuNSlcbi8vIE5vdGVzXG4vLyAtLS0tLS0tLS0tXG4vLyBTaWdtb2lkYWwgY29udHJhc3QgaXMgYmFzZWQgb24gdGhlIHNpZ21vaWRhbCB0cmFuc2ZlciBmdW5jdGlvbjpcbi8vIC4uIG1hdGg6OiBnKHUpID0gKCAxLygxICsgZV57LSBcXGFscGhhICogdSArIFxcYmV0YSl9KVxuLy8gVGhpcyBzaWdtb2lkIGZ1bmN0aW9uIGlzIHNjYWxlZCBzbyB0aGF0IHRoZSBvdXRwdXQgaXMgYm91bmQgYnlcbi8vIHRoZSBpbnRlcnZhbCBbMCwgMV0uXG4vLyAuLiBtYXRoOjogKCAxLygxICsgZV4oXFxiZXRhICogKFxcYWxwaGEgLSB1KSkpIC0gMS8oMSArIGVeKFxcYmV0YSAqIFxcYWxwaGEpKSkvXG4vLyAgICAgKCAxLygxICsgZV4oXFxiZXRhKihcXGFscGhhIC0gMSkpKSAtIDEvKDEgKyBlXihcXGJldGEgKiBcXGFscGhhKSkgKVxuLy8gV2hlcmUgOm1hdGg6IGBcXGFscGhhYCBpcyB0aGUgdGhyZXNob2xkIGxldmVsLCBhbmQgOm1hdGg6IGBcXGJldGFgIHRoZVxuLy8gY29udHJhc3QgZmFjdG9yIHRvIGJlIGFwcGxpZWQuXG4vLyBSZWZlcmVuY2VzXG4vLyAtLS0tLS0tLS0tXG4vLyAuLiBbQ1RdIEhhbnkgRmFyaWQgXCJGdW5kYW1lbnRhbHMgb2YgSW1hZ2UgUHJvY2Vzc2luZ1wiXG4vLyAgICAgICAgIGh0dHA6Ly93d3cuY3MuZGFydG1vdXRoLmVkdS9mYXJpZC9kb3dubG9hZHMvdHV0b3JpYWxzL2ZpcC5wZGZcbmNvbnN0IGZzID0gYFxcXG4jZGVmaW5lIGVwc2lsb24gMC4wMDAwMDAwMVxuXG51bmlmb3JtIHNpZ21vaWRhbENvbnRyYXN0VW5pZm9ybXMge1xuICBmbG9hdCBjb250cmFzdDtcbiAgZmxvYXQgYmlhcztcbn0gc2lnbW9pZGFsQ29udHJhc3Q7XG5cbi8vIE5PVEU6IElucHV0IGFycmF5IG11c3QgaGF2ZSBmbG9hdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxIVxuLy8gTk9URTogYmlhcyBtdXN0IGJlIGEgc2NhbGFyIGZsb2F0IGJldHdlZW4gMCBhbmQgMSFcbnZlYzQgY2FsY3VsYXRlU2lnbW9pZGFsQ29udHJhc3QodmVjNCBhcnIsIGZsb2F0IGNvbnRyYXN0LCBmbG9hdCBiaWFzKSB7XG4gIC8vIFdlIHVzZSB0aGUgbmFtZXMgYWxwaGEgYW5kIGJldGEgdG8gbWF0Y2ggZG9jdW1lbnRhdGlvbi5cbiAgZmxvYXQgYWxwaGEgPSBiaWFzO1xuICBmbG9hdCBiZXRhID0gY29udHJhc3Q7XG5cbiAgLy8gYWxwaGEgbXVzdCBiZSA+PSAwXG4gIGFscGhhID0gY2xhbXAoYWxwaGEsIGVwc2lsb24sIGFscGhhKTtcblxuICBpZiAoYmV0YSA+IDAuKSB7XG4gICAgdmVjNCBudW1lcmF0b3IgPSAxLiAvICgxLiArIGV4cChiZXRhICogKGFscGhhIC0gYXJyKSkpIC0gMS4gLyAoXG4gICAgICAxLiArIGV4cChiZXRhICogYWxwaGEpXG4gICAgKTtcbiAgICBmbG9hdCBkZW5vbWluYXRvciA9IDEuIC8gKDEuICsgZXhwKGJldGEgKiAoYWxwaGEgLSAxLikpKSAtIDEuIC8gKFxuICAgICAgMS4gKyBleHAoYmV0YSAqIGFscGhhKVxuICAgICk7XG4gICAgYXJyID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG4gIH0gZWxzZSBpZiAoYmV0YSA8IDAuKSB7XG4gICAgYXJyID0gKFxuICAgICAgKGJldGEgKiBhbHBoYSkgLSBsb2coXG4gICAgICAgIChcbiAgICAgICAgICAxLjAgLyAoXG4gICAgICAgICAgICAoYXJyIC8gKDEuMCArIGV4cCgoYmV0YSAqIGFscGhhKSAtIGJldGEpKSkgLVxuICAgICAgICAgICAgKGFyciAvICgxLjAgKyBleHAoYmV0YSAqIGFscGhhKSkpICtcbiAgICAgICAgICAgICgxLjAgLyAoMS4wICsgZXhwKGJldGEgKiBhbHBoYSkpKVxuICAgICAgICAgIClcbiAgICAgICAgKSAtIDEuMClcbiAgICApIC8gYmV0YTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5gO1xuXG5mdW5jdGlvbiBnZXRVbmlmb3JtcyhcbiAgb3B0czoge3NpZ21vaWRhbENvbnRyYXN0PzogbnVtYmVyOyBzaWdtb2lkYWxCaWFzPzogbnVtYmVyfSA9IHt9XG4pOiBHZXRVbmlmb3Jtc091dHB1dCB7XG4gIGNvbnN0IHtzaWdtb2lkYWxDb250cmFzdCwgc2lnbW9pZGFsQmlhc30gPSBvcHRzO1xuXG4gIGlmICghKE51bWJlci5pc0Zpbml0ZShzaWdtb2lkYWxDb250cmFzdCkgfHwgTnVtYmVyLmlzRmluaXRlKHNpZ21vaWRhbEJpYXMpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb250cmFzdDogTnVtYmVyLmlzRmluaXRlKHNpZ21vaWRhbENvbnRyYXN0KSA/IHNpZ21vaWRhbENvbnRyYXN0IDogMCxcbiAgICBiaWFzOiBOdW1iZXIuaXNGaW5pdGUoc2lnbW9pZGFsQmlhcykgPyBzaWdtb2lkYWxCaWFzIDogMC41XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzaWdtb2lkYWxDb250cmFzdDogU2hhZGVyTW9kdWxlID0ge1xuICBuYW1lOiAnc2lnbW9pZGFsQ29udHJhc3QnLFxuICBmcyxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgY29udHJhc3Q6ICdmMzInLFxuICAgIGJpYXM6ICdmMzInXG4gIH0sXG4gIGdldFVuaWZvcm1zLFxuICBpbmplY3Q6IHtcbiAgICAnZnM6REVDS0dMX01VVEFURV9DT0xPUic6IGBcbiAgICBpbWFnZSA9IGNhbGN1bGF0ZVNpZ21vaWRhbENvbnRyYXN0KGltYWdlLCBzaWdtb2lkYWxDb250cmFzdC5jb250cmFzdCwgc2lnbW9pZGFsQ29udHJhc3QuYmlhcyk7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1BLEVBQUUseWtDQXlDUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFFQztFQUFBLElBRG5CQyxJQUEwRCxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFL0QsSUFBT0csaUJBQWlCLEdBQW1CSixJQUFJLENBQXhDSSxpQkFBaUI7SUFBRUMsYUFBYSxHQUFJTCxJQUFJLENBQXJCSyxhQUFhO0VBRXZDLElBQUksRUFBRUMsTUFBTSxDQUFDQyxRQUFRLENBQUNILGlCQUFpQixDQUFDLElBQUlFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixhQUFhLENBQUMsQ0FBQyxFQUFFO0lBQzNFLE9BQU8sSUFBSTtFQUNiO0VBRUEsT0FBTztJQUNMRyxRQUFRLEVBQUVGLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxpQkFBaUIsQ0FBQyxHQUFHQSxpQkFBaUIsR0FBRyxDQUFDO0lBQ3BFSyxJQUFJLEVBQUVILE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixhQUFhLENBQUMsR0FBR0EsYUFBYSxHQUFHO0VBQ3pELENBQUM7QUFDSDtBQUVBLE9BQU8sSUFBTUQsaUJBQStCLEdBQUc7RUFDN0NNLElBQUksRUFBRSxtQkFBbUI7RUFDekJaLEVBQUUsRUFBRkEsRUFBRTtFQUNGYSxZQUFZLEVBQUU7SUFDWkgsUUFBUSxFQUFFLEtBQUs7SUFDZkMsSUFBSSxFQUFFO0VBQ1IsQ0FBQztFQUNEVixXQUFXLEVBQVhBLFdBQVc7RUFDWGEsTUFBTSxFQUFFO0lBQ04sd0JBQXdCO0VBRzFCO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ // Create texture
5
+ export { combineBandsFloat, combineBandsUint, combineBandsInt } from './texture/combine-bands';
6
+ export { rgbaImage } from './texture/rgba-image';
7
+ export { maskFloat, maskUint, maskInt } from './texture/mask';
8
+ export { reorderBands } from './texture/reorder-bands';
9
+
10
+ // Color operations
11
+ export { colormap } from './color/colormap';
12
+ export { linearRescale } from './color/linear-rescale';
13
+ export { sigmoidalContrast } from './color/sigmoidal-contrast';
14
+ export { gammaContrast } from './color/gamma-contrast';
15
+ export { saturation } from './color/saturation';
16
+ export { filter } from './color/filter';
17
+
18
+ // Pansharpening
19
+ export { pansharpenBrovey } from './pansharpen/pansharpen-brovey';
20
+
21
+ // Spectral indices
22
+ export { enhancedVegetationIndex } from './spectral-indices/evi';
23
+ export { modifiedSoilAdjustedVegetationIndex } from './spectral-indices/msavi';
24
+ export { normalizedDifference } from './spectral-indices/normalized-difference';
25
+ export { soilAdjustedVegetationIndex } from './spectral-indices/savi';
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21iaW5lQmFuZHNGbG9hdCIsImNvbWJpbmVCYW5kc1VpbnQiLCJjb21iaW5lQmFuZHNJbnQiLCJyZ2JhSW1hZ2UiLCJtYXNrRmxvYXQiLCJtYXNrVWludCIsIm1hc2tJbnQiLCJyZW9yZGVyQmFuZHMiLCJjb2xvcm1hcCIsImxpbmVhclJlc2NhbGUiLCJzaWdtb2lkYWxDb250cmFzdCIsImdhbW1hQ29udHJhc3QiLCJzYXR1cmF0aW9uIiwiZmlsdGVyIiwicGFuc2hhcnBlbkJyb3ZleSIsImVuaGFuY2VkVmVnZXRhdGlvbkluZGV4IiwibW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgiLCJub3JtYWxpemVkRGlmZmVyZW5jZSIsInNvaWxBZGp1c3RlZFZlZ2V0YXRpb25JbmRleCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvd2ViZ2wvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gQ3JlYXRlIHRleHR1cmVcbmV4cG9ydCB7Y29tYmluZUJhbmRzRmxvYXQsIGNvbWJpbmVCYW5kc1VpbnQsIGNvbWJpbmVCYW5kc0ludH0gZnJvbSAnLi90ZXh0dXJlL2NvbWJpbmUtYmFuZHMnO1xuZXhwb3J0IHtyZ2JhSW1hZ2V9IGZyb20gJy4vdGV4dHVyZS9yZ2JhLWltYWdlJztcbmV4cG9ydCB7bWFza0Zsb2F0LCBtYXNrVWludCwgbWFza0ludH0gZnJvbSAnLi90ZXh0dXJlL21hc2snO1xuZXhwb3J0IHtyZW9yZGVyQmFuZHN9IGZyb20gJy4vdGV4dHVyZS9yZW9yZGVyLWJhbmRzJztcblxuLy8gQ29sb3Igb3BlcmF0aW9uc1xuZXhwb3J0IHtjb2xvcm1hcH0gZnJvbSAnLi9jb2xvci9jb2xvcm1hcCc7XG5leHBvcnQge2xpbmVhclJlc2NhbGV9IGZyb20gJy4vY29sb3IvbGluZWFyLXJlc2NhbGUnO1xuZXhwb3J0IHtzaWdtb2lkYWxDb250cmFzdH0gZnJvbSAnLi9jb2xvci9zaWdtb2lkYWwtY29udHJhc3QnO1xuZXhwb3J0IHtnYW1tYUNvbnRyYXN0fSBmcm9tICcuL2NvbG9yL2dhbW1hLWNvbnRyYXN0JztcbmV4cG9ydCB7c2F0dXJhdGlvbn0gZnJvbSAnLi9jb2xvci9zYXR1cmF0aW9uJztcbmV4cG9ydCB7ZmlsdGVyfSBmcm9tICcuL2NvbG9yL2ZpbHRlcic7XG5cbi8vIFBhbnNoYXJwZW5pbmdcbmV4cG9ydCB7cGFuc2hhcnBlbkJyb3ZleX0gZnJvbSAnLi9wYW5zaGFycGVuL3BhbnNoYXJwZW4tYnJvdmV5JztcblxuLy8gU3BlY3RyYWwgaW5kaWNlc1xuZXhwb3J0IHtlbmhhbmNlZFZlZ2V0YXRpb25JbmRleH0gZnJvbSAnLi9zcGVjdHJhbC1pbmRpY2VzL2V2aSc7XG5leHBvcnQge21vZGlmaWVkU29pbEFkanVzdGVkVmVnZXRhdGlvbkluZGV4fSBmcm9tICcuL3NwZWN0cmFsLWluZGljZXMvbXNhdmknO1xuZXhwb3J0IHtub3JtYWxpemVkRGlmZmVyZW5jZX0gZnJvbSAnLi9zcGVjdHJhbC1pbmRpY2VzL25vcm1hbGl6ZWQtZGlmZmVyZW5jZSc7XG5leHBvcnQge3NvaWxBZGp1c3RlZFZlZ2V0YXRpb25JbmRleH0gZnJvbSAnLi9zcGVjdHJhbC1pbmRpY2VzL3NhdmknO1xuXG5leHBvcnQgdHlwZSB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3R5cGVzJztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBLFNBQVFBLGlCQUFpQixFQUFFQyxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFPLHlCQUF5QjtBQUM1RixTQUFRQyxTQUFTLFFBQU8sc0JBQXNCO0FBQzlDLFNBQVFDLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxPQUFPLFFBQU8sZ0JBQWdCO0FBQzNELFNBQVFDLFlBQVksUUFBTyx5QkFBeUI7O0FBRXBEO0FBQ0EsU0FBUUMsUUFBUSxRQUFPLGtCQUFrQjtBQUN6QyxTQUFRQyxhQUFhLFFBQU8sd0JBQXdCO0FBQ3BELFNBQVFDLGlCQUFpQixRQUFPLDRCQUE0QjtBQUM1RCxTQUFRQyxhQUFhLFFBQU8sd0JBQXdCO0FBQ3BELFNBQVFDLFVBQVUsUUFBTyxvQkFBb0I7QUFDN0MsU0FBUUMsTUFBTSxRQUFPLGdCQUFnQjs7QUFFckM7QUFDQSxTQUFRQyxnQkFBZ0IsUUFBTyxnQ0FBZ0M7O0FBRS9EO0FBQ0EsU0FBUUMsdUJBQXVCLFFBQU8sd0JBQXdCO0FBQzlELFNBQVFDLG1DQUFtQyxRQUFPLDBCQUEwQjtBQUM1RSxTQUFRQyxvQkFBb0IsUUFBTywwQ0FBMEM7QUFDN0UsU0FBUUMsMkJBQTJCLFFBQU8seUJBQXlCIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ // Brovey Method: Each resampled, multispectral pixel is
5
+ // multiplied by the ratio of the corresponding
6
+ // panchromatic pixel intensity to the sum of all the
7
+ // multispectral intensities.
8
+ // Original code from https://github.com/mapbox/rio-pansharpen
9
+ //
10
+ var fs1 = "uniform sampler2D bitmapTexturePan;\n\nuniform pansharpen_broveyUniforms {\n float panWeight;\n} pansharpen_brovey;\n\nfloat pansharpen_brovey_ratio(vec4 rgb, float pan, float weight) {\n return pan / ((rgb.r + rgb.g + rgb.b * weight) / (2. + weight));\n}\n\nvec4 pansharpen_brovey_calc(vec4 rgb, float pan, float weight) {\n float ratio = pansharpen_brovey_ratio(rgb, pan, weight);\n return ratio * rgb;\n}\n";
11
+ var fs2 = "precision mediump usampler2D;\n\n#ifdef SAMPLER_TYPE\n uniform SAMPLER_TYPE bitmapTexturePan;\n#else\n uniform sampler2D bitmapTexturePan;\n#endif\n\nuniform pansharpen_broveyUniforms {\n float panWeight;\n} pansharpen_brovey;\n\nfloat pansharpen_brovey_ratio(vec4 rgb, float pan, float weight) {\n return pan / ((rgb.r + rgb.g + rgb.b * weight) / (2. + weight));\n}\n\nvec4 pansharpen_brovey_calc(vec4 rgb, float pan, float weight) {\n float ratio = pansharpen_brovey_ratio(rgb, pan, weight);\n return ratio * rgb;\n}\n";
12
+ function getUniforms() {
13
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
14
+ var imagePan = opts.imagePan,
15
+ _opts$panWeight = opts.panWeight,
16
+ panWeight = _opts$panWeight === void 0 ? 0.2 : _opts$panWeight;
17
+ if (!imagePan) {
18
+ return null;
19
+ }
20
+ return {
21
+ bitmapTexturePan: imagePan,
22
+ panWeight: panWeight
23
+ };
24
+ }
25
+ export var pansharpenBrovey = {
26
+ name: 'pansharpen_brovey',
27
+ fs1: fs1,
28
+ fs2: fs2,
29
+ uniformTypes: {
30
+ panWeight: 'f32'
31
+ },
32
+ defines: {
33
+ SAMPLER_TYPE: 'sampler2D'
34
+ },
35
+ getUniforms: getUniforms,
36
+ inject: {
37
+ 'fs:DECKGL_MUTATE_COLOR': "\n float pan_band = float(texture(bitmapTexturePan, coord).r);\n image = pansharpen_brovey_calc(image, pan_band, pansharpen_brovey.panWeight);\n "
38
+ }
39
+ };
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmczEiLCJmczIiLCJnZXRVbmlmb3JtcyIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJpbWFnZVBhbiIsIl9vcHRzJHBhbldlaWdodCIsInBhbldlaWdodCIsImJpdG1hcFRleHR1cmVQYW4iLCJwYW5zaGFycGVuQnJvdmV5IiwibmFtZSIsInVuaWZvcm1UeXBlcyIsImRlZmluZXMiLCJTQU1QTEVSX1RZUEUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL3BhbnNoYXJwZW4vcGFuc2hhcnBlbi1icm92ZXkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHR5cGUge1RleHR1cmV9IGZyb20gJ0BsdW1hLmdsL2NvcmUnO1xuaW1wb3J0IHtHZXRVbmlmb3Jtc091dHB1dCwgU2hhZGVyTW9kdWxlfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIEJyb3ZleSBNZXRob2Q6IEVhY2ggcmVzYW1wbGVkLCBtdWx0aXNwZWN0cmFsIHBpeGVsIGlzXG4vLyBtdWx0aXBsaWVkIGJ5IHRoZSByYXRpbyBvZiB0aGUgY29ycmVzcG9uZGluZ1xuLy8gcGFuY2hyb21hdGljIHBpeGVsIGludGVuc2l0eSB0byB0aGUgc3VtIG9mIGFsbCB0aGVcbi8vIG11bHRpc3BlY3RyYWwgaW50ZW5zaXRpZXMuXG4vLyBPcmlnaW5hbCBjb2RlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9yaW8tcGFuc2hhcnBlblxuLy9cbmNvbnN0IGZzMSA9IGBcXFxudW5pZm9ybSBzYW1wbGVyMkQgYml0bWFwVGV4dHVyZVBhbjtcblxudW5pZm9ybSBwYW5zaGFycGVuX2Jyb3ZleVVuaWZvcm1zIHtcbiAgZmxvYXQgcGFuV2VpZ2h0O1xufSBwYW5zaGFycGVuX2Jyb3ZleTtcblxuZmxvYXQgcGFuc2hhcnBlbl9icm92ZXlfcmF0aW8odmVjNCByZ2IsIGZsb2F0IHBhbiwgZmxvYXQgd2VpZ2h0KSB7XG4gIHJldHVybiBwYW4gLyAoKHJnYi5yICsgcmdiLmcgKyByZ2IuYiAqIHdlaWdodCkgLyAoMi4gKyB3ZWlnaHQpKTtcbn1cblxudmVjNCBwYW5zaGFycGVuX2Jyb3ZleV9jYWxjKHZlYzQgcmdiLCBmbG9hdCBwYW4sIGZsb2F0IHdlaWdodCkge1xuICBmbG9hdCByYXRpbyA9IHBhbnNoYXJwZW5fYnJvdmV5X3JhdGlvKHJnYiwgcGFuLCB3ZWlnaHQpO1xuICByZXR1cm4gcmF0aW8gKiByZ2I7XG59XG5gO1xuXG5jb25zdCBmczIgPSBgXFxcbnByZWNpc2lvbiBtZWRpdW1wIHVzYW1wbGVyMkQ7XG5cbiNpZmRlZiBTQU1QTEVSX1RZUEVcbiAgdW5pZm9ybSBTQU1QTEVSX1RZUEUgYml0bWFwVGV4dHVyZVBhbjtcbiNlbHNlXG4gIHVuaWZvcm0gc2FtcGxlcjJEIGJpdG1hcFRleHR1cmVQYW47XG4jZW5kaWZcblxudW5pZm9ybSBwYW5zaGFycGVuX2Jyb3ZleVVuaWZvcm1zIHtcbiAgZmxvYXQgcGFuV2VpZ2h0O1xufSBwYW5zaGFycGVuX2Jyb3ZleTtcblxuZmxvYXQgcGFuc2hhcnBlbl9icm92ZXlfcmF0aW8odmVjNCByZ2IsIGZsb2F0IHBhbiwgZmxvYXQgd2VpZ2h0KSB7XG4gIHJldHVybiBwYW4gLyAoKHJnYi5yICsgcmdiLmcgKyByZ2IuYiAqIHdlaWdodCkgLyAoMi4gKyB3ZWlnaHQpKTtcbn1cblxudmVjNCBwYW5zaGFycGVuX2Jyb3ZleV9jYWxjKHZlYzQgcmdiLCBmbG9hdCBwYW4sIGZsb2F0IHdlaWdodCkge1xuICBmbG9hdCByYXRpbyA9IHBhbnNoYXJwZW5fYnJvdmV5X3JhdGlvKHJnYiwgcGFuLCB3ZWlnaHQpO1xuICByZXR1cm4gcmF0aW8gKiByZ2I7XG59XG5gO1xuXG5mdW5jdGlvbiBnZXRVbmlmb3JtcyhvcHRzOiB7aW1hZ2VQYW4/OiBUZXh0dXJlOyBwYW5XZWlnaHQ/OiBudW1iZXJ9ID0ge30pOiBHZXRVbmlmb3Jtc091dHB1dCB7XG4gIGNvbnN0IHtpbWFnZVBhbiwgcGFuV2VpZ2h0ID0gMC4yfSA9IG9wdHM7XG5cbiAgaWYgKCFpbWFnZVBhbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiaXRtYXBUZXh0dXJlUGFuOiBpbWFnZVBhbixcbiAgICBwYW5XZWlnaHRcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHBhbnNoYXJwZW5Ccm92ZXk6IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ3BhbnNoYXJwZW5fYnJvdmV5JyxcbiAgZnMxLFxuICBmczIsXG4gIHVuaWZvcm1UeXBlczoge1xuICAgIHBhbldlaWdodDogJ2YzMidcbiAgfSxcbiAgZGVmaW5lczoge1xuICAgIFNBTVBMRVJfVFlQRTogJ3NhbXBsZXIyRCdcbiAgfSxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGZsb2F0IHBhbl9iYW5kID0gZmxvYXQodGV4dHVyZShiaXRtYXBUZXh0dXJlUGFuLCBjb29yZCkucik7XG4gICAgaW1hZ2UgPSBwYW5zaGFycGVuX2Jyb3ZleV9jYWxjKGltYWdlLCBwYW5fYmFuZCwgcGFuc2hhcnBlbl9icm92ZXkucGFuV2VpZ2h0KTtcbiAgICBgXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsR0FBRyxrYUFlUjtBQUVELElBQU1DLEdBQUcsbWhCQXFCUjtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFBeUU7RUFBQSxJQUF4RUMsSUFBOEMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQ3RFLElBQU9HLFFBQVEsR0FBcUJKLElBQUksQ0FBakNJLFFBQVE7SUFBQUMsZUFBQSxHQUFxQkwsSUFBSSxDQUF2Qk0sU0FBUztJQUFUQSxTQUFTLEdBQUFELGVBQUEsY0FBRyxHQUFHLEdBQUFBLGVBQUE7RUFFaEMsSUFBSSxDQUFDRCxRQUFRLEVBQUU7SUFDYixPQUFPLElBQUk7RUFDYjtFQUVBLE9BQU87SUFDTEcsZ0JBQWdCLEVBQUVILFFBQVE7SUFDMUJFLFNBQVMsRUFBVEE7RUFDRixDQUFDO0FBQ0g7QUFFQSxPQUFPLElBQU1FLGdCQUE4QixHQUFHO0VBQzVDQyxJQUFJLEVBQUUsbUJBQW1CO0VBQ3pCWixHQUFHLEVBQUhBLEdBQUc7RUFDSEMsR0FBRyxFQUFIQSxHQUFHO0VBQ0hZLFlBQVksRUFBRTtJQUNaSixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RLLE9BQU8sRUFBRTtJQUNQQyxZQUFZLEVBQUU7RUFDaEIsQ0FBQztFQUNEYixXQUFXLEVBQVhBLFdBQVc7RUFDWGMsTUFBTSxFQUFFO0lBQ04sd0JBQXdCO0VBSTFCO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,20 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ // Calculate enhanced vegetation index
5
+ // Expected to be ordered:
6
+ // red: Landsat 8 band 5
7
+ // green: Landsat 8 band 4
8
+ // blue: Landsat 8 band 2
9
+ //
10
+ // EVI = 2.5 * ((Band 5 – Band 4) / (Band 5 + 6 * Band 4 – 7.5 * Band 2 + 1))
11
+ // https://www.usgs.gov/land-resources/nli/landsat/landsat-enhanced-vegetation-index
12
+ var fs = "float enhanced_vegetation_index_calc(vec4 image) {\n float band5 = image.r;\n float band4 = image.g;\n float band2 = image.b;\n\n float numerator = band5 - band4;\n float denominator = band5 + (6. * band4) - (7.5 * band2) + 1.;\n return 2.5 * (numerator / denominator);\n}\n";
13
+ export var enhancedVegetationIndex = {
14
+ name: 'enhanced_vegetation_index',
15
+ fs: fs,
16
+ inject: {
17
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = vec4(enhanced_vegetation_index_calc(image), 0., 0., 0.);\n "
18
+ }
19
+ };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImVuaGFuY2VkVmVnZXRhdGlvbkluZGV4IiwibmFtZSIsImluamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvd2ViZ2wvc3BlY3RyYWwtaW5kaWNlcy9ldmkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtTaGFkZXJNb2R1bGV9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gQ2FsY3VsYXRlIGVuaGFuY2VkIHZlZ2V0YXRpb24gaW5kZXhcbi8vIEV4cGVjdGVkIHRvIGJlIG9yZGVyZWQ6XG4vLyByZWQ6IExhbmRzYXQgOCBiYW5kIDVcbi8vIGdyZWVuOiBMYW5kc2F0IDggYmFuZCA0XG4vLyBibHVlOiBMYW5kc2F0IDggYmFuZCAyXG4vL1xuLy8gRVZJID0gMi41ICogKChCYW5kIDUg4oCTIEJhbmQgNCkgLyAoQmFuZCA1ICsgNiAqIEJhbmQgNCDigJMgNy41ICogQmFuZCAyICsgMSkpXG4vLyBodHRwczovL3d3dy51c2dzLmdvdi9sYW5kLXJlc291cmNlcy9ubGkvbGFuZHNhdC9sYW5kc2F0LWVuaGFuY2VkLXZlZ2V0YXRpb24taW5kZXhcbmNvbnN0IGZzID0gYFxcXG5mbG9hdCBlbmhhbmNlZF92ZWdldGF0aW9uX2luZGV4X2NhbGModmVjNCBpbWFnZSkge1xuICBmbG9hdCBiYW5kNSA9IGltYWdlLnI7XG4gIGZsb2F0IGJhbmQ0ID0gaW1hZ2UuZztcbiAgZmxvYXQgYmFuZDIgPSBpbWFnZS5iO1xuXG4gIGZsb2F0IG51bWVyYXRvciA9IGJhbmQ1IC0gYmFuZDQ7XG4gIGZsb2F0IGRlbm9taW5hdG9yID0gYmFuZDUgKyAoNi4gKiBiYW5kNCkgLSAoNy41ICogYmFuZDIpICsgMS47XG4gIHJldHVybiAyLjUgKiAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpO1xufVxuYDtcblxuZXhwb3J0IGNvbnN0IGVuaGFuY2VkVmVnZXRhdGlvbkluZGV4OiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdlbmhhbmNlZF92ZWdldGF0aW9uX2luZGV4JyxcbiAgZnMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGltYWdlID0gdmVjNChlbmhhbmNlZF92ZWdldGF0aW9uX2luZGV4X2NhbGMoaW1hZ2UpLCAwLiwgMC4sIDAuKTtcbiAgICBgXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1BLEVBQUUsNlJBVVA7QUFFRCxPQUFPLElBQU1DLHVCQUFxQyxHQUFHO0VBQ25EQyxJQUFJLEVBQUUsMkJBQTJCO0VBQ2pDRixFQUFFLEVBQUZBLEVBQUU7RUFDRkcsTUFBTSxFQUFFO0lBQ04sd0JBQXdCO0VBRzFCO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==