@developmentseed/deck.gl-raster 0.7.0 → 0.8.0-beta.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/fp64.d.ts +18 -0
- package/dist/fp64.d.ts.map +1 -0
- package/dist/fp64.js +28 -0
- package/dist/fp64.js.map +1 -0
- package/dist/globe-grid-mesh.d.ts +30 -0
- package/dist/globe-grid-mesh.d.ts.map +1 -0
- package/dist/globe-grid-mesh.js +67 -0
- package/dist/globe-grid-mesh.js.map +1 -0
- package/dist/gpu-modules/cutline-bbox.d.ts +26 -40
- package/dist/gpu-modules/cutline-bbox.d.ts.map +1 -1
- package/dist/gpu-modules/cutline-bbox.js +24 -53
- package/dist/gpu-modules/cutline-bbox.js.map +1 -1
- package/dist/gpu-modules/index.d.ts +1 -1
- package/dist/gpu-modules/index.d.ts.map +1 -1
- package/dist/gpu-modules/index.js +1 -1
- package/dist/gpu-modules/index.js.map +1 -1
- package/dist/mesh-layer/mesh-layer-fragment.glsl.d.ts +1 -1
- package/dist/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
- package/dist/mesh-layer/mesh-layer-vertex.glsl.d.ts +3 -0
- package/dist/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +1 -0
- package/dist/mesh-layer/mesh-layer-vertex.glsl.js +90 -0
- package/dist/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -0
- package/dist/mesh-layer/mesh-layer.d.ts +27 -4
- package/dist/mesh-layer/mesh-layer.d.ts.map +1 -1
- package/dist/mesh-layer/mesh-layer.js +39 -3
- package/dist/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/raster-layer.d.ts +18 -1
- package/dist/raster-layer.d.ts.map +1 -1
- package/dist/raster-layer.js +46 -19
- package/dist/raster-layer.js.map +1 -1
- package/dist/raster-tile-layer/raster-tile-layer.d.ts.map +1 -1
- package/dist/raster-tile-layer/raster-tile-layer.js +29 -21
- package/dist/raster-tile-layer/raster-tile-layer.js.map +1 -1
- package/dist/raster-tileset/bounding-volume-cache.d.ts +11 -4
- package/dist/raster-tileset/bounding-volume-cache.d.ts.map +1 -1
- package/dist/raster-tileset/bounding-volume-cache.js +13 -4
- package/dist/raster-tileset/bounding-volume-cache.js.map +1 -1
- package/dist/raster-tileset/raster-tile-traversal.d.ts +58 -3
- package/dist/raster-tileset/raster-tile-traversal.d.ts.map +1 -1
- package/dist/raster-tileset/raster-tile-traversal.js +235 -30
- package/dist/raster-tileset/raster-tile-traversal.js.map +1 -1
- package/dist/raster-tileset/raster-tileset-2d.d.ts +33 -0
- package/dist/raster-tileset/raster-tileset-2d.d.ts.map +1 -1
- package/dist/raster-tileset/raster-tileset-2d.js +46 -1
- package/dist/raster-tileset/raster-tileset-2d.js.map +1 -1
- package/dist/raster-tileset/web-mercator-clamp.d.ts +29 -0
- package/dist/raster-tileset/web-mercator-clamp.d.ts.map +1 -0
- package/dist/raster-tileset/web-mercator-clamp.js +54 -0
- package/dist/raster-tileset/web-mercator-clamp.js.map +1 -0
- package/package.json +7 -7
- package/dist/raster-tile-layer/constants.d.ts +0 -11
- package/dist/raster-tile-layer/constants.d.ts.map +0 -1
- package/dist/raster-tile-layer/constants.js +0 -11
- package/dist/raster-tile-layer/constants.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-layer.d.ts","sourceRoot":"","sources":["../../src/mesh-layer/mesh-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"mesh-layer.d.ts","sourceRoot":"","sources":["../../src/mesh-layer/mesh-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D;;;;;;;;GAQG;AACH,KAAK,uBAAuB,GACxB,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,UAAU,GACV,gBAAgB,GAChB,oBAAoB,GACpB,WAAW,CAAC;AAEhB,KAAK,sBAAsB,GACvB;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,cAAc,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,GACzD;IAAE,cAAc,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,EACpB,uBAAuB,CACxB,GACC,sBAAsB,CAAC;AAEzB,QAAA,MAAM,YAAY,EAAE,YAAY,CAC9B,oBAAoB,GAAG;IACrB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,YAAY,EAAE,CAAC;CAChC,CAiBF,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAiB,SAAQ,eAAe,CACnD,IAAI,EACJ,qBAAqB,CACtB;IACC,OAAgB,SAAS,SAAwB;IACjD,OAAgB,YAAY,EAAE,OAAO,YAAY,CAAgB;IAExD,eAAe,IAAI,IAAI;IAkBhC,sBAAsB,IAAI,YAAY,EAAE;IAQ/B,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI;IAY1D,qFAAqF;IACrF,OAAO,CAAC,wBAAwB;IAqBvB,UAAU;IAoBV,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;CAa/B"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { SimpleMeshLayer } from "@deck.gl/mesh-layers";
|
|
2
2
|
import { CreateTexture } from "../gpu-modules/create-texture.js";
|
|
3
3
|
import fs from "./mesh-layer-fragment.glsl.js";
|
|
4
|
+
import vs from "./mesh-layer-vertex.glsl.js";
|
|
4
5
|
const defaultProps = {
|
|
5
6
|
...SimpleMeshLayer.defaultProps,
|
|
6
7
|
// Note: putting `image` in defaultProps causes Maplibre to fail to render
|
|
7
8
|
// labels in interleaved mode 🤷♂️
|
|
8
9
|
// image: { type: "image", value: null, async: true },
|
|
9
10
|
renderPipeline: { type: "array", value: [], compare: true },
|
|
11
|
+
// Render exactly one non-instanced mesh anchored at the coordinate origin.
|
|
12
|
+
_instanced: false,
|
|
13
|
+
getPosition: { type: "accessor", value: [0, 0, 0] },
|
|
10
14
|
// Disable lighting by default (avoids darkening raster)
|
|
11
15
|
material: {
|
|
12
16
|
ambient: 1.0,
|
|
@@ -16,14 +20,43 @@ const defaultProps = {
|
|
|
16
20
|
},
|
|
17
21
|
};
|
|
18
22
|
/**
|
|
19
|
-
* A
|
|
23
|
+
* A specialized raster-rendering layer, spiritually based on deck.gl's
|
|
24
|
+
* `SimpleMeshLayer` but with a narrower purpose: it draws **one** texture-mapped
|
|
25
|
+
* mesh anchored at the coordinate origin, not instanced 3D models.
|
|
20
26
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
27
|
+
* Differences from `SimpleMeshLayer`:
|
|
28
|
+
* - Allows dynamic shader injection (a render pipeline of `RasterModule`s) and
|
|
29
|
+
* overrides the vertex/fragment shaders.
|
|
30
|
+
* - Provides fp64 mesh-vertex precision via a `positions64Low` attribute paired
|
|
31
|
+
* with the geometry's `positions` (supplied by the caller through
|
|
32
|
+
* `data.attributes.positions64Low`).
|
|
33
|
+
* - The per-instance placement props (`_instanced`, `getPosition`,
|
|
34
|
+
* `getOrientation`, `getScale`, `getTranslation`, `getTransformMatrix`,
|
|
35
|
+
* `sizeScale`) are intentionally unsupported and fixed at identity — see
|
|
36
|
+
* {@link ExcludedSimpleMeshProps}. This is what keeps the fp64 correction
|
|
37
|
+
* valid (the low part is the residual of `positions`, not of a transformed
|
|
38
|
+
* vertex).
|
|
23
39
|
*/
|
|
24
40
|
export class MeshTextureLayer extends SimpleMeshLayer {
|
|
25
41
|
static layerName = "mesh-texture-layer";
|
|
26
42
|
static defaultProps = defaultProps;
|
|
43
|
+
initializeState() {
|
|
44
|
+
super.initializeState();
|
|
45
|
+
const attributeManager = this.getAttributeManager();
|
|
46
|
+
if (attributeManager) {
|
|
47
|
+
// Register the per-vertex low part of the fp64 position split, supplied
|
|
48
|
+
// via `data.attributes.positions64Low`
|
|
49
|
+
attributeManager.add({
|
|
50
|
+
positions64Low: {
|
|
51
|
+
size: 3,
|
|
52
|
+
type: "float32",
|
|
53
|
+
// Tell the AttributeManager not to allocate a buffer for this
|
|
54
|
+
// attribute; we'll supply it externally
|
|
55
|
+
noAlloc: true,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
27
60
|
_resolveRenderPipeline() {
|
|
28
61
|
const { image, renderPipeline } = this.props;
|
|
29
62
|
const imageModule = image
|
|
@@ -67,6 +100,9 @@ export class MeshTextureLayer extends SimpleMeshLayer {
|
|
|
67
100
|
}
|
|
68
101
|
return {
|
|
69
102
|
...upstreamShaders,
|
|
103
|
+
// Override upstream's vertex shader with our copy that uses fp64
|
|
104
|
+
// emulation
|
|
105
|
+
vs,
|
|
70
106
|
// Override upstream's fragment shader with our copy with modified
|
|
71
107
|
// injection points
|
|
72
108
|
fs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-layer.js","sourceRoot":"","sources":["../../src/mesh-layer/mesh-layer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"mesh-layer.js","sourceRoot":"","sources":["../../src/mesh-layer/mesh-layer.ts"],"names":[],"mappings":"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"}
|
package/dist/raster-layer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CompositeLayerProps, DefaultProps, Layer, TextureSource, UpdateParameters } from "@deck.gl/core";
|
|
2
2
|
import { CompositeLayer } from "@deck.gl/core";
|
|
3
|
-
import type { ReprojectionFns } from "@developmentseed/raster-reproject";
|
|
3
|
+
import type { InitialTriangulation, ReprojectionFns } from "@developmentseed/raster-reproject";
|
|
4
4
|
import { RasterReprojector } from "@developmentseed/raster-reproject";
|
|
5
5
|
import type { RasterModule } from "./gpu-modules/types.js";
|
|
6
6
|
/**
|
|
@@ -33,6 +33,13 @@ export interface RasterLayerProps extends CompositeLayerProps {
|
|
|
33
33
|
* Reprojection functions for converting between pixel, input CRS, and output CRS coordinates
|
|
34
34
|
*/
|
|
35
35
|
reprojectionFns: ReprojectionFns;
|
|
36
|
+
/**
|
|
37
|
+
* Optional seed triangulation for the reprojector — e.g. to clamp the mesh to
|
|
38
|
+
* a UV sub-region (such as the valid Web Mercator latitude band). Defaults to
|
|
39
|
+
* the full image. Must be reference-stable across renders to avoid
|
|
40
|
+
* regenerating the mesh every frame.
|
|
41
|
+
*/
|
|
42
|
+
initialTriangulation?: InitialTriangulation;
|
|
36
43
|
/**
|
|
37
44
|
* The image to display. Accepts any luma.gl `TextureSource` (e.g. a URL,
|
|
38
45
|
* `HTMLImageElement`, `ImageData`, etc.). deck.gl manages the texture
|
|
@@ -99,6 +106,16 @@ export declare class RasterLayer extends CompositeLayer<RasterLayerProps> {
|
|
|
99
106
|
};
|
|
100
107
|
};
|
|
101
108
|
};
|
|
109
|
+
/**
|
|
110
|
+
* Low-part of positions for fp64 emulation in the shaders.
|
|
111
|
+
* `mesh.attributes.POSITION` carries the high part.
|
|
112
|
+
*
|
|
113
|
+
* This needs to be passed separately from `mesh` because SimpleMeshLayer's
|
|
114
|
+
* `normalizeGeometryAttributes` whitelists only positions/colors/normals/
|
|
115
|
+
* texCoords on the mesh attributes object — anything else is silently
|
|
116
|
+
* dropped.
|
|
117
|
+
*/
|
|
118
|
+
positions64Low?: Float32Array;
|
|
102
119
|
};
|
|
103
120
|
initializeState(): void;
|
|
104
121
|
updateState(params: UpdateParameters<this>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-layer.d.ts","sourceRoot":"","sources":["../src/raster-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,KAAK,EACL,aAAa,EACb,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"raster-layer.d.ts","sourceRoot":"","sources":["../src/raster-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,KAAK,EACL,aAAa,EACb,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAmC3D;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,cAAc,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,GACzD;IAAE,cAAc,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;IAEjC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAE7B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,oFAAoF;IACpF,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAWD;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAC/D,OAAgB,SAAS,SAAiB;IAC1C,OAAgB,YAAY,iCAAgB;IAEpC,KAAK,EAAE;QACb,WAAW,CAAC,EAAE,iBAAiB,CAAC;QAChC;;;;;;WAMG;QACH,IAAI,CAAC,EAAE;YACL,OAAO,EAAE;gBAAE,KAAK,EAAE,WAAW,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC;YAC9C,UAAU,EAAE;gBACV,QAAQ,EAAE;oBAAE,KAAK,EAAE,YAAY,CAAC;oBAAC,IAAI,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAChD,UAAU,EAAE;oBAAE,KAAK,EAAE,YAAY,CAAC;oBAAC,IAAI,EAAE,MAAM,CAAA;iBAAE,CAAC;aACnD,CAAC;SACH,CAAC;QACF;;;;;;;;WAQG;QACH,cAAc,CAAC,EAAE,YAAY,CAAC;KAC/B,CAAC;IAEO,eAAe,IAAI,IAAI;IAIvB,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;IA+BnD,SAAS,CAAC,aAAa,IAAI,IAAI;IAgE/B,gBAAgB,IAAI,KAAK,GAAG,IAAI;IA6DhC,YAAY;CAoCb"}
|
package/dist/raster-layer.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { CompositeLayer } from "@deck.gl/core";
|
|
2
2
|
import { PolygonLayer } from "@deck.gl/layers";
|
|
3
3
|
import { RasterReprojector } from "@developmentseed/raster-reproject";
|
|
4
|
+
import { splitFloat64Array } from "./fp64.js";
|
|
5
|
+
import { buildUniformGridMesh } from "./globe-grid-mesh.js";
|
|
4
6
|
import { MeshTextureLayer } from "./mesh-layer/mesh-layer.js";
|
|
5
7
|
const DEFAULT_MAX_ERROR = 0.125;
|
|
6
8
|
const DEBUG_COLORS = [
|
|
@@ -68,13 +70,37 @@ export class RasterLayer extends CompositeLayer {
|
|
|
68
70
|
props.width !== oldProps.width ||
|
|
69
71
|
props.height !== oldProps.height ||
|
|
70
72
|
reprojectionFnsChanged ||
|
|
71
|
-
props.maxError !== oldProps.maxError
|
|
73
|
+
props.maxError !== oldProps.maxError ||
|
|
74
|
+
props.initialTriangulation !== oldProps.initialTriangulation;
|
|
72
75
|
if (needsMeshUpdate) {
|
|
73
76
|
this._generateMesh();
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
_generateMesh() {
|
|
77
|
-
const { width, height, reprojectionFns, maxError = DEFAULT_MAX_ERROR, } = this.props;
|
|
80
|
+
const { width, height, reprojectionFns, initialTriangulation, maxError = DEFAULT_MAX_ERROR, } = this.props;
|
|
81
|
+
// TEMPORARY GLOBE VIEW HACK:
|
|
82
|
+
//
|
|
83
|
+
// GlobeView (lnglat) uses viewport.resolution, the same detection as
|
|
84
|
+
// RasterTileLayer. THROWAWAY: globe renders a uniform grid instead of the
|
|
85
|
+
// adaptive mesh, because Delatin's reprojection-error metric is blind to
|
|
86
|
+
// sphere curvature and facets at low zoom. See globe-grid-mesh.ts and
|
|
87
|
+
// dev-docs/specs/2026-05-21-globe-view-design.md.
|
|
88
|
+
const isGlobe = this.context?.viewport?.resolution !== undefined;
|
|
89
|
+
if (isGlobe) {
|
|
90
|
+
const { indices, positions64High, positions64Low, texCoords } = buildUniformGridMesh(reprojectionFns, width + 1, height + 1);
|
|
91
|
+
this.setState({
|
|
92
|
+
reprojector: undefined,
|
|
93
|
+
mesh: {
|
|
94
|
+
indices: { value: indices, size: 1 },
|
|
95
|
+
attributes: {
|
|
96
|
+
POSITION: { value: positions64High, size: 3 },
|
|
97
|
+
TEXCOORD_0: { value: texCoords, size: 2 },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
positions64Low,
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
78
104
|
// The mesh is lined up with the upper and left edges of the raster. So if
|
|
79
105
|
// we give the raster the same width and height as the number of pixels in
|
|
80
106
|
// the image, it'll be omitting the last row and column of pixels.
|
|
@@ -82,18 +108,19 @@ export class RasterLayer extends CompositeLayer {
|
|
|
82
108
|
// To account for this, we add 1 to both width and height when generating
|
|
83
109
|
// the mesh. This also solves obvious gaps in between neighboring tiles in
|
|
84
110
|
// the COGLayer.
|
|
85
|
-
const reprojector = new RasterReprojector(reprojectionFns, width + 1, height + 1);
|
|
111
|
+
const reprojector = new RasterReprojector(reprojectionFns, width + 1, height + 1, { initialTriangulation });
|
|
86
112
|
reprojector.run(maxError);
|
|
87
|
-
const { indices,
|
|
113
|
+
const { indices, positions64High, positions64Low, texCoords } = reprojectorToMesh(reprojector);
|
|
88
114
|
this.setState({
|
|
89
115
|
reprojector,
|
|
90
116
|
mesh: {
|
|
91
117
|
indices: { value: indices, size: 1 },
|
|
92
118
|
attributes: {
|
|
93
|
-
POSITION: { value:
|
|
119
|
+
POSITION: { value: positions64High, size: 3 },
|
|
94
120
|
TEXCOORD_0: { value: texCoords, size: 2 },
|
|
95
121
|
},
|
|
96
122
|
},
|
|
123
|
+
positions64Low,
|
|
97
124
|
});
|
|
98
125
|
}
|
|
99
126
|
renderDebugLayer() {
|
|
@@ -138,26 +165,22 @@ export class RasterLayer extends CompositeLayer {
|
|
|
138
165
|
}));
|
|
139
166
|
}
|
|
140
167
|
renderLayers() {
|
|
141
|
-
const { mesh } = this.state;
|
|
168
|
+
const { mesh, positions64Low } = this.state;
|
|
142
169
|
const { debug, image, renderPipeline } = this.props;
|
|
143
|
-
|
|
170
|
+
// mesh and positions64Low are always set together by _generateMesh.
|
|
171
|
+
if (!mesh ||
|
|
172
|
+
!positions64Low ||
|
|
173
|
+
(!image && (renderPipeline?.length ?? 0) === 0)) {
|
|
144
174
|
return null;
|
|
145
175
|
}
|
|
146
176
|
const meshLayer = new MeshTextureLayer(this.getSubLayerProps({
|
|
147
177
|
id: "raster",
|
|
148
178
|
image,
|
|
149
179
|
renderPipeline,
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
data: [1],
|
|
180
|
+
// Single mesh rendered as one non-instanced draw.
|
|
181
|
+
data: { length: 1, attributes: { positions64Low } },
|
|
153
182
|
mesh,
|
|
154
|
-
// We
|
|
155
|
-
// https://github.com/visgl/deck.gl/blob/93111b667b919148da06ff1918410cf66381904f/modules/geo-layers/src/terrain-layer/terrain-layer.ts#L244
|
|
156
|
-
_instanced: false,
|
|
157
|
-
// Dummy accessors for the dummy data
|
|
158
|
-
// We place our mesh at the coordinate origin
|
|
159
|
-
getPosition: [0, 0, 0],
|
|
160
|
-
// We give a white color to turn off color mixing with the texture
|
|
183
|
+
// We give a white color to turn off color mixing with the texture.
|
|
161
184
|
getColor: [255, 255, 255],
|
|
162
185
|
}));
|
|
163
186
|
const layers = [meshLayer];
|
|
@@ -172,19 +195,23 @@ export class RasterLayer extends CompositeLayer {
|
|
|
172
195
|
}
|
|
173
196
|
function reprojectorToMesh(reprojector) {
|
|
174
197
|
const numVertices = reprojector.uvs.length / 2;
|
|
175
|
-
const positions = new Float32Array(numVertices * 3);
|
|
176
198
|
const texCoords = new Float32Array(reprojector.uvs);
|
|
199
|
+
const positions = new Float64Array(numVertices * 3);
|
|
177
200
|
for (let i = 0; i < numVertices; i++) {
|
|
178
201
|
positions[i * 3] = reprojector.exactOutputPositions[i * 2];
|
|
179
202
|
positions[i * 3 + 1] = reprojector.exactOutputPositions[i * 2 + 1];
|
|
180
203
|
// z (flat on the ground)
|
|
181
204
|
positions[i * 3 + 2] = 0;
|
|
182
205
|
}
|
|
206
|
+
// Split the float64 positions into high and low parts for fp64 emulation in
|
|
207
|
+
// the shader.
|
|
208
|
+
const [positions64Low, positions64High] = splitFloat64Array(positions);
|
|
183
209
|
// TODO: Consider using 16-bit indices if the mesh is small enough
|
|
184
210
|
const indices = new Uint32Array(reprojector.triangles);
|
|
185
211
|
return {
|
|
186
212
|
indices,
|
|
187
|
-
|
|
213
|
+
positions64High,
|
|
214
|
+
positions64Low,
|
|
188
215
|
texCoords,
|
|
189
216
|
};
|
|
190
217
|
}
|
package/dist/raster-layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-layer.js","sourceRoot":"","sources":["../src/raster-layer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"raster-layer.js","sourceRoot":"","sources":["../src/raster-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-tile-layer.d.ts","sourceRoot":"","sources":["../../src/raster-tile-layer/raster-tile-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,
|
|
1
|
+
{"version":3,"file":"raster-tile-layer.d.ts","sourceRoot":"","sources":["../../src/raster-tile-layer/raster-tile-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ import { TileLayer } from "@deck.gl/geo-layers";
|
|
|
3
3
|
import { renderDebugTileOutline } from "../layer-utils.js";
|
|
4
4
|
import { RasterLayer } from "../raster-layer.js";
|
|
5
5
|
import { RasterTileset2D } from "../raster-tileset/index.js";
|
|
6
|
-
import { TILE_SIZE, WEB_MERCATOR_TO_WORLD_SCALE } from "./constants.js";
|
|
7
6
|
const defaultProps = {
|
|
8
7
|
...TileLayer.defaultProps,
|
|
9
8
|
maxError: 0.125,
|
|
@@ -177,32 +176,36 @@ export class RasterTileLayer extends CompositeLayer {
|
|
|
177
176
|
const { image, renderPipeline } = tileResult;
|
|
178
177
|
const { width, height } = props.data;
|
|
179
178
|
const isGlobe = this.context.viewport.resolution !== undefined;
|
|
180
|
-
|
|
181
|
-
|
|
179
|
+
let reprojectionFns;
|
|
180
|
+
let coordinateSystem;
|
|
181
|
+
if (isGlobe) {
|
|
182
|
+
// Globe view
|
|
183
|
+
reprojectionFns = {
|
|
182
184
|
forwardTransform,
|
|
183
185
|
inverseTransform,
|
|
184
186
|
forwardReproject: descriptor.projectTo4326,
|
|
185
187
|
inverseReproject: descriptor.projectFrom4326,
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
+
};
|
|
189
|
+
coordinateSystem = "lnglat";
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
// Web Mercator: render the mesh directly in deck.gl common space.
|
|
193
|
+
//
|
|
194
|
+
// The tile's `_projectPosition` maps source CRS → common space, support
|
|
195
|
+
// high precision with fp64 emulation.
|
|
196
|
+
//
|
|
197
|
+
// `_projectPosition`/`_unprojectPosition` must be reference-stable across
|
|
198
|
+
// renders to avoid regenerating the mesh and recompiling the shader every
|
|
199
|
+
// frame.
|
|
200
|
+
const { _projectPosition, _unprojectPosition } = tile;
|
|
201
|
+
reprojectionFns = {
|
|
188
202
|
forwardTransform,
|
|
189
203
|
inverseTransform,
|
|
190
|
-
forwardReproject:
|
|
191
|
-
inverseReproject:
|
|
192
|
-
};
|
|
193
|
-
const deckProjectionProps = isGlobe
|
|
194
|
-
? {}
|
|
195
|
-
: {
|
|
196
|
-
coordinateSystem: "cartesian",
|
|
197
|
-
coordinateOrigin: [TILE_SIZE / 2, TILE_SIZE / 2, 0],
|
|
198
|
-
// biome-ignore format: array
|
|
199
|
-
modelMatrix: [
|
|
200
|
-
WEB_MERCATOR_TO_WORLD_SCALE, 0, 0, 0,
|
|
201
|
-
0, WEB_MERCATOR_TO_WORLD_SCALE, 0, 0,
|
|
202
|
-
0, 0, 1, 0,
|
|
203
|
-
0, 0, 0, 1,
|
|
204
|
-
],
|
|
204
|
+
forwardReproject: _projectPosition,
|
|
205
|
+
inverseReproject: _unprojectPosition,
|
|
205
206
|
};
|
|
207
|
+
coordinateSystem = "cartesian";
|
|
208
|
+
}
|
|
206
209
|
const rasterLayer = new RasterLayer(this.getSubLayerProps({
|
|
207
210
|
id: `${props.id}-raster`,
|
|
208
211
|
width,
|
|
@@ -213,9 +216,14 @@ export class RasterTileLayer extends CompositeLayer {
|
|
|
213
216
|
renderPipeline,
|
|
214
217
|
maxError,
|
|
215
218
|
reprojectionFns,
|
|
219
|
+
// Web Mercator: clamp the mesh to the valid latitude band for tiles
|
|
220
|
+
// past ±85.051°. Globe renders the full mesh (it shows the poles).
|
|
221
|
+
initialTriangulation: isGlobe
|
|
222
|
+
? undefined
|
|
223
|
+
: tile._webMercatorInitialTriangulation,
|
|
216
224
|
debug,
|
|
217
225
|
debugOpacity,
|
|
218
|
-
|
|
226
|
+
coordinateSystem,
|
|
219
227
|
}));
|
|
220
228
|
return [rasterLayer, ...debugLayers];
|
|
221
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-tile-layer.js","sourceRoot":"","sources":["../../src/raster-tile-layer/raster-tile-layer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAO/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"raster-tile-layer.js","sourceRoot":"","sources":["../../src/raster-tile-layer/raster-tile-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,10 +34,11 @@ export interface BoundingVolumeCacheOptions {
|
|
|
34
34
|
* `(z, x, y, zRange)` for a given tileset descriptor, so it is safe to memoize
|
|
35
35
|
* across `getTileIndices` calls (i.e. across animation frames).
|
|
36
36
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
37
|
+
* The key is valid only within a single projection mode. A tile's bounding
|
|
38
|
+
* volume is computed in a different common space under a GlobeView than under
|
|
39
|
+
* Web Mercator, so the cache must be {@link BoundingVolumeCache.clear cleared}
|
|
40
|
+
* when the viewport's projection mode changes. `RasterTileset2D` owns the cache
|
|
41
|
+
* and does this in `getTileIndices` when it detects a globe↔mercator switch.
|
|
41
42
|
*/
|
|
42
43
|
export declare class BoundingVolumeCache {
|
|
43
44
|
private entries;
|
|
@@ -52,6 +53,12 @@ export declare class BoundingVolumeCache {
|
|
|
52
53
|
get(z: number, x: number, y: number): BoundingVolumeCacheEntry | undefined;
|
|
53
54
|
/** Store the bounding volume for tile `(z, x, y)` as most-recently-used. */
|
|
54
55
|
set(z: number, x: number, y: number, entry: BoundingVolumeCacheEntry): void;
|
|
56
|
+
/**
|
|
57
|
+
* Drop all cached entries. Called by the owner when the viewport's projection
|
|
58
|
+
* mode changes (globe↔mercator), since volumes computed under one projection
|
|
59
|
+
* are not valid under the other.
|
|
60
|
+
*/
|
|
61
|
+
clear(): void;
|
|
55
62
|
/**
|
|
56
63
|
* If the cache is over its soft cap, drop least-recently-used entries down to
|
|
57
64
|
* roughly half of `maxEntries`. No-op when at or under the cap. Call once at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounding-volume-cache.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/bounding-volume-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,mBAAmB,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID
|
|
1
|
+
{"version":3,"file":"bounding-volume-cache.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/bounding-volume-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,mBAAmB,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,UAAU,CAAS;gBAEf,EACV,UAAgC,GACjC,GAAE,0BAA+B;IAIlC,gCAAgC;IAChC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IAY1E,4EAA4E;IAC5E,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,IAAI;IAM3E;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAiBd"}
|
|
@@ -8,10 +8,11 @@ const DEFAULT_MAX_ENTRIES = 65_536;
|
|
|
8
8
|
* `(z, x, y, zRange)` for a given tileset descriptor, so it is safe to memoize
|
|
9
9
|
* across `getTileIndices` calls (i.e. across animation frames).
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* The key is valid only within a single projection mode. A tile's bounding
|
|
12
|
+
* volume is computed in a different common space under a GlobeView than under
|
|
13
|
+
* Web Mercator, so the cache must be {@link BoundingVolumeCache.clear cleared}
|
|
14
|
+
* when the viewport's projection mode changes. `RasterTileset2D` owns the cache
|
|
15
|
+
* and does this in `getTileIndices` when it detects a globe↔mercator switch.
|
|
15
16
|
*/
|
|
16
17
|
export class BoundingVolumeCache {
|
|
17
18
|
entries = new Map();
|
|
@@ -44,6 +45,14 @@ export class BoundingVolumeCache {
|
|
|
44
45
|
this.entries.delete(key);
|
|
45
46
|
this.entries.set(key, entry);
|
|
46
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Drop all cached entries. Called by the owner when the viewport's projection
|
|
50
|
+
* mode changes (globe↔mercator), since volumes computed under one projection
|
|
51
|
+
* are not valid under the other.
|
|
52
|
+
*/
|
|
53
|
+
clear() {
|
|
54
|
+
this.entries.clear();
|
|
55
|
+
}
|
|
47
56
|
/**
|
|
48
57
|
* If the cache is over its soft cap, drop least-recently-used entries down to
|
|
49
58
|
* roughly half of `maxEntries`. No-op when at or under the cap. Call once at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounding-volume-cache.js","sourceRoot":"","sources":["../../src/raster-tileset/bounding-volume-cache.ts"],"names":[],"mappings":"AA+BA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"bounding-volume-cache.js","sourceRoot":"","sources":["../../src/raster-tileset/bounding-volume-cache.ts"],"names":[],"mappings":"AA+BA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,mBAAmB;IACtB,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;IACtD,UAAU,CAAS;IAE3B,YAAY,EACV,UAAU,GAAG,mBAAmB,MACF,EAAE;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,gCAAgC;IAChC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACjC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,sEAAsE;QACtE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4EAA4E;IAC5E,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAA+B;QAClE,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;QAC1C,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,YAAY,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;gBAClC,MAAM;YACR,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -17,8 +17,7 @@
|
|
|
17
17
|
* both OGC TileMatrixSet grids and Zarr multiscale pyramids.
|
|
18
18
|
*/
|
|
19
19
|
import type { Viewport } from "@deck.gl/core";
|
|
20
|
-
import
|
|
21
|
-
import { CullingVolume } from "@math.gl/culling";
|
|
20
|
+
import { CullingVolume, OrientedBoundingBox } from "@math.gl/culling";
|
|
22
21
|
import { BoundingVolumeCache } from "./bounding-volume-cache.js";
|
|
23
22
|
import type { RasterTilesetDescriptor, RasterTilesetLevel } from "./tileset-interface.js";
|
|
24
23
|
import type { Bounds, TileIndex, ZRange } from "./types.js";
|
|
@@ -106,6 +105,14 @@ export declare class RasterTileNode {
|
|
|
106
105
|
* comparison would. See `dev-docs/lod-and-pixel-matching.md` § (A).
|
|
107
106
|
*/
|
|
108
107
|
pixelRatio: number;
|
|
108
|
+
/**
|
|
109
|
+
* Number of world copies to shift this tile's bounding volume by along
|
|
110
|
+
* common-space X for frustum testing. Default `0` (primary world).
|
|
111
|
+
* Non-zero passes are additive — they may set `selected = true` but
|
|
112
|
+
* never override a previous `true` to `false`. See
|
|
113
|
+
* `dev-docs/world-copies.md`.
|
|
114
|
+
*/
|
|
115
|
+
worldOffset?: number;
|
|
109
116
|
/**
|
|
110
117
|
* Bounding-volume cache shared by every node in this traversal. Populated
|
|
111
118
|
* lazily as tiles are visited; reused across `getTileIndices` calls (so
|
|
@@ -138,8 +145,23 @@ export declare class RasterTileNode {
|
|
|
138
145
|
* volume depends only on `(z, x, y, zRange)` for a given descriptor, so on a
|
|
139
146
|
* cache hit it is returned without rerunning {@link computeBoundingVolume}'s
|
|
140
147
|
* proj4 reprojections + oriented-bounding-box fit.
|
|
148
|
+
*
|
|
149
|
+
* For non-zero `worldOffset`, returns a translated copy (center shifted by
|
|
150
|
+
* `worldOffset * TILE_SIZE` along common-space X) without polluting the
|
|
151
|
+
* cache — the cache always stores the offset-0 volume. See
|
|
152
|
+
* `dev-docs/world-copies.md`.
|
|
153
|
+
*
|
|
154
|
+
* @param zRange Elevation `[min, max]` in common-space units.
|
|
155
|
+
* @param project Projection function for Globe view, or `null`
|
|
156
|
+
* for Web Mercator common space.
|
|
157
|
+
* @param boundingVolumeCache Cache keyed by `z/x/y`. Stores the offset-0
|
|
158
|
+
* volume only.
|
|
159
|
+
* @param worldOffset Number of world copies to translate the result
|
|
160
|
+
* by along common-space X. `0` returns the
|
|
161
|
+
* cached offset-0 volume directly. Non-zero
|
|
162
|
+
* values return a fresh translated copy.
|
|
141
163
|
*/
|
|
142
|
-
getBoundingVolume(zRange: ZRange, project: ((xyz: number[]) => number[]) | null, boundingVolumeCache: BoundingVolumeCache): {
|
|
164
|
+
getBoundingVolume(zRange: ZRange, project: ((xyz: number[]) => number[]) | null, boundingVolumeCache: BoundingVolumeCache, worldOffset?: number): {
|
|
143
165
|
boundingVolume: OrientedBoundingBox;
|
|
144
166
|
commonSpaceBounds: Bounds;
|
|
145
167
|
};
|
|
@@ -157,7 +179,40 @@ export declare class RasterTileNode {
|
|
|
157
179
|
*
|
|
158
180
|
*/
|
|
159
181
|
private _getGenericBoundingVolume;
|
|
182
|
+
/**
|
|
183
|
+
* Globe-view bounding volume: reproject the tile's reference points to WGS84,
|
|
184
|
+
* project them onto the globe sphere (`project` = `viewport.projectPosition`)
|
|
185
|
+
* to build the oriented bounding box used for frustum culling, and separately
|
|
186
|
+
* compute a Web-Mercator-world AABB for the `bounds` pre-filter in
|
|
187
|
+
* {@link update} (which compares against `wgs84Bounds` in mercator world).
|
|
188
|
+
*
|
|
189
|
+
* NOTE: elevation is not modeled on globe yet — reference points are sampled
|
|
190
|
+
* at the surface (z = 0). Flat rasters only. See
|
|
191
|
+
* `dev-docs/specs/2026-05-21-globe-view-design.md`.
|
|
192
|
+
*/
|
|
193
|
+
private _getGlobeBoundingVolume;
|
|
160
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Rescale positions from EPSG:3857 into deck.gl's common space
|
|
197
|
+
*
|
|
198
|
+
* Similar to the upstream code here:
|
|
199
|
+
* https://github.com/visgl/deck.gl/blob/b0134f025148b52b91320d16768ab5d14a745328/modules/geo-layers/src/tileset-2d/tile-2d-traversal.ts#L172-L177
|
|
200
|
+
*/
|
|
201
|
+
export declare function rescaleEPSG3857ToCommonSpace([x, y]: [number, number]): [
|
|
202
|
+
number,
|
|
203
|
+
number
|
|
204
|
+
];
|
|
205
|
+
/**
|
|
206
|
+
* Inverse of {@link rescaleEPSG3857ToCommonSpace}: rescale a deck.gl
|
|
207
|
+
* common-space position back into EPSG:3857 meters.
|
|
208
|
+
*
|
|
209
|
+
* Common-space inputs are in-range by construction, so (unlike the forward
|
|
210
|
+
* direction) no latitude clamp is applied.
|
|
211
|
+
*/
|
|
212
|
+
export declare function rescaleCommonSpaceToEPSG3857([x, y]: [number, number]): [
|
|
213
|
+
number,
|
|
214
|
+
number
|
|
215
|
+
];
|
|
161
216
|
/**
|
|
162
217
|
* Build the list of root (z=0) `RasterTileNode`s for the traversal.
|
|
163
218
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-tile-traversal.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/raster-tile-traversal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"raster-tile-traversal.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/raster-tile-traversal.ts"],"names":[],"mappings":"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"}
|