@kepler.gl/deckgl-layers 3.3.0-alpha.4 → 3.3.0-alpha.6
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 +220 -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 +569 -0
- package/dist/cjs/globe/globe-stars-layer.js +69 -0
- package/dist/cjs/globe/globe-view.js +407 -0
- package/dist/{globe → cjs/globe}/index.js +1 -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/matrix.js +18 -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 +214 -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 +561 -0
- package/dist/esm/globe/globe-stars-layer.js +63 -0
- package/dist/esm/globe/globe-view.js +401 -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/matrix.js +12 -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 +13 -2
- package/dist/globe/globe-depth-disk-layer.d.ts +1 -0
- package/dist/globe/globe-layers.d.ts +8 -2
- package/dist/raster/images.d.ts +10 -1
- package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
- package/dist/wms/wms-layer.d.ts +8 -0
- package/package.json +18 -11
- 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 -184
- 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 -565
- package/dist/globe/globe-stars-layer.js +0 -69
- package/dist/globe/globe-view.js +0 -316
- 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 -259
- 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 -237
- 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 -271
- 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,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.shouldComposeModelMatrix = shouldComposeModelMatrix;
|
|
7
|
+
var _core = require("@deck.gl/core");
|
|
8
|
+
// SPDX-License-Identifier: MIT
|
|
9
|
+
// Copyright contributors to the kepler.gl project
|
|
10
|
+
|
|
11
|
+
// only apply composeModelMatrix when in cartesian or meter_offsets coordinate system
|
|
12
|
+
// with `composeModelMatrix` enabled, the rotation part of the layer's modelMatrix will be composed to instance's transformations
|
|
13
|
+
// since rotating latitude and longitude can not provide meaningful results, hence `composeModelMatrix` is disabled
|
|
14
|
+
// when in LNGLAT and LNGLAT_OFFSET coordinates.
|
|
15
|
+
function shouldComposeModelMatrix(viewport, coordinateSystem) {
|
|
16
|
+
return coordinateSystem === _core.COORDINATE_SYSTEM.CARTESIAN || coordinateSystem === _core.COORDINATE_SYSTEM.METER_OFFSETS || coordinateSystem === _core.COORDINATE_SYSTEM.DEFAULT && !viewport.isGeospatial;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJzaG91bGRDb21wb3NlTW9kZWxNYXRyaXgiLCJ2aWV3cG9ydCIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkNBUlRFU0lBTiIsIk1FVEVSX09GRlNFVFMiLCJERUZBVUxUIiwiaXNHZW9zcGF0aWFsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Jhc3Rlci9yYXN0ZXItbWVzaC1sYXllci9tYXRyaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTSwgVmlld3BvcnR9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xudHlwZSBDb29yZGluYXRlU3lzdGVtID0gbnVtYmVyIHwgc3RyaW5nO1xuXG4vLyBvbmx5IGFwcGx5IGNvbXBvc2VNb2RlbE1hdHJpeCB3aGVuIGluIGNhcnRlc2lhbiBvciBtZXRlcl9vZmZzZXRzIGNvb3JkaW5hdGUgc3lzdGVtXG4vLyB3aXRoIGBjb21wb3NlTW9kZWxNYXRyaXhgIGVuYWJsZWQsIHRoZSByb3RhdGlvbiBwYXJ0IG9mIHRoZSBsYXllcidzIG1vZGVsTWF0cml4IHdpbGwgYmUgY29tcG9zZWQgdG8gaW5zdGFuY2UncyB0cmFuc2Zvcm1hdGlvbnNcbi8vIHNpbmNlIHJvdGF0aW5nIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY2FuIG5vdCBwcm92aWRlIG1lYW5pbmdmdWwgcmVzdWx0cywgaGVuY2UgYGNvbXBvc2VNb2RlbE1hdHJpeGAgaXMgZGlzYWJsZWRcbi8vIHdoZW4gaW4gTE5HTEFUIGFuZCBMTkdMQVRfT0ZGU0VUIGNvb3JkaW5hdGVzLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZENvbXBvc2VNb2RlbE1hdHJpeChcbiAgdmlld3BvcnQ6IFZpZXdwb3J0LFxuICBjb29yZGluYXRlU3lzdGVtOiBDb29yZGluYXRlU3lzdGVtXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb29yZGluYXRlU3lzdGVtID09PSBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4gfHxcbiAgICBjb29yZGluYXRlU3lzdGVtID09PSBDT09SRElOQVRFX1NZU1RFTS5NRVRFUl9PRkZTRVRTIHx8XG4gICAgKGNvb3JkaW5hdGVTeXN0ZW0gPT09IENPT1JESU5BVEVfU1lTVEVNLkRFRkFVTFQgJiYgIXZpZXdwb3J0LmlzR2Vvc3BhdGlhbClcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBSEE7QUFDQTs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLHdCQUF3QkEsQ0FDdENDLFFBQWtCLEVBQ2xCQyxnQkFBa0MsRUFDekI7RUFDVCxPQUNFQSxnQkFBZ0IsS0FBS0MsdUJBQWlCLENBQUNDLFNBQVMsSUFDaERGLGdCQUFnQixLQUFLQyx1QkFBaUIsQ0FBQ0UsYUFBYSxJQUNuREgsZ0JBQWdCLEtBQUtDLHVCQUFpQixDQUFDRyxPQUFPLElBQUksQ0FBQ0wsUUFBUSxDQUFDTSxZQUFhO0FBRTlFIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildRasterMeshFragmentShader = buildRasterMeshFragmentShader;
|
|
7
|
+
exports.buildRasterMeshVertexShader = buildRasterMeshVertexShader;
|
|
8
|
+
exports.rasterMeshUniforms = void 0;
|
|
9
|
+
// SPDX-License-Identifier: MIT
|
|
10
|
+
// Copyright contributors to the kepler.gl project
|
|
11
|
+
|
|
12
|
+
var rasterMeshUniformBlock = "uniform rasterMeshUniforms {\n float meshOpacity;\n float meshFlatShading;\n} rasterMesh;\n";
|
|
13
|
+
var rasterMeshUniforms = exports.rasterMeshUniforms = {
|
|
14
|
+
name: 'rasterMesh',
|
|
15
|
+
vs: rasterMeshUniformBlock,
|
|
16
|
+
fs: rasterMeshUniformBlock,
|
|
17
|
+
uniformTypes: {
|
|
18
|
+
meshOpacity: 'f32',
|
|
19
|
+
meshFlatShading: 'f32'
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Build the vertex shader for the raster mesh layer.
|
|
25
|
+
*/
|
|
26
|
+
function buildRasterMeshVertexShader() {
|
|
27
|
+
return "#version 300 es\n#define SHADER_NAME raster-mesh-layer-vs\n\nin vec3 positions;\nin vec3 positions64Low;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\n\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nconst vec3 pickingColor = vec3(1.0, 0.0, 0.0);\nconst vec3 defaultNormal = vec3(0.0, 0.0, 1.0);\n\nvoid main(void) {\n geometry.worldPosition = positions;\n geometry.uv = texCoords;\n geometry.pickingColor = pickingColor;\n\n normals_commonspace = project_normal(normals);\n geometry.normal = normals_commonspace;\n\n gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position);\n position_commonspace = geometry.position;\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTexCoord = texCoords;\n cameraPosition = project.cameraPosition;\n\n vColor = vec4(colors, 1.0);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Build the fragment shader for the raster mesh layer.
|
|
32
|
+
* Uses DECKGL_CREATE_COLOR and DECKGL_MUTATE_COLOR hooks registered with
|
|
33
|
+
* the ShaderAssembler. Module inject code is assembled by luma.gl.
|
|
34
|
+
*/
|
|
35
|
+
function buildRasterMeshFragmentShader() {
|
|
36
|
+
return "#version 300 es\n#define SHADER_NAME raster-mesh-layer-fs\n\nprecision highp float;\nprecision mediump int;\nprecision mediump usampler2D;\n\nin vec2 vTexCoord;\nin vec3 cameraPosition;\nin vec3 normals_commonspace;\nin vec4 position_commonspace;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n geometry.uv = vTexCoord;\n vec2 coord = vTexCoord;\n vec4 image;\n\n DECKGL_CREATE_COLOR(image, coord);\n\n DECKGL_MUTATE_COLOR(image, coord);\n\n vec3 normal;\n if (rasterMesh.meshFlatShading > 0.5) {\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n } else {\n normal = normals_commonspace;\n }\n\n vec3 lightColor = lighting_getLightColor(image.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, rasterMesh.meshOpacity);\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n";
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyYXN0ZXJNZXNoVW5pZm9ybUJsb2NrIiwicmFzdGVyTWVzaFVuaWZvcm1zIiwiZXhwb3J0cyIsIm5hbWUiLCJ2cyIsImZzIiwidW5pZm9ybVR5cGVzIiwibWVzaE9wYWNpdHkiLCJtZXNoRmxhdFNoYWRpbmciLCJidWlsZFJhc3Rlck1lc2hWZXJ0ZXhTaGFkZXIiLCJidWlsZFJhc3Rlck1lc2hGcmFnbWVudFNoYWRlciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLW1lc2gtbGF5ZXIvcmFzdGVyLW1lc2gtbGF5ZXItc2hhZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5jb25zdCByYXN0ZXJNZXNoVW5pZm9ybUJsb2NrID0gYFxcXG51bmlmb3JtIHJhc3Rlck1lc2hVbmlmb3JtcyB7XG4gIGZsb2F0IG1lc2hPcGFjaXR5O1xuICBmbG9hdCBtZXNoRmxhdFNoYWRpbmc7XG59IHJhc3Rlck1lc2g7XG5gO1xuXG5leHBvcnQgY29uc3QgcmFzdGVyTWVzaFVuaWZvcm1zID0ge1xuICBuYW1lOiAncmFzdGVyTWVzaCcsXG4gIHZzOiByYXN0ZXJNZXNoVW5pZm9ybUJsb2NrLFxuICBmczogcmFzdGVyTWVzaFVuaWZvcm1CbG9jayxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgbWVzaE9wYWNpdHk6ICdmMzInLFxuICAgIG1lc2hGbGF0U2hhZGluZzogJ2YzMidcbiAgfVxufTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgdmVydGV4IHNoYWRlciBmb3IgdGhlIHJhc3RlciBtZXNoIGxheWVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRSYXN0ZXJNZXNoVmVydGV4U2hhZGVyKCk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxcbiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBTSEFERVJfTkFNRSByYXN0ZXItbWVzaC1sYXllci12c1xuXG5pbiB2ZWMzIHBvc2l0aW9ucztcbmluIHZlYzMgcG9zaXRpb25zNjRMb3c7XG5pbiB2ZWMzIG5vcm1hbHM7XG5pbiB2ZWMzIGNvbG9ycztcbmluIHZlYzIgdGV4Q29vcmRzO1xuXG5vdXQgdmVjMiB2VGV4Q29vcmQ7XG5vdXQgdmVjMyBjYW1lcmFQb3NpdGlvbjtcbm91dCB2ZWMzIG5vcm1hbHNfY29tbW9uc3BhY2U7XG5vdXQgdmVjNCBwb3NpdGlvbl9jb21tb25zcGFjZTtcbm91dCB2ZWM0IHZDb2xvcjtcblxuY29uc3QgdmVjMyBwaWNraW5nQ29sb3IgPSB2ZWMzKDEuMCwgMC4wLCAwLjApO1xuY29uc3QgdmVjMyBkZWZhdWx0Tm9ybWFsID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IHBvc2l0aW9ucztcbiAgZ2VvbWV0cnkudXYgPSB0ZXhDb29yZHM7XG4gIGdlb21ldHJ5LnBpY2tpbmdDb2xvciA9IHBpY2tpbmdDb2xvcjtcblxuICBub3JtYWxzX2NvbW1vbnNwYWNlID0gcHJvamVjdF9ub3JtYWwobm9ybWFscyk7XG4gIGdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbHNfY29tbW9uc3BhY2U7XG5cbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0X3Bvc2l0aW9uX3RvX2NsaXBzcGFjZShwb3NpdGlvbnMsIHBvc2l0aW9uczY0TG93LCB2ZWMzKDAuMCksIGdlb21ldHJ5LnBvc2l0aW9uKTtcbiAgcG9zaXRpb25fY29tbW9uc3BhY2UgPSBnZW9tZXRyeS5wb3NpdGlvbjtcbiAgREVDS0dMX0ZJTFRFUl9HTF9QT1NJVElPTihnbF9Qb3NpdGlvbiwgZ2VvbWV0cnkpO1xuXG4gIHZUZXhDb29yZCA9IHRleENvb3JkcztcbiAgY2FtZXJhUG9zaXRpb24gPSBwcm9qZWN0LmNhbWVyYVBvc2l0aW9uO1xuXG4gIHZDb2xvciA9IHZlYzQoY29sb3JzLCAxLjApO1xuICBERUNLR0xfRklMVEVSX0NPTE9SKHZDb2xvciwgZ2VvbWV0cnkpO1xufVxuYDtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgZnJhZ21lbnQgc2hhZGVyIGZvciB0aGUgcmFzdGVyIG1lc2ggbGF5ZXIuXG4gKiBVc2VzIERFQ0tHTF9DUkVBVEVfQ09MT1IgYW5kIERFQ0tHTF9NVVRBVEVfQ09MT1IgaG9va3MgcmVnaXN0ZXJlZCB3aXRoXG4gKiB0aGUgU2hhZGVyQXNzZW1ibGVyLiBNb2R1bGUgaW5qZWN0IGNvZGUgaXMgYXNzZW1ibGVkIGJ5IGx1bWEuZ2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJhc3Rlck1lc2hGcmFnbWVudFNoYWRlcigpOiBzdHJpbmcge1xuICByZXR1cm4gYFxcXG4jdmVyc2lvbiAzMDAgZXNcbiNkZWZpbmUgU0hBREVSX05BTUUgcmFzdGVyLW1lc2gtbGF5ZXItZnNcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xucHJlY2lzaW9uIG1lZGl1bXAgdXNhbXBsZXIyRDtcblxuaW4gdmVjMiB2VGV4Q29vcmQ7XG5pbiB2ZWMzIGNhbWVyYVBvc2l0aW9uO1xuaW4gdmVjMyBub3JtYWxzX2NvbW1vbnNwYWNlO1xuaW4gdmVjNCBwb3NpdGlvbl9jb21tb25zcGFjZTtcbmluIHZlYzQgdkNvbG9yO1xuXG5vdXQgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbih2b2lkKSB7XG4gIGdlb21ldHJ5LnV2ID0gdlRleENvb3JkO1xuICB2ZWMyIGNvb3JkID0gdlRleENvb3JkO1xuICB2ZWM0IGltYWdlO1xuXG4gIERFQ0tHTF9DUkVBVEVfQ09MT1IoaW1hZ2UsIGNvb3JkKTtcblxuICBERUNLR0xfTVVUQVRFX0NPTE9SKGltYWdlLCBjb29yZCk7XG5cbiAgdmVjMyBub3JtYWw7XG4gIGlmIChyYXN0ZXJNZXNoLm1lc2hGbGF0U2hhZGluZyA+IDAuNSkge1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyhkRmR4KHBvc2l0aW9uX2NvbW1vbnNwYWNlLnh5eiksIGRGZHkocG9zaXRpb25fY29tbW9uc3BhY2UueHl6KSkpO1xuICB9IGVsc2Uge1xuICAgIG5vcm1hbCA9IG5vcm1hbHNfY29tbW9uc3BhY2U7XG4gIH1cblxuICB2ZWMzIGxpZ2h0Q29sb3IgPSBsaWdodGluZ19nZXRMaWdodENvbG9yKGltYWdlLnJnYiwgY2FtZXJhUG9zaXRpb24sIHBvc2l0aW9uX2NvbW1vbnNwYWNlLnh5eiwgbm9ybWFsKTtcbiAgZnJhZ0NvbG9yID0gdmVjNChsaWdodENvbG9yLCByYXN0ZXJNZXNoLm1lc2hPcGFjaXR5KTtcblxuICBERUNLR0xfRklMVEVSX0NPTE9SKGZyYWdDb2xvciwgZ2VvbWV0cnkpO1xufVxuYDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLElBQU1BLHNCQUFzQixrR0FLM0I7QUFFTSxJQUFNQyxrQkFBa0IsR0FBQUMsT0FBQSxDQUFBRCxrQkFBQSxHQUFHO0VBQ2hDRSxJQUFJLEVBQUUsWUFBWTtFQUNsQkMsRUFBRSxFQUFFSixzQkFBc0I7RUFDMUJLLEVBQUUsRUFBRUwsc0JBQXNCO0VBQzFCTSxZQUFZLEVBQUU7SUFDWkMsV0FBVyxFQUFFLEtBQUs7SUFDbEJDLGVBQWUsRUFBRTtFQUNuQjtBQUNGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ08sU0FBU0MsMkJBQTJCQSxDQUFBLEVBQVc7RUFDcEQ7QUFzQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLDZCQUE2QkEsQ0FBQSxFQUFXO0VBQ3REO0FBc0NGIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
// Copyright contributors to the kepler.gl project
|
|
9
|
+
var _default = exports["default"] = "#define SHADER_NAME raster-mesh-layer-fs\n\nprecision highp float;\n\nuniform bool hasTexture;\n\nuniform bool flatShading;\nuniform float opacity;\n\nvarying vec2 vTexCoord;\nvarying vec3 cameraPosition;\nvarying vec3 normals_commonspace;\nvarying vec4 position_commonspace;\nvarying vec4 vColor;\n\nvoid main(void) {\n geometry.uv = vTexCoord;\n vec4 image;\n DECKGL_CREATE_COLOR(image, vTexCoord);\n\n DECKGL_MUTATE_COLOR(image, vTexCoord);\n\n vec3 normal;\n if (flatShading) {\n\n// This is necessary because\n// headless.gl reports the extension as\n// available but does not support it in\n// the shader.\n#ifdef DERIVATIVES_AVAILABLE\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n#else\n normal = vec3(0.0, 0.0, 1.0);\n#endif\n } else {\n normal = normals_commonspace;\n }\n\n vec3 lightColor = lighting_getLightColor(image.rgb, cameraPosition, position_commonspace.xyz, normal);\n gl_FragColor = vec4(lightColor, opacity);\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n";
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3Jhc3Rlci1tZXNoLWxheWVyL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMS5mcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgcmFzdGVyLW1lc2gtbGF5ZXItZnNcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG51bmlmb3JtIGJvb2wgaGFzVGV4dHVyZTtcblxudW5pZm9ybSBib29sIGZsYXRTaGFkaW5nO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xudmFyeWluZyB2ZWMzIGNhbWVyYVBvc2l0aW9uO1xudmFyeWluZyB2ZWMzIG5vcm1hbHNfY29tbW9uc3BhY2U7XG52YXJ5aW5nIHZlYzQgcG9zaXRpb25fY29tbW9uc3BhY2U7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4odm9pZCkge1xuICBnZW9tZXRyeS51diA9IHZUZXhDb29yZDtcbiAgdmVjNCBpbWFnZTtcbiAgREVDS0dMX0NSRUFURV9DT0xPUihpbWFnZSwgdlRleENvb3JkKTtcblxuICBERUNLR0xfTVVUQVRFX0NPTE9SKGltYWdlLCB2VGV4Q29vcmQpO1xuXG4gIHZlYzMgbm9ybWFsO1xuICBpZiAoZmxhdFNoYWRpbmcpIHtcblxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZVxuLy8gaGVhZGxlc3MuZ2wgcmVwb3J0cyB0aGUgZXh0ZW5zaW9uIGFzXG4vLyBhdmFpbGFibGUgYnV0IGRvZXMgbm90IHN1cHBvcnQgaXQgaW5cbi8vIHRoZSBzaGFkZXIuXG4jaWZkZWYgREVSSVZBVElWRVNfQVZBSUxBQkxFXG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKGRGZHgocG9zaXRpb25fY29tbW9uc3BhY2UueHl6KSwgZEZkeShwb3NpdGlvbl9jb21tb25zcGFjZS54eXopKSk7XG4jZWxzZVxuICAgIG5vcm1hbCA9IHZlYzMoMC4wLCAwLjAsIDEuMCk7XG4jZW5kaWZcbiAgfSBlbHNlIHtcbiAgICBub3JtYWwgPSBub3JtYWxzX2NvbW1vbnNwYWNlO1xuICB9XG5cbiAgdmVjMyBsaWdodENvbG9yID0gbGlnaHRpbmdfZ2V0TGlnaHRDb2xvcihpbWFnZS5yZ2IsIGNhbWVyYVBvc2l0aW9uLCBwb3NpdGlvbl9jb21tb25zcGFjZS54eXosIG5vcm1hbCk7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQobGlnaHRDb2xvciwgb3BhY2l0eSk7XG5cbiAgREVDS0dMX0ZJTFRFUl9DT0xPUihnbF9GcmFnQ29sb3IsIGdlb21ldHJ5KTtcbn1cbmA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
// Copyright contributors to the kepler.gl project
|
|
9
|
+
var _default = exports["default"] = "#define SHADER_NAME raster-mesh-layer-vs\n\n// Scale the model\nuniform float sizeScale;\nuniform bool composeModelMatrix;\n\n// Primitive attributes\nattribute vec3 positions;\nattribute vec3 normals;\nattribute vec3 colors;\nattribute vec2 texCoords;\n\n// Instance attributes\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute mat3 instanceModelMatrix;\nattribute vec3 instanceTranslation;\n\n// Outputs to fragment shader\nvarying vec2 vTexCoord;\nvarying vec3 cameraPosition;\nvarying vec3 normals_commonspace;\nvarying vec4 position_commonspace;\nvarying vec4 vColor;\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.uv = texCoords;\n geometry.pickingColor = instancePickingColors;\n\n vTexCoord = texCoords;\n cameraPosition = project_uCameraPosition;\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n geometry.normal = normals_commonspace;\n\n vec3 pos = (instanceModelMatrix * positions) * sizeScale + instanceTranslation;\n\n if (composeModelMatrix) {\n DECKGL_FILTER_SIZE(pos, geometry);\n gl_Position = project_position_to_clipspace(pos + instancePositions, instancePositions64Low, vec3(0.0), position_commonspace);\n }\n else {\n pos = project_size(pos);\n DECKGL_FILTER_SIZE(pos, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, pos, position_commonspace);\n }\n\n geometry.position = position_commonspace;\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3Jhc3Rlci1tZXNoLWxheWVyL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMS52cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgcmFzdGVyLW1lc2gtbGF5ZXItdnNcblxuLy8gU2NhbGUgdGhlIG1vZGVsXG51bmlmb3JtIGZsb2F0IHNpemVTY2FsZTtcbnVuaWZvcm0gYm9vbCBjb21wb3NlTW9kZWxNYXRyaXg7XG5cbi8vIFByaW1pdGl2ZSBhdHRyaWJ1dGVzXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbnM7XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWxzO1xuYXR0cmlidXRlIHZlYzMgY29sb3JzO1xuYXR0cmlidXRlIHZlYzIgdGV4Q29vcmRzO1xuXG4vLyBJbnN0YW5jZSBhdHRyaWJ1dGVzXG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBvc2l0aW9ucztcbmF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlUG9zaXRpb25zNjRMb3c7XG5hdHRyaWJ1dGUgdmVjNCBpbnN0YW5jZUNvbG9ycztcbmF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlUGlja2luZ0NvbG9ycztcbmF0dHJpYnV0ZSBtYXQzIGluc3RhbmNlTW9kZWxNYXRyaXg7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVRyYW5zbGF0aW9uO1xuXG4vLyBPdXRwdXRzIHRvIGZyYWdtZW50IHNoYWRlclxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcbnZhcnlpbmcgdmVjMyBjYW1lcmFQb3NpdGlvbjtcbnZhcnlpbmcgdmVjMyBub3JtYWxzX2NvbW1vbnNwYWNlO1xudmFyeWluZyB2ZWM0IHBvc2l0aW9uX2NvbW1vbnNwYWNlO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IGluc3RhbmNlUG9zaXRpb25zO1xuICBnZW9tZXRyeS51diA9IHRleENvb3JkcztcbiAgZ2VvbWV0cnkucGlja2luZ0NvbG9yID0gaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuXG4gIHZUZXhDb29yZCA9IHRleENvb3JkcztcbiAgY2FtZXJhUG9zaXRpb24gPSBwcm9qZWN0X3VDYW1lcmFQb3NpdGlvbjtcbiAgbm9ybWFsc19jb21tb25zcGFjZSA9IHByb2plY3Rfbm9ybWFsKGluc3RhbmNlTW9kZWxNYXRyaXggKiBub3JtYWxzKTtcbiAgdkNvbG9yID0gdmVjNChjb2xvcnMgKiBpbnN0YW5jZUNvbG9ycy5yZ2IsIGluc3RhbmNlQ29sb3JzLmEpO1xuICBnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxzX2NvbW1vbnNwYWNlO1xuXG4gIHZlYzMgcG9zID0gKGluc3RhbmNlTW9kZWxNYXRyaXggKiBwb3NpdGlvbnMpICogc2l6ZVNjYWxlICsgaW5zdGFuY2VUcmFuc2xhdGlvbjtcblxuICBpZiAoY29tcG9zZU1vZGVsTWF0cml4KSB7XG4gICAgREVDS0dMX0ZJTFRFUl9TSVpFKHBvcywgZ2VvbWV0cnkpO1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdF9wb3NpdGlvbl90b19jbGlwc3BhY2UocG9zICsgaW5zdGFuY2VQb3NpdGlvbnMsIGluc3RhbmNlUG9zaXRpb25zNjRMb3csIHZlYzMoMC4wKSwgcG9zaXRpb25fY29tbW9uc3BhY2UpO1xuICB9XG4gIGVsc2Uge1xuICAgIHBvcyA9IHByb2plY3Rfc2l6ZShwb3MpO1xuICAgIERFQ0tHTF9GSUxURVJfU0laRShwb3MsIGdlb21ldHJ5KTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3RfcG9zaXRpb25fdG9fY2xpcHNwYWNlKGluc3RhbmNlUG9zaXRpb25zLCBpbnN0YW5jZVBvc2l0aW9uczY0TG93LCBwb3MsIHBvc2l0aW9uX2NvbW1vbnNwYWNlKTtcbiAgfVxuXG4gIGdlb21ldHJ5LnBvc2l0aW9uID0gcG9zaXRpb25fY29tbW9uc3BhY2U7XG4gIERFQ0tHTF9GSUxURVJfR0xfUE9TSVRJT04oZ2xfUG9zaXRpb24sIGdlb21ldHJ5KTtcblxuICBERUNLR0xfRklMVEVSX0NPTE9SKHZDb2xvciwgZ2VvbWV0cnkpO1xufVxuYDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
// Copyright contributors to the kepler.gl project
|
|
9
|
+
var _default = exports["default"] = "#version 300 es\n#define SHADER_NAME raster-mesh-layer-fs\n\nprecision highp float;\n\nuniform bool hasTexture;\n\nuniform bool flatShading;\nuniform float opacity;\n\nin vec2 vTexCoord;\nin vec3 cameraPosition;\nin vec3 normals_commonspace;\nin vec4 position_commonspace;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n geometry.uv = vTexCoord;\n vec4 image;\n DECKGL_CREATE_COLOR(image, vTexCoord);\n\n DECKGL_MUTATE_COLOR(image, vTexCoord);\n\n vec3 normal;\n if (flatShading) {\n\n// This is necessary because\n// headless.gl reports the extension as\n// available but does not support it in\n// the shader.\n#ifdef DERIVATIVES_AVAILABLE\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n#else\n normal = vec3(0.0, 0.0, 1.0);\n#endif\n } else {\n normal = normals_commonspace;\n }\n\n vec3 lightColor = lighting_getLightColor(image.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, opacity);\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n";
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3Jhc3Rlci1tZXNoLWxheWVyL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMi5mcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBTSEFERVJfTkFNRSByYXN0ZXItbWVzaC1sYXllci1mc1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnVuaWZvcm0gYm9vbCBoYXNUZXh0dXJlO1xuXG51bmlmb3JtIGJvb2wgZmxhdFNoYWRpbmc7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbmluIHZlYzIgdlRleENvb3JkO1xuaW4gdmVjMyBjYW1lcmFQb3NpdGlvbjtcbmluIHZlYzMgbm9ybWFsc19jb21tb25zcGFjZTtcbmluIHZlYzQgcG9zaXRpb25fY29tbW9uc3BhY2U7XG5pbiB2ZWM0IHZDb2xvcjtcblxub3V0IHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4odm9pZCkge1xuICBnZW9tZXRyeS51diA9IHZUZXhDb29yZDtcbiAgdmVjNCBpbWFnZTtcbiAgREVDS0dMX0NSRUFURV9DT0xPUihpbWFnZSwgdlRleENvb3JkKTtcblxuICBERUNLR0xfTVVUQVRFX0NPTE9SKGltYWdlLCB2VGV4Q29vcmQpO1xuXG4gIHZlYzMgbm9ybWFsO1xuICBpZiAoZmxhdFNoYWRpbmcpIHtcblxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZVxuLy8gaGVhZGxlc3MuZ2wgcmVwb3J0cyB0aGUgZXh0ZW5zaW9uIGFzXG4vLyBhdmFpbGFibGUgYnV0IGRvZXMgbm90IHN1cHBvcnQgaXQgaW5cbi8vIHRoZSBzaGFkZXIuXG4jaWZkZWYgREVSSVZBVElWRVNfQVZBSUxBQkxFXG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKGRGZHgocG9zaXRpb25fY29tbW9uc3BhY2UueHl6KSwgZEZkeShwb3NpdGlvbl9jb21tb25zcGFjZS54eXopKSk7XG4jZWxzZVxuICAgIG5vcm1hbCA9IHZlYzMoMC4wLCAwLjAsIDEuMCk7XG4jZW5kaWZcbiAgfSBlbHNlIHtcbiAgICBub3JtYWwgPSBub3JtYWxzX2NvbW1vbnNwYWNlO1xuICB9XG5cbiAgdmVjMyBsaWdodENvbG9yID0gbGlnaHRpbmdfZ2V0TGlnaHRDb2xvcihpbWFnZS5yZ2IsIGNhbWVyYVBvc2l0aW9uLCBwb3NpdGlvbl9jb21tb25zcGFjZS54eXosIG5vcm1hbCk7XG4gIGZyYWdDb2xvciA9IHZlYzQobGlnaHRDb2xvciwgb3BhY2l0eSk7XG5cbiAgREVDS0dMX0ZJTFRFUl9DT0xPUihmcmFnQ29sb3IsIGdlb21ldHJ5KTtcbn1cbmA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
// Copyright contributors to the kepler.gl project
|
|
9
|
+
var _default = exports["default"] = "#version 300 es\n#define SHADER_NAME raster-mesh-layer-vs\n\n// Primitive attributes\nin vec3 positions;\nin vec3 positions64Low;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\n\n// Outputs to fragment shader\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nconst vec3 pickingColor = vec3(1.0, 0.0, 0.0);\nconst vec3 defaultNormal = vec3(0.0, 0.0, 1.0);\n\nvoid main(void) {\n geometry.worldPosition = positions;\n geometry.uv = texCoords;\n geometry.pickingColor = pickingColor;\n\n gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position);\n position_commonspace = geometry.position;\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTexCoord = texCoords;\n cameraPosition = project_uCameraPosition;\n \n vColor = vec4(colors, 1.0);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3Jhc3Rlci1tZXNoLWxheWVyL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMi52cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBTSEFERVJfTkFNRSByYXN0ZXItbWVzaC1sYXllci12c1xuXG4vLyBQcmltaXRpdmUgYXR0cmlidXRlc1xuaW4gdmVjMyBwb3NpdGlvbnM7XG5pbiB2ZWMzIHBvc2l0aW9uczY0TG93O1xuaW4gdmVjMyBub3JtYWxzO1xuaW4gdmVjMyBjb2xvcnM7XG5pbiB2ZWMyIHRleENvb3JkcztcblxuLy8gT3V0cHV0cyB0byBmcmFnbWVudCBzaGFkZXJcbm91dCB2ZWMyIHZUZXhDb29yZDtcbm91dCB2ZWMzIGNhbWVyYVBvc2l0aW9uO1xub3V0IHZlYzMgbm9ybWFsc19jb21tb25zcGFjZTtcbm91dCB2ZWM0IHBvc2l0aW9uX2NvbW1vbnNwYWNlO1xub3V0IHZlYzQgdkNvbG9yO1xuXG5jb25zdCB2ZWMzIHBpY2tpbmdDb2xvciA9IHZlYzMoMS4wLCAwLjAsIDAuMCk7XG5jb25zdCB2ZWMzIGRlZmF1bHROb3JtYWwgPSB2ZWMzKDAuMCwgMC4wLCAxLjApO1xuXG52b2lkIG1haW4odm9pZCkge1xuICBnZW9tZXRyeS53b3JsZFBvc2l0aW9uID0gcG9zaXRpb25zO1xuICBnZW9tZXRyeS51diA9IHRleENvb3JkcztcbiAgZ2VvbWV0cnkucGlja2luZ0NvbG9yID0gcGlja2luZ0NvbG9yO1xuXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdF9wb3NpdGlvbl90b19jbGlwc3BhY2UocG9zaXRpb25zLCBwb3NpdGlvbnM2NExvdywgdmVjMygwLjApLCBnZW9tZXRyeS5wb3NpdGlvbik7XG4gIHBvc2l0aW9uX2NvbW1vbnNwYWNlID0gZ2VvbWV0cnkucG9zaXRpb247XG4gIERFQ0tHTF9GSUxURVJfR0xfUE9TSVRJT04oZ2xfUG9zaXRpb24sIGdlb21ldHJ5KTtcblxuICB2VGV4Q29vcmQgPSB0ZXhDb29yZHM7XG4gIGNhbWVyYVBvc2l0aW9uID0gcHJvamVjdF91Q2FtZXJhUG9zaXRpb247XG4gIFxuICB2Q29sb3IgPSB2ZWM0KGNvbG9ycywgMS4wKTtcbiAgREVDS0dMX0ZJTFRFUl9DT0xPUih2Q29sb3IsIGdlb21ldHJ5KTtcbn1cbmA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,321 @@
|
|
|
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 _meshLayers = require("@deck.gl/mesh-layers");
|
|
17
|
+
var _engine = require("@luma.gl/engine");
|
|
18
|
+
var _rasterMeshLayerShaders = require("./raster-mesh-layer-shaders");
|
|
19
|
+
var _rasterLayerShaders = require("../raster-layer/raster-layer-shaders");
|
|
20
|
+
var _images = require("../images");
|
|
21
|
+
var _util = require("../util");
|
|
22
|
+
var _pipelineValidationPatch = require("../pipeline-validation-patch");
|
|
23
|
+
var _rasterProcessingUniforms = require("../raster-processing-uniforms");
|
|
24
|
+
var _constants = require("@kepler.gl/constants");
|
|
25
|
+
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)); }
|
|
26
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
27
|
+
function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
|
|
28
|
+
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; }
|
|
29
|
+
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
|
|
30
|
+
// Copyright contributors to the kepler.gl project
|
|
31
|
+
function validateGeometryAttributes(attributes) {
|
|
32
|
+
if (!(attributes.positions || attributes.POSITION)) {
|
|
33
|
+
throw new Error('RasterMeshLayer requires "positions" or "POSITION" attribute in mesh property.');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Convert mesh data into geometry
|
|
39
|
+
* @returns geometry
|
|
40
|
+
*/
|
|
41
|
+
function getGeometry(data) {
|
|
42
|
+
if ('attributes' in data && data.attributes) {
|
|
43
|
+
validateGeometryAttributes(data.attributes);
|
|
44
|
+
if (data instanceof _engine.Geometry) {
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
return new _engine.Geometry(data);
|
|
48
|
+
} else if ('positions' in data || 'POSITION' in data) {
|
|
49
|
+
validateGeometryAttributes(data);
|
|
50
|
+
return new _engine.Geometry({
|
|
51
|
+
attributes: data
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
throw Error('Invalid mesh');
|
|
55
|
+
}
|
|
56
|
+
var defaultProps = _objectSpread(_objectSpread({}, _meshLayers.SimpleMeshLayer.defaultProps), {}, {
|
|
57
|
+
modules: {
|
|
58
|
+
type: 'array',
|
|
59
|
+
value: [],
|
|
60
|
+
compare: true
|
|
61
|
+
},
|
|
62
|
+
images: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
value: {},
|
|
65
|
+
compare: true
|
|
66
|
+
},
|
|
67
|
+
moduleProps: {
|
|
68
|
+
type: 'object',
|
|
69
|
+
value: {},
|
|
70
|
+
compare: true
|
|
71
|
+
},
|
|
72
|
+
onRedrawNeeded: {
|
|
73
|
+
type: 'function',
|
|
74
|
+
value: null,
|
|
75
|
+
compare: false
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLayer) {
|
|
79
|
+
function RasterMeshLayer() {
|
|
80
|
+
var _this;
|
|
81
|
+
(0, _classCallCheck2["default"])(this, RasterMeshLayer);
|
|
82
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
83
|
+
args[_key] = arguments[_key];
|
|
84
|
+
}
|
|
85
|
+
_this = _callSuper(this, RasterMeshLayer, [].concat(args));
|
|
86
|
+
(0, _defineProperty2["default"])(_this, "_redrawScheduled", false);
|
|
87
|
+
(0, _defineProperty2["default"])(_this, "_pendingImageRetry", null);
|
|
88
|
+
/** How many consecutive frames have retried a failed texture upload. */
|
|
89
|
+
(0, _defineProperty2["default"])(_this, "_imageRetryCount", 0);
|
|
90
|
+
return _this;
|
|
91
|
+
}
|
|
92
|
+
(0, _inherits2["default"])(RasterMeshLayer, _SimpleMeshLayer);
|
|
93
|
+
return (0, _createClass2["default"])(RasterMeshLayer, [{
|
|
94
|
+
key: "initializeState",
|
|
95
|
+
value: function initializeState() {
|
|
96
|
+
(0, _pipelineValidationPatch.patchPipelineValidation)();
|
|
97
|
+
(0, _rasterLayerShaders.ensureRasterHooksRegistered)();
|
|
98
|
+
this.setState({
|
|
99
|
+
images: {}
|
|
100
|
+
});
|
|
101
|
+
_superPropGet(RasterMeshLayer, "initializeState", this, 3)([]);
|
|
102
|
+
}
|
|
103
|
+
}, {
|
|
104
|
+
key: "getShaders",
|
|
105
|
+
value: function getShaders() {
|
|
106
|
+
var _this$props$modules = this.props.modules,
|
|
107
|
+
modules = _this$props$modules === void 0 ? [] : _this$props$modules;
|
|
108
|
+
var lumaModules = (0, _rasterLayerShaders.prepareLumaModules)(modules);
|
|
109
|
+
var parentShaders = _superPropGet(RasterMeshLayer, "getShaders", this, 3)([]);
|
|
110
|
+
|
|
111
|
+
// Filter out simpleMeshUniforms from parent — RasterMeshLayer uses its own
|
|
112
|
+
// shaders that don't reference SimpleMesh uniforms, and every UBO counts
|
|
113
|
+
// against the WebGL2 GL_MAX_FRAGMENT_UNIFORM_BUFFERS limit (typically 12).
|
|
114
|
+
var parentModules = (parentShaders.modules || []).filter(function (m) {
|
|
115
|
+
return m.name !== 'simpleMesh';
|
|
116
|
+
});
|
|
117
|
+
return _objectSpread(_objectSpread({}, parentShaders), {}, {
|
|
118
|
+
vs: (0, _rasterMeshLayerShaders.buildRasterMeshVertexShader)(),
|
|
119
|
+
fs: (0, _rasterMeshLayerShaders.buildRasterMeshFragmentShader)(),
|
|
120
|
+
modules: [].concat((0, _toConsumableArray2["default"])(parentModules), [_rasterMeshLayerShaders.rasterMeshUniforms, _rasterProcessingUniforms.rasterProcessingUniforms], (0, _toConsumableArray2["default"])(lumaModules))
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// eslint-disable-next-line complexity
|
|
125
|
+
}, {
|
|
126
|
+
key: "updateState",
|
|
127
|
+
value: function updateState(params) {
|
|
128
|
+
var props = params.props,
|
|
129
|
+
oldProps = params.oldProps,
|
|
130
|
+
changeFlags = params.changeFlags,
|
|
131
|
+
context = params.context;
|
|
132
|
+
_superPropGet(RasterMeshLayer, "updateState", this, 3)([{
|
|
133
|
+
props: props,
|
|
134
|
+
oldProps: oldProps,
|
|
135
|
+
changeFlags: changeFlags,
|
|
136
|
+
context: context
|
|
137
|
+
}]);
|
|
138
|
+
var modules = props && props.modules;
|
|
139
|
+
var oldModules = oldProps && oldProps.modules;
|
|
140
|
+
if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged || !(0, _util.modulesEqual)(modules, oldModules)) {
|
|
141
|
+
var _this$getAttributeMan;
|
|
142
|
+
if (this.state.model) {
|
|
143
|
+
var _this$state$model$des, _this$state$model;
|
|
144
|
+
(_this$state$model$des = (_this$state$model = this.state.model).destroy) === null || _this$state$model$des === void 0 || _this$state$model$des.call(_this$state$model);
|
|
145
|
+
}
|
|
146
|
+
if (props.mesh) {
|
|
147
|
+
this.state.model = this.getModel(props.mesh);
|
|
148
|
+
var attributes = props.mesh.attributes || props.mesh;
|
|
149
|
+
this.setState({
|
|
150
|
+
hasNormals: Boolean(attributes.NORMAL || attributes.normals)
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
(_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.invalidateAll();
|
|
154
|
+
}
|
|
155
|
+
if (props && props.images) {
|
|
156
|
+
this.updateImages({
|
|
157
|
+
props: props,
|
|
158
|
+
oldProps: oldProps
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (this.state.model) {
|
|
162
|
+
var _this$state$model$set, _this$state$model2;
|
|
163
|
+
(_this$state$model$set = (_this$state$model2 = this.state.model).setTopology) === null || _this$state$model$set === void 0 || _this$state$model$set.call(_this$state$model2, this.props.wireframe ? _constants.TOPOLOGY.LINE_STRIP : _constants.TOPOLOGY.TRIANGLE_LIST);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}, {
|
|
167
|
+
key: "updateImages",
|
|
168
|
+
value: function updateImages(_ref) {
|
|
169
|
+
var props = _ref.props,
|
|
170
|
+
oldProps = _ref.oldProps;
|
|
171
|
+
var images = this.state.images;
|
|
172
|
+
var device = this.context.device;
|
|
173
|
+
var gl = (device === null || device === void 0 ? void 0 : device.gl) || this.context.gl;
|
|
174
|
+
var _loadImages = (0, _images.loadImages)({
|
|
175
|
+
gl: gl,
|
|
176
|
+
device: device,
|
|
177
|
+
images: images,
|
|
178
|
+
imagesData: props.images,
|
|
179
|
+
oldImagesData: oldProps.images
|
|
180
|
+
}),
|
|
181
|
+
newImages = _loadImages.images,
|
|
182
|
+
hasPendingUploads = _loadImages.hasPendingUploads;
|
|
183
|
+
if (newImages) {
|
|
184
|
+
this.setState({
|
|
185
|
+
images: newImages
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
// If any texture upload failed, stash the imagesData and schedule a retry
|
|
189
|
+
// next frame. The retry passes oldImagesData: {} so all keys bypass the
|
|
190
|
+
// isEqual skip-check.
|
|
191
|
+
if (hasPendingUploads) {
|
|
192
|
+
this._pendingImageRetry = props.images;
|
|
193
|
+
this._imageRetryCount = 0;
|
|
194
|
+
this._scheduleRedraw();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}, {
|
|
198
|
+
key: "draw",
|
|
199
|
+
value: function draw(_opts) {
|
|
200
|
+
var _this$props$opacity;
|
|
201
|
+
// If a previous frame had failed texture uploads, retry them now before
|
|
202
|
+
// checking whether the images state is complete. Pass oldImagesData: {} so
|
|
203
|
+
// all keys are treated as new and bypass the isEqual skip-check.
|
|
204
|
+
// Retries are bounded to MAX_IMAGE_RETRY_ATTEMPTS to avoid an infinite
|
|
205
|
+
// redraw loop when image data is permanently invalid.
|
|
206
|
+
if (this._pendingImageRetry) {
|
|
207
|
+
var _this$context$device;
|
|
208
|
+
var retry = this._pendingImageRetry;
|
|
209
|
+
this._pendingImageRetry = null;
|
|
210
|
+
var _loadImages2 = (0, _images.loadImages)({
|
|
211
|
+
gl: ((_this$context$device = this.context.device) === null || _this$context$device === void 0 ? void 0 : _this$context$device.gl) || this.context.gl,
|
|
212
|
+
device: this.context.device,
|
|
213
|
+
images: this.state.images,
|
|
214
|
+
imagesData: retry,
|
|
215
|
+
oldImagesData: {}
|
|
216
|
+
}),
|
|
217
|
+
newImages = _loadImages2.images,
|
|
218
|
+
hasPendingUploads = _loadImages2.hasPendingUploads;
|
|
219
|
+
if (newImages) {
|
|
220
|
+
this.setState({
|
|
221
|
+
images: newImages
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
if (hasPendingUploads) {
|
|
225
|
+
this._imageRetryCount++;
|
|
226
|
+
if (this._imageRetryCount < RasterMeshLayer.MAX_IMAGE_RETRY_ATTEMPTS) {
|
|
227
|
+
this._pendingImageRetry = retry;
|
|
228
|
+
this._scheduleRedraw();
|
|
229
|
+
} else {
|
|
230
|
+
console.warn("RasterMeshLayer: texture upload failed after ".concat(RasterMeshLayer.MAX_IMAGE_RETRY_ATTEMPTS, " attempts, giving up."));
|
|
231
|
+
this._imageRetryCount = 0;
|
|
232
|
+
}
|
|
233
|
+
} else {
|
|
234
|
+
this._imageRetryCount = 0;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
var _this$state = this.state,
|
|
238
|
+
model = _this$state.model,
|
|
239
|
+
images = _this$state.images;
|
|
240
|
+
var moduleProps = this.props.moduleProps;
|
|
241
|
+
if (!model || !images || Object.keys(images).length === 0 || !Object.values(images).every(function (item) {
|
|
242
|
+
return item;
|
|
243
|
+
})) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Set mesh-specific UBO uniforms
|
|
248
|
+
model.shaderInputs.setProps({
|
|
249
|
+
rasterMesh: {
|
|
250
|
+
meshOpacity: (_this$props$opacity = this.props.opacity) !== null && _this$props$opacity !== void 0 ? _this$props$opacity : 1,
|
|
251
|
+
meshFlatShading: !this.state.hasNormals ? 1.0 : 0.0
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
// Apply each custom module's uniforms/bindings to shaderInputs directly.
|
|
256
|
+
// We call getUniforms once per module and write the results into
|
|
257
|
+
// shaderInputs.moduleUniforms/moduleBindings, bypassing setProps() which
|
|
258
|
+
// would call getUniforms a second time on already-transformed values.
|
|
259
|
+
var allModuleProps = _objectSpread(_objectSpread({}, moduleProps), images);
|
|
260
|
+
var modules = this.props.modules || [];
|
|
261
|
+
(0, _util.applyModuleUniforms)(model.shaderInputs, modules, allModuleProps);
|
|
262
|
+
var drawSuccess = model.draw(this.context.renderPass);
|
|
263
|
+
if (!drawSuccess) {
|
|
264
|
+
this._scheduleRedraw();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}, {
|
|
268
|
+
key: "_scheduleRedraw",
|
|
269
|
+
value: function _scheduleRedraw() {
|
|
270
|
+
var _this2 = this;
|
|
271
|
+
if (this._redrawScheduled) return;
|
|
272
|
+
this._redrawScheduled = true;
|
|
273
|
+
requestAnimationFrame(function () {
|
|
274
|
+
var _this2$context$layerM;
|
|
275
|
+
_this2._redrawScheduled = false;
|
|
276
|
+
if (_this2.context.deck) {
|
|
277
|
+
// @ts-expect-error accessing private deck.gl property
|
|
278
|
+
_this2.context.deck._needsRedraw = 'RasterMeshLayer pipeline pending';
|
|
279
|
+
}
|
|
280
|
+
(_this2$context$layerM = _this2.context.layerManager) === null || _this2$context$layerM === void 0 || _this2$context$layerM.setNeedsRedraw('RasterMeshLayer pipeline pending');
|
|
281
|
+
if (typeof _this2.props.onRedrawNeeded === 'function') {
|
|
282
|
+
_this2.props.onRedrawNeeded();
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}, {
|
|
287
|
+
key: "finalizeState",
|
|
288
|
+
value: function finalizeState() {
|
|
289
|
+
_superPropGet(RasterMeshLayer, "finalizeState", this, 3)([this.context]);
|
|
290
|
+
if (this.state.images) {
|
|
291
|
+
for (var _i = 0, _Object$values = Object.values(this.state.images); _i < _Object$values.length; _i++) {
|
|
292
|
+
var image = _Object$values[_i];
|
|
293
|
+
if (Array.isArray(image)) {
|
|
294
|
+
image.map(function (x) {
|
|
295
|
+
var _x$delete;
|
|
296
|
+
return x && (x.destroy ? x.destroy() : (_x$delete = x["delete"]) === null || _x$delete === void 0 ? void 0 : _x$delete.call(x));
|
|
297
|
+
});
|
|
298
|
+
} else if (image) {
|
|
299
|
+
var _image$delete;
|
|
300
|
+
image.destroy ? image.destroy() : (_image$delete = image["delete"]) === null || _image$delete === void 0 ? void 0 : _image$delete.call(image);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}, {
|
|
306
|
+
key: "getModel",
|
|
307
|
+
value: function getModel(mesh) {
|
|
308
|
+
var device = this.context.device || this.context.gl;
|
|
309
|
+
var model = new _engine.Model(device, Object.assign({}, this.getShaders(), {
|
|
310
|
+
id: this.props.id,
|
|
311
|
+
geometry: getGeometry(mesh),
|
|
312
|
+
isInstanced: false
|
|
313
|
+
}));
|
|
314
|
+
return model;
|
|
315
|
+
}
|
|
316
|
+
}]);
|
|
317
|
+
}(_meshLayers.SimpleMeshLayer);
|
|
318
|
+
(0, _defineProperty2["default"])(RasterMeshLayer, "MAX_IMAGE_RETRY_ATTEMPTS", 3);
|
|
319
|
+
RasterMeshLayer.layerName = 'RasterMeshLayer';
|
|
320
|
+
RasterMeshLayer.defaultProps = defaultProps;
|
|
321
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVzaExheWVycyIsInJlcXVpcmUiLCJfZW5naW5lIiwiX3Jhc3Rlck1lc2hMYXllclNoYWRlcnMiLCJfcmFzdGVyTGF5ZXJTaGFkZXJzIiwiX2ltYWdlcyIsIl91dGlsIiwiX3BpcGVsaW5lVmFsaWRhdGlvblBhdGNoIiwiX3Jhc3RlclByb2Nlc3NpbmdVbmlmb3JtcyIsIl9jb25zdGFudHMiLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJyIiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJwb3NpdGlvbnMiLCJQT1NJVElPTiIsIkVycm9yIiwiZ2V0R2VvbWV0cnkiLCJkYXRhIiwiR2VvbWV0cnkiLCJkZWZhdWx0UHJvcHMiLCJTaW1wbGVNZXNoTGF5ZXIiLCJtb2R1bGVzIiwidHlwZSIsInZhbHVlIiwiY29tcGFyZSIsImltYWdlcyIsIm1vZHVsZVByb3BzIiwib25SZWRyYXdOZWVkZWQiLCJSYXN0ZXJNZXNoTGF5ZXIiLCJleHBvcnRzIiwiX1NpbXBsZU1lc2hMYXllciIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJpbml0aWFsaXplU3RhdGUiLCJwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbiIsImVuc3VyZVJhc3Rlckhvb2tzUmVnaXN0ZXJlZCIsInNldFN0YXRlIiwiZ2V0U2hhZGVycyIsIl90aGlzJHByb3BzJG1vZHVsZXMiLCJwcm9wcyIsImx1bWFNb2R1bGVzIiwicHJlcGFyZUx1bWFNb2R1bGVzIiwicGFyZW50U2hhZGVycyIsInBhcmVudE1vZHVsZXMiLCJtIiwibmFtZSIsInZzIiwiYnVpbGRSYXN0ZXJNZXNoVmVydGV4U2hhZGVyIiwiZnMiLCJidWlsZFJhc3Rlck1lc2hGcmFnbWVudFNoYWRlciIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJyYXN0ZXJNZXNoVW5pZm9ybXMiLCJyYXN0ZXJQcm9jZXNzaW5nVW5pZm9ybXMiLCJ1cGRhdGVTdGF0ZSIsInBhcmFtcyIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJjb250ZXh0Iiwib2xkTW9kdWxlcyIsIm1lc2giLCJleHRlbnNpb25zQ2hhbmdlZCIsIm1vZHVsZXNFcXVhbCIsIl90aGlzJGdldEF0dHJpYnV0ZU1hbiIsInN0YXRlIiwibW9kZWwiLCJfdGhpcyRzdGF0ZSRtb2RlbCRkZXMiLCJfdGhpcyRzdGF0ZSRtb2RlbCIsImRlc3Ryb3kiLCJnZXRNb2RlbCIsImhhc05vcm1hbHMiLCJOT1JNQUwiLCJub3JtYWxzIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImludmFsaWRhdGVBbGwiLCJ1cGRhdGVJbWFnZXMiLCJfdGhpcyRzdGF0ZSRtb2RlbCRzZXQiLCJfdGhpcyRzdGF0ZSRtb2RlbDIiLCJzZXRUb3BvbG9neSIsIndpcmVmcmFtZSIsIlRPUE9MT0dZIiwiTElORV9TVFJJUCIsIlRSSUFOR0xFX0xJU1QiLCJfcmVmIiwiZGV2aWNlIiwiZ2wiLCJfbG9hZEltYWdlcyIsImxvYWRJbWFnZXMiLCJpbWFnZXNEYXRhIiwib2xkSW1hZ2VzRGF0YSIsIm5ld0ltYWdlcyIsImhhc1BlbmRpbmdVcGxvYWRzIiwiX3BlbmRpbmdJbWFnZVJldHJ5IiwiX2ltYWdlUmV0cnlDb3VudCIsIl9zY2hlZHVsZVJlZHJhdyIsImRyYXciLCJfb3B0cyIsIl90aGlzJHByb3BzJG9wYWNpdHkiLCJfdGhpcyRjb250ZXh0JGRldmljZSIsInJldHJ5IiwiX2xvYWRJbWFnZXMyIiwiTUFYX0lNQUdFX1JFVFJZX0FUVEVNUFRTIiwiY29uc29sZSIsIndhcm4iLCJfdGhpcyRzdGF0ZSIsInZhbHVlcyIsImV2ZXJ5IiwiaXRlbSIsInNoYWRlcklucHV0cyIsInNldFByb3BzIiwicmFzdGVyTWVzaCIsIm1lc2hPcGFjaXR5Iiwib3BhY2l0eSIsIm1lc2hGbGF0U2hhZGluZyIsImFsbE1vZHVsZVByb3BzIiwiYXBwbHlNb2R1bGVVbmlmb3JtcyIsImRyYXdTdWNjZXNzIiwicmVuZGVyUGFzcyIsIl90aGlzMiIsIl9yZWRyYXdTY2hlZHVsZWQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJfdGhpczIkY29udGV4dCRsYXllck0iLCJkZWNrIiwiX25lZWRzUmVkcmF3IiwibGF5ZXJNYW5hZ2VyIiwic2V0TmVlZHNSZWRyYXciLCJmaW5hbGl6ZVN0YXRlIiwiX2kiLCJfT2JqZWN0JHZhbHVlcyIsImltYWdlIiwiaXNBcnJheSIsIm1hcCIsIngiLCJfeCRkZWxldGUiLCJfaW1hZ2UkZGVsZXRlIiwiTW9kZWwiLCJhc3NpZ24iLCJpZCIsImdlb21ldHJ5IiwiaXNJbnN0YW5jZWQiLCJsYXllck5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3Jhc3Rlci1tZXNoLWxheWVyL3Jhc3Rlci1tZXNoLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7VXBkYXRlUGFyYW1ldGVyc30gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NpbXBsZU1lc2hMYXllciwgU2ltcGxlTWVzaExheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL21lc2gtbGF5ZXJzJztcbmltcG9ydCB7R2VvbWV0cnl9IGZyb20gJ0BsdW1hLmdsL2VuZ2luZSc7XG5pbXBvcnQge01vZGVsfSBmcm9tICdAbHVtYS5nbC9lbmdpbmUnO1xuXG5pbXBvcnQge1xuICBidWlsZFJhc3Rlck1lc2hGcmFnbWVudFNoYWRlcixcbiAgYnVpbGRSYXN0ZXJNZXNoVmVydGV4U2hhZGVyLFxuICByYXN0ZXJNZXNoVW5pZm9ybXNcbn0gZnJvbSAnLi9yYXN0ZXItbWVzaC1sYXllci1zaGFkZXJzJztcbmltcG9ydCB7XG4gIGVuc3VyZVJhc3Rlckhvb2tzUmVnaXN0ZXJlZCxcbiAgcHJlcGFyZUx1bWFNb2R1bGVzXG59IGZyb20gJy4uL3Jhc3Rlci1sYXllci9yYXN0ZXItbGF5ZXItc2hhZGVycyc7XG5pbXBvcnQge2xvYWRJbWFnZXN9IGZyb20gJy4uL2ltYWdlcyc7XG5pbXBvcnQgdHlwZSB7UmFzdGVyTGF5ZXJBZGRlZFByb3BzLCBJbWFnZVN0YXRlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge21vZHVsZXNFcXVhbCwgYXBwbHlNb2R1bGVVbmlmb3Jtc30gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge3BhdGNoUGlwZWxpbmVWYWxpZGF0aW9ufSBmcm9tICcuLi9waXBlbGluZS12YWxpZGF0aW9uLXBhdGNoJztcbmltcG9ydCB7cmFzdGVyUHJvY2Vzc2luZ1VuaWZvcm1zfSBmcm9tICcuLi9yYXN0ZXItcHJvY2Vzc2luZy11bmlmb3Jtcyc7XG5pbXBvcnQge1RPUE9MT0dZfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbnR5cGUgTWVzaCA9IFNpbXBsZU1lc2hMYXllclByb3BzWydtZXNoJ107XG5cbmludGVyZmFjZSBNZXNoRGF0YSB7XG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcG9zaXRpb25zPzogdW5rbm93bjtcbiAgUE9TSVRJT04/OiB1bmtub3duO1xuICBOT1JNQUw/OiB1bmtub3duO1xuICBub3JtYWxzPzogdW5rbm93bjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVHZW9tZXRyeUF0dHJpYnV0ZXMoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgaWYgKCEoYXR0cmlidXRlcy5wb3NpdGlvbnMgfHwgYXR0cmlidXRlcy5QT1NJVElPTikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnUmFzdGVyTWVzaExheWVyIHJlcXVpcmVzIFwicG9zaXRpb25zXCIgb3IgXCJQT1NJVElPTlwiIGF0dHJpYnV0ZSBpbiBtZXNoIHByb3BlcnR5LidcbiAgICApO1xuICB9XG59XG5cbi8qXG4gKiBDb252ZXJ0IG1lc2ggZGF0YSBpbnRvIGdlb21ldHJ5XG4gKiBAcmV0dXJucyBnZW9tZXRyeVxuICovXG5mdW5jdGlvbiBnZXRHZW9tZXRyeShkYXRhOiBNZXNoRGF0YSB8IEdlb21ldHJ5KTogR2VvbWV0cnkge1xuICBpZiAoJ2F0dHJpYnV0ZXMnIGluIGRhdGEgJiYgZGF0YS5hdHRyaWJ1dGVzKSB7XG4gICAgdmFsaWRhdGVHZW9tZXRyeUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKTtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEdlb21ldHJ5KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBHZW9tZXRyeShkYXRhIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR2VvbWV0cnk+WzBdKTtcbiAgfSBlbHNlIGlmICgncG9zaXRpb25zJyBpbiBkYXRhIHx8ICdQT1NJVElPTicgaW4gZGF0YSkge1xuICAgIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIHJldHVybiBuZXcgR2VvbWV0cnkoe1xuICAgICAgYXR0cmlidXRlczogZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIH0gYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBHZW9tZXRyeT5bMF0pO1xuICB9XG4gIHRocm93IEVycm9yKCdJbnZhbGlkIG1lc2gnKTtcbn1cblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAuLi5TaW1wbGVNZXNoTGF5ZXIuZGVmYXVsdFByb3BzLFxuICBtb2R1bGVzOiB7dHlwZTogJ2FycmF5JywgdmFsdWU6IFtdLCBjb21wYXJlOiB0cnVlfSxcbiAgaW1hZ2VzOiB7dHlwZTogJ29iamVjdCcsIHZhbHVlOiB7fSwgY29tcGFyZTogdHJ1ZX0sXG4gIG1vZHVsZVByb3BzOiB7dHlwZTogJ29iamVjdCcsIHZhbHVlOiB7fSwgY29tcGFyZTogdHJ1ZX0sXG4gIG9uUmVkcmF3TmVlZGVkOiB7dHlwZTogJ2Z1bmN0aW9uJywgdmFsdWU6IG51bGwsIGNvbXBhcmU6IGZhbHNlfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFzdGVyTWVzaExheWVyIGV4dGVuZHMgU2ltcGxlTWVzaExheWVyPGFueSwgUmFzdGVyTGF5ZXJBZGRlZFByb3BzPiB7XG4gIGRlY2xhcmUgc3RhdGU6IFNpbXBsZU1lc2hMYXllcjxSYXN0ZXJMYXllckFkZGVkUHJvcHM+WydzdGF0ZSddICYge1xuICAgIGltYWdlczogSW1hZ2VTdGF0ZTtcbiAgfTtcblxuICBfcmVkcmF3U2NoZWR1bGVkID0gZmFsc2U7XG4gIF9wZW5kaW5nSW1hZ2VSZXRyeTogUmFzdGVyTGF5ZXJBZGRlZFByb3BzWydpbWFnZXMnXSB8IG51bGwgPSBudWxsO1xuICAvKiogSG93IG1hbnkgY29uc2VjdXRpdmUgZnJhbWVzIGhhdmUgcmV0cmllZCBhIGZhaWxlZCB0ZXh0dXJlIHVwbG9hZC4gKi9cbiAgX2ltYWdlUmV0cnlDb3VudCA9IDA7XG4gIHN0YXRpYyByZWFkb25seSBNQVhfSU1BR0VfUkVUUllfQVRURU1QVFMgPSAzO1xuXG4gIGluaXRpYWxpemVTdGF0ZSgpOiB2b2lkIHtcbiAgICBwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbigpO1xuICAgIGVuc3VyZVJhc3Rlckhvb2tzUmVnaXN0ZXJlZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlczoge319KTtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICBjb25zdCB7bW9kdWxlcyA9IFtdfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBsdW1hTW9kdWxlcyA9IHByZXBhcmVMdW1hTW9kdWxlcyhtb2R1bGVzKTtcbiAgICBjb25zdCBwYXJlbnRTaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuXG4gICAgLy8gRmlsdGVyIG91dCBzaW1wbGVNZXNoVW5pZm9ybXMgZnJvbSBwYXJlbnQg4oCUIFJhc3Rlck1lc2hMYXllciB1c2VzIGl0cyBvd25cbiAgICAvLyBzaGFkZXJzIHRoYXQgZG9uJ3QgcmVmZXJlbmNlIFNpbXBsZU1lc2ggdW5pZm9ybXMsIGFuZCBldmVyeSBVQk8gY291bnRzXG4gICAgLy8gYWdhaW5zdCB0aGUgV2ViR0wyIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JVRkZFUlMgbGltaXQgKHR5cGljYWxseSAxMikuXG4gICAgY29uc3QgcGFyZW50TW9kdWxlcyA9IChwYXJlbnRTaGFkZXJzLm1vZHVsZXMgfHwgW10pLmZpbHRlcihcbiAgICAgIChtOiB7bmFtZT86IHN0cmluZ30pID0+IG0ubmFtZSAhPT0gJ3NpbXBsZU1lc2gnXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJlbnRTaGFkZXJzLFxuICAgICAgdnM6IGJ1aWxkUmFzdGVyTWVzaFZlcnRleFNoYWRlcigpLFxuICAgICAgZnM6IGJ1aWxkUmFzdGVyTWVzaEZyYWdtZW50U2hhZGVyKCksXG4gICAgICBtb2R1bGVzOiBbLi4ucGFyZW50TW9kdWxlcywgcmFzdGVyTWVzaFVuaWZvcm1zLCByYXN0ZXJQcm9jZXNzaW5nVW5pZm9ybXMsIC4uLmx1bWFNb2R1bGVzXVxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVTdGF0ZShwYXJhbXM6IFVwZGF0ZVBhcmFtZXRlcnM8U2ltcGxlTWVzaExheWVyPGFueSwgUmFzdGVyTGF5ZXJBZGRlZFByb3BzPj4pOiB2b2lkIHtcbiAgICBjb25zdCB7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFncywgY29udGV4dH0gPSBwYXJhbXM7XG4gICAgc3VwZXIudXBkYXRlU3RhdGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3MsIGNvbnRleHR9KTtcblxuICAgIGNvbnN0IG1vZHVsZXMgPSBwcm9wcyAmJiBwcm9wcy5tb2R1bGVzO1xuICAgIGNvbnN0IG9sZE1vZHVsZXMgPSBvbGRQcm9wcyAmJiBvbGRQcm9wcy5tb2R1bGVzO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMubWVzaCAhPT0gb2xkUHJvcHMubWVzaCB8fFxuICAgICAgY2hhbmdlRmxhZ3MuZXh0ZW5zaW9uc0NoYW5nZWQgfHxcbiAgICAgICFtb2R1bGVzRXF1YWwobW9kdWxlcywgb2xkTW9kdWxlcylcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubW9kZWwuZGVzdHJveT8uKCk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMubWVzaCkge1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVsID0gdGhpcy5nZXRNb2RlbChwcm9wcy5tZXNoIGFzIE1lc2gpO1xuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAoKHByb3BzLm1lc2ggYXMgTWVzaERhdGEpLmF0dHJpYnV0ZXMgfHwgcHJvcHMubWVzaCkgYXMgTWVzaERhdGE7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc05vcm1hbHM6IEJvb2xlYW4oYXR0cmlidXRlcy5OT1JNQUwgfHwgYXR0cmlidXRlcy5ub3JtYWxzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5pbnZhbGlkYXRlQWxsKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICYmIHByb3BzLmltYWdlcykge1xuICAgICAgdGhpcy51cGRhdGVJbWFnZXMoe3Byb3BzLCBvbGRQcm9wc30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLm1vZGVsKSB7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsLnNldFRvcG9sb2d5Py4oXG4gICAgICAgIHRoaXMucHJvcHMud2lyZWZyYW1lID8gVE9QT0xPR1kuTElORV9TVFJJUCA6IFRPUE9MT0dZLlRSSUFOR0xFX0xJU1RcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSW1hZ2VzKHtcbiAgICBwcm9wcyxcbiAgICBvbGRQcm9wc1xuICB9OiB7XG4gICAgcHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgICBvbGRQcm9wczogUmFzdGVyTGF5ZXJBZGRlZFByb3BzO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3Qge2ltYWdlc30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGRldmljZSA9IHRoaXMuY29udGV4dC5kZXZpY2U7XG4gICAgY29uc3QgZ2wgPSBkZXZpY2U/LmdsIHx8IHRoaXMuY29udGV4dC5nbDtcblxuICAgIGNvbnN0IHtpbWFnZXM6IG5ld0ltYWdlcywgaGFzUGVuZGluZ1VwbG9hZHN9ID0gbG9hZEltYWdlcyh7XG4gICAgICBnbCxcbiAgICAgIGRldmljZSxcbiAgICAgIGltYWdlcyxcbiAgICAgIGltYWdlc0RhdGE6IHByb3BzLmltYWdlcyxcbiAgICAgIG9sZEltYWdlc0RhdGE6IG9sZFByb3BzLmltYWdlc1xuICAgIH0pO1xuXG4gICAgaWYgKG5ld0ltYWdlcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VzOiBuZXdJbWFnZXN9KTtcbiAgICB9XG4gICAgLy8gSWYgYW55IHRleHR1cmUgdXBsb2FkIGZhaWxlZCwgc3Rhc2ggdGhlIGltYWdlc0RhdGEgYW5kIHNjaGVkdWxlIGEgcmV0cnlcbiAgICAvLyBuZXh0IGZyYW1lLiBUaGUgcmV0cnkgcGFzc2VzIG9sZEltYWdlc0RhdGE6IHt9IHNvIGFsbCBrZXlzIGJ5cGFzcyB0aGVcbiAgICAvLyBpc0VxdWFsIHNraXAtY2hlY2suXG4gICAgaWYgKGhhc1BlbmRpbmdVcGxvYWRzKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nSW1hZ2VSZXRyeSA9IHByb3BzLmltYWdlcztcbiAgICAgIHRoaXMuX2ltYWdlUmV0cnlDb3VudCA9IDA7XG4gICAgICB0aGlzLl9zY2hlZHVsZVJlZHJhdygpO1xuICAgIH1cbiAgfVxuXG4gIGRyYXcoX29wdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gSWYgYSBwcmV2aW91cyBmcmFtZSBoYWQgZmFpbGVkIHRleHR1cmUgdXBsb2FkcywgcmV0cnkgdGhlbSBub3cgYmVmb3JlXG4gICAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgaW1hZ2VzIHN0YXRlIGlzIGNvbXBsZXRlLiBQYXNzIG9sZEltYWdlc0RhdGE6IHt9IHNvXG4gICAgLy8gYWxsIGtleXMgYXJlIHRyZWF0ZWQgYXMgbmV3IGFuZCBieXBhc3MgdGhlIGlzRXF1YWwgc2tpcC1jaGVjay5cbiAgICAvLyBSZXRyaWVzIGFyZSBib3VuZGVkIHRvIE1BWF9JTUFHRV9SRVRSWV9BVFRFTVBUUyB0byBhdm9pZCBhbiBpbmZpbml0ZVxuICAgIC8vIHJlZHJhdyBsb29wIHdoZW4gaW1hZ2UgZGF0YSBpcyBwZXJtYW5lbnRseSBpbnZhbGlkLlxuICAgIGlmICh0aGlzLl9wZW5kaW5nSW1hZ2VSZXRyeSkge1xuICAgICAgY29uc3QgcmV0cnkgPSB0aGlzLl9wZW5kaW5nSW1hZ2VSZXRyeTtcbiAgICAgIHRoaXMuX3BlbmRpbmdJbWFnZVJldHJ5ID0gbnVsbDtcbiAgICAgIGNvbnN0IHtpbWFnZXM6IG5ld0ltYWdlcywgaGFzUGVuZGluZ1VwbG9hZHN9ID0gbG9hZEltYWdlcyh7XG4gICAgICAgIGdsOiB0aGlzLmNvbnRleHQuZGV2aWNlPy5nbCB8fCB0aGlzLmNvbnRleHQuZ2wsXG4gICAgICAgIGRldmljZTogdGhpcy5jb250ZXh0LmRldmljZSxcbiAgICAgICAgaW1hZ2VzOiB0aGlzLnN0YXRlLmltYWdlcyxcbiAgICAgICAgaW1hZ2VzRGF0YTogcmV0cnksXG4gICAgICAgIG9sZEltYWdlc0RhdGE6IHt9XG4gICAgICB9KTtcbiAgICAgIGlmIChuZXdJbWFnZXMpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VzOiBuZXdJbWFnZXN9KTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNQZW5kaW5nVXBsb2Fkcykge1xuICAgICAgICB0aGlzLl9pbWFnZVJldHJ5Q291bnQrKztcbiAgICAgICAgaWYgKHRoaXMuX2ltYWdlUmV0cnlDb3VudCA8IFJhc3Rlck1lc2hMYXllci5NQVhfSU1BR0VfUkVUUllfQVRURU1QVFMpIHtcbiAgICAgICAgICB0aGlzLl9wZW5kaW5nSW1hZ2VSZXRyeSA9IHJldHJ5O1xuICAgICAgICAgIHRoaXMuX3NjaGVkdWxlUmVkcmF3KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFJhc3Rlck1lc2hMYXllcjogdGV4dHVyZSB1cGxvYWQgZmFpbGVkIGFmdGVyICR7UmFzdGVyTWVzaExheWVyLk1BWF9JTUFHRV9SRVRSWV9BVFRFTVBUU30gYXR0ZW1wdHMsIGdpdmluZyB1cC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9pbWFnZVJldHJ5Q291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbWFnZVJldHJ5Q291bnQgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHttb2RlbCwgaW1hZ2VzfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge21vZHVsZVByb3BzfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoXG4gICAgICAhbW9kZWwgfHxcbiAgICAgICFpbWFnZXMgfHxcbiAgICAgIE9iamVjdC5rZXlzKGltYWdlcykubGVuZ3RoID09PSAwIHx8XG4gICAgICAhT2JqZWN0LnZhbHVlcyhpbWFnZXMpLmV2ZXJ5KGl0ZW0gPT4gaXRlbSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgbWVzaC1zcGVjaWZpYyBVQk8gdW5pZm9ybXNcbiAgICBtb2RlbC5zaGFkZXJJbnB1dHMuc2V0UHJvcHMoe1xuICAgICAgcmFzdGVyTWVzaDoge1xuICAgICAgICBtZXNoT3BhY2l0eTogdGhpcy5wcm9wcy5vcGFjaXR5ID8/IDEsXG4gICAgICAgIG1lc2hGbGF0U2hhZGluZzogIXRoaXMuc3RhdGUuaGFzTm9ybWFscyA/IDEuMCA6IDAuMFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQXBwbHkgZWFjaCBjdXN0b20gbW9kdWxlJ3MgdW5pZm9ybXMvYmluZGluZ3MgdG8gc2hhZGVySW5wdXRzIGRpcmVjdGx5LlxuICAgIC8vIFdlIGNhbGwgZ2V0VW5pZm9ybXMgb25jZSBwZXIgbW9kdWxlIGFuZCB3cml0ZSB0aGUgcmVzdWx0cyBpbnRvXG4gICAgLy8gc2hhZGVySW5wdXRzLm1vZHVsZVVuaWZvcm1zL21vZHVsZUJpbmRpbmdzLCBieXBhc3Npbmcgc2V0UHJvcHMoKSB3aGljaFxuICAgIC8vIHdvdWxkIGNhbGwgZ2V0VW5pZm9ybXMgYSBzZWNvbmQgdGltZSBvbiBhbHJlYWR5LXRyYW5zZm9ybWVkIHZhbHVlcy5cbiAgICBjb25zdCBhbGxNb2R1bGVQcm9wcyA9IHsuLi5tb2R1bGVQcm9wcywgLi4uaW1hZ2VzfTtcbiAgICBjb25zdCBtb2R1bGVzID0gdGhpcy5wcm9wcy5tb2R1bGVzIHx8IFtdO1xuICAgIGFwcGx5TW9kdWxlVW5pZm9ybXMobW9kZWwuc2hhZGVySW5wdXRzLCBtb2R1bGVzLCBhbGxNb2R1bGVQcm9wcyk7XG5cbiAgICBjb25zdCBkcmF3U3VjY2VzcyA9IG1vZGVsLmRyYXcodGhpcy5jb250ZXh0LnJlbmRlclBhc3MpO1xuICAgIGlmICghZHJhd1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuX3NjaGVkdWxlUmVkcmF3KCk7XG4gICAgfVxuICB9XG5cbiAgX3NjaGVkdWxlUmVkcmF3KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWRyYXdTY2hlZHVsZWQpIHJldHVybjtcbiAgICB0aGlzLl9yZWRyYXdTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWRyYXdTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuZGVjaykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIGRlY2suZ2wgcHJvcGVydHlcbiAgICAgICAgdGhpcy5jb250ZXh0LmRlY2suX25lZWRzUmVkcmF3ID0gJ1Jhc3Rlck1lc2hMYXllciBwaXBlbGluZSBwZW5kaW5nJztcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGV4dC5sYXllck1hbmFnZXI/LnNldE5lZWRzUmVkcmF3KCdSYXN0ZXJNZXNoTGF5ZXIgcGlwZWxpbmUgcGVuZGluZycpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uUmVkcmF3TmVlZGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25SZWRyYXdOZWVkZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZpbmFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgc3VwZXIuZmluYWxpemVTdGF0ZSh0aGlzLmNvbnRleHQpO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaW1hZ2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zdGF0ZS5pbWFnZXMpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGltYWdlKSkge1xuICAgICAgICAgIGltYWdlLm1hcCh4ID0+IHggJiYgKHguZGVzdHJveSA/IHguZGVzdHJveSgpIDogeC5kZWxldGU/LigpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZS5kZXN0cm95ID8gaW1hZ2UuZGVzdHJveSgpIDogaW1hZ2UuZGVsZXRlPy4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRNb2RlbChtZXNoOiBNZXNoKTogTW9kZWwge1xuICAgIGNvbnN0IGRldmljZSA9IHRoaXMuY29udGV4dC5kZXZpY2UgfHwgdGhpcy5jb250ZXh0LmdsO1xuXG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTW9kZWwoXG4gICAgICBkZXZpY2UsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFNoYWRlcnMoKSwge1xuICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgZ2VvbWV0cnk6IGdldEdlb21ldHJ5KG1lc2ggYXMgTWVzaERhdGEgfCBHZW9tZXRyeSksXG4gICAgICAgIGlzSW5zdGFuY2VkOiBmYWxzZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG59XG5cblJhc3Rlck1lc2hMYXllci5sYXllck5hbWUgPSAnUmFzdGVyTWVzaExheWVyJztcblJhc3Rlck1lc2hMYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUdBLElBQUFFLHVCQUFBLEdBQUFGLE9BQUE7QUFLQSxJQUFBRyxtQkFBQSxHQUFBSCxPQUFBO0FBSUEsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sd0JBQUEsR0FBQU4sT0FBQTtB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
|