@deck.gl/extensions 8.9.34 → 8.9.35
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 +5 -3
- package/dist/es5/terrain/terrain-effect.js +6 -4
- package/dist/es5/terrain/terrain-effect.js.map +1 -1
- package/dist/esm/terrain/terrain-effect.js +6 -3
- package/dist/esm/terrain/terrain-effect.js.map +1 -1
- package/dist.min.js +6 -6
- package/package.json +2 -2
- package/src/terrain/terrain-effect.ts +8 -2
- package/typed/terrain/terrain-effect.d.ts.map +1 -1
package/dist/dist.dev.js
CHANGED
|
@@ -3608,9 +3608,9 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US
|
|
|
3608
3608
|
return;
|
|
3609
3609
|
}
|
|
3610
3610
|
const {
|
|
3611
|
-
viewports
|
|
3612
|
-
isPicking = false
|
|
3611
|
+
viewports
|
|
3613
3612
|
} = opts;
|
|
3613
|
+
const isPicking = opts.pass.startsWith("picking");
|
|
3614
3614
|
this.isPicking = isPicking;
|
|
3615
3615
|
this.isDrapingEnabled = true;
|
|
3616
3616
|
const viewport = viewports[0];
|
|
@@ -3720,7 +3720,9 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US
|
|
|
3720
3720
|
devicePixelRatio: 1
|
|
3721
3721
|
}
|
|
3722
3722
|
});
|
|
3723
|
-
|
|
3723
|
+
if (!this.isPicking) {
|
|
3724
|
+
terrainCover.isDirty = false;
|
|
3725
|
+
}
|
|
3724
3726
|
}
|
|
3725
3727
|
} catch (err) {
|
|
3726
3728
|
terrainLayer.raiseError(err, `Error rendering terrain cover ${terrainCover.id}`);
|
|
@@ -108,9 +108,8 @@ var TerrainEffect = function () {
|
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
var viewports = opts.viewports
|
|
112
|
-
|
|
113
|
-
isPicking = _opts$isPicking === void 0 ? false : _opts$isPicking;
|
|
111
|
+
var viewports = opts.viewports;
|
|
112
|
+
var isPicking = opts.pass.startsWith('picking');
|
|
114
113
|
this.isPicking = isPicking;
|
|
115
114
|
this.isDrapingEnabled = true;
|
|
116
115
|
var viewport = viewports[0];
|
|
@@ -294,7 +293,10 @@ var TerrainEffect = function () {
|
|
|
294
293
|
devicePixelRatio: 1
|
|
295
294
|
}
|
|
296
295
|
}));
|
|
297
|
-
|
|
296
|
+
|
|
297
|
+
if (!this.isPicking) {
|
|
298
|
+
terrainCover.isDirty = false;
|
|
299
|
+
}
|
|
298
300
|
}
|
|
299
301
|
} catch (err) {
|
|
300
302
|
terrainLayer.raiseError(err, "Error rendering terrain cover ".concat(terrainCover.id));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/terrain/terrain-effect.ts"],"names":["TerrainEffect","Map","gl","dummyHeightMap","Texture2D","width","height","data","Uint8Array","terrainPass","TerrainPass","id","terrainPickingPass","TerrainPickingPass","HeightMapBuilder","isSupported","heightMap","log","warn","ProgramManager","getDefaultProgramManager","addDefaultModule","terrainModule","opts","initialize","layers","layer","props","operation","includes","setChangeFlags","extensionsChanged","pickZ","isDrapingEnabled","viewports","isPicking","viewport","getRenderableLayers","terrainLayers","filter","l","length","offsetLayers","state","terrainDrawMode","_updateHeightMap","drapeLayers","_updateTerrainCovers","getRenderFramebuffer","heightMapBounds","bounds","terrainCover","terrainCovers","get","useTerrainHeightMap","terrainSkipRender","delete","undefined","values","clear","shouldUpdate","renderHeightMap","moduleParameters","devicePixelRatio","drawToTerrainHeightMap","layerNeedsRedraw","terrainCoverNeedsRedraw","isDirty","_updateTerrainCover","_pruneTerrainCovers","terrainLayer","renderPass","TerrainCover","set","targetLayer","renderTerrainCover","err","raiseError","idsToRemove","isActive","push"],"mappings":"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","sourcesContent":["import {Texture2D, ProgramManager} from '@luma.gl/core';\nimport {log} from '@deck.gl/core';\n\nimport {terrainModule, TerrainModuleSettings} from './shader-module';\nimport {TerrainCover} from './terrain-cover';\nimport {TerrainPass} from './terrain-pass';\nimport {TerrainPickingPass, TerrainPickingPassRenderOptions} from './terrain-picking-pass';\nimport {HeightMapBuilder} from './height-map-builder';\n\nimport type {Effect, PreRenderOptions, Layer, Viewport} from '@deck.gl/core';\n\n/** Class to manage terrain effect */\nexport class TerrainEffect implements Effect {\n id = 'terrain-effect';\n props = null;\n useInPicking = true;\n\n /** true if picking in the current pass */\n private isPicking: boolean = false;\n /** true if should use in the current pass */\n private isDrapingEnabled: boolean = false;\n /** An empty texture as placeholder */\n private dummyHeightMap: Texture2D;\n /** A texture encoding the ground elevation, updated once per redraw. Used by layers with offset mode */\n private heightMap?: HeightMapBuilder;\n private terrainPass!: TerrainPass;\n private terrainPickingPass!: TerrainPickingPass;\n /** One texture for each primitive terrain layer, into which the draped layers render */\n private terrainCovers: Map<string, TerrainCover> = new Map();\n\n initialize(gl: WebGLRenderingContext) {\n this.dummyHeightMap = new Texture2D(gl, {\n width: 1,\n height: 1,\n data: new Uint8Array([0, 0, 0, 0])\n });\n this.terrainPass = new TerrainPass(gl, {id: 'terrain'});\n this.terrainPickingPass = new TerrainPickingPass(gl, {id: 'terrain-picking'});\n\n if (HeightMapBuilder.isSupported(gl)) {\n this.heightMap = new HeightMapBuilder(gl);\n } else {\n log.warn('Terrain offset mode is not supported by this browser')();\n }\n\n ProgramManager.getDefaultProgramManager(gl).addDefaultModule(terrainModule);\n }\n\n preRender(gl: WebGLRenderingContext, opts: PreRenderOptions): void {\n if (!this.dummyHeightMap) {\n // First time this effect is in use, initialize resources and register the shader module\n this.initialize(gl);\n for (const layer of opts.layers) {\n // Force the terrain layer (and its descendents) to rebuild their models with the new shader\n if (layer.props.operation.includes('terrain')) {\n layer.setChangeFlags({extensionsChanged: true});\n }\n }\n }\n\n // @ts-expect-error pickZ only defined in picking pass\n if (opts.pickZ) {\n // Do not update if picking attributes\n this.isDrapingEnabled = false;\n return;\n }\n\n const {viewports, isPicking = false} = opts;\n this.isPicking = isPicking;\n this.isDrapingEnabled = true;\n\n // TODO - support multiple views?\n const viewport = viewports[0];\n const layers = (isPicking ? this.terrainPickingPass : this.terrainPass).getRenderableLayers(\n viewport,\n opts as TerrainPickingPassRenderOptions\n );\n\n const terrainLayers = layers.filter(l => l.props.operation.includes('terrain'));\n if (terrainLayers.length === 0) {\n return;\n }\n\n if (!isPicking) {\n const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');\n if (offsetLayers.length > 0) {\n this._updateHeightMap(terrainLayers, viewport, opts);\n }\n }\n\n const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');\n this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);\n }\n\n getModuleParameters(layer: Layer): TerrainModuleSettings {\n const {terrainDrawMode} = layer.state;\n\n return {\n heightMap: this.heightMap?.getRenderFramebuffer(),\n heightMapBounds: this.heightMap?.bounds,\n dummyHeightMap: this.dummyHeightMap,\n terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,\n useTerrainHeightMap: terrainDrawMode === 'offset',\n terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')\n };\n }\n\n cleanup(): void {\n if (this.dummyHeightMap) {\n this.dummyHeightMap.delete();\n this.dummyHeightMap = undefined;\n }\n\n if (this.heightMap) {\n this.heightMap.delete();\n this.heightMap = undefined;\n }\n\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.delete();\n }\n this.terrainCovers.clear();\n }\n\n private _updateHeightMap(terrainLayers: Layer[], viewport: Viewport, opts: PreRenderOptions) {\n if (!this.heightMap) {\n // Not supported\n return;\n }\n\n const shouldUpdate = this.heightMap.shouldUpdate({layers: terrainLayers, viewport});\n if (!shouldUpdate) {\n return;\n }\n\n this.terrainPass.renderHeightMap(this.heightMap, {\n ...opts,\n layers: terrainLayers,\n moduleParameters: {\n heightMapBounds: this.heightMap.bounds,\n dummyHeightMap: this.dummyHeightMap,\n devicePixelRatio: 1,\n drawToTerrainHeightMap: true\n }\n });\n }\n\n private _updateTerrainCovers(\n terrainLayers: Layer[],\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n // Mark a terrain cover as dirty if one of the drape layers needs redraw\n const layerNeedsRedraw: Record<string, boolean> = {};\n for (const layer of drapeLayers) {\n if (layer.state.terrainCoverNeedsRedraw) {\n layerNeedsRedraw[layer.id] = true;\n layer.state.terrainCoverNeedsRedraw = false;\n }\n }\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.isDirty = terrainCover.isDirty || terrainCover.shouldUpdate({layerNeedsRedraw});\n }\n\n for (const layer of terrainLayers) {\n this._updateTerrainCover(layer, drapeLayers, viewport, opts);\n }\n\n if (!this.isPicking) {\n this._pruneTerrainCovers();\n }\n }\n\n private _updateTerrainCover(\n terrainLayer: Layer,\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n const renderPass = this.isPicking ? this.terrainPickingPass : this.terrainPass;\n let terrainCover = this.terrainCovers.get(terrainLayer.id);\n if (!terrainCover) {\n terrainCover = new TerrainCover(terrainLayer);\n this.terrainCovers.set(terrainLayer.id, terrainCover);\n }\n try {\n const isDirty = terrainCover.shouldUpdate({\n targetLayer: terrainLayer,\n viewport,\n layers: drapeLayers\n });\n if (this.isPicking || terrainCover.isDirty || isDirty) {\n renderPass.renderTerrainCover(terrainCover, {\n ...opts,\n layers: drapeLayers,\n moduleParameters: {\n dummyHeightMap: this.dummyHeightMap,\n terrainSkipRender: false,\n devicePixelRatio: 1\n }\n });\n terrainCover.isDirty = false;\n }\n } catch (err) {\n terrainLayer.raiseError(err as Error, `Error rendering terrain cover ${terrainCover.id}`);\n }\n }\n\n private _pruneTerrainCovers() {\n /** Prune the cache, remove textures for layers that have been removed */\n const idsToRemove: string[] = [];\n for (const [id, terrainCover] of this.terrainCovers) {\n if (!terrainCover.isActive) {\n idsToRemove.push(id);\n }\n }\n for (const id of idsToRemove) {\n this.terrainCovers.delete(id);\n }\n }\n}\n"],"file":"terrain-effect.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/terrain/terrain-effect.ts"],"names":["TerrainEffect","Map","gl","dummyHeightMap","Texture2D","width","height","data","Uint8Array","terrainPass","TerrainPass","id","terrainPickingPass","TerrainPickingPass","HeightMapBuilder","isSupported","heightMap","log","warn","ProgramManager","getDefaultProgramManager","addDefaultModule","terrainModule","opts","initialize","layers","layer","props","operation","includes","setChangeFlags","extensionsChanged","pickZ","isDrapingEnabled","viewports","isPicking","pass","startsWith","viewport","getRenderableLayers","terrainLayers","filter","l","length","offsetLayers","state","terrainDrawMode","_updateHeightMap","drapeLayers","_updateTerrainCovers","getRenderFramebuffer","heightMapBounds","bounds","terrainCover","terrainCovers","get","useTerrainHeightMap","terrainSkipRender","delete","undefined","values","clear","shouldUpdate","renderHeightMap","moduleParameters","devicePixelRatio","drawToTerrainHeightMap","layerNeedsRedraw","terrainCoverNeedsRedraw","isDirty","_updateTerrainCover","_pruneTerrainCovers","terrainLayer","renderPass","TerrainCover","set","targetLayer","renderTerrainCover","err","raiseError","idsToRemove","isActive","push"],"mappings":"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","sourcesContent":["import {Texture2D, ProgramManager} from '@luma.gl/core';\nimport {log} from '@deck.gl/core';\n\nimport {terrainModule, TerrainModuleSettings} from './shader-module';\nimport {TerrainCover} from './terrain-cover';\nimport {TerrainPass} from './terrain-pass';\nimport {TerrainPickingPass, TerrainPickingPassRenderOptions} from './terrain-picking-pass';\nimport {HeightMapBuilder} from './height-map-builder';\n\nimport type {Effect, PreRenderOptions, Layer, Viewport} from '@deck.gl/core';\n\n/** Class to manage terrain effect */\nexport class TerrainEffect implements Effect {\n id = 'terrain-effect';\n props = null;\n useInPicking = true;\n\n /** true if picking in the current pass */\n private isPicking: boolean = false;\n /** true if should use in the current pass */\n private isDrapingEnabled: boolean = false;\n /** An empty texture as placeholder */\n private dummyHeightMap: Texture2D;\n /** A texture encoding the ground elevation, updated once per redraw. Used by layers with offset mode */\n private heightMap?: HeightMapBuilder;\n private terrainPass!: TerrainPass;\n private terrainPickingPass!: TerrainPickingPass;\n /** One texture for each primitive terrain layer, into which the draped layers render */\n private terrainCovers: Map<string, TerrainCover> = new Map();\n\n initialize(gl: WebGLRenderingContext) {\n this.dummyHeightMap = new Texture2D(gl, {\n width: 1,\n height: 1,\n data: new Uint8Array([0, 0, 0, 0])\n });\n this.terrainPass = new TerrainPass(gl, {id: 'terrain'});\n this.terrainPickingPass = new TerrainPickingPass(gl, {id: 'terrain-picking'});\n\n if (HeightMapBuilder.isSupported(gl)) {\n this.heightMap = new HeightMapBuilder(gl);\n } else {\n log.warn('Terrain offset mode is not supported by this browser')();\n }\n\n ProgramManager.getDefaultProgramManager(gl).addDefaultModule(terrainModule);\n }\n\n preRender(gl: WebGLRenderingContext, opts: PreRenderOptions): void {\n if (!this.dummyHeightMap) {\n // First time this effect is in use, initialize resources and register the shader module\n this.initialize(gl);\n for (const layer of opts.layers) {\n // Force the terrain layer (and its descendents) to rebuild their models with the new shader\n if (layer.props.operation.includes('terrain')) {\n layer.setChangeFlags({extensionsChanged: true});\n }\n }\n }\n\n // @ts-expect-error pickZ only defined in picking pass\n if (opts.pickZ) {\n // Do not update if picking attributes\n this.isDrapingEnabled = false;\n return;\n }\n\n const {viewports} = opts;\n const isPicking = opts.pass.startsWith('picking');\n this.isPicking = isPicking;\n this.isDrapingEnabled = true;\n\n // TODO - support multiple views?\n const viewport = viewports[0];\n const layers = (isPicking ? this.terrainPickingPass : this.terrainPass).getRenderableLayers(\n viewport,\n opts as TerrainPickingPassRenderOptions\n );\n\n const terrainLayers = layers.filter(l => l.props.operation.includes('terrain'));\n if (terrainLayers.length === 0) {\n return;\n }\n\n if (!isPicking) {\n const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');\n if (offsetLayers.length > 0) {\n this._updateHeightMap(terrainLayers, viewport, opts);\n }\n }\n\n const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');\n this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);\n }\n\n getModuleParameters(layer: Layer): TerrainModuleSettings {\n const {terrainDrawMode} = layer.state;\n\n return {\n heightMap: this.heightMap?.getRenderFramebuffer(),\n heightMapBounds: this.heightMap?.bounds,\n dummyHeightMap: this.dummyHeightMap,\n terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,\n useTerrainHeightMap: terrainDrawMode === 'offset',\n terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')\n };\n }\n\n cleanup(): void {\n if (this.dummyHeightMap) {\n this.dummyHeightMap.delete();\n this.dummyHeightMap = undefined;\n }\n\n if (this.heightMap) {\n this.heightMap.delete();\n this.heightMap = undefined;\n }\n\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.delete();\n }\n this.terrainCovers.clear();\n }\n\n private _updateHeightMap(terrainLayers: Layer[], viewport: Viewport, opts: PreRenderOptions) {\n if (!this.heightMap) {\n // Not supported\n return;\n }\n\n const shouldUpdate = this.heightMap.shouldUpdate({layers: terrainLayers, viewport});\n if (!shouldUpdate) {\n return;\n }\n\n this.terrainPass.renderHeightMap(this.heightMap, {\n ...opts,\n layers: terrainLayers,\n moduleParameters: {\n heightMapBounds: this.heightMap.bounds,\n dummyHeightMap: this.dummyHeightMap,\n devicePixelRatio: 1,\n drawToTerrainHeightMap: true\n }\n });\n }\n\n private _updateTerrainCovers(\n terrainLayers: Layer[],\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n // Mark a terrain cover as dirty if one of the drape layers needs redraw\n const layerNeedsRedraw: Record<string, boolean> = {};\n for (const layer of drapeLayers) {\n if (layer.state.terrainCoverNeedsRedraw) {\n layerNeedsRedraw[layer.id] = true;\n layer.state.terrainCoverNeedsRedraw = false;\n }\n }\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.isDirty = terrainCover.isDirty || terrainCover.shouldUpdate({layerNeedsRedraw});\n }\n\n for (const layer of terrainLayers) {\n this._updateTerrainCover(layer, drapeLayers, viewport, opts);\n }\n\n if (!this.isPicking) {\n this._pruneTerrainCovers();\n }\n }\n\n private _updateTerrainCover(\n terrainLayer: Layer,\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n const renderPass = this.isPicking ? this.terrainPickingPass : this.terrainPass;\n let terrainCover = this.terrainCovers.get(terrainLayer.id);\n if (!terrainCover) {\n terrainCover = new TerrainCover(terrainLayer);\n this.terrainCovers.set(terrainLayer.id, terrainCover);\n }\n try {\n const isDirty = terrainCover.shouldUpdate({\n targetLayer: terrainLayer,\n viewport,\n layers: drapeLayers\n });\n if (this.isPicking || terrainCover.isDirty || isDirty) {\n renderPass.renderTerrainCover(terrainCover, {\n ...opts,\n layers: drapeLayers,\n moduleParameters: {\n dummyHeightMap: this.dummyHeightMap,\n terrainSkipRender: false,\n devicePixelRatio: 1\n }\n });\n\n if (!this.isPicking) {\n // IsDirty refers to the normal fbo, not the picking fbo.\n // Only mark it as not dirty if the normal fbo was updated.\n terrainCover.isDirty = false;\n }\n }\n } catch (err) {\n terrainLayer.raiseError(err as Error, `Error rendering terrain cover ${terrainCover.id}`);\n }\n }\n\n private _pruneTerrainCovers() {\n /** Prune the cache, remove textures for layers that have been removed */\n const idsToRemove: string[] = [];\n for (const [id, terrainCover] of this.terrainCovers) {\n if (!terrainCover.isActive) {\n idsToRemove.push(id);\n }\n }\n for (const id of idsToRemove) {\n this.terrainCovers.delete(id);\n }\n }\n}\n"],"file":"terrain-effect.js"}
|
|
@@ -70,9 +70,9 @@ export class TerrainEffect {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
const {
|
|
73
|
-
viewports
|
|
74
|
-
isPicking = false
|
|
73
|
+
viewports
|
|
75
74
|
} = opts;
|
|
75
|
+
const isPicking = opts.pass.startsWith('picking');
|
|
76
76
|
this.isPicking = isPicking;
|
|
77
77
|
this.isDrapingEnabled = true;
|
|
78
78
|
const viewport = viewports[0];
|
|
@@ -205,7 +205,10 @@ export class TerrainEffect {
|
|
|
205
205
|
devicePixelRatio: 1
|
|
206
206
|
}
|
|
207
207
|
});
|
|
208
|
-
|
|
208
|
+
|
|
209
|
+
if (!this.isPicking) {
|
|
210
|
+
terrainCover.isDirty = false;
|
|
211
|
+
}
|
|
209
212
|
}
|
|
210
213
|
} catch (err) {
|
|
211
214
|
terrainLayer.raiseError(err, "Error rendering terrain cover ".concat(terrainCover.id));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/terrain/terrain-effect.ts"],"names":["Texture2D","ProgramManager","log","terrainModule","TerrainCover","TerrainPass","TerrainPickingPass","HeightMapBuilder","TerrainEffect","Map","initialize","gl","dummyHeightMap","width","height","data","Uint8Array","terrainPass","id","terrainPickingPass","isSupported","heightMap","warn","getDefaultProgramManager","addDefaultModule","preRender","opts","layer","layers","props","operation","includes","setChangeFlags","extensionsChanged","pickZ","isDrapingEnabled","viewports","isPicking","viewport","getRenderableLayers","terrainLayers","filter","l","length","offsetLayers","state","terrainDrawMode","_updateHeightMap","drapeLayers","_updateTerrainCovers","getModuleParameters","getRenderFramebuffer","heightMapBounds","bounds","terrainCover","terrainCovers","get","useTerrainHeightMap","terrainSkipRender","cleanup","delete","undefined","values","clear","shouldUpdate","renderHeightMap","moduleParameters","devicePixelRatio","drawToTerrainHeightMap","layerNeedsRedraw","terrainCoverNeedsRedraw","isDirty","_updateTerrainCover","_pruneTerrainCovers","terrainLayer","renderPass","set","targetLayer","renderTerrainCover","err","raiseError","idsToRemove","isActive","push"],"mappings":"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","sourcesContent":["import {Texture2D, ProgramManager} from '@luma.gl/core';\nimport {log} from '@deck.gl/core';\n\nimport {terrainModule, TerrainModuleSettings} from './shader-module';\nimport {TerrainCover} from './terrain-cover';\nimport {TerrainPass} from './terrain-pass';\nimport {TerrainPickingPass, TerrainPickingPassRenderOptions} from './terrain-picking-pass';\nimport {HeightMapBuilder} from './height-map-builder';\n\nimport type {Effect, PreRenderOptions, Layer, Viewport} from '@deck.gl/core';\n\n/** Class to manage terrain effect */\nexport class TerrainEffect implements Effect {\n id = 'terrain-effect';\n props = null;\n useInPicking = true;\n\n /** true if picking in the current pass */\n private isPicking: boolean = false;\n /** true if should use in the current pass */\n private isDrapingEnabled: boolean = false;\n /** An empty texture as placeholder */\n private dummyHeightMap: Texture2D;\n /** A texture encoding the ground elevation, updated once per redraw. Used by layers with offset mode */\n private heightMap?: HeightMapBuilder;\n private terrainPass!: TerrainPass;\n private terrainPickingPass!: TerrainPickingPass;\n /** One texture for each primitive terrain layer, into which the draped layers render */\n private terrainCovers: Map<string, TerrainCover> = new Map();\n\n initialize(gl: WebGLRenderingContext) {\n this.dummyHeightMap = new Texture2D(gl, {\n width: 1,\n height: 1,\n data: new Uint8Array([0, 0, 0, 0])\n });\n this.terrainPass = new TerrainPass(gl, {id: 'terrain'});\n this.terrainPickingPass = new TerrainPickingPass(gl, {id: 'terrain-picking'});\n\n if (HeightMapBuilder.isSupported(gl)) {\n this.heightMap = new HeightMapBuilder(gl);\n } else {\n log.warn('Terrain offset mode is not supported by this browser')();\n }\n\n ProgramManager.getDefaultProgramManager(gl).addDefaultModule(terrainModule);\n }\n\n preRender(gl: WebGLRenderingContext, opts: PreRenderOptions): void {\n if (!this.dummyHeightMap) {\n // First time this effect is in use, initialize resources and register the shader module\n this.initialize(gl);\n for (const layer of opts.layers) {\n // Force the terrain layer (and its descendents) to rebuild their models with the new shader\n if (layer.props.operation.includes('terrain')) {\n layer.setChangeFlags({extensionsChanged: true});\n }\n }\n }\n\n // @ts-expect-error pickZ only defined in picking pass\n if (opts.pickZ) {\n // Do not update if picking attributes\n this.isDrapingEnabled = false;\n return;\n }\n\n const {viewports, isPicking = false} = opts;\n this.isPicking = isPicking;\n this.isDrapingEnabled = true;\n\n // TODO - support multiple views?\n const viewport = viewports[0];\n const layers = (isPicking ? this.terrainPickingPass : this.terrainPass).getRenderableLayers(\n viewport,\n opts as TerrainPickingPassRenderOptions\n );\n\n const terrainLayers = layers.filter(l => l.props.operation.includes('terrain'));\n if (terrainLayers.length === 0) {\n return;\n }\n\n if (!isPicking) {\n const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');\n if (offsetLayers.length > 0) {\n this._updateHeightMap(terrainLayers, viewport, opts);\n }\n }\n\n const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');\n this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);\n }\n\n getModuleParameters(layer: Layer): TerrainModuleSettings {\n const {terrainDrawMode} = layer.state;\n\n return {\n heightMap: this.heightMap?.getRenderFramebuffer(),\n heightMapBounds: this.heightMap?.bounds,\n dummyHeightMap: this.dummyHeightMap,\n terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,\n useTerrainHeightMap: terrainDrawMode === 'offset',\n terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')\n };\n }\n\n cleanup(): void {\n if (this.dummyHeightMap) {\n this.dummyHeightMap.delete();\n this.dummyHeightMap = undefined;\n }\n\n if (this.heightMap) {\n this.heightMap.delete();\n this.heightMap = undefined;\n }\n\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.delete();\n }\n this.terrainCovers.clear();\n }\n\n private _updateHeightMap(terrainLayers: Layer[], viewport: Viewport, opts: PreRenderOptions) {\n if (!this.heightMap) {\n // Not supported\n return;\n }\n\n const shouldUpdate = this.heightMap.shouldUpdate({layers: terrainLayers, viewport});\n if (!shouldUpdate) {\n return;\n }\n\n this.terrainPass.renderHeightMap(this.heightMap, {\n ...opts,\n layers: terrainLayers,\n moduleParameters: {\n heightMapBounds: this.heightMap.bounds,\n dummyHeightMap: this.dummyHeightMap,\n devicePixelRatio: 1,\n drawToTerrainHeightMap: true\n }\n });\n }\n\n private _updateTerrainCovers(\n terrainLayers: Layer[],\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n // Mark a terrain cover as dirty if one of the drape layers needs redraw\n const layerNeedsRedraw: Record<string, boolean> = {};\n for (const layer of drapeLayers) {\n if (layer.state.terrainCoverNeedsRedraw) {\n layerNeedsRedraw[layer.id] = true;\n layer.state.terrainCoverNeedsRedraw = false;\n }\n }\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.isDirty = terrainCover.isDirty || terrainCover.shouldUpdate({layerNeedsRedraw});\n }\n\n for (const layer of terrainLayers) {\n this._updateTerrainCover(layer, drapeLayers, viewport, opts);\n }\n\n if (!this.isPicking) {\n this._pruneTerrainCovers();\n }\n }\n\n private _updateTerrainCover(\n terrainLayer: Layer,\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n const renderPass = this.isPicking ? this.terrainPickingPass : this.terrainPass;\n let terrainCover = this.terrainCovers.get(terrainLayer.id);\n if (!terrainCover) {\n terrainCover = new TerrainCover(terrainLayer);\n this.terrainCovers.set(terrainLayer.id, terrainCover);\n }\n try {\n const isDirty = terrainCover.shouldUpdate({\n targetLayer: terrainLayer,\n viewport,\n layers: drapeLayers\n });\n if (this.isPicking || terrainCover.isDirty || isDirty) {\n renderPass.renderTerrainCover(terrainCover, {\n ...opts,\n layers: drapeLayers,\n moduleParameters: {\n dummyHeightMap: this.dummyHeightMap,\n terrainSkipRender: false,\n devicePixelRatio: 1\n }\n });\n terrainCover.isDirty = false;\n }\n } catch (err) {\n terrainLayer.raiseError(err as Error, `Error rendering terrain cover ${terrainCover.id}`);\n }\n }\n\n private _pruneTerrainCovers() {\n /** Prune the cache, remove textures for layers that have been removed */\n const idsToRemove: string[] = [];\n for (const [id, terrainCover] of this.terrainCovers) {\n if (!terrainCover.isActive) {\n idsToRemove.push(id);\n }\n }\n for (const id of idsToRemove) {\n this.terrainCovers.delete(id);\n }\n }\n}\n"],"file":"terrain-effect.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/terrain/terrain-effect.ts"],"names":["Texture2D","ProgramManager","log","terrainModule","TerrainCover","TerrainPass","TerrainPickingPass","HeightMapBuilder","TerrainEffect","Map","initialize","gl","dummyHeightMap","width","height","data","Uint8Array","terrainPass","id","terrainPickingPass","isSupported","heightMap","warn","getDefaultProgramManager","addDefaultModule","preRender","opts","layer","layers","props","operation","includes","setChangeFlags","extensionsChanged","pickZ","isDrapingEnabled","viewports","isPicking","pass","startsWith","viewport","getRenderableLayers","terrainLayers","filter","l","length","offsetLayers","state","terrainDrawMode","_updateHeightMap","drapeLayers","_updateTerrainCovers","getModuleParameters","getRenderFramebuffer","heightMapBounds","bounds","terrainCover","terrainCovers","get","useTerrainHeightMap","terrainSkipRender","cleanup","delete","undefined","values","clear","shouldUpdate","renderHeightMap","moduleParameters","devicePixelRatio","drawToTerrainHeightMap","layerNeedsRedraw","terrainCoverNeedsRedraw","isDirty","_updateTerrainCover","_pruneTerrainCovers","terrainLayer","renderPass","set","targetLayer","renderTerrainCover","err","raiseError","idsToRemove","isActive","push"],"mappings":"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","sourcesContent":["import {Texture2D, ProgramManager} from '@luma.gl/core';\nimport {log} from '@deck.gl/core';\n\nimport {terrainModule, TerrainModuleSettings} from './shader-module';\nimport {TerrainCover} from './terrain-cover';\nimport {TerrainPass} from './terrain-pass';\nimport {TerrainPickingPass, TerrainPickingPassRenderOptions} from './terrain-picking-pass';\nimport {HeightMapBuilder} from './height-map-builder';\n\nimport type {Effect, PreRenderOptions, Layer, Viewport} from '@deck.gl/core';\n\n/** Class to manage terrain effect */\nexport class TerrainEffect implements Effect {\n id = 'terrain-effect';\n props = null;\n useInPicking = true;\n\n /** true if picking in the current pass */\n private isPicking: boolean = false;\n /** true if should use in the current pass */\n private isDrapingEnabled: boolean = false;\n /** An empty texture as placeholder */\n private dummyHeightMap: Texture2D;\n /** A texture encoding the ground elevation, updated once per redraw. Used by layers with offset mode */\n private heightMap?: HeightMapBuilder;\n private terrainPass!: TerrainPass;\n private terrainPickingPass!: TerrainPickingPass;\n /** One texture for each primitive terrain layer, into which the draped layers render */\n private terrainCovers: Map<string, TerrainCover> = new Map();\n\n initialize(gl: WebGLRenderingContext) {\n this.dummyHeightMap = new Texture2D(gl, {\n width: 1,\n height: 1,\n data: new Uint8Array([0, 0, 0, 0])\n });\n this.terrainPass = new TerrainPass(gl, {id: 'terrain'});\n this.terrainPickingPass = new TerrainPickingPass(gl, {id: 'terrain-picking'});\n\n if (HeightMapBuilder.isSupported(gl)) {\n this.heightMap = new HeightMapBuilder(gl);\n } else {\n log.warn('Terrain offset mode is not supported by this browser')();\n }\n\n ProgramManager.getDefaultProgramManager(gl).addDefaultModule(terrainModule);\n }\n\n preRender(gl: WebGLRenderingContext, opts: PreRenderOptions): void {\n if (!this.dummyHeightMap) {\n // First time this effect is in use, initialize resources and register the shader module\n this.initialize(gl);\n for (const layer of opts.layers) {\n // Force the terrain layer (and its descendents) to rebuild their models with the new shader\n if (layer.props.operation.includes('terrain')) {\n layer.setChangeFlags({extensionsChanged: true});\n }\n }\n }\n\n // @ts-expect-error pickZ only defined in picking pass\n if (opts.pickZ) {\n // Do not update if picking attributes\n this.isDrapingEnabled = false;\n return;\n }\n\n const {viewports} = opts;\n const isPicking = opts.pass.startsWith('picking');\n this.isPicking = isPicking;\n this.isDrapingEnabled = true;\n\n // TODO - support multiple views?\n const viewport = viewports[0];\n const layers = (isPicking ? this.terrainPickingPass : this.terrainPass).getRenderableLayers(\n viewport,\n opts as TerrainPickingPassRenderOptions\n );\n\n const terrainLayers = layers.filter(l => l.props.operation.includes('terrain'));\n if (terrainLayers.length === 0) {\n return;\n }\n\n if (!isPicking) {\n const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');\n if (offsetLayers.length > 0) {\n this._updateHeightMap(terrainLayers, viewport, opts);\n }\n }\n\n const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');\n this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);\n }\n\n getModuleParameters(layer: Layer): TerrainModuleSettings {\n const {terrainDrawMode} = layer.state;\n\n return {\n heightMap: this.heightMap?.getRenderFramebuffer(),\n heightMapBounds: this.heightMap?.bounds,\n dummyHeightMap: this.dummyHeightMap,\n terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,\n useTerrainHeightMap: terrainDrawMode === 'offset',\n terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')\n };\n }\n\n cleanup(): void {\n if (this.dummyHeightMap) {\n this.dummyHeightMap.delete();\n this.dummyHeightMap = undefined;\n }\n\n if (this.heightMap) {\n this.heightMap.delete();\n this.heightMap = undefined;\n }\n\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.delete();\n }\n this.terrainCovers.clear();\n }\n\n private _updateHeightMap(terrainLayers: Layer[], viewport: Viewport, opts: PreRenderOptions) {\n if (!this.heightMap) {\n // Not supported\n return;\n }\n\n const shouldUpdate = this.heightMap.shouldUpdate({layers: terrainLayers, viewport});\n if (!shouldUpdate) {\n return;\n }\n\n this.terrainPass.renderHeightMap(this.heightMap, {\n ...opts,\n layers: terrainLayers,\n moduleParameters: {\n heightMapBounds: this.heightMap.bounds,\n dummyHeightMap: this.dummyHeightMap,\n devicePixelRatio: 1,\n drawToTerrainHeightMap: true\n }\n });\n }\n\n private _updateTerrainCovers(\n terrainLayers: Layer[],\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n // Mark a terrain cover as dirty if one of the drape layers needs redraw\n const layerNeedsRedraw: Record<string, boolean> = {};\n for (const layer of drapeLayers) {\n if (layer.state.terrainCoverNeedsRedraw) {\n layerNeedsRedraw[layer.id] = true;\n layer.state.terrainCoverNeedsRedraw = false;\n }\n }\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.isDirty = terrainCover.isDirty || terrainCover.shouldUpdate({layerNeedsRedraw});\n }\n\n for (const layer of terrainLayers) {\n this._updateTerrainCover(layer, drapeLayers, viewport, opts);\n }\n\n if (!this.isPicking) {\n this._pruneTerrainCovers();\n }\n }\n\n private _updateTerrainCover(\n terrainLayer: Layer,\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n const renderPass = this.isPicking ? this.terrainPickingPass : this.terrainPass;\n let terrainCover = this.terrainCovers.get(terrainLayer.id);\n if (!terrainCover) {\n terrainCover = new TerrainCover(terrainLayer);\n this.terrainCovers.set(terrainLayer.id, terrainCover);\n }\n try {\n const isDirty = terrainCover.shouldUpdate({\n targetLayer: terrainLayer,\n viewport,\n layers: drapeLayers\n });\n if (this.isPicking || terrainCover.isDirty || isDirty) {\n renderPass.renderTerrainCover(terrainCover, {\n ...opts,\n layers: drapeLayers,\n moduleParameters: {\n dummyHeightMap: this.dummyHeightMap,\n terrainSkipRender: false,\n devicePixelRatio: 1\n }\n });\n\n if (!this.isPicking) {\n // IsDirty refers to the normal fbo, not the picking fbo.\n // Only mark it as not dirty if the normal fbo was updated.\n terrainCover.isDirty = false;\n }\n }\n } catch (err) {\n terrainLayer.raiseError(err as Error, `Error rendering terrain cover ${terrainCover.id}`);\n }\n }\n\n private _pruneTerrainCovers() {\n /** Prune the cache, remove textures for layers that have been removed */\n const idsToRemove: string[] = [];\n for (const [id, terrainCover] of this.terrainCovers) {\n if (!terrainCover.isActive) {\n idsToRemove.push(id);\n }\n }\n for (const id of idsToRemove) {\n this.terrainCovers.delete(id);\n }\n }\n}\n"],"file":"terrain-effect.js"}
|
package/dist.min.js
CHANGED
|
@@ -188,7 +188,7 @@ void main() {
|
|
|
188
188
|
}
|
|
189
189
|
gl_FragColor = vColor;
|
|
190
190
|
}
|
|
191
|
-
`;function rt(t){return Boolean(t.getExtension("EXT_float_blend")&&(t.getExtension("EXT_color_buffer_float")||t.getExtension("WEBGL_color_buffer_float")))}function nt(t,r){return r?new S.Framebuffer(t,{width:1,height:1,attachments:u({},36064,new S.Texture2D(t,{format:(0,S.isWebGL2)(t)?34836:6408,type:5126,mipmaps:!1}))}):new S.Framebuffer(t,{width:256,height:64,depth:!1})}function it(t,r,e){return r.defines.NON_INSTANCED_MODEL=1,e&&(r.defines.FLOAT_TARGET=1),new S.Model(t,Mr({id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:Rr,fs:Sr},r))}var ot={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};var oe=h(A());function at(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function ie(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?at(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):at(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function kr(t){var r=Cr();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Cr(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Ir={getFilterValue:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterTransformSize:!0,filterTransformColor:!0},st={1:"float",2:"vec2",3:"vec3",4:"vec4"},ae=function(t){x(e,t);var r=kr(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.filterSize,o=i===void 0?1:i,a=n.fp64,f=a===void 0?!1:a,s=n.countItems,l=s===void 0?!1:s;if(y(this,e),!st[o])throw new Error("filterSize out of range");return r.call(this,{filterSize:o,fp64:f,countItems:l})}return g(e,[{key:"getShaders",value:function(i){var o=i.opts,a=o.filterSize,f=o.fp64;return{modules:[f?Qe:Je],defines:{DATAFILTER_TYPE:st[a],DATAFILTER_DOUBLE:Boolean(f)}}}},{key:"initializeState",value:function(i,o){var a=this.getAttributeManager();a&&a.add({filterValues:{size:o.opts.filterSize,type:o.opts.fp64?5130:5126,accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}}});var f=this.context.gl;if(a&&o.opts.countItems){var s=rt(f);a.add({filterIndices:{size:s?1:2,vertexOffset:1,type:5121,normalized:!0,accessor:function(v,_){var
|
|
191
|
+
`;function rt(t){return Boolean(t.getExtension("EXT_float_blend")&&(t.getExtension("EXT_color_buffer_float")||t.getExtension("WEBGL_color_buffer_float")))}function nt(t,r){return r?new S.Framebuffer(t,{width:1,height:1,attachments:u({},36064,new S.Texture2D(t,{format:(0,S.isWebGL2)(t)?34836:6408,type:5126,mipmaps:!1}))}):new S.Framebuffer(t,{width:256,height:64,depth:!1})}function it(t,r,e){return r.defines.NON_INSTANCED_MODEL=1,e&&(r.defines.FLOAT_TARGET=1),new S.Model(t,Mr({id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:Rr,fs:Sr},r))}var ot={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};var oe=h(A());function at(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function ie(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?at(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):at(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function kr(t){var r=Cr();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Cr(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Ir={getFilterValue:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterTransformSize:!0,filterTransformColor:!0},st={1:"float",2:"vec2",3:"vec3",4:"vec4"},ae=function(t){x(e,t);var r=kr(e);function e(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=n.filterSize,o=i===void 0?1:i,a=n.fp64,f=a===void 0?!1:a,s=n.countItems,l=s===void 0?!1:s;if(y(this,e),!st[o])throw new Error("filterSize out of range");return r.call(this,{filterSize:o,fp64:f,countItems:l})}return g(e,[{key:"getShaders",value:function(i){var o=i.opts,a=o.filterSize,f=o.fp64;return{modules:[f?Qe:Je],defines:{DATAFILTER_TYPE:st[a],DATAFILTER_DOUBLE:Boolean(f)}}}},{key:"initializeState",value:function(i,o){var a=this.getAttributeManager();a&&a.add({filterValues:{size:o.opts.filterSize,type:o.opts.fp64?5130:5126,accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}}});var f=this.context.gl;if(a&&o.opts.countItems){var s=rt(f);a.add({filterIndices:{size:s?1:2,vertexOffset:1,type:5121,normalized:!0,accessor:function(v,_){var m=_.index,P=v&&v.__source?v.__source.index:m;return s?(P+1)%255:[(P+1)%255,Math.floor(P/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});var l=nt(f,s),c=it(f,o.getShaders.call(this,o),s);this.setState({filterFBO:l,filterModel:c})}}},{key:"updateState",value:function(i){var o=i.props,a=i.oldProps;if(this.state.filterModel){var f=this.getAttributeManager(),s=f.attributes.filterValues.needsUpdate()||o.filterEnabled!==a.filterEnabled||o.filterRange!==a.filterRange||o.filterSoftRange!==a.filterSoftRange;s&&this.setState({filterNeedsUpdate:s})}}},{key:"draw",value:function(i,o){var a=this.state,f=a.filterFBO,s=a.filterModel,l=a.filterNeedsUpdate,c=this.props.onFilteredItemsChange;if(l&&c&&s){var p=this.getAttributeManager(),v=p.attributes,_=v.filterValues,m=v.filterIndices;s.setVertexCount(this.getNumInstances());var P=this.context.gl;(0,oe.clear)(P,{framebuffer:f,color:[0,0,0,0]}),s.updateModuleSettings(i.moduleParameters).setAttributes(ie(ie({},_.getShaderAttributes()),m&&m.getShaderAttributes())).draw({framebuffer:f,parameters:ie(ie({},ot),{},{viewport:[0,0,f.width,f.height]})});for(var O=(0,oe.readPixelsToArray)(f),T=0,w=0;w<O.length;w++)T+=O[w];c({id:this.id,count:T}),this.state.filterNeedsUpdate=!1}}},{key:"finalizeState",value:function(){var i=this.state,o=i.filterFBO,a=i.filterModel;o&&(o.color.delete(),o.delete(),a.delete())}}]),e}(ft.LayerExtension);u(ae,"defaultProps",Ir);u(ae,"extensionName","DataFilterExtension");var $=h(E());function Ee(t){if(Array.isArray(t))return t}function Te(t,r){var e=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(e!=null){var n=[],i=!0,o=!1,a,f;try{for(e=e.call(t);!(i=(a=e.next()).done)&&(n.push(a.value),!(r&&n.length===r));i=!0);}catch(s){o=!0,f=s}finally{try{!i&&e.return!=null&&e.return()}finally{if(o)throw f}}return n}}function se(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}function we(t,r){if(t){if(typeof t=="string")return se(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return se(t,r)}}function Ae(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
192
192
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function H(t,r){return Ee(t)||Te(t,r)||we(t,r)||Ae()}function fe(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],e=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,n=Math.fround(t),i=t-n;return r[e]=n,r[e+1]=i,r}function Me(t){return t-Math.fround(t)}function Re(t){for(var r=new Float32Array(32),e=0;e<4;++e)for(var n=0;n<4;++n){var i=e*4+n;fe(t[n*4+e],r,i*2)}return r}var lt=`uniform float ONE;
|
|
193
193
|
vec2 split(float a) {
|
|
194
194
|
const float SPLIT = 4097.0;
|
|
@@ -1253,8 +1253,8 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
|
|
|
1253
1253
|
color.a *= collision_fade;
|
|
1254
1254
|
`},vn=function(r,e){if(!r||!("dummyCollisionMap"in r))return{};var n=r.collisionFBO,i=r.drawToCollisionMap,o=r.dummyCollisionMap;return{collision_sort:Boolean(i),collision_texture:!i&&n?n:o}},bt={name:"collision",dependencies:[xt.project],vs:cn,inject:pn,getUniforms:vn};var F=h(A());var Nt=h(E());var Tt=h(A()),wt=h(E());function Ot(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Et(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Ot(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Ot(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function _n(t){var r=dn();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function dn(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var At=function(t){x(e,t);var r=_n(e);function e(){return y(this,e),r.apply(this,arguments)}return g(e,[{key:"renderCollisionMap",value:function(i,o){var a=this,f=this.gl,s=1;return(0,Tt.withParameters)(f,{scissorTest:!0,scissor:[s,s,i.width-2*s,i.height-2*s],clearColor:[0,0,0,0],blend:!1,depthTest:!0,depthRange:[0,1]},function(){return a.render(Et(Et({},o),{},{target:i,pass:"collision"}))})}},{key:"getModuleParameters",value:function(){return{drawToCollisionMap:!0,pickingActive:1,pickingAttribute:!1,lightSources:{}}}}]),e}(wt._LayersPass);var Ie=h(E()),It=h(A());function Ce(t,r){for(;!Object.prototype.hasOwnProperty.call(t,r)&&(t=d(t),t!==null););return t}function I(t,r,e){return typeof Reflect<"u"&&Reflect.get?I=Reflect.get:I=function(i,o,a){var f=Ce(i,o);if(f){var s=Object.getOwnPropertyDescriptor(f,o);return s.get?s.get.call(a):s.value}},I(t,r,e||t)}var D=h(A()),St=h(E());function Mt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Rt(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Mt(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Mt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function mn(t){var r=hn();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function hn(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Ft=function(t){x(e,t);var r=mn(e);function e(n,i){var o,a;y(this,e),a=r.call(this,n,i),u(C(a),"maskMap",void 0),u(C(a),"fbo",void 0);var f=i.mapSize,s=f===void 0?2048:f;return a.maskMap=new D.Texture2D(n,{width:s,height:s,parameters:(o={},u(o,10241,9729),u(o,10240,9729),u(o,10242,33071),u(o,10243,33071),o)}),a.fbo=new D.Framebuffer(n,{id:"maskmap",width:s,height:s,attachments:u({},36064,a.maskMap)}),a}return g(e,[{key:"render",value:function(i){var o=this,a=this.gl,f=[!1,!1,!1,!1];return f[i.channel]=!0,(0,D.withParameters)(a,{clearColor:[255,255,255,255],blend:!0,blendFunc:[0,1],blendEquation:32778,colorMask:f,depthTest:!1},function(){return I(d(e.prototype),"render",o).call(o,Rt(Rt({},i),{},{target:o.fbo,pass:"mask"}))})}},{key:"shouldDrawLayer",value:function(i){return i.props.operation.includes("mask")}},{key:"delete",value:function(){this.fbo.delete(),this.maskMap.delete()}}]),e}(St._LayersPass);var _e=h(E());function yn(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=gn(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
1255
1255
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function gn(t,r){if(t){if(typeof t=="string")return kt(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return kt(t,r)}}function kt(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}function j(t,r){var e=[1/0,1/0,-1/0,-1/0],n=yn(t),i;try{for(n.s();!(i=n.n()).done;){var o=i.value,a=o.getBounds();if(a){var f=o.projectPosition(a[0],{viewport:r,autoOffset:!1}),s=o.projectPosition(a[1],{viewport:r,autoOffset:!1});e[0]=Math.min(e[0],f[0]),e[1]=Math.min(e[1],f[1]),e[2]=Math.max(e[2],s[0]),e[3]=Math.max(e[3],s[1])}}}catch(l){n.e(l)}finally{n.f()}return Number.isFinite(e[0])?e:null}var Pn=2048;function V(t){var r=t.bounds,e=t.viewport,n=t.border,i=n===void 0?0:n,o=e.isGeospatial;if(r[2]<=r[0]||r[3]<=r[1])return null;var a=e.unprojectPosition([(r[0]+r[2])/2,(r[1]+r[3])/2,0]),f=t.width,s=t.height,l=t.zoom;if(l===void 0){f=f-i*2,s=s-i*2;var c=Math.min(f/(r[2]-r[0]),s/(r[3]-r[1]));l=Math.min(Math.log2(c),20)}else if(!f||!s){var p=Math.pow(2,l);f=Math.round(Math.abs(r[2]-r[0])*p),s=Math.round(Math.abs(r[3]-r[1])*p);var v=Pn-i*2;if(f>v||s>v){var _=v/Math.max(f,s);f=Math.round(f*_),s=Math.round(s*_),l+=Math.log2(_)}}return o?new _e.WebMercatorViewport({id:e.id,x:i,y:i,width:f,height:s,longitude:a[0],latitude:a[1],zoom:l,orthographic:!0}):new _e.OrthographicViewport({id:e.id,x:i,y:i,width:f,height:s,target:a,zoom:l,flipY:!1})}function xn(t,r){var e;if(r&&r.length===2){var n=H(r,2),i=n[0],o=n[1],a=t.getBounds({z:i}),f=t.getBounds({z:o});e=[Math.min(a[0],f[0]),Math.min(a[1],f[1]),Math.max(a[2],f[2]),Math.max(a[3],f[3])]}else e=t.getBounds();var s=t.projectPosition(e.slice(0,2)),l=t.projectPosition(e.slice(2,4));return[s[0],s[1],l[0],l[1]]}function z(t,r,e){if(!t)return[0,0,1,1];var n=xn(r,e),i=bn(n);return t[2]-t[0]<=i[2]-i[0]&&t[3]-t[1]<=i[3]-i[1]?t:[Math.max(t[0],i[0]),Math.max(t[1],i[1]),Math.min(t[2],i[2]),Math.min(t[3],i[3])]}function bn(t){var r=t[2]-t[0],e=t[3]-t[1],n=(t[0]+t[2])/2,i=(t[1]+t[3])/2;return[n-r,i-e,n+r,i+e]}function On(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=En(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
1256
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function En(t,r){if(t){if(typeof t=="string")return Ct(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Ct(t,r)}}function Ct(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var de=function(){function t(){y(this,t),u(this,"id","mask-effect"),u(this,"props",null),u(this,"useInPicking",!0),u(this,"order",0),u(this,"dummyMaskMap",void 0),u(this,"channels",[]),u(this,"masks",null),u(this,"maskPass",void 0),u(this,"maskMap",void 0),u(this,"lastViewport",void 0)}return g(t,[{key:"preRender",value:function(e,n){var i=n.layers,o=n.layerFilter,a=n.viewports,f=n.onViewportActive,s=n.views,l=n.isPicking,c=!1;if(this.dummyMaskMap||(this.dummyMaskMap=new It.Texture2D(e,{width:1,height:1})),l)return{didRender:c};var p=i.filter(function(T){return T.props.visible&&T.props.operation.includes("mask")});if(p.length===0)return this.masks=null,this.channels.length=0,{didRender:c};this.masks={},this.maskPass||(this.maskPass=new Ft(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap);var v=this._sortMaskChannels(p),_=a[0],
|
|
1257
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function wn(t,r){if(t){if(typeof t=="string")return Lt(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Lt(t,r)}}function Lt(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var Le=2,Bt=function(){function t(){y(this,t),u(this,"id","collision-filter-effect"),u(this,"props",null),u(this,"useInPicking",!0),u(this,"order",1),u(this,"channels",{}),u(this,"collisionFilterPass",void 0),u(this,"collisionFBOs",{}),u(this,"dummyCollisionMap",void 0),u(this,"lastViewport",void 0)}return g(t,[{key:"preRender",value:function(e,n){var i,o=n.effects,a=n.layers,f=n.layerFilter,s=n.viewports,l=n.onViewportActive,c=n.views,p=n.isPicking,v=n.preRenderStats,_=v===void 0?{}:v;if(this.dummyCollisionMap||(this.dummyCollisionMap=new F.Texture2D(e,{width:1,height:1})),!p){var
|
|
1256
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function En(t,r){if(t){if(typeof t=="string")return Ct(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Ct(t,r)}}function Ct(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var de=function(){function t(){y(this,t),u(this,"id","mask-effect"),u(this,"props",null),u(this,"useInPicking",!0),u(this,"order",0),u(this,"dummyMaskMap",void 0),u(this,"channels",[]),u(this,"masks",null),u(this,"maskPass",void 0),u(this,"maskMap",void 0),u(this,"lastViewport",void 0)}return g(t,[{key:"preRender",value:function(e,n){var i=n.layers,o=n.layerFilter,a=n.viewports,f=n.onViewportActive,s=n.views,l=n.isPicking,c=!1;if(this.dummyMaskMap||(this.dummyMaskMap=new It.Texture2D(e,{width:1,height:1})),l)return{didRender:c};var p=i.filter(function(T){return T.props.visible&&T.props.operation.includes("mask")});if(p.length===0)return this.masks=null,this.channels.length=0,{didRender:c};this.masks={},this.maskPass||(this.maskPass=new Ft(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap);var v=this._sortMaskChannels(p),_=a[0],m=!this.lastViewport||!this.lastViewport.equals(_);if(_.resolution!==void 0)return Ie.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:c};for(var P in v){var O=this._renderChannel(v[P],{layerFilter:o,onViewportActive:f,views:s,viewport:_,viewportChanged:m});c||(c=O)}return{didRender:c}}},{key:"_renderChannel",value:function(e,n){var i=n.layerFilter,o=n.onViewportActive,a=n.views,f=n.viewport,s=n.viewportChanged,l=!1,c=this.channels[e.index];if(!c)return l;var p=e===c||e.layers.length!==c.layers.length||e.layers.some(function(O,T){return O!==c.layers[T]||O.props.transitions})||e.layerBounds.some(function(O,T){return O!==c.layerBounds[T]});if(e.bounds=c.bounds,e.maskBounds=c.maskBounds,this.channels[e.index]=e,p||s){this.lastViewport=f;var v=j(e.layers,f);if(e.bounds=v&&z(v,f),p||!B(e.bounds,c.bounds)){var _=this.maskPass,m=this.maskMap,P=v&&V({bounds:e.bounds,viewport:f,width:m.width,height:m.height,border:1});e.maskBounds=P?P.getBounds():[0,0,1,1],_.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:i,viewports:P?[P]:[],onViewportActive:o,views:a,moduleParameters:{devicePixelRatio:1}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}},{key:"_sortMaskChannels",value:function(e){var n=this,i={},o=0,a=On(e),f;try{var s=function(){var P=f.value,O=P.root.id,T=i[O];if(!T){if(++o>4)return Ie.log.warn("Too many mask layers. The max supported is 4")(),"continue";T={id:O,index:n.channels.findIndex(function(w){return w?.id===O}),layers:[],layerBounds:[],coordinateOrigin:P.root.props.coordinateOrigin,coordinateSystem:P.root.props.coordinateSystem},i[O]=T}T.layers.push(P),T.layerBounds.push(P.getBounds())};for(a.s();!(f=a.n()).done;)var l=s()}catch(m){a.e(m)}finally{a.f()}for(var c=0;c<4;c++){var p=this.channels[c];(!p||!(p.id in i))&&(this.channels[c]=null)}for(var v in i){var _=i[v];_.index<0&&(_.index=this.channels.findIndex(function(m){return!m}),this.channels[_.index]=_)}return i}},{key:"getModuleParameters",value:function(){return{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}},{key:"cleanup",value:function(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}}]),t}();function Tn(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=wn(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
1257
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function wn(t,r){if(t){if(typeof t=="string")return Lt(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Lt(t,r)}}function Lt(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var Le=2,Bt=function(){function t(){y(this,t),u(this,"id","collision-filter-effect"),u(this,"props",null),u(this,"useInPicking",!0),u(this,"order",1),u(this,"channels",{}),u(this,"collisionFilterPass",void 0),u(this,"collisionFBOs",{}),u(this,"dummyCollisionMap",void 0),u(this,"lastViewport",void 0)}return g(t,[{key:"preRender",value:function(e,n){var i,o=n.effects,a=n.layers,f=n.layerFilter,s=n.viewports,l=n.onViewportActive,c=n.views,p=n.isPicking,v=n.preRenderStats,_=v===void 0?{}:v;if(this.dummyCollisionMap||(this.dummyCollisionMap=new F.Texture2D(e,{width:1,height:1})),!p){var m=a.filter(function(Oe){var De=Oe.props,cr=De.visible,pr=De.collisionEnabled;return cr&&pr});if(m.length===0){this.channels={};return}this.collisionFilterPass||(this.collisionFilterPass=new At(e,{id:"default-collision-filter"}));var P=o?.filter(function(Oe){return Oe.constructor===de}),O=(i=_["mask-effect"])===null||i===void 0?void 0:i.didRender,T=this._groupByCollisionGroup(e,m),w=s[0],ee=!this.lastViewport||!this.lastViewport.equals(w)||O;for(var G in T){var lr=this.collisionFBOs[G],ur=T[G];lr.resize({width:e.canvas.width/Le,height:e.canvas.height/Le}),this._render(ur,{effects:P,layerFilter:f,onViewportActive:l,views:c,viewport:w,viewportChanged:ee})}}}},{key:"_render",value:function(e,n){var i=n.effects,o=n.layerFilter,a=n.onViewportActive,f=n.views,s=n.viewport,l=n.viewportChanged,c=e.collisionGroup,p=this.channels[c];if(p){var v=l||e===p||!(0,Nt._deepEqual)(p.layers,e.layers,1)||e.layerBounds.some(function(m,P){return!B(m,p.layerBounds[P])})||e.allLayersLoaded!==p.allLayersLoaded||e.layers.some(function(m){return m.props.transitions});if(this.channels[c]=e,v){this.lastViewport=s;var _=this.collisionFBOs[c];this.collisionFilterPass.renderCollisionMap(_,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:i,layerFilter:o,viewports:s?[s]:[],onViewportActive:a,views:f,moduleParameters:{dummyCollisionMap:this.dummyCollisionMap,devicePixelRatio:(0,F.cssToDeviceRatio)(_.gl)/Le}})}}}},{key:"_groupByCollisionGroup",value:function(e,n){var i={},o=Tn(n),a;try{for(o.s();!(a=o.n()).done;){var f=a.value,s=f.props.collisionGroup,l=i[s];l||(l={collisionGroup:s,layers:[],layerBounds:[],allLayersLoaded:!0},i[s]=l),l.layers.push(f),l.layerBounds.push(f.getBounds()),f.isLoaded||(l.allLayersLoaded=!1)}}catch(O){o.e(O)}finally{o.f()}for(var c=0,p=Object.keys(i);c<p.length;c++){var v=p[c];this.collisionFBOs[v]||this.createFBO(e,v),this.channels[v]||(this.channels[v]=i[v])}for(var _=0,m=Object.keys(this.collisionFBOs);_<m.length;_++){var P=m[_];i[P]||this.destroyFBO(P)}return i}},{key:"getModuleParameters",value:function(e){var n=e.props.collisionGroup,i=this.collisionFBOs,o=this.dummyCollisionMap;return{collisionFBO:i[n],dummyCollisionMap:o}}},{key:"cleanup",value:function(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(var e=0,n=Object.keys(this.collisionFBOs);e<n.length;e++){var i=n[e];this.destroyFBO(i)}this.collisionFBOs={},this.lastViewport=void 0}},{key:"createFBO",value:function(e,n){var i,o,a=e.canvas,f=a.width,s=a.height,l=new F.Texture2D(e,{width:f,height:s,parameters:(i={},u(i,10241,9728),u(i,10240,9728),u(i,10242,33071),u(i,10243,33071),i)}),c=new F.Renderbuffer(e,{format:33189,width:f,height:s});this.collisionFBOs[n]=new F.Framebuffer(e,{id:"Collision-".concat(n),width:f,height:s,attachments:(o={},u(o,36064,l),u(o,36096,c),o)})}},{key:"destroyFBO",value:function(e){for(var n=this.collisionFBOs[e],i=0,o=Object.values(n.attachments);i<o.length;i++){var a=o[i];a.delete()}n.delete(),delete this.collisionFBOs[e]}}]),t}();function An(t){var r=Mn();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Mn(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Rn={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},me=function(t){x(e,t);var r=An(e);function e(){return y(this,e),r.apply(this,arguments)}return g(e,[{key:"getShaders",value:function(){return{modules:[bt]}}},{key:"draw",value:function(i){var o=i.uniforms,a=i.context,f=i.moduleParameters,s=this.props.collisionEnabled,l=f.collisionFBO,c=f.drawToCollisionMap,p=s&&Boolean(l);o.collision_enabled=p,c&&(this.props=this.clone(this.props.collisionTestProps).props)}},{key:"initializeState",value:function(i,o){var a;if(this.getAttributeManager()!==null){(a=this.context.deck)===null||a===void 0||a._addDefaultEffect(new Bt);var f=this.getAttributeManager();f.add({collisionPriorities:{size:1,accessor:"getCollisionPriority",shaderAttributes:{collisionPriorities:{divisor:0},instanceCollisionPriorities:{divisor:1}}}})}}},{key:"getNeedsPickingBuffer",value:function(){return this.props.collisionEnabled}}]),e}(Dt.LayerExtension);u(me,"defaultProps",Rn);u(me,"extensionName","CollisionFilterExtension");var L=h(E());var jt=h(E()),Sn=`
|
|
1258
1258
|
uniform vec4 mask_bounds;
|
|
1259
1259
|
uniform bool mask_maskByInstance;
|
|
1260
1260
|
vec2 mask_getCoords(vec4 position) {
|
|
@@ -1309,7 +1309,7 @@ varying vec2 mask_texCoords;
|
|
|
1309
1309
|
|
|
1310
1310
|
if (!mask) discard;
|
|
1311
1311
|
}
|
|
1312
|
-
`},Cn=function(r){return r&&"maskMap"in r?{mask_texture:r.maskMap}:{}},Vt={name:"mask",dependencies:[jt.project],vs:Sn,fs:Fn,inject:kn,getUniforms:Cn};function In(t){var r=Ln();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Ln(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Nn={maskId:"",maskByInstance:void 0,maskInverted:!1},he=function(t){x(e,t);var r=In(e);function e(){return y(this,e),r.apply(this,arguments)}return g(e,[{key:"initializeState",value:function(){var i;(i=this.context.deck)===null||i===void 0||i._addDefaultEffect(new de)}},{key:"getShaders",value:function(){var i="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(i=Boolean(this.props.maskByInstance)),this.state.maskByInstance=i,{modules:[Vt]}}},{key:"draw",value:function(i){var o=i.uniforms,a=i.context,f=i.moduleParameters;o.mask_maskByInstance=this.state.maskByInstance;var s=this.props,l=s.maskId,c=s.maskInverted,p=f.maskChannels,v=a.viewport;if(p&&p[l]){var _=p[l],
|
|
1312
|
+
`},Cn=function(r){return r&&"maskMap"in r?{mask_texture:r.maskMap}:{}},Vt={name:"mask",dependencies:[jt.project],vs:Sn,fs:Fn,inject:kn,getUniforms:Cn};function In(t){var r=Ln();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Ln(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Nn={maskId:"",maskByInstance:void 0,maskInverted:!1},he=function(t){x(e,t);var r=In(e);function e(){return y(this,e),r.apply(this,arguments)}return g(e,[{key:"initializeState",value:function(){var i;(i=this.context.deck)===null||i===void 0||i._addDefaultEffect(new de)}},{key:"getShaders",value:function(){var i="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(i=Boolean(this.props.maskByInstance)),this.state.maskByInstance=i,{modules:[Vt]}}},{key:"draw",value:function(i){var o=i.uniforms,a=i.context,f=i.moduleParameters;o.mask_maskByInstance=this.state.maskByInstance;var s=this.props,l=s.maskId,c=s.maskInverted,p=f.maskChannels,v=a.viewport;if(p&&p[l]){var _=p[l],m=_.index,P=_.bounds,O=_.coordinateOrigin,T=p[l].coordinateSystem;o.mask_enabled=!0,o.mask_channel=m,o.mask_inverted=c,T===L.COORDINATE_SYSTEM.DEFAULT&&(T=v.isGeospatial?L.COORDINATE_SYSTEM.LNGLAT:L.COORDINATE_SYSTEM.CARTESIAN);var w={modelMatrix:null,fromCoordinateOrigin:O,fromCoordinateSystem:T},ee=this.projectPosition([P[0],P[1],0],w),G=this.projectPosition([P[2],P[3],0],w);o.mask_bounds=[ee[0],ee[1],G[0],G[1]]}else l&&L.log.warn("Could not find a mask layer with id: ".concat(l))(),o.mask_enabled=!1}}]),e}(L.LayerExtension);u(he,"defaultProps",Nn);u(he,"extensionName","MaskExtension");var fr=h(E());var xe=h(A()),ar=h(E());var Ut=h(E()),R={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},zt=Object.keys(R).map(function(t){return"const float TERRAIN_MODE_".concat(t," = ").concat(R[t],".0;")}).join(`
|
|
1313
1313
|
`),ye={name:"terrain",dependencies:[Ut.project],inject:{"vs:#decl":`
|
|
1314
1314
|
uniform float terrain_mode;
|
|
1315
1315
|
uniform sampler2D terrain_map;
|
|
@@ -1362,8 +1362,8 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US
|
|
|
1362
1362
|
}
|
|
1363
1363
|
return;
|
|
1364
1364
|
}
|
|
1365
|
-
`},getUniforms:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;if("dummyHeightMap"in r){var n=r.drawToTerrainHeightMap,i=r.heightMap,o=r.heightMapBounds,a=r.dummyHeightMap,f=r.terrainCover,s=r.useTerrainHeightMap,l=r.terrainSkipRender,c=e.project_uCommonOrigin,p=l?R.SKIP:R.NONE,v=a,_=null;if(n)p=R.WRITE_HEIGHT_MAP,_=o;else if(s&&i)p=R.USE_HEIGHT_MAP,v=i,_=o;else if(f){var
|
|
1365
|
+
`},getUniforms:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;if("dummyHeightMap"in r){var n=r.drawToTerrainHeightMap,i=r.heightMap,o=r.heightMapBounds,a=r.dummyHeightMap,f=r.terrainCover,s=r.useTerrainHeightMap,l=r.terrainSkipRender,c=e.project_uCommonOrigin,p=l?R.SKIP:R.NONE,v=a,_=null;if(n)p=R.WRITE_HEIGHT_MAP,_=o;else if(s&&i)p=R.USE_HEIGHT_MAP,v=i,_=o;else if(f){var m=r.pickingActive;v=m?f.getPickingFramebuffer():f.getRenderFramebuffer(),m&&(p=R.SKIP),v?(p=p===R.SKIP?R.USE_COVER_ONLY:R.USE_COVER,_=f.bounds):v=a}return{terrain_mode:p,terrain_map:v,terrain_bounds:_?[_[0]-c[0],_[1]-c[1],_[2]-_[0],_[3]-_[1]]:[0,0,0,0]}}return null}};var U=h(A());function qt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Gt(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?qt(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):qt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function J(t,r){var e;return new U.Framebuffer(t,{id:r.id,attachments:u({},36064,new U.Texture2D(t,Gt(Gt({},r.float&&{format:(0,U.isWebGL2)(t)?34836:6408,type:5126}),{},{mipmaps:!1,parameters:(e={},u(e,10241,9729),u(e,10240,9729),u(e,10242,33071),u(e,10243,33071),e)})))})}function Bn(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=Dn(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
1366
1366
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function Dn(t,r){if(t){if(typeof t=="string")return Wt(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Wt(t,r)}}function Wt(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var Ht=function(){function t(r){y(this,t),u(this,"isDirty",!0),u(this,"targetLayer",void 0),u(this,"renderViewport",null),u(this,"bounds",null),u(this,"fbo",void 0),u(this,"pickingFbo",void 0),u(this,"layers",[]),u(this,"tile",void 0),u(this,"targetBounds",null),u(this,"targetBoundsCommon",null),this.targetLayer=r,this.tile=Kt(r)}return g(t,[{key:"id",get:function(){return this.targetLayer.id}},{key:"isActive",get:function(){return Boolean(this.targetLayer.getCurrentLayer())}},{key:"shouldUpdate",value:function(e){var n=e.targetLayer,i=e.viewport,o=e.layers,a=e.layerNeedsRedraw;n&&(this.targetLayer=n);var f=i?this._updateViewport(i):!1,s=o?this._updateLayers(o):!1;if(a){var l=Bn(this.layers),c;try{for(l.s();!(c=l.n()).done;){var p=c.value;if(a[p]){s=!0;break}}}catch(v){l.e(v)}finally{l.f()}}return s||f}},{key:"_updateLayers",value:function(e){var n=!1;if(e=this.tile?jn(this.tile,e):e,e.length!==this.layers.length)n=!0;else for(var i=0;i<e.length;i++){var o=e[i].id;if(o!==this.layers[i]){n=!0;break}}return n&&(this.layers=e.map(function(a){return a.id})),n}},{key:"_updateViewport",value:function(e){var n=this.targetLayer,i=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){i=!0,this.targetBounds=this.tile.boundingBox;var o=e.projectPosition(this.targetBounds[0]),a=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],a[0],a[1]]}}else this.targetBounds!==n.getBounds()&&(i=!0,this.targetBounds=n.getBounds(),this.targetBoundsCommon=j([n],e));if(!this.targetBoundsCommon)return!1;var f=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{var s,l=(s=this.renderViewport)===null||s===void 0?void 0:s.zoom;i=i||f!==l;var c=z(this.targetBoundsCommon,e),p=this.bounds;i=i||!p||c.some(function(v,_){return v!==p[_]}),this.bounds=c}return i&&(this.renderViewport=V({bounds:this.bounds,zoom:f,viewport:e})),i}},{key:"getRenderFramebuffer",value:function(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=J(this.targetLayer.context.gl,{id:this.id})),this.fbo)}},{key:"getPickingFramebuffer",value:function(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=J(this.targetLayer.context.gl,{id:"".concat(this.id,"-picking")})),this.pickingFbo)}},{key:"filterLayers",value:function(e){var n=this;return e.filter(function(i){var o=i.id;return n.layers.includes(o)})}},{key:"delete",value:function(){var e=this.fbo,n=this.pickingFbo;e&&(e.texture.delete(),e.delete()),n&&(n.texture.delete(),n.delete())}}]),t}();function jn(t,r){return r.filter(function(e){var n=Kt(e);return n?Vn(t.boundingBox,n.boundingBox):!0})}function Kt(t){for(;t;){var r=t.props.tile;if(r)return r;t=t.parent}return null}function Vn(t,r){return t&&r?t[0][0]<r[1][0]&&r[0][0]<t[1][0]&&t[0][1]<r[1][1]&&r[0][1]<t[1][1]:!1}var Ne=h(A()),$t=h(E());function Yt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function ge(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Yt(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Yt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function zn(t){var r=Un();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Un(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Zt=function(t){x(e,t);var r=zn(e);function e(){return y(this,e),r.apply(this,arguments)}return g(e,[{key:"getRenderableLayers",value:function(i,o){for(var a=o.layers,f=[],s=this._getDrawLayerParams(i,o,!0),l=0;l<a.length;l++){var c=a[l];!c.isComposite&&s[l].shouldDrawLayer&&f.push(c)}return f}},{key:"renderHeightMap",value:function(i,o){var a=this,f=i.getRenderFramebuffer(),s=i.renderViewport;!f||!s||(f.resize(s),(0,Ne.withParameters)(this.gl,{clearColor:[0,0,0,0],blend:!0,blendFunc:[1,1],blendEquation:32776,depthTest:!1},function(){return a.render(ge(ge({},o),{},{target:f,pass:"terrain-height-map",layers:o.layers,viewports:[s],effects:[]}))}))}},{key:"renderTerrainCover",value:function(i,o){var a=this,f=i.getRenderFramebuffer(),s=i.renderViewport;if(!(!f||!s)){var l=i.filterLayers(o.layers);f.resize(s),(0,Ne.withParameters)(this.gl,{clearColor:[0,0,0,0],depthTest:!1},function(){return a.render(ge(ge({},o),{},{target:f,pass:"terrain-cover-".concat(i.id),layers:l,effects:[],viewports:[s]}))})}}}]),e}($t._LayersPass);var Qt=h(E()),er=h(A());function Xt(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Jt(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?Xt(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Xt(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function qn(t){var r=Gn();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Gn(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var tr=function(t){x(e,t);var r=qn(e);function e(){var n;y(this,e);for(var i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];return n=r.call.apply(r,[this].concat(o)),u(C(n),"drawParameters",{}),n}return g(e,[{key:"getRenderableLayers",value:function(i,o){var a=o.layers,f=[];this.drawParameters={},this._resetColorEncoder(o.pickZ);for(var s=this._getDrawLayerParams(i,o),l=0;l<a.length;l++){var c=a[l];!c.isComposite&&s[l].shouldDrawLayer&&(f.push(c),this.drawParameters[c.id]=s[l].layerParameters)}return f}},{key:"renderTerrainCover",value:function(i,o){var a=this,f=i.getPickingFramebuffer(),s=i.renderViewport;if(!(!f||!s)){var l=i.filterLayers(o.layers),c=i.targetLayer;c.props.pickable&&l.unshift(c),f.resize(s),(0,er.withParameters)(this.gl,{depthTest:!1},function(){return a.render(Jt(Jt({},o),{},{pickingFBO:f,pass:"terrain-cover-picking-".concat(i.id),layers:l,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1}))})}}},{key:"getLayerParameters",value:function(i,o,a){if(this.drawParameters[i.id])return this.drawParameters[i.id];var f=I(d(e.prototype),"getLayerParameters",this).call(this,i,o,a);return f.blend=!0,f}}]),e}(Qt._PickLayersPass);var nr=h(A());var rr=2048,Be=function(){function t(r){y(this,t),u(this,"renderViewport",null),u(this,"bounds",null),u(this,"fbo",void 0),u(this,"gl",void 0),u(this,"layers",[]),u(this,"layersBounds",[]),u(this,"layersBoundsCommon",null),u(this,"lastViewport",null),this.gl=r}return g(t,[{key:"getRenderFramebuffer",value:function(){return this.renderViewport?(this.fbo||(this.fbo=J(this.gl,{id:"height-map",float:!0})),this.fbo):null}},{key:"shouldUpdate",value:function(e){var n=this,i=e.layers,o=e.viewport,a=i.length!==this.layers.length||i.some(function(v,_){return v!==n.layers[_]||v.props.transitions||v.getBounds()!==n.layersBounds[_]});a&&(this.layers=i,this.layersBounds=i.map(function(v){return v.getBounds()}),this.layersBoundsCommon=j(i,o));var f=!this.lastViewport||!o.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(a||f){var s=z(this.layersBoundsCommon,o);if(s[2]<=s[0]||s[3]<=s[1])return this.renderViewport=null,!1;this.bounds=s,this.lastViewport=o;var l=o.scale,c=(s[2]-s[0])*l,p=(s[3]-s[1])*l;return this.renderViewport=c>0||p>0?V({bounds:[o.center[0]-1,o.center[1]-1,o.center[0]+1,o.center[1]+1],zoom:o.zoom,width:Math.min(c,rr),height:Math.min(p,rr),viewport:o}):null,!0}return!1}},{key:"delete",value:function(){this.fbo&&(this.fbo.color.delete(),this.fbo.delete())}}],[{key:"isSupported",value:function(e){return nr.Framebuffer.isSupported(e,{colorBufferFloat:!0})}}]),t}();function ir(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),e.push.apply(e,n)}return e}function Pe(t){for(var r=1;r<arguments.length;r++){var e=arguments[r]!=null?arguments[r]:{};r%2?ir(Object(e),!0).forEach(function(n){u(t,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):ir(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})}return t}function q(t,r){var e=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=Wn(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(l){throw l},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
1367
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function Wn(t,r){if(t){if(typeof t=="string")return or(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return or(t,r)}}function or(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var sr=function(){function t(){y(this,t),u(this,"id","terrain-effect"),u(this,"props",null),u(this,"useInPicking",!0),u(this,"isPicking",!1),u(this,"isDrapingEnabled",!1),u(this,"dummyHeightMap",void 0),u(this,"heightMap",void 0),u(this,"terrainPass",void 0),u(this,"terrainPickingPass",void 0),u(this,"terrainCovers",new Map)}return g(t,[{key:"initialize",value:function(e){this.dummyHeightMap=new xe.Texture2D(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Zt(e,{id:"terrain"}),this.terrainPickingPass=new tr(e,{id:"terrain-picking"}),Be.isSupported(e)?this.heightMap=new Be(e):ar.log.warn("Terrain offset mode is not supported by this browser")(),xe.ProgramManager.getDefaultProgramManager(e).addDefaultModule(ye)}},{key:"preRender",value:function(e,n){if(!this.dummyHeightMap){this.initialize(e);var i=q(n.layers),o;try{for(i.s();!(o=i.n()).done;){var a=o.value;a.props.operation.includes("terrain")&&a.setChangeFlags({extensionsChanged:!0})}}catch(m){i.e(m)}finally{i.f()}}if(n.pickZ){this.isDrapingEnabled=!1;return}var f=n.viewports,s=n.
|
|
1367
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,a=!1,f;return{s:function(){e=e.call(t)},n:function(){var l=e.next();return o=l.done,l},e:function(l){a=!0,f=l},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(a)throw f}}}}function Wn(t,r){if(t){if(typeof t=="string")return or(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return or(t,r)}}function or(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e<r;e++)n[e]=t[e];return n}var sr=function(){function t(){y(this,t),u(this,"id","terrain-effect"),u(this,"props",null),u(this,"useInPicking",!0),u(this,"isPicking",!1),u(this,"isDrapingEnabled",!1),u(this,"dummyHeightMap",void 0),u(this,"heightMap",void 0),u(this,"terrainPass",void 0),u(this,"terrainPickingPass",void 0),u(this,"terrainCovers",new Map)}return g(t,[{key:"initialize",value:function(e){this.dummyHeightMap=new xe.Texture2D(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Zt(e,{id:"terrain"}),this.terrainPickingPass=new tr(e,{id:"terrain-picking"}),Be.isSupported(e)?this.heightMap=new Be(e):ar.log.warn("Terrain offset mode is not supported by this browser")(),xe.ProgramManager.getDefaultProgramManager(e).addDefaultModule(ye)}},{key:"preRender",value:function(e,n){if(!this.dummyHeightMap){this.initialize(e);var i=q(n.layers),o;try{for(i.s();!(o=i.n()).done;){var a=o.value;a.props.operation.includes("terrain")&&a.setChangeFlags({extensionsChanged:!0})}}catch(m){i.e(m)}finally{i.f()}}if(n.pickZ){this.isDrapingEnabled=!1;return}var f=n.viewports,s=n.pass.startsWith("picking");this.isPicking=s,this.isDrapingEnabled=!0;var l=f[0],c=(s?this.terrainPickingPass:this.terrainPass).getRenderableLayers(l,n),p=c.filter(function(m){return m.props.operation.includes("terrain")});if(p.length!==0){if(!s){var v=c.filter(function(m){return m.state.terrainDrawMode==="offset"});v.length>0&&this._updateHeightMap(p,l,n)}var _=c.filter(function(m){return m.state.terrainDrawMode==="drape"});this._updateTerrainCovers(p,_,l,n)}}},{key:"getModuleParameters",value:function(e){var n,i,o=e.state.terrainDrawMode;return{heightMap:(n=this.heightMap)===null||n===void 0?void 0:n.getRenderFramebuffer(),heightMapBounds:(i=this.heightMap)===null||i===void 0?void 0:i.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap:o==="offset",terrainSkipRender:o==="drape"||!e.props.operation.includes("draw")}}},{key:"cleanup",value:function(){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);var e=q(this.terrainCovers.values()),n;try{for(e.s();!(n=e.n()).done;){var i=n.value;i.delete()}}catch(o){e.e(o)}finally{e.f()}this.terrainCovers.clear()}},{key:"_updateHeightMap",value:function(e,n,i){if(this.heightMap){var o=this.heightMap.shouldUpdate({layers:e,viewport:n});o&&this.terrainPass.renderHeightMap(this.heightMap,Pe(Pe({},i),{},{layers:e,moduleParameters:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,devicePixelRatio:1,drawToTerrainHeightMap:!0}}))}}},{key:"_updateTerrainCovers",value:function(e,n,i,o){var a={},f=q(n),s;try{for(f.s();!(s=f.n()).done;){var l=s.value;l.state.terrainCoverNeedsRedraw&&(a[l.id]=!0,l.state.terrainCoverNeedsRedraw=!1)}}catch(O){f.e(O)}finally{f.f()}var c=q(this.terrainCovers.values()),p;try{for(c.s();!(p=c.n()).done;){var v=p.value;v.isDirty=v.isDirty||v.shouldUpdate({layerNeedsRedraw:a})}}catch(O){c.e(O)}finally{c.f()}var _=q(e),m;try{for(_.s();!(m=_.n()).done;){var P=m.value;this._updateTerrainCover(P,n,i,o)}}catch(O){_.e(O)}finally{_.f()}this.isPicking||this._pruneTerrainCovers()}},{key:"_updateTerrainCover",value:function(e,n,i,o){var a=this.isPicking?this.terrainPickingPass:this.terrainPass,f=this.terrainCovers.get(e.id);f||(f=new Ht(e),this.terrainCovers.set(e.id,f));try{var s=f.shouldUpdate({targetLayer:e,viewport:i,layers:n});(this.isPicking||f.isDirty||s)&&(a.renderTerrainCover(f,Pe(Pe({},o),{},{layers:n,moduleParameters:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1,devicePixelRatio:1}})),this.isPicking||(f.isDirty=!1))}catch(l){e.raiseError(l,"Error rendering terrain cover ".concat(f.id))}}},{key:"_pruneTerrainCovers",value:function(){var e=[],n=q(this.terrainCovers),i;try{for(n.s();!(i=n.n()).done;){var o=H(i.value,2),a=o[0],f=o[1];f.isActive||e.push(a)}}catch(p){n.e(p)}finally{n.f()}for(var s=0,l=e;s<l.length;s++){var c=l[s];this.terrainCovers.delete(c)}}}]),t}();function Hn(t){var r=Kn();return function(){var n=d(t),i;if(r){var o=d(this).constructor;i=Reflect.construct(n,arguments,o)}else i=n.apply(this,arguments);return b(this,i)}}function Kn(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Yn={terrainDrawMode:void 0},be=function(t){x(e,t);var r=Hn(e);function e(){return y(this,e),r.apply(this,arguments)}return g(e,[{key:"getShaders",value:function(){return{modules:[ye]}}},{key:"initializeState",value:function(){var i;(i=this.context.deck)===null||i===void 0||i._addDefaultEffect(new sr)}},{key:"updateState",value:function(i){var o=i.props,a=i.oldProps;if(!(this.state.terrainDrawMode&&o.terrainDrawMode===a.terrainDrawMode&&o.extruded===a.extruded)){var f=o.terrainDrawMode;if(!f){var s,l=this.props.extruded,c=(s=this.getAttributeManager())===null||s===void 0?void 0:s.attributes,p=c&&"instancePositions"in c;f=l||p?"offset":"drape"}this.setState({terrainDrawMode:f})}}},{key:"onNeedsRedraw",value:function(){var i=this.state;i.terrainDrawMode==="drape"&&(i.terrainCoverNeedsRedraw=!0)}}]),e}(fr.LayerExtension);u(be,"defaultProps",Yn);u(be,"extensionName","TerrainExtension");return gr(Q);})();
|
|
1368
1368
|
return __exports__;
|
|
1369
1369
|
});
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@deck.gl/extensions",
|
|
3
3
|
"description": "Plug-and-play functionalities for deck.gl layers",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "8.9.
|
|
5
|
+
"version": "8.9.35",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"@math.gl/web-mercator": "^3.6.2",
|
|
42
42
|
"gl-matrix": "^3.0.0"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "e66c6a70455762cf1c3d7347a739d2bd661d2977"
|
|
45
45
|
}
|
|
@@ -65,7 +65,8 @@ export class TerrainEffect implements Effect {
|
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
const {viewports
|
|
68
|
+
const {viewports} = opts;
|
|
69
|
+
const isPicking = opts.pass.startsWith('picking');
|
|
69
70
|
this.isPicking = isPicking;
|
|
70
71
|
this.isDrapingEnabled = true;
|
|
71
72
|
|
|
@@ -200,7 +201,12 @@ export class TerrainEffect implements Effect {
|
|
|
200
201
|
devicePixelRatio: 1
|
|
201
202
|
}
|
|
202
203
|
});
|
|
203
|
-
|
|
204
|
+
|
|
205
|
+
if (!this.isPicking) {
|
|
206
|
+
// IsDirty refers to the normal fbo, not the picking fbo.
|
|
207
|
+
// Only mark it as not dirty if the normal fbo was updated.
|
|
208
|
+
terrainCover.isDirty = false;
|
|
209
|
+
}
|
|
204
210
|
}
|
|
205
211
|
} catch (err) {
|
|
206
212
|
terrainLayer.raiseError(err as Error, `Error rendering terrain cover ${terrainCover.id}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terrain-effect.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-effect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAMrE,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAW,MAAM,eAAe,CAAC;AAE7E,qCAAqC;AACrC,qBAAa,aAAc,YAAW,MAAM;IAC1C,EAAE,SAAoB;IACtB,KAAK,OAAQ;IACb,YAAY,UAAQ;IAEpB,0CAA0C;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,6CAA6C;IAC7C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,sCAAsC;IACtC,OAAO,CAAC,cAAc,CAAY;IAClC,wGAAwG;IACxG,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,kBAAkB,CAAsB;IAChD,wFAAwF;IACxF,OAAO,CAAC,aAAa,CAAwC;IAE7D,UAAU,CAAC,EAAE,EAAE,qBAAqB;IAkBpC,SAAS,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"terrain-effect.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-effect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAMrE,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAW,MAAM,eAAe,CAAC;AAE7E,qCAAqC;AACrC,qBAAa,aAAc,YAAW,MAAM;IAC1C,EAAE,SAAoB;IACtB,KAAK,OAAQ;IACb,YAAY,UAAQ;IAEpB,0CAA0C;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,6CAA6C;IAC7C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,sCAAsC;IACtC,OAAO,CAAC,cAAc,CAAY;IAClC,wGAAwG;IACxG,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,kBAAkB,CAAsB;IAChD,wFAAwF;IACxF,OAAO,CAAC,aAAa,CAAwC;IAE7D,UAAU,CAAC,EAAE,EAAE,qBAAqB;IAkBpC,SAAS,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA+ClE,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,qBAAqB;IAaxD,OAAO,IAAI,IAAI;IAiBf,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,mBAAmB;IAwC3B,OAAO,CAAC,mBAAmB;CAY5B"}
|