@kepler.gl/deckgl-layers 3.3.0-alpha.5 → 3.3.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
- package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
- package/dist/cjs/3d-building-layer/types.js +6 -0
- package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
- package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
- package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
- package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
- package/dist/cjs/globe/atmosphere-layer.js +341 -0
- package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
- package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
- package/dist/cjs/globe/globe-layers.js +574 -0
- package/dist/cjs/globe/globe-stars-layer.js +99 -0
- package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
- package/dist/cjs/globe/globe-view.js +404 -0
- package/dist/{globe → cjs/globe}/index.js +19 -1
- package/dist/cjs/globe/mvt-label-layer.js +190 -0
- package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
- package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
- package/dist/{index.js → cjs/index.js} +1 -1
- package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
- package/dist/cjs/layer-utils/cluster-utils.js +93 -0
- package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
- package/dist/cjs/layer-utils/globe-cell-utils.js +173 -0
- package/dist/cjs/layer-utils/shader-utils.js +38 -0
- package/dist/cjs/line-layer/line-layer.js +95 -0
- package/dist/cjs/raster/images.js +271 -0
- package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
- package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
- package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
- package/dist/cjs/raster/types.js +6 -0
- package/dist/cjs/raster/util.js +139 -0
- package/dist/cjs/raster/webgl/color/colormap.js +45 -0
- package/dist/cjs/raster/webgl/color/filter.js +58 -0
- package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
- package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
- package/dist/cjs/raster/webgl/color/saturation.js +42 -0
- package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
- package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
- package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
- package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
- package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
- package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
- package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
- package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
- package/dist/cjs/raster/webgl/texture/mask.js +50 -0
- package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
- package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
- package/dist/cjs/raster/webgl/types.js +6 -0
- package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
- package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
- package/dist/cjs/wms/wms-layer.js +624 -0
- package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
- package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
- package/dist/esm/3d-building-layer/types.js +3 -0
- package/dist/esm/cluster-layer/cluster-layer.js +286 -0
- package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
- package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
- package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
- package/dist/esm/globe/atmosphere-layer.js +335 -0
- package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
- package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
- package/dist/esm/globe/globe-layers.js +566 -0
- package/dist/esm/globe/globe-stars-layer.js +92 -0
- package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
- package/dist/esm/globe/globe-view.js +398 -0
- package/dist/esm/globe/index.js +26 -0
- package/dist/esm/globe/mvt-label-layer.js +187 -0
- package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
- package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/layer-utils/aggregation-utils.js +172 -0
- package/dist/esm/layer-utils/cluster-utils.js +86 -0
- package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
- package/dist/esm/layer-utils/globe-cell-utils.js +167 -0
- package/dist/esm/layer-utils/shader-utils.js +32 -0
- package/dist/esm/line-layer/line-layer.js +91 -0
- package/dist/esm/raster/images.js +267 -0
- package/dist/esm/raster/pipeline-validation-patch.js +94 -0
- package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
- package/dist/esm/raster/raster-processing-uniforms.js +118 -0
- package/dist/esm/raster/types.js +3 -0
- package/dist/esm/raster/util.js +134 -0
- package/dist/esm/raster/webgl/color/colormap.js +39 -0
- package/dist/esm/raster/webgl/color/filter.js +52 -0
- package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
- package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
- package/dist/esm/raster/webgl/color/saturation.js +36 -0
- package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
- package/dist/esm/raster/webgl/index.js +26 -0
- package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
- package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
- package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
- package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
- package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
- package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
- package/dist/esm/raster/webgl/texture/mask.js +44 -0
- package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
- package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
- package/dist/esm/raster/webgl/types.js +3 -0
- package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
- package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
- package/dist/esm/wms/wms-layer.js +619 -0
- package/dist/globe/atmosphere-layer.d.ts +22 -1
- package/dist/globe/globe-stars-layer.d.ts +5 -0
- package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
- package/dist/globe/index.d.ts +2 -2
- package/dist/wms/wms-layer.d.ts +8 -0
- package/package.json +19 -10
- package/dist/3d-building-layer/3d-building-layer.js +0 -66
- package/dist/3d-building-layer/3d-building-utils.js +0 -166
- package/dist/3d-building-layer/types.js +0 -6
- package/dist/cluster-layer/cluster-layer.js +0 -292
- package/dist/column-layer/enhanced-column-layer.js +0 -160
- package/dist/deckgl-extensions/filter-shader-module.js +0 -26
- package/dist/globe/atmosphere-layer.js +0 -220
- package/dist/globe/enhanced-multi-icon-layer.js +0 -63
- package/dist/globe/globe-depth-disk-layer.js +0 -145
- package/dist/globe/globe-layers.js +0 -569
- package/dist/globe/globe-stars-layer.js +0 -69
- package/dist/globe/globe-view.js +0 -404
- package/dist/globe/mvt-label-layer.js +0 -190
- package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -116
- package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -134
- package/dist/layer-utils/aggregation-utils.js +0 -181
- package/dist/layer-utils/cluster-utils.js +0 -93
- package/dist/layer-utils/cpu-aggregator.js +0 -798
- package/dist/layer-utils/globe-cell-utils.js +0 -173
- package/dist/layer-utils/shader-utils.js +0 -38
- package/dist/line-layer/line-layer.js +0 -95
- package/dist/raster/images.js +0 -271
- package/dist/raster/pipeline-validation-patch.js +0 -101
- package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
- package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer.js +0 -287
- package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
- package/dist/raster/raster-mesh-layer/matrix.js +0 -18
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -321
- package/dist/raster/raster-processing-uniforms.js +0 -124
- package/dist/raster/types.js +0 -6
- package/dist/raster/util.js +0 -139
- package/dist/raster/webgl/color/colormap.js +0 -45
- package/dist/raster/webgl/color/filter.js +0 -58
- package/dist/raster/webgl/color/gamma-contrast.js +0 -68
- package/dist/raster/webgl/color/linear-rescale.js +0 -35
- package/dist/raster/webgl/color/saturation.js +0 -42
- package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
- package/dist/raster/webgl/spectral-indices/evi.js +0 -26
- package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
- package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
- package/dist/raster/webgl/spectral-indices/savi.js +0 -21
- package/dist/raster/webgl/texture/combine-bands.js +0 -65
- package/dist/raster/webgl/texture/mask.js +0 -50
- package/dist/raster/webgl/texture/reorder-bands.js +0 -72
- package/dist/raster/webgl/texture/rgba-image.js +0 -34
- package/dist/raster/webgl/types.js +0 -6
- package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -88
- package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
- package/dist/wms/wms-layer.js +0 -594
|
@@ -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==
|