@deck.gl/extensions 8.9.0-beta.2 → 8.9.0-beta.3
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 +279 -458
- package/dist/es5/{collide/collide-effect.js → collision-filter/collision-filter-effect.js} +78 -71
- package/dist/es5/collision-filter/collision-filter-effect.js.map +1 -0
- package/dist/es5/{collide/collide-pass.js → collision-filter/collision-filter-pass.js} +13 -13
- package/dist/es5/collision-filter/collision-filter-pass.js.map +1 -0
- package/dist/es5/{collide/collide.js → collision-filter/collision-filter.js} +30 -30
- package/dist/es5/collision-filter/collision-filter.js.map +1 -0
- package/dist/es5/collision-filter/shader-module.js +39 -0
- package/dist/es5/collision-filter/shader-module.js.map +1 -0
- package/dist/es5/index.js +4 -4
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mask/mask-effect.js +14 -7
- package/dist/es5/mask/mask-effect.js.map +1 -1
- package/dist/es5/terrain/height-map-builder.js +1 -1
- package/dist/es5/terrain/height-map-builder.js.map +1 -1
- package/dist/es5/terrain/shader-module.js.map +1 -1
- package/dist/es5/terrain/terrain-cover.js +1 -1
- package/dist/es5/terrain/terrain-cover.js.map +1 -1
- package/dist/es5/terrain/terrain-effect.js +5 -5
- package/dist/es5/terrain/terrain-effect.js.map +1 -1
- package/dist/es5/terrain/terrain.js +7 -7
- package/dist/es5/terrain/terrain.js.map +1 -1
- package/dist/es5/{common → utils}/projection-utils.js +3 -1
- package/dist/es5/utils/projection-utils.js.map +1 -0
- package/dist/esm/{collide/collide-effect.js → collision-filter/collision-filter-effect.js} +69 -64
- package/dist/esm/collision-filter/collision-filter-effect.js.map +1 -0
- package/dist/esm/{collide/collide-pass.js → collision-filter/collision-filter-pass.js} +5 -5
- package/dist/esm/collision-filter/collision-filter-pass.js.map +1 -0
- package/dist/esm/collision-filter/collision-filter.js +78 -0
- package/dist/esm/collision-filter/collision-filter.js.map +1 -0
- package/dist/esm/collision-filter/shader-module.js +32 -0
- package/dist/esm/collision-filter/shader-module.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mask/mask-effect.js +13 -7
- package/dist/esm/mask/mask-effect.js.map +1 -1
- package/dist/esm/terrain/height-map-builder.js +1 -1
- package/dist/esm/terrain/height-map-builder.js.map +1 -1
- package/dist/esm/terrain/shader-module.js.map +1 -1
- package/dist/esm/terrain/terrain-cover.js +1 -1
- package/dist/esm/terrain/terrain-cover.js.map +1 -1
- package/dist/esm/terrain/terrain-effect.js +5 -5
- package/dist/esm/terrain/terrain-effect.js.map +1 -1
- package/dist/esm/terrain/terrain.js +7 -7
- package/dist/esm/terrain/terrain.js.map +1 -1
- package/dist/esm/{common → utils}/projection-utils.js +3 -1
- package/dist/esm/utils/projection-utils.js.map +1 -0
- package/dist.min.js +59 -62
- package/package.json +2 -2
- package/src/{collide/collide-effect.ts → collision-filter/collision-filter-effect.ts} +80 -77
- package/src/{collide/collide-pass.ts → collision-filter/collision-filter-pass.ts} +6 -6
- package/src/collision-filter/collision-filter.ts +83 -0
- package/src/collision-filter/shader-module.ts +113 -0
- package/src/index.ts +3 -3
- package/src/mask/mask-effect.ts +21 -12
- package/src/terrain/height-map-builder.ts +2 -2
- package/src/terrain/shader-module.ts +4 -1
- package/src/terrain/terrain-cover.ts +2 -2
- package/src/terrain/terrain-effect.ts +5 -5
- package/src/terrain/terrain.ts +10 -10
- package/src/{common → utils}/projection-utils.ts +4 -2
- package/typed/collision-filter/collision-filter-effect.d.ts +28 -0
- package/typed/collision-filter/collision-filter-effect.d.ts.map +1 -0
- package/typed/collision-filter/collision-filter-pass.d.ts +14 -0
- package/typed/collision-filter/collision-filter-pass.d.ts.map +1 -0
- package/typed/collision-filter/collision-filter.d.ts +41 -0
- package/typed/collision-filter/collision-filter.d.ts.map +1 -0
- package/typed/collision-filter/shader-module.d.ts +4 -0
- package/typed/collision-filter/shader-module.d.ts.map +1 -0
- package/typed/index.d.ts +3 -3
- package/typed/index.d.ts.map +1 -1
- package/typed/mask/mask-effect.d.ts +2 -2
- package/typed/mask/mask-effect.d.ts.map +1 -1
- package/typed/terrain/height-map-builder.d.ts +2 -2
- package/typed/terrain/height-map-builder.d.ts.map +1 -1
- package/typed/terrain/shader-module.d.ts +1 -1
- package/typed/terrain/shader-module.d.ts.map +1 -1
- package/typed/terrain/terrain-cover.d.ts +2 -2
- package/typed/terrain/terrain-cover.d.ts.map +1 -1
- package/typed/terrain/terrain.d.ts +2 -2
- package/typed/terrain/terrain.d.ts.map +1 -1
- package/typed/utils/projection-utils.d.ts +27 -0
- package/typed/utils/projection-utils.d.ts.map +1 -0
- package/dist/es5/collide/collide-effect.js.map +0 -1
- package/dist/es5/collide/collide-pass.js.map +0 -1
- package/dist/es5/collide/collide.js.map +0 -1
- package/dist/es5/collide/shader-module.js +0 -39
- package/dist/es5/collide/shader-module.js.map +0 -1
- package/dist/es5/common/projection-utils.js.map +0 -1
- package/dist/es5/mask/utils.js +0 -136
- package/dist/es5/mask/utils.js.map +0 -1
- package/dist/esm/collide/collide-effect.js.map +0 -1
- package/dist/esm/collide/collide-pass.js.map +0 -1
- package/dist/esm/collide/collide.js +0 -78
- package/dist/esm/collide/collide.js.map +0 -1
- package/dist/esm/collide/shader-module.js +0 -32
- package/dist/esm/collide/shader-module.js.map +0 -1
- package/dist/esm/common/projection-utils.js.map +0 -1
- package/dist/esm/mask/utils.js +0 -109
- package/dist/esm/mask/utils.js.map +0 -1
- package/src/collide/collide.ts +0 -79
- package/src/collide/shader-module.ts +0 -113
- package/src/mask/utils.ts +0 -148
|
@@ -3,7 +3,7 @@ import {Framebuffer} from '@luma.gl/core';
|
|
|
3
3
|
import type {Layer, Viewport} from '@deck.gl/core';
|
|
4
4
|
|
|
5
5
|
import {createRenderTarget} from './utils';
|
|
6
|
-
import {joinLayerBounds, makeViewport, getRenderBounds, Bounds} from '../
|
|
6
|
+
import {joinLayerBounds, makeViewport, getRenderBounds, Bounds} from '../utils/projection-utils';
|
|
7
7
|
|
|
8
8
|
// TODO - import from loaders when Tileset2D is split out
|
|
9
9
|
type GeoBoundingBox = {west: number; north: number; east: number; south: number};
|
|
@@ -15,7 +15,7 @@ type Tile2DHeader = {
|
|
|
15
15
|
/**
|
|
16
16
|
* Manages the lifecycle of the terrain cover (draped textures over a terrain mesh).
|
|
17
17
|
* One terrain cover is created for each unique terrain layer (primitive layer with operation:terrain).
|
|
18
|
-
* It is updated when the terrain source layer's mesh changes or when any of the
|
|
18
|
+
* It is updated when the terrain source layer's mesh changes or when any of the terrainDrawMode:drape
|
|
19
19
|
* layers requires redraw.
|
|
20
20
|
* During the draw call of a terrain layer, the drape texture is overlaid on top of the layer's own color.
|
|
21
21
|
*/
|
|
@@ -82,26 +82,26 @@ export class TerrainEffect implements Effect {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
if (!isPicking) {
|
|
85
|
-
const offsetLayers = layers.filter(l => l.state.
|
|
85
|
+
const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');
|
|
86
86
|
if (offsetLayers.length > 0) {
|
|
87
87
|
this._updateHeightMap(terrainLayers, viewport, opts);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
const drapeLayers = layers.filter(l => l.state.
|
|
91
|
+
const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');
|
|
92
92
|
this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
getModuleParameters(layer: Layer): TerrainModuleSettings {
|
|
96
|
-
const {
|
|
96
|
+
const {terrainDrawMode} = layer.state;
|
|
97
97
|
|
|
98
98
|
return {
|
|
99
99
|
heightMap: this.heightMap?.getRenderFramebuffer(),
|
|
100
100
|
heightMapBounds: this.heightMap?.bounds,
|
|
101
101
|
dummyHeightMap: this.dummyHeightMap,
|
|
102
102
|
terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,
|
|
103
|
-
useTerrainHeightMap:
|
|
104
|
-
terrainSkipRender:
|
|
103
|
+
useTerrainHeightMap: terrainDrawMode === 'offset',
|
|
104
|
+
terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')
|
|
105
105
|
};
|
|
106
106
|
}
|
|
107
107
|
|
package/src/terrain/terrain.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {terrainModule} from './shader-module';
|
|
|
5
5
|
import type {Layer} from '@deck.gl/core';
|
|
6
6
|
|
|
7
7
|
const defaultProps = {
|
|
8
|
-
|
|
8
|
+
terrainDrawMode: undefined
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export type TerrainExtensionProps = {
|
|
@@ -13,12 +13,12 @@ export type TerrainExtensionProps = {
|
|
|
13
13
|
* controls whether an object is drawn over the terrain surface by its anchor (usually defined by an accessor called `getPosition`, e.g. icon, scatterplot) or by its geometry (e.g. path, polygon).
|
|
14
14
|
* If not specified, it is automatically deduced from the layer.
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
terrainDrawMode?: 'offset' | 'drape';
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
type TerrainExtensionState = {
|
|
20
20
|
/** Resolved fitting mode */
|
|
21
|
-
|
|
21
|
+
terrainDrawMode: 'offset' | 'drape';
|
|
22
22
|
/** Set when a layer is flagged as needs redraw */
|
|
23
23
|
terrainCoverNeedsRedraw: boolean;
|
|
24
24
|
};
|
|
@@ -45,29 +45,29 @@ export default class TerrainExtension extends LayerExtension {
|
|
|
45
45
|
const {props, oldProps} = params;
|
|
46
46
|
|
|
47
47
|
if (
|
|
48
|
-
this.state.
|
|
49
|
-
props.
|
|
48
|
+
this.state.terrainDrawMode &&
|
|
49
|
+
props.terrainDrawMode === oldProps.terrainDrawMode &&
|
|
50
50
|
// @ts-ignore `extruded` may not exist in props
|
|
51
51
|
props.extruded === oldProps.extruded
|
|
52
52
|
) {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
let {
|
|
57
|
-
if (!
|
|
56
|
+
let {terrainDrawMode} = props;
|
|
57
|
+
if (!terrainDrawMode) {
|
|
58
58
|
// props.extruded is used as an indication that the layer is 2.5D
|
|
59
59
|
// @ts-ignore `extruded` may not exist in props
|
|
60
60
|
const is3d = this.props.extruded as boolean;
|
|
61
61
|
const attributes = this.getAttributeManager()?.attributes;
|
|
62
62
|
const hasAnchor = attributes && 'instancePositions' in attributes;
|
|
63
|
-
|
|
63
|
+
terrainDrawMode = is3d || hasAnchor ? 'offset' : 'drape';
|
|
64
64
|
}
|
|
65
|
-
this.setState({
|
|
65
|
+
this.setState({terrainDrawMode});
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
onNeedsRedraw(this: Layer<{}>): void {
|
|
69
69
|
const state = this.state as TerrainExtensionState;
|
|
70
|
-
if (state.
|
|
70
|
+
if (state.terrainDrawMode === 'drape') {
|
|
71
71
|
state.terrainCoverNeedsRedraw = true;
|
|
72
72
|
}
|
|
73
73
|
}
|
|
@@ -65,17 +65,19 @@ export function makeViewport(opts: {
|
|
|
65
65
|
0
|
|
66
66
|
]);
|
|
67
67
|
|
|
68
|
-
const maxSize = MAX_VIEWPORT_SIZE - border * 2;
|
|
69
68
|
let {width, height, zoom} = opts;
|
|
70
69
|
if (zoom === undefined) {
|
|
71
70
|
// Use width and height to determine zoom
|
|
72
|
-
|
|
71
|
+
width = width! - border * 2;
|
|
72
|
+
height = height! - border * 2;
|
|
73
|
+
const scale = Math.min(width / (bounds[2] - bounds[0]), height / (bounds[3] - bounds[1]));
|
|
73
74
|
zoom = Math.min(Math.log2(scale), 20);
|
|
74
75
|
} else if (!width || !height) {
|
|
75
76
|
// Use zoom to determine width and height
|
|
76
77
|
const scale = 2 ** zoom;
|
|
77
78
|
width = Math.round(Math.abs(bounds[2] - bounds[0]) * scale);
|
|
78
79
|
height = Math.round(Math.abs(bounds[3] - bounds[1]) * scale);
|
|
80
|
+
const maxSize = MAX_VIEWPORT_SIZE - border * 2;
|
|
79
81
|
if (width > maxSize || height > maxSize) {
|
|
80
82
|
const r = maxSize / Math.max(width, height);
|
|
81
83
|
width = Math.round(width * r);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Framebuffer, Texture2D } from '@luma.gl/core';
|
|
2
|
+
import type { Effect, Layer, PreRenderOptions } from '@deck.gl/core/typed';
|
|
3
|
+
export default class CollisionFilterEffect implements Effect {
|
|
4
|
+
id: string;
|
|
5
|
+
props: null;
|
|
6
|
+
useInPicking: boolean;
|
|
7
|
+
order: number;
|
|
8
|
+
private channels;
|
|
9
|
+
private collisionFilterPass?;
|
|
10
|
+
private collisionFBOs;
|
|
11
|
+
private dummyCollisionMap?;
|
|
12
|
+
private lastViewport?;
|
|
13
|
+
preRender(gl: WebGLRenderingContext, { effects: allEffects, layers, layerFilter, viewports, onViewportActive, views, isPicking, preRenderStats }: PreRenderOptions): void;
|
|
14
|
+
private _render;
|
|
15
|
+
/**
|
|
16
|
+
* Group layers by collisionGroup
|
|
17
|
+
* Returns a map from collisionGroup to render info
|
|
18
|
+
*/
|
|
19
|
+
private _groupByCollisionGroup;
|
|
20
|
+
getModuleParameters(layer: Layer): {
|
|
21
|
+
collisionFBO: Framebuffer;
|
|
22
|
+
dummyCollisionMap: Texture2D;
|
|
23
|
+
};
|
|
24
|
+
cleanup(): void;
|
|
25
|
+
createFBO(gl: WebGLRenderingContext, collisionGroup: string): void;
|
|
26
|
+
destroyFBO(collisionGroup: string): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=collision-filter-effect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-filter-effect.d.ts","sourceRoot":"","sources":["../../src/collision-filter/collision-filter-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAgB,SAAS,EAAmB,MAAM,eAAe,CAAC;AAGrF,OAAO,KAAK,EAAC,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAW,MAAM,eAAe,CAAC;AAoB7E,MAAM,CAAC,OAAO,OAAO,qBAAsB,YAAW,MAAM;IAC1D,EAAE,SAA6B;IAC/B,KAAK,OAAQ;IACb,YAAY,UAAQ;IACpB,KAAK,SAAK;IAEV,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,iBAAiB,CAAC,CAAY;IACtC,OAAO,CAAC,YAAY,CAAC,CAAW;IAEhC,SAAS,CACP,EAAE,EAAE,qBAAqB,EACzB,EACE,OAAO,EAAE,UAAU,EACnB,MAAM,EACN,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,cAAmB,EACpB,EAAE,gBAAgB,GAClB,IAAI;IAuDP,OAAO,CAAC,OAAO;IA8Df;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAqC9B,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG;QACjC,YAAY,EAAE,WAAW,CAAC;QAC1B,iBAAiB,EAAE,SAAS,CAAC;KAC9B;IAMD,OAAO,IAAI,IAAI;IAaf,SAAS,CAAC,EAAE,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM;IAyB3D,UAAU,CAAC,cAAc,EAAE,MAAM;CAQlC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Framebuffer } from '@luma.gl/core';
|
|
2
|
+
import { _LayersPass as LayersPass, LayersPassRenderOptions } from '@deck.gl/core/typed';
|
|
3
|
+
declare type CollisionFilterPassRenderOptions = LayersPassRenderOptions & {};
|
|
4
|
+
export default class CollisionFilterPass extends LayersPass {
|
|
5
|
+
renderCollisionMap(target: Framebuffer, options: CollisionFilterPassRenderOptions): any;
|
|
6
|
+
getModuleParameters(): {
|
|
7
|
+
drawToCollisionMap: boolean;
|
|
8
|
+
pickingActive: number;
|
|
9
|
+
pickingAttribute: boolean;
|
|
10
|
+
lightSources: {};
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=collision-filter-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-filter-pass.d.ts","sourceRoot":"","sources":["../../src/collision-filter/collision-filter-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAiB,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAC,WAAW,IAAI,UAAU,EAAE,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAEjF,aAAK,gCAAgC,GAAG,uBAAuB,GAAG,EAAE,CAAC;AAErE,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;IACzD,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,gCAAgC;IAmBjF,mBAAmB;;;;;;CASpB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Accessor, Layer, LayerContext, LayerExtension } from '@deck.gl/core/typed';
|
|
2
|
+
export declare type CollisionFilterExtensionProps<DataT = any> = {
|
|
3
|
+
/**
|
|
4
|
+
* Accessor for collision priority. Must return a number in the range -1000 -> 1000. Features with higher values are shown preferentially.
|
|
5
|
+
*/
|
|
6
|
+
getCollisionPriority?: Accessor<DataT, number>;
|
|
7
|
+
/**
|
|
8
|
+
* Enable/disable collisions. If collisions are disabled, all objects are rendered.
|
|
9
|
+
* @default true
|
|
10
|
+
*/
|
|
11
|
+
collisionEnabled: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Collision group this layer belongs to. If it is not set, the 'default' collision group is used
|
|
14
|
+
*/
|
|
15
|
+
collisionGroup?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Props to override when rendering collision map
|
|
18
|
+
*/
|
|
19
|
+
collisionTestProps?: {};
|
|
20
|
+
};
|
|
21
|
+
/** Allows layers to hide overlapping objects. */
|
|
22
|
+
export default class CollisionFilterExtension extends LayerExtension {
|
|
23
|
+
static defaultProps: {
|
|
24
|
+
getCollisionPriority: {
|
|
25
|
+
type: string;
|
|
26
|
+
value: number;
|
|
27
|
+
};
|
|
28
|
+
collisionEnabled: boolean;
|
|
29
|
+
collisionGroup: {
|
|
30
|
+
type: string;
|
|
31
|
+
value: string;
|
|
32
|
+
};
|
|
33
|
+
collisionTestProps: {};
|
|
34
|
+
};
|
|
35
|
+
static extensionName: string;
|
|
36
|
+
getShaders(this: Layer<CollisionFilterExtensionProps>): any;
|
|
37
|
+
draw(this: Layer<CollisionFilterExtensionProps>, { uniforms, context, moduleParameters }: any): void;
|
|
38
|
+
initializeState(this: Layer<CollisionFilterExtensionProps>, context: LayerContext, extension: this): void;
|
|
39
|
+
getNeedsPickingBuffer(this: Layer<CollisionFilterExtensionProps>): boolean;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=collision-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-filter.d.ts","sourceRoot":"","sources":["../../src/collision-filter/collision-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAW5E,oBAAY,6BAA6B,CAAC,KAAK,GAAG,GAAG,IAAI;IACvD;;OAEG;IACH,oBAAoB,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE/C;;;OAGG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,CAAC;CACzB,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,cAAc;IAClE,MAAM,CAAC,YAAY;;;;;;;;;;;MAAgB;IACnC,MAAM,CAAC,aAAa,SAA8B;IAElD,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,6BAA6B,CAAC,GAAG,GAAG;IAK3D,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,6BAA6B,CAAC,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAC,EAAE,GAAG;IAa3F,eAAe,CACb,IAAI,EAAE,KAAK,CAAC,6BAA6B,CAAC,EAC1C,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,IAAI;IAmBjB,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,6BAA6B,CAAC,GAAG,OAAO;CAG3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../src/collision-filter/shader-module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,aAAa,IAAI,YAAY,EAAC,MAAM,eAAe,CAAC;;AAwGjE,wBAMkB"}
|
package/typed/index.d.ts
CHANGED
|
@@ -4,16 +4,16 @@ export { default as Fp64Extension } from './fp64/fp64';
|
|
|
4
4
|
export { default as PathStyleExtension } from './path-style/path-style';
|
|
5
5
|
export { default as FillStyleExtension } from './fill-style/fill-style';
|
|
6
6
|
export { default as ClipExtension } from './clip/clip';
|
|
7
|
-
export { default as
|
|
7
|
+
export { default as CollisionFilterExtension } from './collision-filter/collision-filter';
|
|
8
8
|
export { default as MaskExtension } from './mask/mask';
|
|
9
|
-
export { default as
|
|
9
|
+
export { default as _TerrainExtension } from './terrain/terrain';
|
|
10
10
|
export { default as project64 } from './fp64/project64';
|
|
11
11
|
export type { BrushingExtensionProps } from './brushing/brushing';
|
|
12
12
|
export type { DataFilterExtensionProps } from './data-filter/data-filter';
|
|
13
13
|
export type { PathStyleExtensionProps } from './path-style/path-style';
|
|
14
14
|
export type { FillStyleExtensionProps } from './fill-style/fill-style';
|
|
15
15
|
export type { ClipExtensionProps } from './clip/clip';
|
|
16
|
-
export type {
|
|
16
|
+
export type { CollisionFilterExtensionProps } from './collision-filter/collision-filter';
|
|
17
17
|
export type { MaskExtensionProps } from './mask/mask';
|
|
18
18
|
export type { TerrainExtensionProps } from './terrain/terrain';
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/typed/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,aAAa,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,aAAa,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,aAAa,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,aAAa,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,aAAa,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAG/D,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAGtD,YAAY,EAAC,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAC,wBAAwB,EAAC,MAAM,2BAA2B,CAAC;AACxE,YAAY,EAAC,uBAAuB,EAAC,MAAM,yBAAyB,CAAC;AACrE,YAAY,EAAC,uBAAuB,EAAC,MAAM,yBAAyB,CAAC;AACrE,YAAY,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AACpD,YAAY,EAAC,6BAA6B,EAAC,MAAM,qCAAqC,CAAC;AACvF,YAAY,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AACpD,YAAY,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Effect, PreRenderOptions, CoordinateSystem } from '@deck.gl/core/typed';
|
|
2
2
|
import { Texture2D } from '@luma.gl/core';
|
|
3
|
-
import {
|
|
3
|
+
import { Bounds } from '../utils/projection-utils';
|
|
4
4
|
declare type Mask = {
|
|
5
5
|
/** The channel index */
|
|
6
6
|
index: number;
|
|
7
|
-
bounds:
|
|
7
|
+
bounds: Bounds;
|
|
8
8
|
coordinateOrigin: [number, number, number];
|
|
9
9
|
coordinateSystem: CoordinateSystem;
|
|
10
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-effect.d.ts","sourceRoot":"","sources":["../../src/mask/mask-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAM,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGxC,OAAO,
|
|
1
|
+
{"version":3,"file":"mask-effect.d.ts","sourceRoot":"","sources":["../../src/mask/mask-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAM,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAiD,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAGjG,aAAK,IAAI,GAAG;IACV,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAaF,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,UAAW,YAAW,MAAM;IAC/C,EAAE,SAAiB;IACnB,KAAK,OAAQ;IACb,YAAY,UAAQ;IACpB,KAAK,SAAK;IAEV,OAAO,CAAC,YAAY,CAAC,CAAY;IACjC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAW;IAEhC,SAAS,CACP,EAAE,EAAE,qBAAqB,EACzB,EAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAC,EAAE,gBAAgB,GACrF,kBAAkB;IAqDrB,OAAO,CAAC,cAAc;IAsFtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA4CzB,mBAAmB,IAAI;QACrB,OAAO,EAAE,SAAS,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;KAC3C;IAOD,OAAO,IAAI,IAAI;CAgBhB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Framebuffer } from '@luma.gl/core';
|
|
2
|
-
import { Bounds } from '../
|
|
2
|
+
import { Bounds } from '../utils/projection-utils';
|
|
3
3
|
import type { Viewport, Layer } from '@deck.gl/core/typed';
|
|
4
4
|
/**
|
|
5
5
|
* Manages the lifecycle of the height map (a framebuffer that encodes elevation).
|
|
6
6
|
* One instance of height map is is shared across all layers. It is updated when the viewport changes
|
|
7
7
|
* or when some terrain source layer's data changes.
|
|
8
|
-
* During the draw call of any
|
|
8
|
+
* During the draw call of any terrainDrawMode:offset layers,
|
|
9
9
|
* the vertex shader reads from this framebuffer to retrieve its z offset.
|
|
10
10
|
*/
|
|
11
11
|
export declare class HeightMapBuilder {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"height-map-builder.d.ts","sourceRoot":"","sources":["../../src/terrain/height-map-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAiD,MAAM,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"height-map-builder.d.ts","sourceRoot":"","sources":["../../src/terrain/height-map-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAiD,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAGjG,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,EAAE,EAAE,qBAAqB,CAAC;IACpC,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,EAAE,EAAE,qBAAqB,GAAG,OAAO;gBAI1C,EAAE,EAAE,qBAAqB;IAIrC;;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;IA4DhF,MAAM;CAMP"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { _ShaderModule as ShaderModule } from '@deck.gl/core/typed';
|
|
2
2
|
import type { Texture2D } from '@luma.gl/core';
|
|
3
|
-
import type { Bounds } from '../
|
|
3
|
+
import type { Bounds } from '../utils/projection-utils';
|
|
4
4
|
import type { TerrainCover } from './terrain-cover';
|
|
5
5
|
/** Module parameters expected by the terrain shader module */
|
|
6
6
|
export declare type TerrainModuleSettings = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../src/terrain/shader-module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../src/terrain/shader-module.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,aAAa,IAAI,YAAY,EAAC,MAAM,eAAe,CAAC;AAEjE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAElD,8DAA8D;AAC9D,oBAAY,qBAAqB,GAAG;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,SAAS,CAAC;IAC1B,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;AAEF,kDAAkD;AAClD,eAAO,MAAM,YAAY;;IAEvB,6EAA6E;;IAE7E,2EAA2E;;IAE3E,6FAA6F;;IAE7F,0EAA0E;;IAE1E,mEAAmE;;CAEpE,CAAC;AAMF,eAAO,MAAM,aAAa,qCA2Hc,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Framebuffer } from '@luma.gl/core';
|
|
2
2
|
import type { Layer, Viewport } from '@deck.gl/core/typed';
|
|
3
|
-
import { Bounds } from '../
|
|
3
|
+
import { Bounds } from '../utils/projection-utils';
|
|
4
4
|
/**
|
|
5
5
|
* Manages the lifecycle of the terrain cover (draped textures over a terrain mesh).
|
|
6
6
|
* One terrain cover is created for each unique terrain layer (primitive layer with operation:terrain).
|
|
7
|
-
* It is updated when the terrain source layer's mesh changes or when any of the
|
|
7
|
+
* It is updated when the terrain source layer's mesh changes or when any of the terrainDrawMode:drape
|
|
8
8
|
* layers requires redraw.
|
|
9
9
|
* During the draw call of a terrain layer, the drape texture is overlaid on top of the layer's own color.
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terrain-cover.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-cover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAiD,MAAM,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"terrain-cover.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-cover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAiD,MAAM,EAAC,MAAM,2BAA2B,CAAC;AASjG;;;;;;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,CAAsB;IAClC,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;IAC5F,OAAO,CAAC,eAAe;IAwCvB,oBAAoB,IAAI,WAAW,GAAG,IAAI;IAU1C,qBAAqB,IAAI,WAAW,GAAG,IAAI;IAU3C,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE;IAI5B,MAAM;CAWP"}
|
|
@@ -5,12 +5,12 @@ export declare type TerrainExtensionProps = {
|
|
|
5
5
|
* controls whether an object is drawn over the terrain surface by its anchor (usually defined by an accessor called `getPosition`, e.g. icon, scatterplot) or by its geometry (e.g. path, polygon).
|
|
6
6
|
* If not specified, it is automatically deduced from the layer.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
terrainDrawMode?: 'offset' | 'drape';
|
|
9
9
|
};
|
|
10
10
|
/** Allows layers to show/hide objects by a geofence. */
|
|
11
11
|
export default class TerrainExtension extends LayerExtension {
|
|
12
12
|
static defaultProps: {
|
|
13
|
-
|
|
13
|
+
terrainDrawMode: undefined;
|
|
14
14
|
};
|
|
15
15
|
static extensionName: string;
|
|
16
16
|
getShaders(this: Layer<TerrainExtensionProps>): any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terrain.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAI/D,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAMzC,oBAAY,qBAAqB,GAAG;IAClC;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"terrain.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAI/D,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAMzC,oBAAY,qBAAqB,GAAG;IAClC;;;OAGG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtC,CAAC;AASF,wDAAwD;AACxD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IAC1D,MAAM,CAAC,YAAY;;MAAgB;IACnC,MAAM,CAAC,aAAa,SAAsB;IAE1C,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,qBAAqB,CAAC,GAAG,GAAG;IAMnD,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,qBAAqB,CAAC;IAIlD,WAAW,CACT,IAAI,EAAE,KAAK,CAAC,qBAAqB,CAAC,EAClC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAyBxD,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;CAMrC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Layer, Viewport } from '@deck.gl/core/typed';
|
|
2
|
+
/** Bounds in CARTESIAN coordinates */
|
|
3
|
+
export declare type Bounds = [minX: number, minY: number, maxX: number, maxY: number];
|
|
4
|
+
export declare function joinLayerBounds(
|
|
5
|
+
/** The layers to combine */
|
|
6
|
+
layers: Layer[],
|
|
7
|
+
/** A Viewport instance that is used to determine the type of the view */
|
|
8
|
+
viewport: Viewport): Bounds | null;
|
|
9
|
+
/** Construct a viewport that just covers the target bounds. Used for rendering to common space indexed texture. */
|
|
10
|
+
export declare function makeViewport(opts: {
|
|
11
|
+
/** The cartesian bounds of layers that will render into this texture */
|
|
12
|
+
bounds: Bounds;
|
|
13
|
+
/** Target width. If not specified, will be deduced from zoom */
|
|
14
|
+
width?: number;
|
|
15
|
+
/** Target height. If not specified, will be deduced from zoom */
|
|
16
|
+
height?: number;
|
|
17
|
+
/** Target zoom. If not specified, will be deduced from width and height */
|
|
18
|
+
zoom?: number;
|
|
19
|
+
/** Border around the viewport in pixels */
|
|
20
|
+
border?: number;
|
|
21
|
+
/** A viewport used to determine the output type */
|
|
22
|
+
viewport: Viewport;
|
|
23
|
+
}): Viewport | null;
|
|
24
|
+
/** Returns viewport bounds in CARTESIAN coordinates */
|
|
25
|
+
export declare function getViewportBounds(viewport: Viewport, zRange?: [number, number]): Bounds;
|
|
26
|
+
export declare function getRenderBounds(layerBounds: Bounds, viewport: Viewport, zRange?: [number, number]): Bounds;
|
|
27
|
+
//# sourceMappingURL=projection-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection-utils.d.ts","sourceRoot":"","sources":["../../src/utils/projection-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEnD,sCAAsC;AACtC,oBAAY,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAM9E,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,CAyDlB;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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collide/collide-effect.ts"],"names":["DOWNSCALE","CollideEffect","gl","allEffects","effects","layers","layerFilter","viewports","onViewportActive","views","isPicking","preRenderStats","dummyCollideMap","Texture2D","width","height","collideLayers","filter","props","visible","collideEnabled","length","channels","collidePass","CollidePass","id","e","constructor","MaskEffect","maskEffectRendered","didRender","_groupByCollideGroup","viewport","viewportChanged","lastViewport","equals","collideGroup","collideFBO","collideFBOs","renderInfo","resize","canvas","_render","oldRenderInfo","needsRender","layerBounds","some","b","i","renderCollideMap","pass","moduleParameters","devicePixelRatio","channelMap","layer","channelInfo","push","getBounds","Object","keys","createFBO","destroyFBO","delete","undefined","collideMap","parameters","depthBuffer","Renderbuffer","format","Framebuffer","attachments","fbo","values","attachment"],"mappings":"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","sourcesContent":["import {Framebuffer, Renderbuffer, Texture2D, cssToDeviceRatio} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport {_deepEqual as deepEqual} from '@deck.gl/core';\nimport type {Effect, Layer, PreRenderOptions, Viewport} from '@deck.gl/core';\nimport CollidePass from './collide-pass';\nimport MaskEffect, {MaskPreRenderStats} from '../mask/mask-effect';\n// import {debugFBO} from '../utils/debug';\n\ntype CollideExtensionProps = {\n collideTestProps?: {};\n collideGroup: string;\n};\n\n// Factor by which to downscale Collide FBO relative to canvas\nconst DOWNSCALE = 2;\n\ntype RenderInfo = {\n collideGroup: string;\n layers: Layer<CollideExtensionProps>[];\n layerBounds: ([number[], number[]] | null)[];\n};\n\n// Class to manage collide effect\nexport default class CollideEffect implements Effect {\n id = 'collide-effect';\n props = null;\n useInPicking = true;\n order = 1;\n\n private channels: Record<string, RenderInfo> = {};\n private collidePass?: CollidePass;\n private collideFBOs: Record<string, Framebuffer> = {};\n private dummyCollideMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {\n effects: allEffects,\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n isPicking,\n preRenderStats = {}\n }: PreRenderOptions\n ): void {\n if (!this.dummyCollideMap) {\n this.dummyCollideMap = new Texture2D(gl, {width: 1, height: 1});\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return;\n }\n\n const collideLayers = layers.filter(\n // @ts-ignore\n ({props: {visible, collideEnabled}}) => visible && collideEnabled\n ) as Layer<CollideExtensionProps>[];\n if (collideLayers.length === 0) {\n this.channels = {};\n return;\n }\n\n if (!this.collidePass) {\n this.collidePass = new CollidePass(gl, {id: 'default-collide'});\n }\n\n // Detect if mask has rendered. TODO: better dependency system for Effects\n const effects = allEffects?.filter(e => e.constructor === MaskEffect);\n const maskEffectRendered = (preRenderStats['mask-effect'] as MaskPreRenderStats)?.didRender;\n\n // Collect layers to render\n const channels = this._groupByCollideGroup(gl, collideLayers);\n\n const viewport = viewports[0];\n const viewportChanged =\n !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;\n\n // Resize framebuffers to match canvas\n for (const collideGroup in channels) {\n const collideFBO = this.collideFBOs[collideGroup];\n const renderInfo = channels[collideGroup];\n collideFBO.resize({\n width: gl.canvas.width / DOWNSCALE,\n height: gl.canvas.height / DOWNSCALE\n });\n this._render(renderInfo, {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n }\n\n // debugFBO(this.collideFBOs[Object.keys(channels)[0]], {minimap: true});\n }\n\n private _render(\n renderInfo: RenderInfo,\n {\n effects,\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n effects: PreRenderOptions['effects'];\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ) {\n const {collideGroup} = renderInfo;\n const oldRenderInfo = this.channels[collideGroup];\n if (!oldRenderInfo) {\n return;\n }\n\n const needsRender =\n viewportChanged ||\n // If render info is new\n renderInfo === oldRenderInfo ||\n // If sublayers have changed\n !deepEqual(oldRenderInfo.layers, renderInfo.layers, 0) ||\n // If a sublayer's bounds have been updated\n renderInfo.layerBounds.some((b, i) => !equals(b, oldRenderInfo.layerBounds[i]));\n\n this.channels[collideGroup] = renderInfo;\n\n if (needsRender) {\n this.lastViewport = viewport;\n const collideFBO = this.collideFBOs[collideGroup];\n\n // Rerender collide FBO\n this.collidePass!.renderCollideMap(collideFBO, {\n pass: 'collide',\n isPicking: true,\n layers: renderInfo.layers,\n effects,\n layerFilter,\n viewports: viewport ? [viewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n // To avoid feedback loop forming between Framebuffer and active Texture.\n dummyCollideMap: this.dummyCollideMap,\n devicePixelRatio: cssToDeviceRatio(collideFBO.gl) / DOWNSCALE\n }\n });\n }\n }\n\n /**\n * Group layers by collideGroup\n * Returns a map from collideGroup to render info\n */\n private _groupByCollideGroup(\n gl: WebGLRenderingContext,\n collideLayers: Layer<CollideExtensionProps>[]\n ): Record<string, RenderInfo> {\n const channelMap = {};\n for (const layer of collideLayers) {\n const {collideGroup} = layer.props;\n let channelInfo = channelMap[collideGroup];\n if (!channelInfo) {\n channelInfo = {\n collideGroup,\n layers: [],\n layerBounds: []\n };\n channelMap[collideGroup] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n // Create any new passes and remove any old ones\n for (const collideGroup of Object.keys(channelMap)) {\n if (!this.collideFBOs[collideGroup]) {\n this.createFBO(gl, collideGroup);\n }\n if (!this.channels[collideGroup]) {\n this.channels[collideGroup] = channelMap[collideGroup];\n }\n }\n for (const collideGroup of Object.keys(this.collideFBOs)) {\n if (!channelMap[collideGroup]) {\n this.destroyFBO(collideGroup);\n }\n }\n\n return channelMap;\n }\n\n getModuleParameters(layer: Layer): {\n collideFBO: Framebuffer;\n dummyCollideMap: Texture2D;\n } {\n const {collideGroup} = (layer as Layer<CollideExtensionProps>).props;\n const {collideFBOs, dummyCollideMap} = this;\n return {collideFBO: collideFBOs[collideGroup], dummyCollideMap};\n }\n\n cleanup(): void {\n if (this.dummyCollideMap) {\n this.dummyCollideMap.delete();\n this.dummyCollideMap = undefined;\n }\n this.channels = {};\n for (const collideGroup of Object.keys(this.collideFBOs)) {\n this.destroyFBO(collideGroup);\n }\n this.collideFBOs = {};\n this.lastViewport = undefined;\n }\n\n createFBO(gl: WebGLRenderingContext, collideGroup: string) {\n const {width, height} = gl.canvas;\n const collideMap = new Texture2D(gl, {\n width,\n height,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.NEAREST,\n [gl.TEXTURE_MAG_FILTER]: gl.NEAREST,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n const depthBuffer = new Renderbuffer(gl, {format: gl.DEPTH_COMPONENT16, width, height});\n this.collideFBOs[collideGroup] = new Framebuffer(gl, {\n id: `Collide-${collideGroup}`,\n width,\n height,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: collideMap,\n [gl.DEPTH_ATTACHMENT]: depthBuffer\n }\n });\n }\n\n destroyFBO(collideGroup: string) {\n const fbo = this.collideFBOs[collideGroup];\n for (const attachment of Object.values(fbo.attachments as Texture2D[])) {\n attachment.delete();\n }\n fbo.delete();\n delete this.collideFBOs[collideGroup];\n }\n}\n"],"file":"collide-effect.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collide/collide-pass.ts"],"names":["CollidePass","target","options","gl","padding","scissorTest","scissor","width","height","clearColor","blend","depthTest","depthRange","render","pass","drawToCollideMap","pickingActive","pickingAttribute","lightSources","LayersPass"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;;;;;IAIqBA,W;;;;;;;;;;;;WACnB,0BAAiBC,MAAjB,EAAsCC,OAAtC,EAAyE;AAAA;;AACvE,UAAMC,EAAE,GAAG,KAAKA,EAAhB;AAEA,UAAMC,OAAO,GAAG,CAAhB;AAEA,aAAO,0BACLD,EADK,EAEL;AACEE,QAAAA,WAAW,EAAE,IADf;AAEEC,QAAAA,OAAO,EAAE,CAACF,OAAD,EAAUA,OAAV,EAAmBH,MAAM,CAACM,KAAP,GAAe,IAAIH,OAAtC,EAA+CH,MAAM,CAACO,MAAP,GAAgB,IAAIJ,OAAnE,CAFX;AAGEK,QAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAHd;AAIEC,QAAAA,KAAK,EAAE,KAJT;AAKEC,QAAAA,SAAS,EAAE,IALb;AAMEC,QAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ;AANd,OAFK,EAUL;AAAA,eAAM,KAAI,CAACC,MAAL,iCAAgBX,OAAhB;AAAyBD,UAAAA,MAAM,EAANA,MAAzB;AAAiCa,UAAAA,IAAI,EAAE;AAAvC,WAAN;AAAA,OAVK,CAAP;AAYD;;;WAED,+BAAsB;AAEpB,aAAO;AACLC,QAAAA,gBAAgB,EAAE,IADb;AAELC,QAAAA,aAAa,EAAE,CAFV;AAGLC,QAAAA,gBAAgB,EAAE,KAHb;AAILC,QAAAA,YAAY,EAAE;AAJT,OAAP;AAMD;;;EA5BsCC,kB","sourcesContent":["import {Framebuffer, withParameters} from '@luma.gl/core';\nimport {_LayersPass as LayersPass, LayersPassRenderOptions} from '@deck.gl/core';\n\ntype CollidePassRenderOptions = LayersPassRenderOptions & {};\n\nexport default class CollidePass extends LayersPass {\n renderCollideMap(target: Framebuffer, options: CollidePassRenderOptions) {\n const gl = this.gl;\n\n const padding = 1;\n\n return withParameters(\n gl,\n {\n scissorTest: true,\n scissor: [padding, padding, target.width - 2 * padding, target.height - 2 * padding],\n clearColor: [0, 0, 0, 0],\n blend: false,\n depthTest: true,\n depthRange: [0, 1]\n },\n () => this.render({...options, target, pass: 'collide'})\n );\n }\n\n getModuleParameters() {\n // Draw picking colors into collide FBO\n return {\n drawToCollideMap: true,\n pickingActive: 1,\n pickingAttribute: false,\n lightSources: {}\n };\n }\n}\n"],"file":"collide-pass.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collide/collide.ts"],"names":["defaultProps","getCollidePriority","type","value","collideEnabled","collideGroup","collideTestProps","CollideExtension","modules","collide","uniforms","context","moduleParameters","props","collideFBO","drawToCollideMap","enabled","Boolean","collide_enabled","clone","extension","getAttributeManager","deck","_addDefaultEffect","CollideEffect","attributeManager","add","collidePriorities","size","accessor","shaderAttributes","divisor","instanceCollidePriorities","LayerExtension"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,kBAAkB,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE;AAA1B,GADD;AAEnBC,EAAAA,cAAc,EAAE,IAFG;AAGnBC,EAAAA,YAAY,EAAE;AAACH,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE;AAAxB,GAHK;AAInBG,EAAAA,gBAAgB,EAAE;AAJC,CAArB;;IA+BqBC,gB;;;;;;;;;;;;WAInB,sBAAoD;AAClD,aAAO;AAACC,QAAAA,OAAO,EAAE,CAACC,qBAAD;AAAV,OAAP;AACD;;;WAGD,oBAAqF;AAAA,UAA3CC,QAA2C,QAA3CA,QAA2C;AAAA,UAAjCC,OAAiC,QAAjCA,OAAiC;AAAA,UAAxBC,gBAAwB,QAAxBA,gBAAwB;AACnF,UAAOR,cAAP,GAAyB,KAAKS,KAA9B,CAAOT,cAAP;AACA,UAAOU,UAAP,GAAuCF,gBAAvC,CAAOE,UAAP;AAAA,UAAmBC,gBAAnB,GAAuCH,gBAAvC,CAAmBG,gBAAnB;AACA,UAAMC,OAAO,GAAGZ,cAAc,IAAIa,OAAO,CAACH,UAAD,CAAzC;AACAJ,MAAAA,QAAQ,CAACQ,eAAT,GAA2BF,OAA3B;;AAEA,UAAID,gBAAJ,EAAsB;AAGpB,aAAKF,KAAL,GAAa,KAAKM,KAAL,CAAW,KAAKN,KAAL,CAAWP,gBAAtB,EAAwCO,KAArD;AACD;AACF;;;WAED,yBAAoDF,OAApD,EAA2ES,SAA3E,EAA4F;AAAA;;AAC1F,UAAI,KAAKC,mBAAL,OAA+B,IAAnC,EAAyC;AACvC;AACD;;AACD,iCAAKV,OAAL,CAAaW,IAAb,0EAAmBC,iBAAnB,CAAqC,IAAIC,sBAAJ,EAArC;AACA,UAAMC,gBAAgB,GAAG,KAAKJ,mBAAL,EAAzB;AACAI,MAAAA,gBAAgB,CAAEC,GAAlB,CAAsB;AACpBC,QAAAA,iBAAiB,EAAE;AACjBC,UAAAA,IAAI,EAAE,CADW;AAEjBC,UAAAA,QAAQ,EAAE,oBAFO;AAGjBC,UAAAA,gBAAgB,EAAE;AAChBH,YAAAA,iBAAiB,EAAE;AAACI,cAAAA,OAAO,EAAE;AAAV,aADH;AAEhBC,YAAAA,yBAAyB,EAAE;AAACD,cAAAA,OAAO,EAAE;AAAV;AAFX;AAHD;AADC,OAAtB;AAUD;;;WAED,iCAAmE;AACjE,aAAO,KAAKlB,KAAL,CAAWT,cAAlB;AACD;;;EA1C2C6B,oB;;;8BAAzB1B,gB,kBACGP,Y;8BADHO,gB,mBAEI,kB","sourcesContent":["import {Accessor, Layer, LayerContext, LayerExtension} from '@deck.gl/core';\nimport collide from './shader-module';\nimport CollideEffect from './collide-effect';\n\nconst defaultProps = {\n getCollidePriority: {type: 'accessor', value: 0},\n collideEnabled: true,\n collideGroup: {type: 'string', value: 'default'},\n collideTestProps: {}\n};\n\nexport type CollideExtensionProps<DataT = any> = {\n /**\n * Accessor for collision priority. Must return a number in the range -1000 -> 1000. Features with higher values are shown preferentially.\n */\n getCollidePriority?: Accessor<DataT, number>;\n\n /**\n * Enable/disable collisions. If collisions are disabled, all objects are rendered.\n * @default true\n */\n collideEnabled: boolean;\n\n /**\n * Collision group this layer belongs to. If it is not set, the 'default' collision group is used\n */\n collideGroup?: string;\n\n /**\n * Props to override when rendering collision map\n */\n collideTestProps?: {};\n};\n\n/** Allows layers to hide overlapping objects. */\nexport default class CollideExtension extends LayerExtension {\n static defaultProps = defaultProps;\n static extensionName = 'CollideExtension';\n\n getShaders(this: Layer<CollideExtensionProps>): any {\n return {modules: [collide]};\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer<CollideExtensionProps>, {uniforms, context, moduleParameters}: any) {\n const {collideEnabled} = this.props;\n const {collideFBO, drawToCollideMap} = moduleParameters;\n const enabled = collideEnabled && Boolean(collideFBO);\n uniforms.collide_enabled = enabled;\n\n if (drawToCollideMap) {\n // Override any props with those defined in collideTestProps\n // @ts-ignore\n this.props = this.clone(this.props.collideTestProps).props;\n }\n }\n\n initializeState(this: Layer<CollideExtensionProps>, context: LayerContext, extension: this) {\n if (this.getAttributeManager() === null) {\n return;\n }\n this.context.deck?._addDefaultEffect(new CollideEffect());\n const attributeManager = this.getAttributeManager();\n attributeManager!.add({\n collidePriorities: {\n size: 1,\n accessor: 'getCollidePriority',\n shaderAttributes: {\n collidePriorities: {divisor: 0},\n instanceCollidePriorities: {divisor: 1}\n }\n }\n });\n }\n\n getNeedsPickingBuffer(this: Layer<CollideExtensionProps>): boolean {\n return this.props.collideEnabled;\n }\n}\n"],"file":"collide.js"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _core = require("@deck.gl/core");
|
|
9
|
-
|
|
10
|
-
var vs = "\n#ifdef NON_INSTANCED_MODEL\nattribute float collidePriorities;\n#else\nattribute float instanceCollidePriorities;\n#endif\n\nuniform sampler2D collide_texture;\nuniform bool collide_sort;\nuniform bool collide_enabled;\n\nvec2 collide_getCoords(vec4 position) {\n vec4 collide_clipspace = project_common_position_to_clipspace(position);\n return (1.0 + collide_clipspace.xy / collide_clipspace.w) / 2.0;\n}\n\nfloat collide_match(vec2 tex, vec3 pickingColor) {\n vec4 collide_pickingColor = texture2D(collide_texture, tex);\n float delta = dot(abs(collide_pickingColor.rgb - pickingColor), vec3(1.0));\n float e = 0.001;\n return step(delta, e);\n}\n\nfloat collide_isVisible(vec2 texCoords, vec3 pickingColor) {\n if (!collide_enabled) {\n return 1.0;\n }\n\n // Visibility test, sample area of 5x5 pixels in order to fade in/out.\n // Due to the locality, the lookups will be cached\n // This reduces the flicker present when objects are shown/hidden\n const int N = 2;\n float accumulator = 0.0;\n vec2 step = vec2(1.0 / project_uViewportSize);\n\n const float floatN = float(N);\n vec2 delta = -floatN * step;\n for(int i = -N; i <= N; i++) {\n delta.x = -step.x * floatN;\n for(int j = -N; j <= N; j++) {\n accumulator += collide_match(texCoords + delta, pickingColor);\n delta.x += step.x;\n }\n delta.y += step.y;\n }\n\n float W = 2.0 * floatN + 1.0;\n return pow(accumulator / (W * W), 2.2);\n}\n";
|
|
11
|
-
var inject = {
|
|
12
|
-
'vs:#decl': "\n float collide_fade = 1.0;\n",
|
|
13
|
-
'vs:DECKGL_FILTER_GL_POSITION': "\n if (collide_sort) {\n #ifdef NON_INSTANCED_MODEL\n float collidePriority = collidePriorities;\n #else\n float collidePriority = instanceCollidePriorities;\n #endif\n position.z = -0.001 * collidePriority * position.w; // Support range -1000 -> 1000\n }\n\n if (collide_enabled) {\n vec4 collide_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n vec2 collide_texCoords = collide_getCoords(collide_common_position);\n collide_fade = collide_isVisible(collide_texCoords, geometry.pickingColor / 255.0);\n if (collide_fade < 0.0001) {\n position = vec4(0.);\n }\n }\n ",
|
|
14
|
-
'vs:DECKGL_FILTER_COLOR': "\n color.a *= collide_fade;\n "
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
var getCollideUniforms = function getCollideUniforms(opts, uniforms) {
|
|
18
|
-
if (!opts || !('dummyCollideMap' in opts)) {
|
|
19
|
-
return {};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
var collideFBO = opts.collideFBO,
|
|
23
|
-
drawToCollideMap = opts.drawToCollideMap,
|
|
24
|
-
dummyCollideMap = opts.dummyCollideMap;
|
|
25
|
-
return {
|
|
26
|
-
collide_sort: Boolean(drawToCollideMap),
|
|
27
|
-
collide_texture: !drawToCollideMap && collideFBO ? collideFBO : dummyCollideMap
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
var _default = {
|
|
32
|
-
name: 'collide',
|
|
33
|
-
dependencies: [_core.project],
|
|
34
|
-
vs: vs,
|
|
35
|
-
inject: inject,
|
|
36
|
-
getUniforms: getCollideUniforms
|
|
37
|
-
};
|
|
38
|
-
exports.default = _default;
|
|
39
|
-
//# sourceMappingURL=shader-module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collide/shader-module.ts"],"names":["vs","inject","getCollideUniforms","opts","uniforms","collideFBO","drawToCollideMap","dummyCollideMap","collide_sort","Boolean","collide_texture","name","dependencies","project","getUniforms"],"mappings":";;;;;;;AACA;;AAGA,IAAMA,EAAE,i7CAAR;AAmDA,IAAMC,MAAM,GAAG;AACb,+CADa;AAIb,6pBAJa;AAuBb;AAvBa,CAAf;;AAqCA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CACzBC,IADyB,EAEzBC,QAFyB,EAGL;AACpB,MAAI,CAACD,IAAD,IAAS,EAAE,qBAAqBA,IAAvB,CAAb,EAA2C;AACzC,WAAO,EAAP;AACD;;AACD,MAAOE,UAAP,GAAwDF,IAAxD,CAAOE,UAAP;AAAA,MAAmBC,gBAAnB,GAAwDH,IAAxD,CAAmBG,gBAAnB;AAAA,MAAqCC,eAArC,GAAwDJ,IAAxD,CAAqCI,eAArC;AACA,SAAO;AACLC,IAAAA,YAAY,EAAEC,OAAO,CAACH,gBAAD,CADhB;AAELI,IAAAA,eAAe,EAAE,CAACJ,gBAAD,IAAqBD,UAArB,GAAkCA,UAAlC,GAA+CE;AAF3D,GAAP;AAID,CAZD;;eAce;AACbI,EAAAA,IAAI,EAAE,SADO;AAEbC,EAAAA,YAAY,EAAE,CAACC,aAAD,CAFD;AAGbb,EAAAA,EAAE,EAAFA,EAHa;AAIbC,EAAAA,MAAM,EAANA,MAJa;AAKba,EAAAA,WAAW,EAAEZ;AALA,C","sourcesContent":["import {Framebuffer, Texture2D} from '@luma.gl/core';\nimport {project} from '@deck.gl/core';\nimport type {_ShaderModule as ShaderModule} from '@deck.gl/core';\n\nconst vs = `\n#ifdef NON_INSTANCED_MODEL\nattribute float collidePriorities;\n#else\nattribute float instanceCollidePriorities;\n#endif\n\nuniform sampler2D collide_texture;\nuniform bool collide_sort;\nuniform bool collide_enabled;\n\nvec2 collide_getCoords(vec4 position) {\n vec4 collide_clipspace = project_common_position_to_clipspace(position);\n return (1.0 + collide_clipspace.xy / collide_clipspace.w) / 2.0;\n}\n\nfloat collide_match(vec2 tex, vec3 pickingColor) {\n vec4 collide_pickingColor = texture2D(collide_texture, tex);\n float delta = dot(abs(collide_pickingColor.rgb - pickingColor), vec3(1.0));\n float e = 0.001;\n return step(delta, e);\n}\n\nfloat collide_isVisible(vec2 texCoords, vec3 pickingColor) {\n if (!collide_enabled) {\n return 1.0;\n }\n\n // Visibility test, sample area of 5x5 pixels in order to fade in/out.\n // Due to the locality, the lookups will be cached\n // This reduces the flicker present when objects are shown/hidden\n const int N = 2;\n float accumulator = 0.0;\n vec2 step = vec2(1.0 / project_uViewportSize);\n\n const float floatN = float(N);\n vec2 delta = -floatN * step;\n for(int i = -N; i <= N; i++) {\n delta.x = -step.x * floatN;\n for(int j = -N; j <= N; j++) {\n accumulator += collide_match(texCoords + delta, pickingColor);\n delta.x += step.x;\n }\n delta.y += step.y;\n }\n\n float W = 2.0 * floatN + 1.0;\n return pow(accumulator / (W * W), 2.2);\n}\n`;\n\nconst inject = {\n 'vs:#decl': `\n float collide_fade = 1.0;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n if (collide_sort) {\n #ifdef NON_INSTANCED_MODEL\n float collidePriority = collidePriorities;\n #else\n float collidePriority = instanceCollidePriorities;\n #endif\n position.z = -0.001 * collidePriority * position.w; // Support range -1000 -> 1000\n }\n\n if (collide_enabled) {\n vec4 collide_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n vec2 collide_texCoords = collide_getCoords(collide_common_position);\n collide_fade = collide_isVisible(collide_texCoords, geometry.pickingColor / 255.0);\n if (collide_fade < 0.0001) {\n position = vec4(0.);\n }\n }\n `,\n 'vs:DECKGL_FILTER_COLOR': `\n color.a *= collide_fade;\n `\n};\n\ntype CollideModuleSettings = {\n collideFBO?: Framebuffer;\n drawToCollideMap?: boolean;\n dummyCollideMap?: Texture2D;\n};\n\n/* eslint-disable camelcase */\ntype CollideUniforms = {collide_sort?: boolean; collide_texture?: Framebuffer | Texture2D};\n\nconst getCollideUniforms = (\n opts: CollideModuleSettings | {},\n uniforms: Record<string, any>\n): CollideUniforms => {\n if (!opts || !('dummyCollideMap' in opts)) {\n return {};\n }\n const {collideFBO, drawToCollideMap, dummyCollideMap} = opts;\n return {\n collide_sort: Boolean(drawToCollideMap),\n collide_texture: !drawToCollideMap && collideFBO ? collideFBO : dummyCollideMap\n };\n};\n\nexport default {\n name: 'collide',\n dependencies: [project],\n vs,\n inject,\n getUniforms: getCollideUniforms\n} as ShaderModule;\n"],"file":"shader-module.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/common/projection-utils.ts"],"names":["joinLayerBounds","layers","viewport","bounds","Infinity","layer","layerBounds","getBounds","bottomLeftCommon","projectPosition","autoOffset","topRightCommon","Math","min","max","Number","isFinite","MAX_VIEWPORT_SIZE","makeViewport","opts","border","isGeospatial","centerWorld","unprojectPosition","maxSize","width","height","zoom","undefined","scale","log2","round","abs","r","WebMercatorViewport","x","y","longitude","latitude","orthographic","OrthographicViewport","target","flipY","getViewportBounds","zRange","viewportBoundsWorld","length","minZ","maxZ","bounds0","z","bounds1","viewportBottomLeftCommon","slice","viewportTopRightCommon","getRenderBounds","viewportBounds","paddedBounds","doubleBounds","dx","dy","centerX","centerY"],"mappings":"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","sourcesContent":["import {WebMercatorViewport, OrthographicViewport} from '@deck.gl/core';\nimport type {Layer, Viewport} from '@deck.gl/core';\n\n/** Bounds in CARTESIAN coordinates */\nexport type Bounds = [minX: number, minY: number, maxX: number, maxY: number];\n\n/*\n * Compute the union of bounds from multiple layers\n * Returns bounds in CARTESIAN coordinates\n */\nexport function joinLayerBounds(\n /** The layers to combine */\n layers: Layer[],\n /** A Viewport instance that is used to determine the type of the view */\n viewport: Viewport\n): Bounds | null {\n // Join the bounds of layer data\n const bounds: Bounds = [Infinity, Infinity, -Infinity, -Infinity];\n for (const layer of layers) {\n const layerBounds = layer.getBounds();\n if (layerBounds) {\n const bottomLeftCommon = layer.projectPosition(layerBounds[0], {viewport, autoOffset: false});\n const topRightCommon = layer.projectPosition(layerBounds[1], {viewport, autoOffset: false});\n\n bounds[0] = Math.min(bounds[0], bottomLeftCommon[0]);\n bounds[1] = Math.min(bounds[1], bottomLeftCommon[1]);\n bounds[2] = Math.max(bounds[2], topRightCommon[0]);\n bounds[3] = Math.max(bounds[3], topRightCommon[1]);\n }\n }\n\n if (Number.isFinite(bounds[0])) {\n return bounds;\n }\n return null;\n}\n\nconst MAX_VIEWPORT_SIZE = 2048;\n\n/** Construct a viewport that just covers the target bounds. Used for rendering to common space indexed texture. */\nexport function makeViewport(opts: {\n /** The cartesian bounds of layers that will render into this texture */\n bounds: Bounds;\n /** Target width. If not specified, will be deduced from zoom */\n width?: number;\n /** Target height. If not specified, will be deduced from zoom */\n height?: number;\n /** Target zoom. If not specified, will be deduced from width and height */\n zoom?: number;\n /** Border around the viewport in pixels */\n border?: number;\n /** A viewport used to determine the output type */\n viewport: Viewport;\n}): Viewport | null {\n const {bounds, viewport, border = 0} = opts;\n const {isGeospatial} = viewport;\n\n if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {\n return null;\n }\n\n const centerWorld = viewport.unprojectPosition([\n (bounds[0] + bounds[2]) / 2,\n (bounds[1] + bounds[3]) / 2,\n 0\n ]);\n\n const maxSize = MAX_VIEWPORT_SIZE - border * 2;\n let {width, height, zoom} = opts;\n if (zoom === undefined) {\n // Use width and height to determine zoom\n const scale = Math.min(width! / (bounds[2] - bounds[0]), height! / (bounds[3] - bounds[1]));\n zoom = Math.min(Math.log2(scale), 20);\n } else if (!width || !height) {\n // Use zoom to determine width and height\n const scale = 2 ** zoom;\n width = Math.round(Math.abs(bounds[2] - bounds[0]) * scale);\n height = Math.round(Math.abs(bounds[3] - bounds[1]) * scale);\n if (width > maxSize || height > maxSize) {\n const r = maxSize / Math.max(width, height);\n width = Math.round(width * r);\n height = Math.round(height * r);\n zoom += Math.log2(r);\n }\n }\n\n // TODO - find a more generic way to construct this viewport\n // Geospatial viewports may not be web-mercator\n return isGeospatial\n ? new WebMercatorViewport({\n x: border,\n y: border,\n width,\n height,\n longitude: centerWorld[0],\n latitude: centerWorld[1],\n zoom,\n orthographic: true\n })\n : new OrthographicViewport({\n x: border,\n y: border,\n width,\n height,\n target: centerWorld,\n zoom,\n flipY: false\n });\n}\n\n/** Returns viewport bounds in CARTESIAN coordinates */\nexport function getViewportBounds(viewport: Viewport, zRange?: [number, number]): Bounds {\n // Viewport bounds in world coordinates\n let viewportBoundsWorld: Bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n viewportBoundsWorld = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n viewportBoundsWorld = viewport.getBounds();\n }\n\n // Viewport bounds in cartesian coordinates\n const viewportBottomLeftCommon = viewport.projectPosition(viewportBoundsWorld.slice(0, 2));\n const viewportTopRightCommon = viewport.projectPosition(viewportBoundsWorld.slice(2, 4));\n return [\n viewportBottomLeftCommon[0],\n viewportBottomLeftCommon[1],\n viewportTopRightCommon[0],\n viewportTopRightCommon[1]\n ];\n}\n\n/*\n * Determine the common space bounds that best cover the given data for the given viewport\n * Returns bounds in CARTESIAN coordinates\n */\nexport function getRenderBounds(\n layerBounds: Bounds,\n viewport: Viewport,\n zRange?: [number, number]\n): Bounds {\n if (!layerBounds) {\n return [0, 0, 1, 1];\n }\n\n const viewportBounds = getViewportBounds(viewport, zRange);\n // Expand viewport bounds by 2X. Heurestically chosen to avoid masking\n // errors when mask is partially out of view\n const paddedBounds = doubleBounds(viewportBounds);\n\n // When bounds of the layers are smaller than the viewport bounds simply use\n // mask bounds, so as to maximize resolution & avoid rerenders\n if (\n layerBounds[2] - layerBounds[0] <= paddedBounds[2] - paddedBounds[0] &&\n layerBounds[3] - layerBounds[1] <= paddedBounds[3] - paddedBounds[1]\n ) {\n return layerBounds;\n }\n\n // As viewport shrinks, to avoid pixelation along mask edges\n // we need to reduce the bounds and only render the visible portion\n // of the mask.\n // We pad the viewport bounds to capture the section\n // of the mask just outside the viewport to correctly maskByInstance.\n // Intersect mask & padded viewport bounds\n return [\n Math.max(layerBounds[0], paddedBounds[0]),\n Math.max(layerBounds[1], paddedBounds[1]),\n Math.min(layerBounds[2], paddedBounds[2]),\n Math.min(layerBounds[3], paddedBounds[3])\n ];\n}\n\nfunction doubleBounds(bounds: Bounds): Bounds {\n const dx = bounds[2] - bounds[0];\n const dy = bounds[3] - bounds[1];\n const centerX = (bounds[0] + bounds[2]) / 2;\n const centerY = (bounds[1] + bounds[3]) / 2;\n return [centerX - dx, centerY - dy, centerX + dx, centerY + dy];\n}\n"],"file":"projection-utils.js"}
|