@kepler.gl/deckgl-layers 3.1.3 → 3.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -0
- package/dist/index.js +25 -2
- package/dist/layer-utils/cluster-utils.js +3 -3
- package/dist/raster/images.d.ts +9 -0
- package/dist/raster/images.js +165 -0
- package/dist/raster/raster-layer/raster-layer-webgl1.fs.d.ts +2 -0
- package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
- package/dist/raster/raster-layer/raster-layer-webgl1.vs.d.ts +2 -0
- package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
- package/dist/raster/raster-layer/raster-layer-webgl2.fs.d.ts +2 -0
- package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
- package/dist/raster/raster-layer/raster-layer-webgl2.vs.d.ts +2 -0
- package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
- package/dist/raster/raster-layer/raster-layer.d.ts +21 -0
- package/dist/raster/raster-layer/raster-layer.js +235 -0
- package/dist/raster/raster-mesh-layer/matrix.d.ts +2 -0
- package/dist/raster/raster-mesh-layer/matrix.js +18 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.d.ts +2 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.d.ts +2 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.d.ts +2 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.d.ts +2 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +22 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +263 -0
- package/dist/raster/types.d.ts +17 -0
- package/dist/raster/types.js +6 -0
- package/dist/raster/util.d.ts +10 -0
- package/dist/raster/util.js +29 -0
- package/dist/raster/webgl/color/colormap.d.ts +2 -0
- package/dist/raster/webgl/color/colormap.js +39 -0
- package/dist/raster/webgl/color/filter.d.ts +2 -0
- package/dist/raster/webgl/color/filter.js +48 -0
- package/dist/raster/webgl/color/gamma-contrast.d.ts +2 -0
- package/dist/raster/webgl/color/gamma-contrast.js +62 -0
- package/dist/raster/webgl/color/linear-rescale.d.ts +2 -0
- package/dist/raster/webgl/color/linear-rescale.js +31 -0
- package/dist/raster/webgl/color/saturation.d.ts +2 -0
- package/dist/raster/webgl/color/saturation.js +39 -0
- package/dist/raster/webgl/color/sigmoidal-contrast.d.ts +2 -0
- package/dist/raster/webgl/color/sigmoidal-contrast.js +64 -0
- package/dist/raster/webgl/index.d.ts +16 -0
- package/dist/raster/webgl/index.js +135 -0
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.d.ts +2 -0
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +43 -0
- package/dist/raster/webgl/spectral-indices/evi.d.ts +2 -0
- package/dist/raster/webgl/spectral-indices/evi.js +26 -0
- package/dist/raster/webgl/spectral-indices/msavi.d.ts +2 -0
- package/dist/raster/webgl/spectral-indices/msavi.js +25 -0
- package/dist/raster/webgl/spectral-indices/normalized-difference.d.ts +2 -0
- package/dist/raster/webgl/spectral-indices/normalized-difference.js +19 -0
- package/dist/raster/webgl/spectral-indices/savi.d.ts +2 -0
- package/dist/raster/webgl/spectral-indices/savi.js +21 -0
- package/dist/raster/webgl/texture/combine-bands.d.ts +4 -0
- package/dist/raster/webgl/texture/combine-bands.js +65 -0
- package/dist/raster/webgl/texture/mask.d.ts +4 -0
- package/dist/raster/webgl/texture/mask.js +58 -0
- package/dist/raster/webgl/texture/reorder-bands.d.ts +10 -0
- package/dist/raster/webgl/texture/reorder-bands.js +69 -0
- package/dist/raster/webgl/texture/rgba-image.d.ts +2 -0
- package/dist/raster/webgl/texture/rgba-image.js +34 -0
- package/dist/raster/webgl/types.d.ts +23 -0
- package/dist/raster/webgl/types.js +6 -0
- package/package.json +5 -6
@@ -0,0 +1,263 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports["default"] = void 0;
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
10
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
11
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
12
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
13
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
16
|
+
var _typed = require("@deck.gl/core/typed");
|
17
|
+
var _typed2 = require("@deck.gl/mesh-layers/typed");
|
18
|
+
var _constants = _interopRequireDefault(require("@luma.gl/constants"));
|
19
|
+
var _core = require("@luma.gl/core");
|
20
|
+
var _engine = require("@luma.gl/engine");
|
21
|
+
var _matrix = require("./matrix");
|
22
|
+
var _rasterMeshLayerWebgl = _interopRequireDefault(require("./raster-mesh-layer-webgl1.fs"));
|
23
|
+
var _rasterMeshLayerWebgl2 = _interopRequireDefault(require("./raster-mesh-layer-webgl1.vs"));
|
24
|
+
var _rasterMeshLayerWebgl3 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.fs"));
|
25
|
+
var _rasterMeshLayerWebgl4 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.vs"));
|
26
|
+
var _images = require("../images");
|
27
|
+
var _util = require("../util");
|
28
|
+
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; } } }; }
|
29
|
+
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; } }
|
30
|
+
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; }
|
31
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
32
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
33
|
+
function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; }
|
34
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
35
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
36
|
+
// Copyright contributors to the kepler.gl project
|
37
|
+
function validateGeometryAttributes(attributes) {
|
38
|
+
_typed.log.assert(attributes.positions || attributes.POSITION, 'RasterMeshLayer requires "postions" or "POSITION" attribute in mesh property.');
|
39
|
+
}
|
40
|
+
|
41
|
+
/*
|
42
|
+
* Convert mesh data into geometry
|
43
|
+
* @returns geometry
|
44
|
+
*/
|
45
|
+
function getGeometry(data) {
|
46
|
+
if (data.attributes) {
|
47
|
+
validateGeometryAttributes(data.attributes);
|
48
|
+
if (data instanceof _core.Geometry) {
|
49
|
+
return data;
|
50
|
+
}
|
51
|
+
return new _core.Geometry(data);
|
52
|
+
} else if (data.positions || data.POSITION) {
|
53
|
+
validateGeometryAttributes(data);
|
54
|
+
return new _core.Geometry({
|
55
|
+
attributes: data
|
56
|
+
});
|
57
|
+
}
|
58
|
+
throw Error('Invalid mesh');
|
59
|
+
}
|
60
|
+
var defaultProps = _objectSpread(_objectSpread({}, _typed2.SimpleMeshLayer.defaultProps), {}, {
|
61
|
+
modules: {
|
62
|
+
type: 'array',
|
63
|
+
value: [],
|
64
|
+
compare: true
|
65
|
+
},
|
66
|
+
images: {
|
67
|
+
type: 'object',
|
68
|
+
value: {},
|
69
|
+
compare: true
|
70
|
+
},
|
71
|
+
moduleProps: {
|
72
|
+
type: 'object',
|
73
|
+
value: {},
|
74
|
+
compare: true
|
75
|
+
}
|
76
|
+
});
|
77
|
+
var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLayer) {
|
78
|
+
function RasterMeshLayer() {
|
79
|
+
(0, _classCallCheck2["default"])(this, RasterMeshLayer);
|
80
|
+
return _callSuper(this, RasterMeshLayer, arguments);
|
81
|
+
}
|
82
|
+
(0, _inherits2["default"])(RasterMeshLayer, _SimpleMeshLayer);
|
83
|
+
return (0, _createClass2["default"])(RasterMeshLayer, [{
|
84
|
+
key: "initializeState",
|
85
|
+
value: function initializeState() {
|
86
|
+
var gl = this.context.gl;
|
87
|
+
var programManager = _engine.ProgramManager.getDefaultProgramManager(gl);
|
88
|
+
var fsStr1 = 'fs:DECKGL_MUTATE_COLOR(inout vec4 image, in vec2 coord)';
|
89
|
+
var fsStr2 = 'fs:DECKGL_CREATE_COLOR(inout vec4 image, in vec2 coord)';
|
90
|
+
|
91
|
+
// Only initialize shader hook functions _once globally_
|
92
|
+
// Since the program manager is shared across all layers, but many layers
|
93
|
+
// might be created, this solves the performance issue of always adding new
|
94
|
+
// hook functions.
|
95
|
+
if (!programManager._hookFunctions.includes(fsStr1)) {
|
96
|
+
programManager.addShaderHook(fsStr1);
|
97
|
+
}
|
98
|
+
if (!programManager._hookFunctions.includes(fsStr2)) {
|
99
|
+
programManager.addShaderHook(fsStr2);
|
100
|
+
}
|
101
|
+
|
102
|
+
// images is a mapping from keys to Texture2D objects. The keys should match
|
103
|
+
// names of uniforms in shader modules
|
104
|
+
this.setState({
|
105
|
+
images: {}
|
106
|
+
});
|
107
|
+
_superPropGet(RasterMeshLayer, "initializeState", this, 3)([]);
|
108
|
+
}
|
109
|
+
}, {
|
110
|
+
key: "getShaders",
|
111
|
+
value: function getShaders() {
|
112
|
+
var gl = this.context.gl;
|
113
|
+
var _this$props$modules = this.props.modules,
|
114
|
+
modules = _this$props$modules === void 0 ? [] : _this$props$modules;
|
115
|
+
var webgl2 = (0, _core.isWebGL2)(gl);
|
116
|
+
|
117
|
+
// Choose webgl version for module
|
118
|
+
// If fs2 or fs1 keys exist, prefer them, but fall back to fs, so that
|
119
|
+
// version-independent modules don't need to care
|
120
|
+
var _iterator = _createForOfIteratorHelper(modules),
|
121
|
+
_step;
|
122
|
+
try {
|
123
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
124
|
+
var module = _step.value;
|
125
|
+
module.fs = webgl2 ? module.fs2 || module.fs : module.fs1 || module.fs;
|
126
|
+
|
127
|
+
// Sampler type is always float for WebGL1
|
128
|
+
if (!webgl2 && module.defines) {
|
129
|
+
module.defines.SAMPLER_TYPE = 'sampler2D';
|
130
|
+
}
|
131
|
+
}
|
132
|
+
} catch (err) {
|
133
|
+
_iterator.e(err);
|
134
|
+
} finally {
|
135
|
+
_iterator.f();
|
136
|
+
}
|
137
|
+
return _objectSpread(_objectSpread({}, _superPropGet(RasterMeshLayer, "getShaders", this, 3)([])), {}, {
|
138
|
+
vs: webgl2 ? _rasterMeshLayerWebgl4["default"] : _rasterMeshLayerWebgl2["default"],
|
139
|
+
fs: webgl2 ? _rasterMeshLayerWebgl3["default"] : _rasterMeshLayerWebgl["default"],
|
140
|
+
modules: [_typed.project32, _typed.phongLighting].concat((0, _toConsumableArray2["default"])(modules))
|
141
|
+
});
|
142
|
+
}
|
143
|
+
|
144
|
+
// eslint-disable-next-line complexity
|
145
|
+
}, {
|
146
|
+
key: "updateState",
|
147
|
+
value: function updateState(params) {
|
148
|
+
var props = params.props,
|
149
|
+
oldProps = params.oldProps,
|
150
|
+
changeFlags = params.changeFlags,
|
151
|
+
context = params.context;
|
152
|
+
_superPropGet(RasterMeshLayer, "updateState", this, 3)([{
|
153
|
+
props: props,
|
154
|
+
oldProps: oldProps,
|
155
|
+
changeFlags: changeFlags,
|
156
|
+
context: context
|
157
|
+
}]);
|
158
|
+
var modules = props && props.modules;
|
159
|
+
var oldModules = oldProps && oldProps.modules;
|
160
|
+
|
161
|
+
// If the list of modules changed, need to recompile the shaders
|
162
|
+
if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged || !(0, _util.modulesEqual)(modules, oldModules)) {
|
163
|
+
var _this$getAttributeMan;
|
164
|
+
if (this.state.model) {
|
165
|
+
this.state.model["delete"]();
|
166
|
+
}
|
167
|
+
if (props.mesh) {
|
168
|
+
this.state.model = this.getModel(props.mesh);
|
169
|
+
var attributes = props.mesh.attributes || props.mesh;
|
170
|
+
this.setState({
|
171
|
+
hasNormals: Boolean(attributes.NORMAL || attributes.normals)
|
172
|
+
});
|
173
|
+
}
|
174
|
+
(_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.invalidateAll();
|
175
|
+
}
|
176
|
+
if (props && props.images) {
|
177
|
+
this.updateImages({
|
178
|
+
props: props,
|
179
|
+
oldProps: oldProps
|
180
|
+
});
|
181
|
+
}
|
182
|
+
if (this.state.model) {
|
183
|
+
this.state.model.setDrawMode(this.props.wireframe ? _constants["default"].LINE_STRIP : _constants["default"].TRIANGLES);
|
184
|
+
}
|
185
|
+
}
|
186
|
+
}, {
|
187
|
+
key: "updateImages",
|
188
|
+
value: function updateImages(_ref) {
|
189
|
+
var props = _ref.props,
|
190
|
+
oldProps = _ref.oldProps;
|
191
|
+
var images = this.state.images;
|
192
|
+
var gl = this.context.gl;
|
193
|
+
var newImages = (0, _images.loadImages)({
|
194
|
+
gl: gl,
|
195
|
+
images: images,
|
196
|
+
imagesData: props.images,
|
197
|
+
oldImagesData: oldProps.images
|
198
|
+
});
|
199
|
+
if (newImages) {
|
200
|
+
this.setState({
|
201
|
+
images: newImages
|
202
|
+
});
|
203
|
+
}
|
204
|
+
}
|
205
|
+
}, {
|
206
|
+
key: "draw",
|
207
|
+
value: function draw(_ref2) {
|
208
|
+
var uniforms = _ref2.uniforms;
|
209
|
+
var _this$state = this.state,
|
210
|
+
model = _this$state.model,
|
211
|
+
images = _this$state.images;
|
212
|
+
var moduleProps = this.props.moduleProps;
|
213
|
+
|
214
|
+
// Render the image
|
215
|
+
if (!model || !images || Object.keys(images).length === 0 || !Object.values(images).every(function (item) {
|
216
|
+
return item;
|
217
|
+
})) {
|
218
|
+
return;
|
219
|
+
}
|
220
|
+
var viewport = this.context.viewport;
|
221
|
+
var _this$props = this.props,
|
222
|
+
sizeScale = _this$props.sizeScale,
|
223
|
+
coordinateSystem = _this$props.coordinateSystem,
|
224
|
+
_instanced = _this$props._instanced;
|
225
|
+
model.setUniforms(Object.assign({}, uniforms, {
|
226
|
+
sizeScale: sizeScale,
|
227
|
+
composeModelMatrix: !_instanced || (0, _matrix.shouldComposeModelMatrix)(viewport, coordinateSystem),
|
228
|
+
flatShading: !this.state.hasNormals
|
229
|
+
})).updateModuleSettings(_objectSpread(_objectSpread({}, moduleProps), images)).draw();
|
230
|
+
}
|
231
|
+
}, {
|
232
|
+
key: "finalizeState",
|
233
|
+
value: function finalizeState() {
|
234
|
+
_superPropGet(RasterMeshLayer, "finalizeState", this, 3)([this.context]);
|
235
|
+
if (this.state.images) {
|
236
|
+
for (var _i = 0, _Object$values = Object.values(this.state.images); _i < _Object$values.length; _i++) {
|
237
|
+
var image = _Object$values[_i];
|
238
|
+
if (Array.isArray(image)) {
|
239
|
+
image.map(function (x) {
|
240
|
+
return x && x["delete"]();
|
241
|
+
});
|
242
|
+
} else if (image) {
|
243
|
+
image["delete"]();
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
}
|
248
|
+
}, {
|
249
|
+
key: "getModel",
|
250
|
+
value: function getModel(mesh) {
|
251
|
+
var gl = this.context.gl;
|
252
|
+
var model = new _core.Model(gl, Object.assign({}, this.getShaders(), {
|
253
|
+
id: this.props.id,
|
254
|
+
geometry: getGeometry(mesh),
|
255
|
+
isInstanced: true
|
256
|
+
}));
|
257
|
+
return model;
|
258
|
+
}
|
259
|
+
}]);
|
260
|
+
}(_typed2.SimpleMeshLayer);
|
261
|
+
RasterMeshLayer.layerName = 'RasterMeshLayer';
|
262
|
+
RasterMeshLayer.defaultProps = defaultProps;
|
263
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvcmUiLCJfZW5naW5lIiwiX21hdHJpeCIsIl9yYXN0ZXJNZXNoTGF5ZXJXZWJnbCIsIl9yYXN0ZXJNZXNoTGF5ZXJXZWJnbDIiLCJfcmFzdGVyTWVzaExheWVyV2ViZ2wzIiwiX3Jhc3Rlck1lc2hMYXllcldlYmdsNCIsIl9pbWFnZXMiLCJfdXRpbCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJsb2ciLCJhc3NlcnQiLCJwb3NpdGlvbnMiLCJQT1NJVElPTiIsImdldEdlb21ldHJ5IiwiZGF0YSIsIkdlb21ldHJ5IiwiRXJyb3IiLCJkZWZhdWx0UHJvcHMiLCJTaW1wbGVNZXNoTGF5ZXIiLCJtb2R1bGVzIiwidHlwZSIsImNvbXBhcmUiLCJpbWFnZXMiLCJtb2R1bGVQcm9wcyIsIlJhc3Rlck1lc2hMYXllciIsImV4cG9ydHMiLCJfU2ltcGxlTWVzaExheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiaW5pdGlhbGl6ZVN0YXRlIiwiZ2wiLCJjb250ZXh0IiwicHJvZ3JhbU1hbmFnZXIiLCJQcm9ncmFtTWFuYWdlciIsImdldERlZmF1bHRQcm9ncmFtTWFuYWdlciIsImZzU3RyMSIsImZzU3RyMiIsIl9ob29rRnVuY3Rpb25zIiwiaW5jbHVkZXMiLCJhZGRTaGFkZXJIb29rIiwic2V0U3RhdGUiLCJnZXRTaGFkZXJzIiwiX3RoaXMkcHJvcHMkbW9kdWxlcyIsInByb3BzIiwid2ViZ2wyIiwiaXNXZWJHTDIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIm1vZHVsZSIsImZzIiwiZnMyIiwiZnMxIiwiZGVmaW5lcyIsIlNBTVBMRVJfVFlQRSIsImVyciIsInZzIiwidnNXZWJHTDIiLCJ2c1dlYkdMMSIsImZzV2ViR0wyIiwiZnNXZWJHTDEiLCJwcm9qZWN0MzIiLCJwaG9uZ0xpZ2h0aW5nIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInVwZGF0ZVN0YXRlIiwicGFyYW1zIiwib2xkUHJvcHMiLCJjaGFuZ2VGbGFncyIsIm9sZE1vZHVsZXMiLCJtZXNoIiwiZXh0ZW5zaW9uc0NoYW5nZWQiLCJtb2R1bGVzRXF1YWwiLCJfdGhpcyRnZXRBdHRyaWJ1dGVNYW4iLCJzdGF0ZSIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJoYXNOb3JtYWxzIiwiTk9STUFMIiwibm9ybWFscyIsImdldEF0dHJpYnV0ZU1hbmFnZXIiLCJpbnZhbGlkYXRlQWxsIiwidXBkYXRlSW1hZ2VzIiwic2V0RHJhd01vZGUiLCJ3aXJlZnJhbWUiLCJHTCIsIkxJTkVfU1RSSVAiLCJUUklBTkdMRVMiLCJfcmVmIiwibmV3SW1hZ2VzIiwibG9hZEltYWdlcyIsImltYWdlc0RhdGEiLCJvbGRJbWFnZXNEYXRhIiwiZHJhdyIsIl9yZWYyIiwidW5pZm9ybXMiLCJfdGhpcyRzdGF0ZSIsInZhbHVlcyIsImV2ZXJ5IiwiaXRlbSIsInZpZXdwb3J0IiwiX3RoaXMkcHJvcHMiLCJzaXplU2NhbGUiLCJjb29yZGluYXRlU3lzdGVtIiwiX2luc3RhbmNlZCIsInNldFVuaWZvcm1zIiwiYXNzaWduIiwiY29tcG9zZU1vZGVsTWF0cml4Iiwic2hvdWxkQ29tcG9zZU1vZGVsTWF0cml4IiwiZmxhdFNoYWRpbmciLCJ1cGRhdGVNb2R1bGVTZXR0aW5ncyIsImZpbmFsaXplU3RhdGUiLCJfaSIsIl9PYmplY3QkdmFsdWVzIiwiaW1hZ2UiLCJtYXAiLCJ4IiwiTW9kZWwiLCJpZCIsImdlb21ldHJ5IiwiaXNJbnN0YW5jZWQiLCJsYXllck5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFzdGVyL3Jhc3Rlci1tZXNoLWxheWVyL3Jhc3Rlci1tZXNoLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7cHJvamVjdDMyLCBwaG9uZ0xpZ2h0aW5nLCBsb2csIFVwZGF0ZVBhcmFtZXRlcnN9IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtTaW1wbGVNZXNoTGF5ZXIsIFNpbXBsZU1lc2hMYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9tZXNoLWxheWVycy90eXBlZCc7XG5pbXBvcnQgR0wgZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TW9kZWwsIEdlb21ldHJ5LCBpc1dlYkdMMn0gZnJvbSAnQGx1bWEuZ2wvY29yZSc7XG5pbXBvcnQge1Byb2dyYW1NYW5hZ2VyfSBmcm9tICdAbHVtYS5nbC9lbmdpbmUnO1xuaW1wb3J0IHtVbmlmb3Jtc09wdGlvbnN9IGZyb20gJ0BsdW1hLmdsL3dlYmdsL3NyYy9jbGFzc2VzL3VuaWZvcm1zJztcblxuaW1wb3J0IHtzaG91bGRDb21wb3NlTW9kZWxNYXRyaXh9IGZyb20gJy4vbWF0cml4JztcbmltcG9ydCBmc1dlYkdMMSBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMS5mcyc7XG5pbXBvcnQgdnNXZWJHTDEgZnJvbSAnLi9yYXN0ZXItbWVzaC1sYXllci13ZWJnbDEudnMnO1xuaW1wb3J0IGZzV2ViR0wyIGZyb20gJy4vcmFzdGVyLW1lc2gtbGF5ZXItd2ViZ2wyLmZzJztcbmltcG9ydCB2c1dlYkdMMiBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMi52cyc7XG5pbXBvcnQge2xvYWRJbWFnZXN9IGZyb20gJy4uL2ltYWdlcyc7XG5pbXBvcnQgdHlwZSB7UmFzdGVyTGF5ZXJBZGRlZFByb3BzLCBJbWFnZVN0YXRlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge21vZHVsZXNFcXVhbH0gZnJvbSAnLi4vdXRpbCc7XG5cbnR5cGUgTWVzaCA9IFNpbXBsZU1lc2hMYXllclByb3BzWydtZXNoJ107XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgbG9nLmFzc2VydChcbiAgICBhdHRyaWJ1dGVzLnBvc2l0aW9ucyB8fCBhdHRyaWJ1dGVzLlBPU0lUSU9OLFxuICAgICdSYXN0ZXJNZXNoTGF5ZXIgcmVxdWlyZXMgXCJwb3N0aW9uc1wiIG9yIFwiUE9TSVRJT05cIiBhdHRyaWJ1dGUgaW4gbWVzaCBwcm9wZXJ0eS4nXG4gICk7XG59XG5cbi8qXG4gKiBDb252ZXJ0IG1lc2ggZGF0YSBpbnRvIGdlb21ldHJ5XG4gKiBAcmV0dXJucyBnZW9tZXRyeVxuICovXG5mdW5jdGlvbiBnZXRHZW9tZXRyeShkYXRhKTogR2VvbWV0cnkge1xuICBpZiAoZGF0YS5hdHRyaWJ1dGVzKSB7XG4gICAgdmFsaWRhdGVHZW9tZXRyeUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKTtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEdlb21ldHJ5KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBHZW9tZXRyeShkYXRhKTtcbiAgfSBlbHNlIGlmIChkYXRhLnBvc2l0aW9ucyB8fCBkYXRhLlBPU0lUSU9OKSB7XG4gICAgdmFsaWRhdGVHZW9tZXRyeUF0dHJpYnV0ZXMoZGF0YSk7XG4gICAgcmV0dXJuIG5ldyBHZW9tZXRyeSh7XG4gICAgICBhdHRyaWJ1dGVzOiBkYXRhXG4gICAgfSk7XG4gIH1cbiAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgbWVzaCcpO1xufVxuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLlNpbXBsZU1lc2hMYXllci5kZWZhdWx0UHJvcHMsXG4gIG1vZHVsZXM6IHt0eXBlOiAnYXJyYXknLCB2YWx1ZTogW10sIGNvbXBhcmU6IHRydWV9LFxuICBpbWFnZXM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfSxcbiAgbW9kdWxlUHJvcHM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFzdGVyTWVzaExheWVyIGV4dGVuZHMgU2ltcGxlTWVzaExheWVyPGFueSwgUmFzdGVyTGF5ZXJBZGRlZFByb3BzPiB7XG4gIGRlY2xhcmUgc3RhdGU6IFNpbXBsZU1lc2hMYXllcjxSYXN0ZXJMYXllckFkZGVkUHJvcHM+WydzdGF0ZSddICYge1xuICAgIGltYWdlczogSW1hZ2VTdGF0ZTtcbiAgfTtcblxuICBpbml0aWFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICBjb25zdCBwcm9ncmFtTWFuYWdlciA9IFByb2dyYW1NYW5hZ2VyLmdldERlZmF1bHRQcm9ncmFtTWFuYWdlcihnbCk7XG5cbiAgICBjb25zdCBmc1N0cjEgPSAnZnM6REVDS0dMX01VVEFURV9DT0xPUihpbm91dCB2ZWM0IGltYWdlLCBpbiB2ZWMyIGNvb3JkKSc7XG4gICAgY29uc3QgZnNTdHIyID0gJ2ZzOkRFQ0tHTF9DUkVBVEVfQ09MT1IoaW5vdXQgdmVjNCBpbWFnZSwgaW4gdmVjMiBjb29yZCknO1xuXG4gICAgLy8gT25seSBpbml0aWFsaXplIHNoYWRlciBob29rIGZ1bmN0aW9ucyBfb25jZSBnbG9iYWxseV9cbiAgICAvLyBTaW5jZSB0aGUgcHJvZ3JhbSBtYW5hZ2VyIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGxheWVycywgYnV0IG1hbnkgbGF5ZXJzXG4gICAgLy8gbWlnaHQgYmUgY3JlYXRlZCwgdGhpcyBzb2x2ZXMgdGhlIHBlcmZvcm1hbmNlIGlzc3VlIG9mIGFsd2F5cyBhZGRpbmcgbmV3XG4gICAgLy8gaG9vayBmdW5jdGlvbnMuXG4gICAgaWYgKCFwcm9ncmFtTWFuYWdlci5faG9va0Z1bmN0aW9ucy5pbmNsdWRlcyhmc1N0cjEpKSB7XG4gICAgICBwcm9ncmFtTWFuYWdlci5hZGRTaGFkZXJIb29rKGZzU3RyMSk7XG4gICAgfVxuICAgIGlmICghcHJvZ3JhbU1hbmFnZXIuX2hvb2tGdW5jdGlvbnMuaW5jbHVkZXMoZnNTdHIyKSkge1xuICAgICAgcHJvZ3JhbU1hbmFnZXIuYWRkU2hhZGVySG9vayhmc1N0cjIpO1xuICAgIH1cblxuICAgIC8vIGltYWdlcyBpcyBhIG1hcHBpbmcgZnJvbSBrZXlzIHRvIFRleHR1cmUyRCBvYmplY3RzLiBUaGUga2V5cyBzaG91bGQgbWF0Y2hcbiAgICAvLyBuYW1lcyBvZiB1bmlmb3JtcyBpbiBzaGFkZXIgbW9kdWxlc1xuICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlczoge319KTtcblxuICAgIHN1cGVyLmluaXRpYWxpemVTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpOiBhbnkge1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3Qge21vZHVsZXMgPSBbXX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHdlYmdsMiA9IGlzV2ViR0wyKGdsKTtcblxuICAgIC8vIENob29zZSB3ZWJnbCB2ZXJzaW9uIGZvciBtb2R1bGVcbiAgICAvLyBJZiBmczIgb3IgZnMxIGtleXMgZXhpc3QsIHByZWZlciB0aGVtLCBidXQgZmFsbCBiYWNrIHRvIGZzLCBzbyB0aGF0XG4gICAgLy8gdmVyc2lvbi1pbmRlcGVuZGVudCBtb2R1bGVzIGRvbid0IG5lZWQgdG8gY2FyZVxuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgIG1vZHVsZS5mcyA9IHdlYmdsMiA/IG1vZHVsZS5mczIgfHwgbW9kdWxlLmZzIDogbW9kdWxlLmZzMSB8fCBtb2R1bGUuZnM7XG5cbiAgICAgIC8vIFNhbXBsZXIgdHlwZSBpcyBhbHdheXMgZmxvYXQgZm9yIFdlYkdMMVxuICAgICAgaWYgKCF3ZWJnbDIgJiYgbW9kdWxlLmRlZmluZXMpIHtcbiAgICAgICAgbW9kdWxlLmRlZmluZXMuU0FNUExFUl9UWVBFID0gJ3NhbXBsZXIyRCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmdldFNoYWRlcnMoKSxcbiAgICAgIHZzOiB3ZWJnbDIgPyB2c1dlYkdMMiA6IHZzV2ViR0wxLFxuICAgICAgZnM6IHdlYmdsMiA/IGZzV2ViR0wyIDogZnNXZWJHTDEsXG4gICAgICBtb2R1bGVzOiBbcHJvamVjdDMyLCBwaG9uZ0xpZ2h0aW5nLCAuLi5tb2R1bGVzXVxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVTdGF0ZShwYXJhbXM6IFVwZGF0ZVBhcmFtZXRlcnM8U2ltcGxlTWVzaExheWVyPGFueSwgUmFzdGVyTGF5ZXJBZGRlZFByb3BzPj4pOiB2b2lkIHtcbiAgICBjb25zdCB7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFncywgY29udGV4dH0gPSBwYXJhbXM7XG4gICAgc3VwZXIudXBkYXRlU3RhdGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3MsIGNvbnRleHR9KTtcblxuICAgIGNvbnN0IG1vZHVsZXMgPSBwcm9wcyAmJiBwcm9wcy5tb2R1bGVzO1xuICAgIGNvbnN0IG9sZE1vZHVsZXMgPSBvbGRQcm9wcyAmJiBvbGRQcm9wcy5tb2R1bGVzO1xuXG4gICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlcyBjaGFuZ2VkLCBuZWVkIHRvIHJlY29tcGlsZSB0aGUgc2hhZGVyc1xuICAgIGlmIChcbiAgICAgIHByb3BzLm1lc2ggIT09IG9sZFByb3BzLm1lc2ggfHxcbiAgICAgIGNoYW5nZUZsYWdzLmV4dGVuc2lvbnNDaGFuZ2VkIHx8XG4gICAgICAhbW9kdWxlc0VxdWFsKG1vZHVsZXMsIG9sZE1vZHVsZXMpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5tb2RlbCkge1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVsLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLm1lc2gpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbCA9IHRoaXMuZ2V0TW9kZWwocHJvcHMubWVzaCBhcyBNZXNoKTtcblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gKHByb3BzLm1lc2ggYXMgYW55KS5hdHRyaWJ1dGVzIHx8IHByb3BzLm1lc2g7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc05vcm1hbHM6IEJvb2xlYW4oYXR0cmlidXRlcy5OT1JNQUwgfHwgYXR0cmlidXRlcy5ub3JtYWxzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5pbnZhbGlkYXRlQWxsKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICYmIHByb3BzLmltYWdlcykge1xuICAgICAgdGhpcy51cGRhdGVJbWFnZXMoe3Byb3BzLCBvbGRQcm9wc30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLm1vZGVsKSB7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsLnNldERyYXdNb2RlKHRoaXMucHJvcHMud2lyZWZyYW1lID8gR0wuTElORV9TVFJJUCA6IEdMLlRSSUFOR0xFUyk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSW1hZ2VzKHtcbiAgICBwcm9wcyxcbiAgICBvbGRQcm9wc1xuICB9OiB7XG4gICAgcHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgICBvbGRQcm9wczogUmFzdGVyTGF5ZXJBZGRlZFByb3BzO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3Qge2ltYWdlc30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG5cbiAgICBjb25zdCBuZXdJbWFnZXMgPSBsb2FkSW1hZ2VzKHtcbiAgICAgIGdsLFxuICAgICAgaW1hZ2VzLFxuICAgICAgaW1hZ2VzRGF0YTogcHJvcHMuaW1hZ2VzLFxuICAgICAgb2xkSW1hZ2VzRGF0YTogb2xkUHJvcHMuaW1hZ2VzXG4gICAgfSk7XG5cbiAgICBpZiAobmV3SW1hZ2VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IG5ld0ltYWdlc30pO1xuICAgIH1cbiAgfVxuXG4gIGRyYXcoe3VuaWZvcm1zfTogVW5pZm9ybXNPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qge21vZGVsLCBpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7bW9kdWxlUHJvcHN9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFJlbmRlciB0aGUgaW1hZ2VcbiAgICBpZiAoXG4gICAgICAhbW9kZWwgfHxcbiAgICAgICFpbWFnZXMgfHxcbiAgICAgIE9iamVjdC5rZXlzKGltYWdlcykubGVuZ3RoID09PSAwIHx8XG4gICAgICAhT2JqZWN0LnZhbHVlcyhpbWFnZXMpLmV2ZXJ5KGl0ZW0gPT4gaXRlbSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7dmlld3BvcnR9ID0gdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IHtzaXplU2NhbGUsIGNvb3JkaW5hdGVTeXN0ZW0sIF9pbnN0YW5jZWR9ID0gdGhpcy5wcm9wcztcblxuICAgIG1vZGVsXG4gICAgICAuc2V0VW5pZm9ybXMoXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHVuaWZvcm1zLCB7XG4gICAgICAgICAgc2l6ZVNjYWxlLFxuICAgICAgICAgIGNvbXBvc2VNb2RlbE1hdHJpeDogIV9pbnN0YW5jZWQgfHwgc2hvdWxkQ29tcG9zZU1vZGVsTWF0cml4KHZpZXdwb3J0LCBjb29yZGluYXRlU3lzdGVtKSxcbiAgICAgICAgICBmbGF0U2hhZGluZzogIXRoaXMuc3RhdGUuaGFzTm9ybWFsc1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnVwZGF0ZU1vZHVsZVNldHRpbmdzKHtcbiAgICAgICAgLi4ubW9kdWxlUHJvcHMsXG4gICAgICAgIC4uLmltYWdlc1xuICAgICAgfSlcbiAgICAgIC5kcmF3KCk7XG4gIH1cblxuICBmaW5hbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmZpbmFsaXplU3RhdGUodGhpcy5jb250ZXh0KTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmltYWdlcykge1xuICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuaW1hZ2VzKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZSkpIHtcbiAgICAgICAgICBpbWFnZS5tYXAoeCA9PiB4ICYmIHguZGVsZXRlKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UuZGVsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwobWVzaDogTWVzaCk6IE1vZGVsIHtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTW9kZWwoXG4gICAgICBnbCxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0U2hhZGVycygpLCB7XG4gICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICBnZW9tZXRyeTogZ2V0R2VvbWV0cnkobWVzaCksXG4gICAgICAgIGlzSW5zdGFuY2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cbn1cblxuUmFzdGVyTWVzaExheWVyLmxheWVyTmFtZSA9ICdSYXN0ZXJNZXNoTGF5ZXInO1xuUmFzdGVyTWVzaExheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBR0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8scUJBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFRLHNCQUFBLEdBQUFMLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBUyxzQkFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsc0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFXLE9BQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLEtBQUEsR0FBQVosT0FBQTtBQUFxQyxTQUFBYSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFB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
|
@@ -0,0 +1,17 @@
|
|
1
|
+
/// <reference types="luma.gl__webgl" />
|
2
|
+
import type { Texture2DProps, Texture2D } from '@luma.gl/webgl';
|
3
|
+
import type { ShaderModule } from './webgl';
|
4
|
+
/** Allowed input for images prop
|
5
|
+
* Texture2D is already on the GPU, while Texture2DProps can be data on the CPU that is not yet copied to the GPU.
|
6
|
+
*/
|
7
|
+
export declare type ImageInput = Record<string, Texture2DProps | Texture2D | (Texture2DProps | Texture2D)[]>;
|
8
|
+
/** Internal storage of images
|
9
|
+
* The Texture2D object references data on the GPU
|
10
|
+
*/
|
11
|
+
export declare type ImageState = Record<string, Texture2D | Texture2D[]>;
|
12
|
+
/** Properties added by RasterLayer. */
|
13
|
+
export declare type RasterLayerAddedProps = {
|
14
|
+
modules: ShaderModule[];
|
15
|
+
images: ImageInput;
|
16
|
+
moduleProps: Record<string, number>;
|
17
|
+
};
|
@@ -0,0 +1,6 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7VGV4dHVyZTJEUHJvcHMsIFRleHR1cmUyRH0gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wnO1xuXG5pbXBvcnQgdHlwZSB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3dlYmdsJztcblxuLyoqIEFsbG93ZWQgaW5wdXQgZm9yIGltYWdlcyBwcm9wXG4gKiBUZXh0dXJlMkQgaXMgYWxyZWFkeSBvbiB0aGUgR1BVLCB3aGlsZSBUZXh0dXJlMkRQcm9wcyBjYW4gYmUgZGF0YSBvbiB0aGUgQ1BVIHRoYXQgaXMgbm90IHlldCBjb3BpZWQgdG8gdGhlIEdQVS5cbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VJbnB1dCA9IFJlY29yZDxcbiAgc3RyaW5nLFxuICBUZXh0dXJlMkRQcm9wcyB8IFRleHR1cmUyRCB8IChUZXh0dXJlMkRQcm9wcyB8IFRleHR1cmUyRClbXVxuPjtcblxuLyoqIEludGVybmFsIHN0b3JhZ2Ugb2YgaW1hZ2VzXG4gKiBUaGUgVGV4dHVyZTJEIG9iamVjdCByZWZlcmVuY2VzIGRhdGEgb24gdGhlIEdQVVxuICovXG5leHBvcnQgdHlwZSBJbWFnZVN0YXRlID0gUmVjb3JkPHN0cmluZywgVGV4dHVyZTJEIHwgVGV4dHVyZTJEW10+O1xuXG4vKiogUHJvcGVydGllcyBhZGRlZCBieSBSYXN0ZXJMYXllci4gKi9cbmV4cG9ydCB0eXBlIFJhc3RlckxheWVyQWRkZWRQcm9wcyA9IHtcbiAgbW9kdWxlczogU2hhZGVyTW9kdWxlW107XG4gIGltYWdlczogSW1hZ2VJbnB1dDtcbiAgbW9kdWxlUHJvcHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { ShaderModule } from './webgl/types';
|
2
|
+
/**
|
3
|
+
* Test if two lists of modules are equal
|
4
|
+
*
|
5
|
+
* @param modules Modules list
|
6
|
+
* @param oldModules Modules list
|
7
|
+
*
|
8
|
+
* @return true if both lists are equal
|
9
|
+
*/
|
10
|
+
export declare function modulesEqual(modules: ShaderModule[], oldModules: ShaderModule[]): boolean;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.modulesEqual = modulesEqual;
|
7
|
+
// SPDX-License-Identifier: MIT
|
8
|
+
// Copyright contributors to the kepler.gl project
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Test if two lists of modules are equal
|
12
|
+
*
|
13
|
+
* @param modules Modules list
|
14
|
+
* @param oldModules Modules list
|
15
|
+
*
|
16
|
+
* @return true if both lists are equal
|
17
|
+
*/
|
18
|
+
function modulesEqual(modules, oldModules) {
|
19
|
+
if (modules.length !== oldModules.length) {
|
20
|
+
return false;
|
21
|
+
}
|
22
|
+
for (var i = 0; i < modules.length; i++) {
|
23
|
+
if (modules[i].name !== oldModules[i].name) {
|
24
|
+
return false;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
return true;
|
28
|
+
}
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGVzRXF1YWwiLCJtb2R1bGVzIiwib2xkTW9kdWxlcyIsImxlbmd0aCIsImkiLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci91dGlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3dlYmdsL3R5cGVzJztcblxuLyoqXG4gKiBUZXN0IGlmIHR3byBsaXN0cyBvZiBtb2R1bGVzIGFyZSBlcXVhbFxuICpcbiAqIEBwYXJhbSBtb2R1bGVzICAgICBNb2R1bGVzIGxpc3RcbiAqIEBwYXJhbSBvbGRNb2R1bGVzICBNb2R1bGVzIGxpc3RcbiAqXG4gKiBAcmV0dXJuIHRydWUgaWYgYm90aCBsaXN0cyBhcmUgZXF1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZXNFcXVhbChtb2R1bGVzOiBTaGFkZXJNb2R1bGVbXSwgb2xkTW9kdWxlczogU2hhZGVyTW9kdWxlW10pOiBib29sZWFuIHtcbiAgaWYgKG1vZHVsZXMubGVuZ3RoICE9PSBvbGRNb2R1bGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtb2R1bGVzW2ldLm5hbWUgIT09IG9sZE1vZHVsZXNbaV0ubmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQSxZQUFZQSxDQUFDQyxPQUF1QixFQUFFQyxVQUEwQixFQUFXO0VBQ3pGLElBQUlELE9BQU8sQ0FBQ0UsTUFBTSxLQUFLRCxVQUFVLENBQUNDLE1BQU0sRUFBRTtJQUN4QyxPQUFPLEtBQUs7RUFDZDtFQUVBLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSCxPQUFPLENBQUNFLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7SUFDdkMsSUFBSUgsT0FBTyxDQUFDRyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxLQUFLSCxVQUFVLENBQUNFLENBQUMsQ0FBQyxDQUFDQyxJQUFJLEVBQUU7TUFDMUMsT0FBTyxLQUFLO0lBQ2Q7RUFDRjtFQUVBLE9BQU8sSUFBSTtBQUNiIiwiaWdub3JlTGlzdCI6W119
|
@@ -0,0 +1,39 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.colormap = void 0;
|
7
|
+
// SPDX-License-Identifier: MIT
|
8
|
+
// Copyright contributors to the kepler.gl project
|
9
|
+
|
10
|
+
var fs = "uniform sampler2D uColormapTexture;\nuniform int uHasCategoricalColors;\nuniform int uCategoricalMinValue;\nuniform int uCategoricalMaxValue;\nuniform int uMaxPixelValue;\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 colormap(sampler2D cmap, vec4 image) {\n vec2 uv;\n if (uHasCategoricalColors == 1) {\n float step = float(uMaxPixelValue) / float(uCategoricalMaxValue - uCategoricalMinValue);\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 = texture2D(cmap, uv);\n if(color.a <= 0.0) discard;\n return color;\n}\n";
|
11
|
+
function getUniforms() {
|
12
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
13
|
+
var imageColormap = opts.imageColormap,
|
14
|
+
minCategoricalBandValue = opts.minCategoricalBandValue,
|
15
|
+
maxCategoricalBandValue = opts.maxCategoricalBandValue,
|
16
|
+
dataTypeMaxValue = opts.dataTypeMaxValue,
|
17
|
+
maxPixelValue = opts.maxPixelValue;
|
18
|
+
if (!imageColormap) {
|
19
|
+
return null;
|
20
|
+
}
|
21
|
+
var isSupportedDataType = Number.isFinite(dataTypeMaxValue);
|
22
|
+
var isCategorical = isSupportedDataType && Number.isFinite(maxPixelValue) && Number.isFinite(minCategoricalBandValue) && Number.isFinite(maxCategoricalBandValue);
|
23
|
+
return {
|
24
|
+
uColormapTexture: imageColormap,
|
25
|
+
uHasCategoricalColors: isCategorical ? 1 : 0,
|
26
|
+
uCategoricalMinValue: Number.isFinite(minCategoricalBandValue) ? minCategoricalBandValue : 0,
|
27
|
+
uCategoricalMaxValue: Number.isFinite(maxCategoricalBandValue) ? maxCategoricalBandValue : 0,
|
28
|
+
uMaxPixelValue: Number.isFinite(maxPixelValue) ? maxPixelValue : 0
|
29
|
+
};
|
30
|
+
}
|
31
|
+
var colormap = exports.colormap = {
|
32
|
+
name: 'colormap',
|
33
|
+
fs: fs,
|
34
|
+
getUniforms: getUniforms,
|
35
|
+
inject: {
|
36
|
+
'fs:DECKGL_MUTATE_COLOR': "\n image = colormap(uColormapTexture, image);\n "
|
37
|
+
}
|
38
|
+
};
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImltYWdlQ29sb3JtYXAiLCJtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSIsIm1heENhdGVnb3JpY2FsQmFuZFZhbHVlIiwiZGF0YVR5cGVNYXhWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJpc1N1cHBvcnRlZERhdGFUeXBlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc0NhdGVnb3JpY2FsIiwidUNvbG9ybWFwVGV4dHVyZSIsInVIYXNDYXRlZ29yaWNhbENvbG9ycyIsInVDYXRlZ29yaWNhbE1pblZhbHVlIiwidUNhdGVnb3JpY2FsTWF4VmFsdWUiLCJ1TWF4UGl4ZWxWYWx1ZSIsImNvbG9ybWFwIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2NvbG9ybWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7VGV4dHVyZTJEfSBmcm9tICdAbHVtYS5nbC93ZWJnbCc7XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBmcyA9IGBcXFxudW5pZm9ybSBzYW1wbGVyMkQgdUNvbG9ybWFwVGV4dHVyZTtcbnVuaWZvcm0gaW50IHVIYXNDYXRlZ29yaWNhbENvbG9ycztcbnVuaWZvcm0gaW50IHVDYXRlZ29yaWNhbE1pblZhbHVlO1xudW5pZm9ybSBpbnQgdUNhdGVnb3JpY2FsTWF4VmFsdWU7XG51bmlmb3JtIGludCB1TWF4UGl4ZWxWYWx1ZTtcblxuLy8gQXBwbHkgY29sb3JtYXAgdGV4dHVyZSBnaXZlbiB2YWx1ZVxuLy8gU2luY2UgdGhlIHRleHR1cmUgb25seSB2YXJpZXMgaW4gdGhlIHggZGlyZWN0aW9uLCBzZXR0aW5nIHYgdG8gMC41IGFzIGFcbi8vIGNvbnN0YW50IGlzIGZpbmVcbi8vIEFzc3VtZXMgdGhlIGlucHV0IHJhbmdlIG9mIHZhbHVlIGlzIC0xIHRvIDFcbnZlYzQgY29sb3JtYXAoc2FtcGxlcjJEIGNtYXAsIHZlYzQgaW1hZ2UpIHtcbiAgdmVjMiB1djtcbiAgaWYgKHVIYXNDYXRlZ29yaWNhbENvbG9ycyA9PSAxKSB7XG4gICAgZmxvYXQgc3RlcCA9IGZsb2F0KHVNYXhQaXhlbFZhbHVlKSAvIGZsb2F0KHVDYXRlZ29yaWNhbE1heFZhbHVlIC0gdUNhdGVnb3JpY2FsTWluVmFsdWUpO1xuICAgIHV2ID0gdmVjMihpbWFnZS5yICogc3RlcCwgMC41KTtcbiAgfSBlbHNlIHtcbiAgICB1diA9IHZlYzIoMC41ICogaW1hZ2UuciArIDAuNSwgMC41KTtcbiAgfVxuICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKGNtYXAsIHV2KTtcbiAgaWYoY29sb3IuYSA8PSAwLjApIGRpc2NhcmQ7XG4gIHJldHVybiBjb2xvcjtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7XG4gICAgaW1hZ2VDb2xvcm1hcD86IFRleHR1cmUyRDtcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBkYXRhVHlwZU1heFZhbHVlPzogbnVtYmVyO1xuICAgIG1heFBpeGVsVmFsdWU/OiBudW1iZXI7XG4gIH0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7XG4gICAgaW1hZ2VDb2xvcm1hcCxcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBkYXRhVHlwZU1heFZhbHVlLFxuICAgIG1heFBpeGVsVmFsdWVcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFpbWFnZUNvbG9ybWFwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpc1N1cHBvcnRlZERhdGFUeXBlID0gTnVtYmVyLmlzRmluaXRlKGRhdGFUeXBlTWF4VmFsdWUpO1xuICBjb25zdCBpc0NhdGVnb3JpY2FsID1cbiAgICBpc1N1cHBvcnRlZERhdGFUeXBlICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlKSAmJlxuICAgIE51bWJlci5pc0Zpbml0ZShtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSk7XG4gIHJldHVybiB7XG4gICAgdUNvbG9ybWFwVGV4dHVyZTogaW1hZ2VDb2xvcm1hcCxcbiAgICB1SGFzQ2F0ZWdvcmljYWxDb2xvcnM6IGlzQ2F0ZWdvcmljYWwgPyAxIDogMCxcbiAgICB1Q2F0ZWdvcmljYWxNaW5WYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlKSA/IG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlIDogMCxcbiAgICB1Q2F0ZWdvcmljYWxNYXhWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heENhdGVnb3JpY2FsQmFuZFZhbHVlKSA/IG1heENhdGVnb3JpY2FsQmFuZFZhbHVlIDogMCxcbiAgICB1TWF4UGl4ZWxWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpID8gbWF4UGl4ZWxWYWx1ZSA6IDBcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9ybWFwOiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdjb2xvcm1hcCcsXG4gIGZzLFxuICBnZXRVbmlmb3JtcyxcbiAgaW5qZWN0OiB7XG4gICAgJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1InOiBgXG4gICAgaW1hZ2UgPSBjb2xvcm1hcCh1Q29sb3JtYXBUZXh0dXJlLCBpbWFnZSk7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQU1BLElBQU1BLEVBQUUsK3RCQXVCUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFRQztFQUFBLElBUG5CQyxJQU1DLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVOLElBQ0VHLGFBQWEsR0FLWEosSUFBSSxDQUxOSSxhQUFhO0lBQ2JDLHVCQUF1QixHQUlyQkwsSUFBSSxDQUpOSyx1QkFBdUI7SUFDdkJDLHVCQUF1QixHQUdyQk4sSUFBSSxDQUhOTSx1QkFBdUI7SUFDdkJDLGdCQUFnQixHQUVkUCxJQUFJLENBRk5PLGdCQUFnQjtJQUNoQkMsYUFBYSxHQUNYUixJQUFJLENBRE5RLGFBQWE7RUFHZixJQUFJLENBQUNKLGFBQWEsRUFBRTtJQUNsQixPQUFPLElBQUk7RUFDYjtFQUVBLElBQU1LLG1CQUFtQixHQUFHQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0osZ0JBQWdCLENBQUM7RUFDN0QsSUFBTUssYUFBYSxHQUNqQkgsbUJBQW1CLElBQ25CQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLElBQzlCRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sdUJBQXVCLENBQUMsSUFDeENLLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTCx1QkFBdUIsQ0FBQztFQUMxQyxPQUFPO0lBQ0xPLGdCQUFnQixFQUFFVCxhQUFhO0lBQy9CVSxxQkFBcUIsRUFBRUYsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzVDRyxvQkFBb0IsRUFBRUwsTUFBTSxDQUFDQyxRQUFRLENBQUNOLHVCQUF1QixDQUFDLEdBQUdBLHVCQUF1QixHQUFHLENBQUM7SUFDNUZXLG9CQUFvQixFQUFFTixNQUFNLENBQUNDLFFBQVEsQ0FBQ0wsdUJBQXVCLENBQUMsR0FBR0EsdUJBQXVCLEdBQUcsQ0FBQztJQUM1RlcsY0FBYyxFQUFFUCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLEdBQUdBLGFBQWEsR0FBRztFQUNuRSxDQUFDO0FBQ0g7QUFFTyxJQUFNVSxRQUFzQixHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBRztFQUNwQ0UsSUFBSSxFQUFFLFVBQVU7RUFDaEJ0QixFQUFFLEVBQUZBLEVBQUU7RUFDRkMsV0FBVyxFQUFYQSxXQUFXO0VBQ1hzQixNQUFNLEVBQUU7SUFDTix3QkFBd0I7RUFHMUI7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
@@ -0,0 +1,48 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.filter = void 0;
|
7
|
+
// SPDX-License-Identifier: MIT
|
8
|
+
// Copyright contributors to the kepler.gl project
|
9
|
+
|
10
|
+
var fs = "uniform float filterMin1;\nuniform float filterMax1;\nuniform float filterMin2;\nuniform float filterMax2;\nuniform float filterMin3;\nuniform float filterMax3;\nuniform float filterMin4;\nuniform float filterMax4;\n";
|
11
|
+
|
12
|
+
// You can't pass JS' -Infinity or Infinity to a shader as a uniform
|
13
|
+
var inf = Math.pow(2, 62);
|
14
|
+
|
15
|
+
// eslint-disable-next-line complexity
|
16
|
+
function getUniforms() {
|
17
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
18
|
+
var filterMin1 = opts.filterMin1,
|
19
|
+
filterMin2 = opts.filterMin2,
|
20
|
+
filterMin3 = opts.filterMin3,
|
21
|
+
filterMin4 = opts.filterMin4,
|
22
|
+
filterMax1 = opts.filterMax1,
|
23
|
+
filterMax2 = opts.filterMax2,
|
24
|
+
filterMax3 = opts.filterMax3,
|
25
|
+
filterMax4 = opts.filterMax4;
|
26
|
+
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)) {
|
27
|
+
return {
|
28
|
+
filterMin1: Number.isFinite(filterMin1) ? filterMin1 : -inf,
|
29
|
+
filterMin2: Number.isFinite(filterMin2) ? filterMin2 : -inf,
|
30
|
+
filterMin3: Number.isFinite(filterMin3) ? filterMin3 : -inf,
|
31
|
+
filterMin4: Number.isFinite(filterMin4) ? filterMin4 : -inf,
|
32
|
+
filterMax1: Number.isFinite(filterMax1) ? filterMax1 : inf,
|
33
|
+
filterMax2: Number.isFinite(filterMax2) ? filterMax2 : inf,
|
34
|
+
filterMax3: Number.isFinite(filterMax3) ? filterMax3 : inf,
|
35
|
+
filterMax4: Number.isFinite(filterMax4) ? filterMax4 : inf
|
36
|
+
};
|
37
|
+
}
|
38
|
+
return null;
|
39
|
+
}
|
40
|
+
var filter = exports.filter = {
|
41
|
+
name: 'filter',
|
42
|
+
fs: fs,
|
43
|
+
getUniforms: getUniforms,
|
44
|
+
inject: {
|
45
|
+
'fs:DECKGL_MUTATE_COLOR': "\n if (image.r < filterMin1) discard;\n if (image.g < filterMin2) discard;\n if (image.b < filterMin3) discard;\n if (image.a < filterMin4) discard;\n if (image.r > filterMax1) discard;\n if (image.g > filterMax2) discard;\n if (image.b > filterMax3) discard;\n if (image.a > filterMax4) discard;\n "
|
46
|
+
}
|
47
|
+
};
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImluZiIsIk1hdGgiLCJwb3ciLCJnZXRVbmlmb3JtcyIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXJNaW4xIiwiZmlsdGVyTWluMiIsImZpbHRlck1pbjMiLCJmaWx0ZXJNaW40IiwiZmlsdGVyTWF4MSIsImZpbHRlck1heDIiLCJmaWx0ZXJNYXgzIiwiZmlsdGVyTWF4NCIsIk51bWJlciIsImlzRmluaXRlIiwiZmlsdGVyIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2ZpbHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0dldFVuaWZvcm1zT3V0cHV0LCBTaGFkZXJNb2R1bGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgZnMgPSBgXFxcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMTtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MTtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMjtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MjtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMztcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MztcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluNDtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4NDtcbmA7XG5cbi8vIFlvdSBjYW4ndCBwYXNzIEpTJyAtSW5maW5pdHkgb3IgSW5maW5pdHkgdG8gYSBzaGFkZXIgYXMgYSB1bmlmb3JtXG5jb25zdCBpbmYgPSBNYXRoLnBvdygyLCA2Mik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBnZXRVbmlmb3JtcyhcbiAgb3B0czoge1xuICAgIGZpbHRlck1pbjE/OiBudW1iZXI7XG4gICAgZmlsdGVyTWluMj86IG51bWJlcjtcbiAgICBmaWx0ZXJNaW4zPzogbnVtYmVyO1xuICAgIGZpbHRlck1pbjQ/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4MT86IG51bWJlcjtcbiAgICBmaWx0ZXJNYXgyPzogbnVtYmVyO1xuICAgIGZpbHRlck1heDM/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4ND86IG51bWJlcjtcbiAgfSA9IHt9XG4pOiBHZXRVbmlmb3Jtc091dHB1dCB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXJNaW4xLFxuICAgIGZpbHRlck1pbjIsXG4gICAgZmlsdGVyTWluMyxcbiAgICBmaWx0ZXJNaW40LFxuICAgIGZpbHRlck1heDEsXG4gICAgZmlsdGVyTWF4MixcbiAgICBmaWx0ZXJNYXgzLFxuICAgIGZpbHRlck1heDRcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4xKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4yKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4zKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW40KSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgxKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgyKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgzKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXg0KVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyTWluMTogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjEpID8gZmlsdGVyTWluMSA6IC1pbmYsXG4gICAgICBmaWx0ZXJNaW4yOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMikgPyBmaWx0ZXJNaW4yIDogLWluZixcbiAgICAgIGZpbHRlck1pbjM6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4zKSA/IGZpbHRlck1pbjMgOiAtaW5mLFxuICAgICAgZmlsdGVyTWluNDogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjQpID8gZmlsdGVyTWluNCA6IC1pbmYsXG4gICAgICBmaWx0ZXJNYXgxOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MSkgPyBmaWx0ZXJNYXgxIDogaW5mLFxuICAgICAgZmlsdGVyTWF4MjogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDIpID8gZmlsdGVyTWF4MiA6IGluZixcbiAgICAgIGZpbHRlck1heDM6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgzKSA/IGZpbHRlck1heDMgOiBpbmYsXG4gICAgICBmaWx0ZXJNYXg0OiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4NCkgPyBmaWx0ZXJNYXg0IDogaW5mXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyOiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdmaWx0ZXInLFxuICBmcyxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGlmIChpbWFnZS5yIDwgZmlsdGVyTWluMSkgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuZyA8IGZpbHRlck1pbjIpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmIgPCBmaWx0ZXJNaW4zKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5hIDwgZmlsdGVyTWluNCkgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuciA+IGZpbHRlck1heDEpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmcgPiBmaWx0ZXJNYXgyKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5iID4gZmlsdGVyTWF4MykgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuYSA+IGZpbHRlck1heDQpIGRpc2NhcmQ7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUlBLElBQU1BLEVB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
|
@@ -0,0 +1,62 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.gammaContrast = void 0;
|
7
|
+
// SPDX-License-Identifier: MIT
|
8
|
+
// Copyright contributors to the kepler.gl project
|
9
|
+
|
10
|
+
// Gamma correction is a nonlinear operation that
|
11
|
+
// adjusts the image's channel values pixel-by-pixel according
|
12
|
+
// to a power-law:
|
13
|
+
//
|
14
|
+
// .. math:: pixel_{out} = pixel_{in} ^ {gamma}
|
15
|
+
//
|
16
|
+
// Setting gamma (:math:gamma) to be less than 1.0 darkens the image and
|
17
|
+
// setting gamma to be greater than 1.0 lightens it.
|
18
|
+
|
19
|
+
// Parameters
|
20
|
+
// ----------
|
21
|
+
// gamma (:math:gamma): float
|
22
|
+
// Reasonable values range from 0.8 to 2.4.
|
23
|
+
|
24
|
+
// NOTE: Input array must have float values between 0 and 1!
|
25
|
+
// NOTE: gamma must be >= 0
|
26
|
+
var fs = "#define epsilon 0.00000001\n\nuniform float gamma1;\nuniform float gamma2;\nuniform float gamma3;\nuniform float gamma4;\n\nfloat gammaContrast(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 gammaContrast(vec4 arr, float g1, float g2, float g3, float g4) {\n arr.r = gammaContrast(arr.r, g1);\n arr.g = gammaContrast(arr.g, g2);\n arr.b = gammaContrast(arr.b, g3);\n arr.a = gammaContrast(arr.a, g4);\n\n return arr;\n}\n";
|
27
|
+
function getUniforms() {
|
28
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
29
|
+
var gammaContrastValue = opts.gammaContrastValue,
|
30
|
+
gammaContrastValue1 = opts.gammaContrastValue1,
|
31
|
+
gammaContrastValue2 = opts.gammaContrastValue2,
|
32
|
+
gammaContrastValue3 = opts.gammaContrastValue3,
|
33
|
+
gammaContrastValue4 = opts.gammaContrastValue4;
|
34
|
+
|
35
|
+
// Gamma must be > 0, so not using Number.isFinite is fine
|
36
|
+
|
37
|
+
if (gammaContrastValue) {
|
38
|
+
return {
|
39
|
+
gamma1: gammaContrastValue,
|
40
|
+
gamma2: gammaContrastValue,
|
41
|
+
gamma3: gammaContrastValue,
|
42
|
+
gamma4: gammaContrastValue
|
43
|
+
};
|
44
|
+
} else if (gammaContrastValue1 || gammaContrastValue2 || gammaContrastValue3 || gammaContrastValue4) {
|
45
|
+
return {
|
46
|
+
gamma1: gammaContrastValue1 || 1,
|
47
|
+
gamma2: gammaContrastValue2 || 1,
|
48
|
+
gamma3: gammaContrastValue3 || 1,
|
49
|
+
gamma4: gammaContrastValue4 || 1
|
50
|
+
};
|
51
|
+
}
|
52
|
+
return null;
|
53
|
+
}
|
54
|
+
var gammaContrast = exports.gammaContrast = {
|
55
|
+
name: 'gamma_contrast',
|
56
|
+
fs: fs,
|
57
|
+
getUniforms: getUniforms,
|
58
|
+
inject: {
|
59
|
+
'fs:DECKGL_MUTATE_COLOR': "\n image = gammaContrast(image, gamma1, gamma2, gamma3, gamma4);\n "
|
60
|
+
}
|
61
|
+
};
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdhbW1hQ29udHJhc3RWYWx1ZSIsImdhbW1hQ29udHJhc3RWYWx1ZTEiLCJnYW1tYUNvbnRyYXN0VmFsdWUyIiwiZ2FtbWFDb250cmFzdFZhbHVlMyIsImdhbW1hQ29udHJhc3RWYWx1ZTQiLCJnYW1tYTEiLCJnYW1tYTIiLCJnYW1tYTMiLCJnYW1tYTQiLCJnYW1tYUNvbnRyYXN0IiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2dhbW1hLWNvbnRyYXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyBHYW1tYSBjb3JyZWN0aW9uIGlzIGEgbm9ubGluZWFyIG9wZXJhdGlvbiB0aGF0XG4vLyBhZGp1c3RzIHRoZSBpbWFnZSdzIGNoYW5uZWwgdmFsdWVzIHBpeGVsLWJ5LXBpeGVsIGFjY29yZGluZ1xuLy8gdG8gYSBwb3dlci1sYXc6XG4vL1xuLy8gLi4gbWF0aDo6IHBpeGVsX3tvdXR9ID0gcGl4ZWxfe2lufSBeIHtnYW1tYX1cbi8vXG4vLyBTZXR0aW5nIGdhbW1hICg6bWF0aDpnYW1tYSkgdG8gYmUgbGVzcyB0aGFuIDEuMCBkYXJrZW5zIHRoZSBpbWFnZSBhbmRcbi8vIHNldHRpbmcgZ2FtbWEgdG8gYmUgZ3JlYXRlciB0aGFuIDEuMCBsaWdodGVucyBpdC5cblxuLy8gUGFyYW1ldGVyc1xuLy8gLS0tLS0tLS0tLVxuLy8gZ2FtbWEgKDptYXRoOmdhbW1hKTogZmxvYXRcbi8vICAgICBSZWFzb25hYmxlIHZhbHVlcyByYW5nZSBmcm9tIDAuOCB0byAyLjQuXG5cbi8vIE5PVEU6IElucHV0IGFycmF5IG11c3QgaGF2ZSBmbG9hdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxIVxuLy8gTk9URTogZ2FtbWEgbXVzdCBiZSA+PSAwXG5jb25zdCBmcyA9IGBcXFxuI2RlZmluZSBlcHNpbG9uIDAuMDAwMDAwMDFcblxudW5pZm9ybSBmbG9hdCBnYW1tYTE7XG51bmlmb3JtIGZsb2F0IGdhbW1hMjtcbnVuaWZvcm0gZmxvYXQgZ2FtbWEzO1xudW5pZm9ybSBmbG9hdCBnYW1tYTQ7XG5cbmZsb2F0IGdhbW1hQ29udHJhc3QoZmxvYXQgYXJyLCBmbG9hdCBnKSB7XG4gIC8vIEdhbW1hIG11c3QgYmUgPiAwXG4gIGcgPSBjbGFtcChnLCBlcHNpbG9uLCBnKTtcblxuICByZXR1cm4gcG93KGFyciwgMS4wIC8gZyk7XG59XG5cbnZlYzQgZ2FtbWFDb250cmFzdCh2ZWM0IGFyciwgZmxvYXQgZzEsIGZsb2F0IGcyLCBmbG9hdCBnMywgZmxvYXQgZzQpIHtcbiAgYXJyLnIgPSBnYW1tYUNvbnRyYXN0KGFyci5yLCBnMSk7XG4gIGFyci5nID0gZ2FtbWFDb250cmFzdChhcnIuZywgZzIpO1xuICBhcnIuYiA9IGdhbW1hQ29udHJhc3QoYXJyLmIsIGczKTtcbiAgYXJyLmEgPSBnYW1tYUNvbnRyYXN0KGFyci5hLCBnNCk7XG5cbiAgcmV0dXJuIGFycjtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlPzogbnVtYmVyO1xuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTE/OiBudW1iZXI7XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMj86IG51bWJlcjtcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUzPzogbnVtYmVyO1xuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTQ/OiBudW1iZXI7XG4gIH0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlLFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTEsXG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMixcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUzLFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTRcbiAgfSA9IG9wdHM7XG5cbiAgLy8gR2FtbWEgbXVzdCBiZSA+IDAsIHNvIG5vdCB1c2luZyBOdW1iZXIuaXNGaW5pdGUgaXMgZmluZVxuXG4gIGlmIChnYW1tYUNvbnRyYXN0VmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2FtbWExOiBnYW1tYUNvbnRyYXN0VmFsdWUsXG4gICAgICBnYW1tYTI6IGdhbW1hQ29udHJhc3RWYWx1ZSxcbiAgICAgIGdhbW1hMzogZ2FtbWFDb250cmFzdFZhbHVlLFxuICAgICAgZ2FtbWE0OiBnYW1tYUNvbnRyYXN0VmFsdWVcbiAgICB9O1xuICB9IGVsc2UgaWYgKFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTEgfHxcbiAgICBnYW1tYUNvbnRyYXN0VmFsdWUyIHx8XG4gICAgZ2FtbWFDb250cmFzdFZhbHVlMyB8fFxuICAgIGdhbW1hQ29udHJhc3RWYWx1ZTRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdhbW1hMTogZ2FtbWFDb250cmFzdFZhbHVlMSB8fCAxLFxuICAgICAgZ2FtbWEyOiBnYW1tYUNvbnRyYXN0VmFsdWUyIHx8IDEsXG4gICAgICBnYW1tYTM6IGdhbW1hQ29udHJhc3RWYWx1ZTMgfHwgMSxcbiAgICAgIGdhbW1hNDogZ2FtbWFDb250cmFzdFZhbHVlNCB8fCAxXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgZ2FtbWFDb250cmFzdDogU2hhZGVyTW9kdWxlID0ge1xuICBuYW1lOiAnZ2FtbWFfY29udHJhc3QnLFxuICBmcyxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGltYWdlID0gZ2FtbWFDb250cmFzdChpbWFnZSwgZ2FtbWExLCBnYW1tYTIsIGdhbW1hMywgZ2FtbWE0KTtcbiAgICBgXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBTUEsRUFBRSxxZkF1QlA7QUFFRCxTQUFTQyxXQUFXQSxDQUFBLEVBUUM7RUFBQSxJQVBuQkMsSUFNQyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFTixJQUNFRyxrQkFBa0IsR0FLaEJKLElBQUksQ0FMTkksa0JBQWtCO0lBQ2xCQyxtQkFBbUIsR0FJakJMLElBQUksQ0FKTkssbUJBQW1CO0lBQ25CQyxtQkFBbUIsR0FHakJOLElBQUksQ0FITk0sbUJBQW1CO0lBQ25CQyxtQkFBbUIsR0FFakJQLElBQUksQ0FGTk8sbUJBQW1CO0lBQ25CQyxtQkFBbUIsR0FDakJSLElBQUksQ0FETlEsbUJBQW1COztFQUdyQjs7RUFFQSxJQUFJSixrQkFBa0IsRUFBRTtJQUN0QixPQUFPO01BQ0xLLE1BQU0sRUFBRUwsa0JBQWtCO01BQzFCTSxNQUFNLEVBQUVOLGtCQUFrQjtNQUMxQk8sTUFBTSxFQUFFUCxrQkFBa0I7TUFDMUJRLE1BQU0sRUFBRVI7SUFDVixDQUFDO0VBQ0gsQ0FBQyxNQUFNLElBQ0xDLG1CQUFtQixJQUNuQkMsbUJBQW1CLElBQ25CQyxtQkFBbUIsSUFDbkJDLG1CQUFtQixFQUNuQjtJQUNBLE9BQU87TUFDTEMsTUFBTSxFQUFFSixtQkFBbUIsSUFBSSxDQUFDO01BQ2hDSyxNQUFNLEVBQUVKLG1CQUFtQixJQUFJLENBQUM7TUFDaENLLE1BQU0sRUFBRUosbUJBQW1CLElBQUksQ0FBQztNQUNoQ0ssTUFBTSxFQUFFSixtQkFBbUIsSUFBSTtJQUNqQyxDQUFDO0VBQ0g7RUFFQSxPQUFPLElBQUk7QUFDYjtBQUVPLElBQU1LLGFBQTJCLEdBQUFDLE9BQUEsQ0FBQUQsYUFBQSxHQUFHO0VBQ3pDRSxJQUFJLEVBQUUsZ0JBQWdCO0VBQ3RCakIsRUFBRSxFQUFGQSxFQUFFO0VBQ0ZDLFdBQVcsRUFBWEEsV0FBVztFQUNYaUIsTUFBTSxFQUFFO0lBQ04sd0JBQXdCO0VBRzFCO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.linearRescale = void 0;
|
7
|
+
// SPDX-License-Identifier: MIT
|
8
|
+
// Copyright contributors to the kepler.gl project
|
9
|
+
|
10
|
+
var fs = "uniform float linearRescaleScaler;\nuniform float linearRescaleOffset;\n\n// Perform a linear rescaling of image\nvec4 linear_rescale(vec4 arr, float scaler, float offset) {\n return arr * scaler + offset;\n}\n";
|
11
|
+
function getUniforms() {
|
12
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
13
|
+
var linearRescaleScaler = opts.linearRescaleScaler,
|
14
|
+
linearRescaleOffset = opts.linearRescaleOffset;
|
15
|
+
if (!Number.isFinite(linearRescaleScaler) && !Number.isFinite(linearRescaleOffset)) {
|
16
|
+
return null;
|
17
|
+
}
|
18
|
+
return {
|
19
|
+
linearRescaleScaler: Number.isFinite(linearRescaleScaler) ? linearRescaleScaler : 1,
|
20
|
+
linearRescaleOffset: Number.isFinite(linearRescaleOffset) ? linearRescaleOffset : 0
|
21
|
+
};
|
22
|
+
}
|
23
|
+
var linearRescale = exports.linearRescale = {
|
24
|
+
name: 'linear_rescale',
|
25
|
+
fs: fs,
|
26
|
+
getUniforms: getUniforms,
|
27
|
+
inject: {
|
28
|
+
'fs:DECKGL_MUTATE_COLOR': "\n image = linear_rescale(image, linearRescaleScaler, linearRescaleOffset);\n "
|
29
|
+
}
|
30
|
+
};
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImxpbmVhclJlc2NhbGVTY2FsZXIiLCJsaW5lYXJSZXNjYWxlT2Zmc2V0IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJsaW5lYXJSZXNjYWxlIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2xpbmVhci1yZXNjYWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBmcyA9IGBcXFxudW5pZm9ybSBmbG9hdCBsaW5lYXJSZXNjYWxlU2NhbGVyO1xudW5pZm9ybSBmbG9hdCBsaW5lYXJSZXNjYWxlT2Zmc2V0O1xuXG4vLyBQZXJmb3JtIGEgbGluZWFyIHJlc2NhbGluZyBvZiBpbWFnZVxudmVjNCBsaW5lYXJfcmVzY2FsZSh2ZWM0IGFyciwgZmxvYXQgc2NhbGVyLCBmbG9hdCBvZmZzZXQpIHtcbiAgcmV0dXJuIGFyciAqIHNjYWxlciArIG9mZnNldDtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7bGluZWFyUmVzY2FsZVNjYWxlcj86IG51bWJlcjsgbGluZWFyUmVzY2FsZU9mZnNldD86IG51bWJlcn0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7bGluZWFyUmVzY2FsZVNjYWxlciwgbGluZWFyUmVzY2FsZU9mZnNldH0gPSBvcHRzO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGxpbmVhclJlc2NhbGVTY2FsZXIpICYmICFOdW1iZXIuaXNGaW5pdGUobGluZWFyUmVzY2FsZU9mZnNldCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGluZWFyUmVzY2FsZVNjYWxlcjogTnVtYmVyLmlzRmluaXRlKGxpbmVhclJlc2NhbGVTY2FsZXIpID8gbGluZWFyUmVzY2FsZVNjYWxlciA6IDEsXG4gICAgbGluZWFyUmVzY2FsZU9mZnNldDogTnVtYmVyLmlzRmluaXRlKGxpbmVhclJlc2NhbGVPZmZzZXQpID8gbGluZWFyUmVzY2FsZU9mZnNldCA6IDBcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGxpbmVhclJlc2NhbGU6IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ2xpbmVhcl9yZXNjYWxlJyxcbiAgZnMsXG4gIGdldFVuaWZvcm1zLFxuICBpbmplY3Q6IHtcbiAgICAnZnM6REVDS0dMX01VVEFURV9DT0xPUic6IGBcbiAgICBpbWFnZSA9IGxpbmVhcl9yZXNjYWxlKGltYWdlLCBsaW5lYXJSZXNjYWxlU2NhbGVyLCBsaW5lYXJSZXNjYWxlT2Zmc2V0KTtcbiAgICBgXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBSUEsSUFBTUEsRUFBRSx3TkFRUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFFQztFQUFBLElBRG5CQyxJQUFrRSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFdkUsSUFBT0csbUJBQW1CLEdBQXlCSixJQUFJLENBQWhESSxtQkFBbUI7SUFBRUMsbUJBQW1CLEdBQUlMLElBQUksQ0FBM0JLLG1CQUFtQjtFQUUvQyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxtQkFBbUIsQ0FBQyxJQUFJLENBQUNFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixtQkFBbUIsQ0FBQyxFQUFFO0lBQ2xGLE9BQU8sSUFBSTtFQUNiO0VBRUEsT0FBTztJQUNMRCxtQkFBbUIsRUFBRUUsTUFBTSxDQUFDQyxRQUFRLENBQUNILG1CQUFtQixDQUFDLEdBQUdBLG1CQUFtQixHQUFHLENBQUM7SUFDbkZDLG1CQUFtQixFQUFFQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsbUJBQW1CLENBQUMsR0FBR0EsbUJBQW1CLEdBQUc7RUFDcEYsQ0FBQztBQUNIO0FBRU8sSUFBTUcsYUFBMkIsR0FBQUMsT0FBQSxDQUFBRCxhQUFBLEdBQUc7RUFDekNFLElBQUksRUFBRSxnQkFBZ0I7RUFDdEJaLEVBQUUsRUFBRkEsRUFBRTtFQUNGQyxXQUFXLEVBQVhBLFdBQVc7RUFDWFksTUFBTSxFQUFFO0lBQ04sd0JBQXdCO0VBRzFCO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|