@deck.gl/extensions 9.3.7 → 9.4.0-alpha.1
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/dist.dev.js +81 -35
- package/dist/fill-style/shader-module.d.ts +1 -1
- package/dist/index.cjs +78 -35
- package/dist/index.cjs.map +4 -4
- package/dist/mask/shader-module.d.ts +1 -1
- package/dist/terrain/height-map-builder.d.ts.map +1 -1
- package/dist/terrain/height-map-builder.js +16 -10
- package/dist/terrain/height-map-builder.js.map +1 -1
- package/dist/terrain/shader-module.d.ts +6 -6
- package/dist/terrain/shader-module.d.ts.map +1 -1
- package/dist/terrain/shader-module.js +38 -11
- package/dist/terrain/shader-module.js.map +1 -1
- package/dist/terrain/terrain-cover.d.ts.map +1 -1
- package/dist/terrain/terrain-cover.js +10 -5
- package/dist/terrain/terrain-cover.js.map +1 -1
- package/dist/utils/projection-utils.d.ts +4 -0
- package/dist/utils/projection-utils.d.ts.map +1 -1
- package/dist/utils/projection-utils.js +25 -5
- package/dist/utils/projection-utils.js.map +1 -1
- package/dist.min.js +95 -65
- package/package.json +3 -3
- package/src/terrain/height-map-builder.ts +25 -10
- package/src/terrain/shader-module.ts +38 -11
- package/src/terrain/terrain-cover.ts +21 -5
- package/src/utils/projection-utils.ts +28 -5
|
@@ -21,7 +21,7 @@ declare const _default: {
|
|
|
21
21
|
readonly name: "geometry";
|
|
22
22
|
readonly source: "const SMOOTH_EDGE_RADIUS: f32 = 0.5;\n\nstruct VertexGeometry {\n position: vec4<f32>,\n worldPosition: vec3<f32>,\n worldPositionAlt: vec3<f32>,\n normal: vec3<f32>,\n uv: vec2<f32>,\n pickingColor: vec3<f32>,\n};\n\nvar<private> geometry_: VertexGeometry = VertexGeometry(\n vec4<f32>(0.0, 0.0, 1.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec2<f32>(0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0)\n);\n\nstruct FragmentGeometry {\n uv: vec2<f32>,\n};\n\nvar<private> fragmentGeometry: FragmentGeometry;\n\nfn smoothedge(edge: f32, x: f32) -> f32 {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n";
|
|
23
23
|
readonly vs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n";
|
|
24
|
-
readonly fs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n";
|
|
24
|
+
readonly fs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct FragmentGeometry {\n vec2 uv;\n};\nFragmentGeometry geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n";
|
|
25
25
|
}];
|
|
26
26
|
readonly source: string;
|
|
27
27
|
readonly vs: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"height-map-builder.d.ts","sourceRoot":"","sources":["../../src/terrain/height-map-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"height-map-builder.d.ts","sourceRoot":"","sources":["../../src/terrain/height-map-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EAML,MAAM,EACP,qCAAkC;AAInC,OAAO,KAAK,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,eAAe,CAAC;AAInD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,6CAA6C;IAC7C,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACvC,2DAA2D;IAC3D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7B,SAAS,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC;IAC5B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,OAAO,CAAC,MAAM,CAAe;IAC7B,6BAA6B;IAC7B,OAAO,CAAC,YAAY,CAAuC;IAC3D,mDAAmD;IACnD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,YAAY,CAAyB;IAE7C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;gBAI/B,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,oBAAoB,IAAI,WAAW,GAAG,IAAI;IAU1C,yEAAyE;IACzE,YAAY,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,EAAE;QAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAC,GAAG,OAAO;IAwEhF,MAAM;CAMP"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// deck.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
-
import { joinLayerBounds, getRenderBounds, makeViewport } from "../utils/projection-utils.js";
|
|
4
|
+
import { joinLayerBounds, getRenderBounds, makeViewport, getMercatorReferenceViewport, lngLatToMercatorCommon } from "../utils/projection-utils.js";
|
|
5
5
|
import { createRenderTarget } from "./utils.js";
|
|
6
|
+
import { _GlobeViewport as GlobeViewport } from '@deck.gl/core';
|
|
6
7
|
const MAP_MAX_SIZE = 2048;
|
|
7
8
|
/**
|
|
8
9
|
* Manages the lifecycle of the height map (a framebuffer that encodes elevation).
|
|
@@ -55,17 +56,20 @@ export class HeightMapBuilder {
|
|
|
55
56
|
// Layer's geometry bounds have changed
|
|
56
57
|
layer.getBounds() !== this.layersBounds[i]);
|
|
57
58
|
if (layersChanged) {
|
|
58
|
-
// Recalculate cached bounds
|
|
59
|
+
// Recalculate cached bounds in absolute Mercator common space
|
|
59
60
|
this.layers = layers;
|
|
60
61
|
this.layersBounds = layers.map(layer => layer.getBounds());
|
|
61
|
-
this.layersBoundsCommon = joinLayerBounds(layers, viewport);
|
|
62
|
+
this.layersBoundsCommon = joinLayerBounds(layers, getMercatorReferenceViewport(viewport));
|
|
62
63
|
}
|
|
63
64
|
const viewportChanged = !this.lastViewport || !viewport.equals(this.lastViewport);
|
|
64
65
|
if (!this.layersBoundsCommon) {
|
|
65
66
|
this.renderViewport = null;
|
|
66
67
|
}
|
|
67
68
|
else if (layersChanged || viewportChanged) {
|
|
68
|
-
|
|
69
|
+
// On GlobeView, viewport bounds are sphere cartesian — skip intersection
|
|
70
|
+
const bounds = viewport instanceof GlobeViewport
|
|
71
|
+
? this.layersBoundsCommon
|
|
72
|
+
: getRenderBounds(this.layersBoundsCommon, viewport);
|
|
69
73
|
if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {
|
|
70
74
|
this.renderViewport = null;
|
|
71
75
|
return false;
|
|
@@ -75,6 +79,13 @@ export class HeightMapBuilder {
|
|
|
75
79
|
const scale = viewport.scale;
|
|
76
80
|
const pixelWidth = (bounds[2] - bounds[0]) * scale;
|
|
77
81
|
const pixelHeight = (bounds[3] - bounds[1]) * scale;
|
|
82
|
+
// Use Mercator center — viewport.center on GlobeView is sphere cartesian
|
|
83
|
+
const centerMerc = viewport.isGeospatial
|
|
84
|
+
? lngLatToMercatorCommon([
|
|
85
|
+
viewport.longitude ?? 0,
|
|
86
|
+
viewport.latitude ?? 0
|
|
87
|
+
])
|
|
88
|
+
: [viewport.center[0], viewport.center[1]];
|
|
78
89
|
this.renderViewport =
|
|
79
90
|
pixelWidth > 0 || pixelHeight > 0
|
|
80
91
|
? makeViewport({
|
|
@@ -82,12 +93,7 @@ export class HeightMapBuilder {
|
|
|
82
93
|
// vertices will not use the standard project_to_clipspace in the DRAW_TO_HEIGHT_MAP shader
|
|
83
94
|
// However the viewport must have the same center and zoom as the screen viewport
|
|
84
95
|
// So that projection uniforms used for calculating z are the same
|
|
85
|
-
bounds: [
|
|
86
|
-
viewport.center[0] - 1,
|
|
87
|
-
viewport.center[1] - 1,
|
|
88
|
-
viewport.center[0] + 1,
|
|
89
|
-
viewport.center[1] + 1
|
|
90
|
-
],
|
|
96
|
+
bounds: [centerMerc[0] - 1, centerMerc[1] - 1, centerMerc[0] + 1, centerMerc[1] + 1],
|
|
91
97
|
zoom: viewport.zoom,
|
|
92
98
|
width: Math.min(pixelWidth, MAP_MAX_SIZE),
|
|
93
99
|
height: Math.min(pixelHeight, MAP_MAX_SIZE),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"height-map-builder.js","sourceRoot":"","sources":["../../src/terrain/height-map-builder.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,
|
|
1
|
+
{"version":3,"file":"height-map-builder.js","sourceRoot":"","sources":["../../src/terrain/height-map-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export declare const terrainModule: {
|
|
|
39
39
|
readonly name: "geometry";
|
|
40
40
|
readonly source: "const SMOOTH_EDGE_RADIUS: f32 = 0.5;\n\nstruct VertexGeometry {\n position: vec4<f32>,\n worldPosition: vec3<f32>,\n worldPositionAlt: vec3<f32>,\n normal: vec3<f32>,\n uv: vec2<f32>,\n pickingColor: vec3<f32>,\n};\n\nvar<private> geometry_: VertexGeometry = VertexGeometry(\n vec4<f32>(0.0, 0.0, 1.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec2<f32>(0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0)\n);\n\nstruct FragmentGeometry {\n uv: vec2<f32>,\n};\n\nvar<private> fragmentGeometry: FragmentGeometry;\n\nfn smoothedge(edge: f32, x: f32) -> f32 {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n";
|
|
41
41
|
readonly vs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n";
|
|
42
|
-
readonly fs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n";
|
|
42
|
+
readonly fs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct FragmentGeometry {\n vec2 uv;\n};\nFragmentGeometry geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n";
|
|
43
43
|
}];
|
|
44
44
|
readonly source: string;
|
|
45
45
|
readonly vs: string;
|
|
@@ -64,13 +64,13 @@ export declare const terrainModule: {
|
|
|
64
64
|
readonly pseudoMeters: "f32";
|
|
65
65
|
};
|
|
66
66
|
}];
|
|
67
|
-
readonly vs: string
|
|
68
|
-
readonly fs: string
|
|
67
|
+
readonly vs: `${string}\nout vec3 commonPos;\n// In globe mode, absolute Mercator position for terrain FBO UV lookups\nout vec2 terrainMercPos;\nout float terrainHeight;\n\nvec2 terrain_globe_to_mercator(vec3 globePosition) {\n float D = length(globePosition);\n float sinLat = clamp(globePosition.z / D, -0.999998, 0.999998);\n float x = atan(globePosition.x, -globePosition.y);\n float y = atanh(sinLat);\n return (vec2(x, y) + PI) * WORLD_SCALE;\n}\n`;
|
|
68
|
+
readonly fs: `${string}in vec2 terrainMercPos;\nin float terrainHeight;`;
|
|
69
69
|
readonly inject: {
|
|
70
70
|
readonly 'vs:#main-start': "\nif (terrain.mode == TERRAIN_MODE_SKIP) {\n gl_Position = vec4(0.0);\n return;\n}\n";
|
|
71
|
-
readonly 'vs:DECKGL_FILTER_GL_POSITION': "\ncommonPos = geometry.position.xyz;\nif (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {\n vec2 texCoords = (
|
|
72
|
-
readonly 'fs:#main-start': "\nif (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {\n fragColor = vec4(
|
|
73
|
-
readonly 'fs:DECKGL_FILTER_COLOR': "\nif ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_USE_COVER_ONLY)) {\n vec2 texCoords = (
|
|
71
|
+
readonly 'vs:DECKGL_FILTER_GL_POSITION': "\ncommonPos = geometry.position.xyz;\nterrainHeight = commonPos.z + project.commonOrigin.z;\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\n terrainMercPos = terrain_globe_to_mercator(commonPos);\n terrainHeight = length(commonPos) - GLOBE_RADIUS;\n} else {\n terrainMercPos = commonPos.xy;\n}\nif (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {\n vec2 texCoords = (terrainMercPos - terrain.bounds.xy) / terrain.bounds.zw;\n position = vec4(texCoords * 2.0 - 1.0, 0.0, 1.0);\n}\nif (terrain.mode == TERRAIN_MODE_USE_HEIGHT_MAP) {\n vec3 anchor = geometry.worldPosition;\n anchor.z = 0.0;\n vec3 anchorCommon = project_position(anchor);\n vec2 anchorMercPos = project.projectionMode == PROJECTION_MODE_GLOBE\n ? terrain_globe_to_mercator(anchorCommon)\n : anchorCommon.xy;\n vec2 texCoords = (anchorMercPos - terrain.bounds.xy) / terrain.bounds.zw;\n if (texCoords.x >= 0.0 && texCoords.y >= 0.0 && texCoords.x <= 1.0 && texCoords.y <= 1.0) {\n float terrainZ = texture(terrain_map, texCoords).r;\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n // Height map is written in Mercator common space (units = TILE_SIZE / EARTH_CIRCUMFERENCE / cos(lat))\n // Convert to globe radial units (units = GLOBE_RADIUS / EARTH_RADIUS)\n terrainZ *= cos(radians(geometry.worldPosition.y)) * PI;\n geometry.position.xyz += normalize(geometry.position.xyz) * terrainZ;\n } else {\n geometry.position.z += terrainZ;\n }\n position = project_common_position_to_clipspace(geometry.position);\n }\n}\n ";
|
|
72
|
+
readonly 'fs:#main-start': "\nif (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {\n fragColor = vec4(terrainHeight, 0.0, 0.0, 1.0);\n return;\n}\n ";
|
|
73
|
+
readonly 'fs:DECKGL_FILTER_COLOR': "\nif ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_USE_COVER_ONLY)) {\n vec2 texCoords = (terrainMercPos - terrain.bounds.xy) / terrain.bounds.zw;\n vec4 pixel = texture(terrain_map, texCoords);\n if (terrain.mode == TERRAIN_MODE_USE_COVER_ONLY) {\n color = pixel;\n } else {\n // pixel is premultiplied\n color = pixel + color * (1.0 - pixel.a);\n }\n return;\n}\n ";
|
|
74
74
|
};
|
|
75
75
|
readonly getUniforms: (opts?: Partial<TerrainModuleProps>) => {
|
|
76
76
|
mode?: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../src/terrain/shader-module.ts"],"names":[],"mappings":"AAOA,OAAO,EAAU,YAAY,EAAkB,MAAM,eAAe,CAAC;AAErE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAC,MAAM,EAAC,qCAAkC;AACtD,OAAO,KAAK,EAAC,YAAY,EAAC,2BAAwB;AAElD,8DAA8D;AAC9D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAWF,kDAAkD;AAClD,eAAO,MAAM,YAAY;;IAEvB,6EAA6E;;IAE7E,2EAA2E;;IAE3E,6FAA6F;;IAE7F,0EAA0E;;IAE1E,mEAAmE;;CAEpE,CAAC;AAkBF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../src/terrain/shader-module.ts"],"names":[],"mappings":"AAOA,OAAO,EAAU,YAAY,EAAkB,MAAM,eAAe,CAAC;AAErE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAC,MAAM,EAAC,qCAAkC;AACtD,OAAO,KAAK,EAAC,YAAY,EAAC,2BAAwB;AAElD,8DAA8D;AAC9D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAWF,kDAAkD;AAClD,eAAO,MAAM,YAAY;;IAEvB,6EAA6E;;IAE7E,2EAA2E;;IAE3E,6FAA6F;;IAE7F,0EAA0E;;IAE1E,mEAAmE;;CAEpE,CAAC;AAkBF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAiFJ,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;CA+EkD,CAAC"}
|
|
@@ -33,10 +33,21 @@ uniform sampler2D terrain_map;
|
|
|
33
33
|
export const terrainModule = {
|
|
34
34
|
name: 'terrain',
|
|
35
35
|
dependencies: [project],
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
vs: `${uniformBlock}
|
|
37
|
+
out vec3 commonPos;
|
|
38
|
+
// In globe mode, absolute Mercator position for terrain FBO UV lookups
|
|
39
|
+
out vec2 terrainMercPos;
|
|
40
|
+
out float terrainHeight;
|
|
41
|
+
|
|
42
|
+
vec2 terrain_globe_to_mercator(vec3 globePosition) {
|
|
43
|
+
float D = length(globePosition);
|
|
44
|
+
float sinLat = clamp(globePosition.z / D, -0.999998, 0.999998);
|
|
45
|
+
float x = atan(globePosition.x, -globePosition.y);
|
|
46
|
+
float y = atanh(sinLat);
|
|
47
|
+
return (vec2(x, y) + PI) * WORLD_SCALE;
|
|
48
|
+
}
|
|
49
|
+
`,
|
|
50
|
+
fs: `${uniformBlock}in vec2 terrainMercPos;\nin float terrainHeight;`,
|
|
40
51
|
inject: {
|
|
41
52
|
'vs:#main-start': /* glsl */ `
|
|
42
53
|
if (terrain.mode == TERRAIN_MODE_SKIP) {
|
|
@@ -46,32 +57,48 @@ if (terrain.mode == TERRAIN_MODE_SKIP) {
|
|
|
46
57
|
`,
|
|
47
58
|
'vs:DECKGL_FILTER_GL_POSITION': /* glsl */ `
|
|
48
59
|
commonPos = geometry.position.xyz;
|
|
60
|
+
terrainHeight = commonPos.z + project.commonOrigin.z;
|
|
61
|
+
if (project.projectionMode == PROJECTION_MODE_GLOBE) {
|
|
62
|
+
terrainMercPos = terrain_globe_to_mercator(commonPos);
|
|
63
|
+
terrainHeight = length(commonPos) - GLOBE_RADIUS;
|
|
64
|
+
} else {
|
|
65
|
+
terrainMercPos = commonPos.xy;
|
|
66
|
+
}
|
|
49
67
|
if (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
|
|
50
|
-
vec2 texCoords = (
|
|
68
|
+
vec2 texCoords = (terrainMercPos - terrain.bounds.xy) / terrain.bounds.zw;
|
|
51
69
|
position = vec4(texCoords * 2.0 - 1.0, 0.0, 1.0);
|
|
52
|
-
commonPos.z += project.commonOrigin.z;
|
|
53
70
|
}
|
|
54
71
|
if (terrain.mode == TERRAIN_MODE_USE_HEIGHT_MAP) {
|
|
55
72
|
vec3 anchor = geometry.worldPosition;
|
|
56
73
|
anchor.z = 0.0;
|
|
57
74
|
vec3 anchorCommon = project_position(anchor);
|
|
58
|
-
vec2
|
|
75
|
+
vec2 anchorMercPos = project.projectionMode == PROJECTION_MODE_GLOBE
|
|
76
|
+
? terrain_globe_to_mercator(anchorCommon)
|
|
77
|
+
: anchorCommon.xy;
|
|
78
|
+
vec2 texCoords = (anchorMercPos - terrain.bounds.xy) / terrain.bounds.zw;
|
|
59
79
|
if (texCoords.x >= 0.0 && texCoords.y >= 0.0 && texCoords.x <= 1.0 && texCoords.y <= 1.0) {
|
|
60
80
|
float terrainZ = texture(terrain_map, texCoords).r;
|
|
61
|
-
|
|
81
|
+
if (project.projectionMode == PROJECTION_MODE_GLOBE) {
|
|
82
|
+
// Height map is written in Mercator common space (units = TILE_SIZE / EARTH_CIRCUMFERENCE / cos(lat))
|
|
83
|
+
// Convert to globe radial units (units = GLOBE_RADIUS / EARTH_RADIUS)
|
|
84
|
+
terrainZ *= cos(radians(geometry.worldPosition.y)) * PI;
|
|
85
|
+
geometry.position.xyz += normalize(geometry.position.xyz) * terrainZ;
|
|
86
|
+
} else {
|
|
87
|
+
geometry.position.z += terrainZ;
|
|
88
|
+
}
|
|
62
89
|
position = project_common_position_to_clipspace(geometry.position);
|
|
63
90
|
}
|
|
64
91
|
}
|
|
65
92
|
`,
|
|
66
93
|
'fs:#main-start': /* glsl */ `
|
|
67
94
|
if (terrain.mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
|
|
68
|
-
fragColor = vec4(
|
|
95
|
+
fragColor = vec4(terrainHeight, 0.0, 0.0, 1.0);
|
|
69
96
|
return;
|
|
70
97
|
}
|
|
71
98
|
`,
|
|
72
99
|
'fs:DECKGL_FILTER_COLOR': /* glsl */ `
|
|
73
100
|
if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_USE_COVER_ONLY)) {
|
|
74
|
-
vec2 texCoords = (
|
|
101
|
+
vec2 texCoords = (terrainMercPos - terrain.bounds.xy) / terrain.bounds.zw;
|
|
75
102
|
vec4 pixel = texture(terrain_map, texCoords);
|
|
76
103
|
if (terrain.mode == TERRAIN_MODE_USE_COVER_ONLY) {
|
|
77
104
|
color = pixel;
|
|
@@ -131,7 +158,7 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
|
|
|
131
158
|
return {
|
|
132
159
|
mode,
|
|
133
160
|
terrain_map: sampler,
|
|
134
|
-
// Convert bounds to
|
|
161
|
+
// Convert bounds to common space, as [minX, minY, width, height]
|
|
135
162
|
bounds: bounds
|
|
136
163
|
? [
|
|
137
164
|
bounds[0] - commonOrigin[0],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-module.js","sourceRoot":"","sources":["../../src/terrain/shader-module.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,OAAO,EAAgC,MAAM,eAAe,CAAC;AA4BrE,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,CAAC;IACP,6EAA6E;IAC7E,gBAAgB,EAAE,CAAC;IACnB,2EAA2E;IAC3E,cAAc,EAAE,CAAC;IACjB,6FAA6F;IAC7F,SAAS,EAAE,CAAC;IACZ,0EAA0E;IAC1E,cAAc,EAAE,CAAC;IACjB,mEAAmE;IACnE,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;KACrD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,4BAA4B,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;KACvE,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,MAAM,YAAY;AAChB,2CAA2C;AAC3C,sBAAsB;IACtB,UAAU,CAAC;;;;;;;CAOZ,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,CAAC,OAAO,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"shader-module.js","sourceRoot":"","sources":["../../src/terrain/shader-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terrain-cover.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-cover.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"terrain-cover.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-cover.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,OAAO,KAAK,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAGnD,OAAO,EAML,MAAM,EACP,qCAAkC;AAMnC;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,EAAE,OAAO,CAAQ;IACxB,sDAAsD;IACtD,WAAW,EAAE,KAAK,CAAC;IACnB,6CAA6C;IAC7C,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACvC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7B,OAAO,CAAC,GAAG,CAAC,CAAc;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,IAAI,CAAoB;IAChC,gDAAgD;IAChD,OAAO,CAAC,YAAY,CAAqC;IACzD,sCAAsC;IACtC,OAAO,CAAC,kBAAkB,CAAuB;gBAErC,WAAW,EAAE,KAAK;IAK9B,IAAI,EAAE,WAEL;IAED,4EAA4E;IAC5E,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,YAAY,CAAC,EACX,WAAW,EACX,QAAQ,EACR,MAAM,EACN,gBAAgB,EACjB,EAAE;QACD,WAAW,CAAC,EAAE,KAAK,CAAC;QACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,GAAG,OAAO;IAqBX,wEAAwE;IACxE,OAAO,CAAC,aAAa;IAuBrB,4FAA4F;IAE5F,OAAO,CAAC,eAAe;IA8DvB,oBAAoB,IAAI,WAAW,GAAG,IAAI;IAU1C,qBAAqB,IAAI,WAAW,GAAG,IAAI;IAa3C,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE;IAI5B,MAAM;CAWP"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// deck.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { _GlobeViewport as GlobeViewport } from '@deck.gl/core';
|
|
4
5
|
import { createRenderTarget } from "./utils.js";
|
|
5
|
-
import { joinLayerBounds, makeViewport, getRenderBounds } from "../utils/projection-utils.js";
|
|
6
|
+
import { getMercatorReferenceViewport, joinLayerBounds, lngLatToMercatorCommon, makeViewport, getRenderBounds } from "../utils/projection-utils.js";
|
|
6
7
|
/**
|
|
7
8
|
* Manages the lifecycle of the terrain cover (draped textures over a terrain mesh).
|
|
8
9
|
* One terrain cover is created for each unique terrain layer (primitive layer with operation:terrain).
|
|
@@ -77,12 +78,13 @@ export class TerrainCover {
|
|
|
77
78
|
_updateViewport(viewport) {
|
|
78
79
|
const targetLayer = this.targetLayer;
|
|
79
80
|
let shouldRedraw = false;
|
|
81
|
+
// Bounds in absolute Mercator common space (matches terrain cover FBO viewport)
|
|
80
82
|
if (this.tile && 'boundingBox' in this.tile) {
|
|
81
83
|
if (!this.targetBounds) {
|
|
82
84
|
shouldRedraw = true;
|
|
83
85
|
this.targetBounds = this.tile.boundingBox;
|
|
84
|
-
const bottomLeftCommon =
|
|
85
|
-
const topRightCommon =
|
|
86
|
+
const bottomLeftCommon = lngLatToMercatorCommon(this.targetBounds[0]);
|
|
87
|
+
const topRightCommon = lngLatToMercatorCommon(this.targetBounds[1]);
|
|
86
88
|
this.targetBoundsCommon = [
|
|
87
89
|
bottomLeftCommon[0],
|
|
88
90
|
bottomLeftCommon[1],
|
|
@@ -95,7 +97,7 @@ export class TerrainCover {
|
|
|
95
97
|
// console.log('bounds changed', this.bounds, '>>', newBounds);
|
|
96
98
|
shouldRedraw = true;
|
|
97
99
|
this.targetBounds = targetLayer.getBounds();
|
|
98
|
-
this.targetBoundsCommon = joinLayerBounds([targetLayer], viewport);
|
|
100
|
+
this.targetBoundsCommon = joinLayerBounds([targetLayer], getMercatorReferenceViewport(viewport));
|
|
99
101
|
}
|
|
100
102
|
if (!this.targetBoundsCommon) {
|
|
101
103
|
return false;
|
|
@@ -109,7 +111,10 @@ export class TerrainCover {
|
|
|
109
111
|
else {
|
|
110
112
|
const oldZoom = this.renderViewport?.zoom;
|
|
111
113
|
shouldRedraw = shouldRedraw || newZoom !== oldZoom;
|
|
112
|
-
|
|
114
|
+
// On GlobeView, viewport bounds are sphere cartesian — skip intersection
|
|
115
|
+
const newBounds = viewport instanceof GlobeViewport
|
|
116
|
+
? this.targetBoundsCommon
|
|
117
|
+
: getRenderBounds(this.targetBoundsCommon, viewport);
|
|
113
118
|
const oldBounds = this.bounds;
|
|
114
119
|
shouldRedraw = shouldRedraw || !oldBounds || newBounds.some((x, i) => x !== oldBounds[i]);
|
|
115
120
|
this.bounds = newBounds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terrain-cover.js","sourceRoot":"","sources":["../../src/terrain/terrain-cover.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;
|
|
1
|
+
{"version":3,"file":"terrain-cover.js","sourceRoot":"","sources":["../../src/terrain/terrain-cover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { Layer, Viewport } from '@deck.gl/core';
|
|
2
2
|
/** Bounds in CARTESIAN coordinates */
|
|
3
3
|
export type Bounds = [minX: number, minY: number, maxX: number, maxY: number];
|
|
4
|
+
/** Project lng/lat to absolute Mercator common space. */
|
|
5
|
+
export declare function lngLatToMercatorCommon(lngLat: number[]): [number, number];
|
|
6
|
+
/** Returns a Mercator viewport for bounds computation, bypassing GlobeView. */
|
|
7
|
+
export declare function getMercatorReferenceViewport(viewport: Viewport): Viewport;
|
|
4
8
|
export declare function joinLayerBounds(
|
|
5
9
|
/** The layers to combine */
|
|
6
10
|
layers: Layer[],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection-utils.d.ts","sourceRoot":"","sources":["../../src/utils/projection-utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEnD,sCAAsC;AACtC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"projection-utils.d.ts","sourceRoot":"","sources":["../../src/utils/projection-utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEnD,sCAAsC;AACtC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAW9E,yDAAyD;AACzD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGzE;AAED,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAEzE;AAMD,wBAAgB,eAAe;AAC7B,4BAA4B;AAC5B,MAAM,EAAE,KAAK,EAAE;AACf,yEAAyE;AACzE,QAAQ,EAAE,QAAQ,GACjB,MAAM,GAAG,IAAI,CAoBf;AAID,mHAAmH;AACnH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,QAAQ,GAAG,IAAI,CA8DlB;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA0BvF;AAMD,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACxB,MAAM,CA+BR"}
|
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { WebMercatorViewport, OrthographicViewport } from '@deck.gl/core';
|
|
5
|
+
/** Fixed Mercator viewport for projection-independent coordinate conversion */
|
|
6
|
+
const MERCATOR_REFERENCE_VIEWPORT = new WebMercatorViewport({
|
|
7
|
+
width: 1,
|
|
8
|
+
height: 1,
|
|
9
|
+
longitude: 0,
|
|
10
|
+
latitude: 0,
|
|
11
|
+
zoom: 0
|
|
12
|
+
});
|
|
13
|
+
/** Project lng/lat to absolute Mercator common space. */
|
|
14
|
+
export function lngLatToMercatorCommon(lngLat) {
|
|
15
|
+
const [x, y] = MERCATOR_REFERENCE_VIEWPORT.projectPosition(lngLat);
|
|
16
|
+
return [x, y];
|
|
17
|
+
}
|
|
18
|
+
/** Returns a Mercator viewport for bounds computation, bypassing GlobeView. */
|
|
19
|
+
export function getMercatorReferenceViewport(viewport) {
|
|
20
|
+
return viewport.isGeospatial ? MERCATOR_REFERENCE_VIEWPORT : viewport;
|
|
21
|
+
}
|
|
5
22
|
/*
|
|
6
23
|
* Compute the union of bounds from multiple layers
|
|
7
24
|
* Returns bounds in CARTESIAN coordinates
|
|
@@ -37,11 +54,14 @@ export function makeViewport(opts) {
|
|
|
37
54
|
if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {
|
|
38
55
|
return null;
|
|
39
56
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
(
|
|
43
|
-
|
|
44
|
-
|
|
57
|
+
// Unproject through Mercator reference (GlobeView would give sphere coords)
|
|
58
|
+
const centerWorld = isGeospatial
|
|
59
|
+
? MERCATOR_REFERENCE_VIEWPORT.unprojectPosition([
|
|
60
|
+
(bounds[0] + bounds[2]) / 2,
|
|
61
|
+
(bounds[1] + bounds[3]) / 2,
|
|
62
|
+
0
|
|
63
|
+
])
|
|
64
|
+
: viewport.unprojectPosition([(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2, 0]);
|
|
45
65
|
let { width, height, zoom } = opts;
|
|
46
66
|
if (zoom === undefined) {
|
|
47
67
|
// Use width and height to determine zoom
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection-utils.js","sourceRoot":"","sources":["../../src/utils/projection-utils.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAMxE;;;GAGG;AACH,MAAM,UAAU,eAAe;AAC7B,4BAA4B;AAC5B,MAAe;AACf,yEAAyE;AACzE,QAAkB;IAElB,gCAAgC;IAChC,MAAM,MAAM,GAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;YAC9F,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;YAE5F,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,mHAAmH;AACnH,MAAM,UAAU,YAAY,CAAC,IAa5B;IACC,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAC,YAAY,EAAC,GAAG,QAAQ,CAAC;IAEhC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"projection-utils.js","sourceRoot":"","sources":["../../src/utils/projection-utils.ts"],"names":[],"mappings":"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"}
|