@deck.gl/extensions 8.9.0-alpha.4 → 8.9.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +3688 -14538
- package/dist/es5/brushing/brushing.js +0 -8
- package/dist/es5/brushing/brushing.js.map +1 -1
- package/dist/es5/clip/clip.js +5 -5
- package/dist/es5/clip/clip.js.map +1 -1
- package/dist/es5/collide/collide-effect.js +285 -0
- package/dist/es5/collide/collide-effect.js.map +1 -0
- package/dist/es5/collide/collide-pass.js +80 -0
- package/dist/es5/collide/collide-pass.js.map +1 -0
- package/dist/es5/collide/collide.js +116 -0
- package/dist/es5/collide/collide.js.map +1 -0
- package/dist/es5/collide/shader-module.js +39 -0
- package/dist/es5/collide/shader-module.js.map +1 -0
- package/dist/es5/common/projection-utils.js +164 -0
- package/dist/es5/common/projection-utils.js.map +1 -0
- package/dist/es5/data-filter/shader-module.js +1 -0
- package/dist/es5/data-filter/shader-module.js.map +1 -1
- package/dist/es5/fill-style/fill-style.js +16 -125
- package/dist/es5/fill-style/fill-style.js.map +1 -1
- package/dist/es5/fill-style/shaders.glsl.js +6 -8
- package/dist/es5/fill-style/shaders.glsl.js.map +1 -1
- package/dist/es5/fp64/project64.glsl.js +1 -1
- package/dist/es5/index.js +16 -0
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mask/mask-effect.js +280 -0
- package/dist/es5/mask/mask-effect.js.map +1 -0
- package/dist/es5/mask/mask-pass.js +106 -0
- package/dist/es5/mask/mask-pass.js.map +1 -0
- package/dist/es5/mask/mask.js +17 -4
- package/dist/es5/mask/mask.js.map +1 -1
- package/dist/es5/mask/shader-module.js +1 -1
- package/dist/es5/mask/shader-module.js.map +1 -1
- package/dist/es5/mask/utils.js +136 -0
- package/dist/es5/mask/utils.js.map +1 -0
- package/dist/es5/path-style/shaders.glsl.js +1 -1
- package/dist/es5/terrain/height-map-builder.js +116 -0
- package/dist/es5/terrain/height-map-builder.js.map +1 -0
- package/dist/es5/terrain/shader-module.js +84 -0
- package/dist/es5/terrain/shader-module.js.map +1 -0
- package/dist/es5/terrain/terrain-cover.js +259 -0
- package/dist/es5/terrain/terrain-cover.js.map +1 -0
- package/dist/es5/terrain/terrain-effect.js +337 -0
- package/dist/es5/terrain/terrain-effect.js.map +1 -0
- package/dist/es5/terrain/terrain-pass.js +122 -0
- package/dist/es5/terrain/terrain-pass.js.map +1 -0
- package/dist/es5/terrain/terrain-picking-pass.js +130 -0
- package/dist/es5/terrain/terrain-picking-pass.js.map +1 -0
- package/dist/es5/terrain/terrain.js +101 -0
- package/dist/es5/terrain/terrain.js.map +1 -0
- package/dist/es5/terrain/utils.js +32 -0
- package/dist/es5/terrain/utils.js.map +1 -0
- package/dist/es5/utils/debug.js +71 -0
- package/dist/es5/utils/debug.js.map +1 -0
- package/dist/esm/brushing/brushing.js +0 -7
- package/dist/esm/brushing/brushing.js.map +1 -1
- package/dist/esm/clip/clip.js +5 -4
- package/dist/esm/clip/clip.js.map +1 -1
- package/dist/esm/collide/collide-effect.js +250 -0
- package/dist/esm/collide/collide-effect.js.map +1 -0
- package/dist/esm/collide/collide-pass.js +30 -0
- package/dist/esm/collide/collide-pass.js.map +1 -0
- package/dist/esm/collide/collide.js +78 -0
- package/dist/esm/collide/collide.js.map +1 -0
- package/dist/esm/collide/shader-module.js +32 -0
- package/dist/esm/collide/shader-module.js.map +1 -0
- package/dist/esm/common/projection-utils.js +130 -0
- package/dist/esm/common/projection-utils.js.map +1 -0
- package/dist/esm/data-filter/shader-module.js +1 -0
- package/dist/esm/data-filter/shader-module.js.map +1 -1
- package/dist/esm/fill-style/fill-style.js +20 -72
- package/dist/esm/fill-style/fill-style.js.map +1 -1
- package/dist/esm/fill-style/shaders.glsl.js +5 -7
- package/dist/esm/fill-style/shaders.glsl.js.map +1 -1
- package/dist/esm/fp64/project64.glsl.js +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mask/mask-effect.js +233 -0
- package/dist/esm/mask/mask-effect.js.map +1 -0
- package/dist/esm/mask/mask-pass.js +62 -0
- package/dist/esm/mask/mask-pass.js.map +1 -0
- package/dist/esm/mask/mask.js +14 -3
- package/dist/esm/mask/mask.js.map +1 -1
- package/dist/esm/mask/shader-module.js +1 -1
- package/dist/esm/mask/shader-module.js.map +1 -1
- package/dist/esm/mask/utils.js +109 -0
- package/dist/esm/mask/utils.js.map +1 -0
- package/dist/esm/path-style/shaders.glsl.js +1 -1
- package/dist/esm/terrain/height-map-builder.js +92 -0
- package/dist/esm/terrain/height-map-builder.js.map +1 -0
- package/dist/esm/terrain/shader-module.js +73 -0
- package/dist/esm/terrain/shader-module.js.map +1 -0
- package/dist/esm/terrain/terrain-cover.js +219 -0
- package/dist/esm/terrain/terrain-cover.js.map +1 -0
- package/dist/esm/terrain/terrain-effect.js +231 -0
- package/dist/esm/terrain/terrain-effect.js.map +1 -0
- package/dist/esm/terrain/terrain-pass.js +69 -0
- package/dist/esm/terrain/terrain-pass.js.map +1 -0
- package/dist/esm/terrain/terrain-picking-pass.js +75 -0
- package/dist/esm/terrain/terrain-picking-pass.js.map +1 -0
- package/dist/esm/terrain/terrain.js +62 -0
- package/dist/esm/terrain/terrain.js.map +1 -0
- package/dist/esm/terrain/utils.js +21 -0
- package/dist/esm/terrain/utils.js.map +1 -0
- package/dist/esm/utils/debug.js +61 -0
- package/dist/esm/utils/debug.js.map +1 -0
- package/dist.min.js +1359 -1
- package/package.json +6 -4
- package/src/brushing/brushing.ts +0 -11
- package/src/clip/clip.ts +6 -5
- package/src/collide/collide-effect.ts +257 -0
- package/src/collide/collide-pass.ts +35 -0
- package/src/collide/collide.ts +79 -0
- package/src/collide/shader-module.ts +113 -0
- package/src/common/projection-utils.ts +187 -0
- package/src/data-filter/shader-module.ts +6 -0
- package/src/fill-style/fill-style.ts +15 -53
- package/src/fill-style/shaders.glsl.ts +6 -7
- package/src/index.ts +4 -0
- package/src/mask/mask-effect.ts +255 -0
- package/src/mask/mask-pass.ts +67 -0
- package/src/mask/mask.ts +17 -7
- package/src/mask/shader-module.ts +7 -1
- package/src/mask/utils.ts +148 -0
- package/src/terrain/height-map-builder.ts +120 -0
- package/src/terrain/shader-module.ts +161 -0
- package/src/terrain/terrain-cover.ts +225 -0
- package/src/terrain/terrain-effect.ts +223 -0
- package/src/terrain/terrain-pass.ts +86 -0
- package/src/terrain/terrain-picking-pass.ts +87 -0
- package/src/terrain/terrain.ts +74 -0
- package/src/terrain/utils.ts +29 -0
- package/src/utils/debug.ts +59 -0
- package/typed/brushing/brushing.d.ts +0 -1
- package/typed/brushing/brushing.d.ts.map +1 -1
- package/typed/brushing/brushing.js +83 -0
- package/typed/brushing/shader-module.js +116 -0
- package/typed/clip/clip.d.ts +1 -1
- package/typed/clip/clip.d.ts.map +1 -1
- package/typed/clip/clip.js +114 -0
- package/typed/collide/collide-effect.d.ts +28 -0
- package/typed/collide/collide-effect.d.ts.map +1 -0
- package/typed/collide/collide-pass.d.ts +14 -0
- package/typed/collide/collide-pass.d.ts.map +1 -0
- package/typed/collide/collide.d.ts +41 -0
- package/typed/collide/collide.d.ts.map +1 -0
- package/typed/collide/shader-module.d.ts +4 -0
- package/typed/collide/shader-module.d.ts.map +1 -0
- package/typed/common/projection-utils.d.ts +27 -0
- package/typed/common/projection-utils.d.ts.map +1 -0
- package/typed/data-filter/aggregator.js +98 -0
- package/typed/data-filter/data-filter.js +159 -0
- package/typed/data-filter/shader-module.d.ts.map +1 -1
- package/typed/data-filter/shader-module.js +152 -0
- package/typed/fill-style/fill-style.d.ts +14 -5
- package/typed/fill-style/fill-style.d.ts.map +1 -1
- package/typed/fill-style/fill-style.js +152 -0
- package/typed/fill-style/shaders.glsl.d.ts.map +1 -1
- package/typed/fill-style/shaders.glsl.js +95 -0
- package/typed/fp64/fp64.js +34 -0
- package/typed/fp64/project64.glsl.js +100 -0
- package/typed/fp64/project64.js +50 -0
- package/typed/index.d.ts +4 -0
- package/typed/index.d.ts.map +1 -1
- package/typed/index.js +9 -0
- package/typed/mask/mask-effect.d.ts +42 -0
- package/typed/mask/mask-effect.d.ts.map +1 -0
- package/typed/mask/mask-pass.d.ts +19 -0
- package/typed/mask/mask-pass.d.ts.map +1 -0
- package/typed/mask/mask.d.ts +9 -3
- package/typed/mask/mask.d.ts.map +1 -1
- package/typed/mask/mask.js +48 -0
- package/typed/mask/shader-module.d.ts.map +1 -1
- package/typed/mask/shader-module.js +73 -0
- package/typed/mask/utils.d.ts +13 -0
- package/typed/mask/utils.d.ts.map +1 -0
- package/typed/path-style/path-style.js +107 -0
- package/typed/path-style/shaders.glsl.js +93 -0
- package/typed/terrain/height-map-builder.d.ts +38 -0
- package/typed/terrain/height-map-builder.d.ts.map +1 -0
- package/typed/terrain/height-map.d.ts +27 -0
- package/typed/terrain/height-map.d.ts.map +1 -0
- package/typed/terrain/shader-module-offset.d.ts +4 -0
- package/typed/terrain/shader-module-offset.d.ts.map +1 -0
- package/typed/terrain/shader-module-source.d.ts +4 -0
- package/typed/terrain/shader-module-source.d.ts.map +1 -0
- package/typed/terrain/shader-module.d.ts +31 -0
- package/typed/terrain/shader-module.d.ts.map +1 -0
- package/typed/terrain/terrain-cover.d.ts +46 -0
- package/typed/terrain/terrain-cover.d.ts.map +1 -0
- package/typed/terrain/terrain-effect.d.ts +29 -0
- package/typed/terrain/terrain-effect.d.ts.map +1 -0
- package/typed/terrain/terrain-pass.d.ts +11 -0
- package/typed/terrain/terrain-pass.d.ts.map +1 -0
- package/typed/terrain/terrain-picking-pass.d.ts +19 -0
- package/typed/terrain/terrain-picking-pass.d.ts.map +1 -0
- package/typed/terrain/terrain.d.ts +21 -0
- package/typed/terrain/terrain.d.ts.map +1 -0
- package/typed/terrain/utils.d.ts +5 -0
- package/typed/terrain/utils.d.ts.map +1 -0
- package/typed/utils/debug.d.ts +6 -0
- package/typed/utils/debug.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/terrain/terrain-picking-pass.ts"],"names":["_PickLayersPass","PickLayersPass","withParameters","TerrainPickingPass","getRenderableLayers","viewport","opts","layers","result","drawParameters","_resetColorEncoder","pickZ","drawParamsByIndex","_getDrawLayerParams","i","length","layer","isComposite","shouldDrawLayer","push","id","layerParameters","renderTerrainCover","terrainCover","target","getPickingFramebuffer","renderViewport","filterLayers","terrainLayer","targetLayer","props","pickable","unshift","resize","gl","depthTest","render","pickingFBO","pass","effects","viewports","cullRect","undefined","deviceRect","getLayerParameters","layerIndex","parameters","blend"],"mappings":";AAAA,SAIEA,eAAe,IAAIC,cAJrB,QAKO,eALP;AAMA,SAAQC,cAAR,QAA6B,eAA7B;AAQA,OAAO,MAAMC,kBAAN,SAAiCF,cAAjC,CAAgD;AAAA;AAAA;;AAAA,4CAOf,EAPe;AAAA;;AASrDG,EAAAA,mBAAmB,CAACC,QAAD,EAAqBC,IAArB,EAAqE;AACtF,UAAM;AAACC,MAAAA;AAAD,QAAWD,IAAjB;AACA,UAAME,MAAe,GAAG,EAAxB;AACA,SAAKC,cAAL,GAAsB,EAAtB;;AACA,SAAKC,kBAAL,CAAwBJ,IAAI,CAACK,KAA7B;;AACA,UAAMC,iBAAiB,GAAG,KAAKC,mBAAL,CAAyBR,QAAzB,EAAmCC,IAAnC,CAA1B;;AACA,SAAK,IAAIQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,MAAM,CAACQ,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;AACtC,YAAME,KAAK,GAAGT,MAAM,CAACO,CAAD,CAApB;;AACA,UAAI,CAACE,KAAK,CAACC,WAAP,IAAsBL,iBAAiB,CAACE,CAAD,CAAjB,CAAqBI,eAA/C,EAAgE;AAC9DV,QAAAA,MAAM,CAACW,IAAP,CAAYH,KAAZ;AACA,aAAKP,cAAL,CAAoBO,KAAK,CAACI,EAA1B,IAAgCR,iBAAiB,CAACE,CAAD,CAAjB,CAAqBO,eAArD;AACD;AACF;;AAED,WAAOb,MAAP;AACD;;AAEDc,EAAAA,kBAAkB,CAACC,YAAD,EAA6BjB,IAA7B,EAA6E;AAE7F,UAAMkB,MAAM,GAAGD,YAAY,CAACE,qBAAb,EAAf;AACA,UAAMpB,QAAQ,GAAGkB,YAAY,CAACG,cAA9B;;AAEA,QAAI,CAACF,MAAD,IAAW,CAACnB,QAAhB,EAA0B;AACxB;AACD;;AAED,UAAME,MAAM,GAAGgB,YAAY,CAACI,YAAb,CAA0BrB,IAAI,CAACC,MAA/B,CAAf;AACA,UAAMqB,YAAY,GAAGL,YAAY,CAACM,WAAlC;;AACA,QAAID,YAAY,CAACE,KAAb,CAAmBC,QAAvB,EAAiC;AAC/BxB,MAAAA,MAAM,CAACyB,OAAP,CAAeJ,YAAf;AACD;;AACDJ,IAAAA,MAAM,CAACS,MAAP,CAAc5B,QAAd;AAEAH,IAAAA,cAAc,CACZ,KAAKgC,EADO,EAEZ;AACEC,MAAAA,SAAS,EAAE;AADb,KAFY,EAKZ,MACE,KAAKC,MAAL,CAAY,EACV,GAAG9B,IADO;AAEV+B,MAAAA,UAAU,EAAEb,MAFF;AAGVc,MAAAA,IAAI,kCAA2Bf,YAAY,CAACH,EAAxC,CAHM;AAIVb,MAAAA,MAJU;AAKVgC,MAAAA,OAAO,EAAE,EALC;AAMVC,MAAAA,SAAS,EAAE,CAACnC,QAAD,CAND;AASVoC,MAAAA,QAAQ,EAAEC,SATA;AAUVC,MAAAA,UAAU,EAAEtC,QAVF;AAWVM,MAAAA,KAAK,EAAE;AAXG,KAAZ,CANU,CAAd;AAoBD;;AAESiC,EAAAA,kBAAkB,CAAC5B,KAAD,EAAe6B,UAAf,EAAmCxC,QAAnC,EAA4D;AACtF,QAAI,KAAKI,cAAL,CAAoBO,KAAK,CAACI,EAA1B,CAAJ,EAAmC;AACjC,aAAO,KAAKX,cAAL,CAAoBO,KAAK,CAACI,EAA1B,CAAP;AACD;;AACD,UAAM0B,UAAU,GAAG,MAAMF,kBAAN,CAAyB5B,KAAzB,EAAgC6B,UAAhC,EAA4CxC,QAA5C,CAAnB;AACAyC,IAAAA,UAAU,CAACC,KAAX,GAAmB,IAAnB;AACA,WAAOD,UAAP;AACD;;AAvEoD","sourcesContent":["import {\n Layer,\n Viewport,\n LayersPassRenderOptions,\n _PickLayersPass as PickLayersPass\n} from '@deck.gl/core';\nimport {withParameters} from '@luma.gl/core';\nimport type {TerrainCover} from './terrain-cover';\n\nexport type TerrainPickingPassRenderOptions = LayersPassRenderOptions & {\n pickZ: boolean;\n};\n\n/** Renders textures used by the TerrainEffect picking pass */\nexport class TerrainPickingPass extends PickLayersPass {\n /** Save layer index for use when drawing to terrain cover.\n * When a terrain cover's picking buffer is rendered,\n * we need to make sure each layer receives a consistent index (encoded in the alpha channel)\n * so that a picked color can be decoded back to the correct layer.\n * Updated in getRenderableLayers which is called in TerrainEffect.preRender\n */\n drawParameters: Record<string, any> = {};\n\n getRenderableLayers(viewport: Viewport, opts: TerrainPickingPassRenderOptions): Layer[] {\n const {layers} = opts;\n const result: Layer[] = [];\n this.drawParameters = {};\n this._resetColorEncoder(opts.pickZ);\n const drawParamsByIndex = this._getDrawLayerParams(viewport, opts);\n for (let i = 0; i < layers.length; i++) {\n const layer = layers[i];\n if (!layer.isComposite && drawParamsByIndex[i].shouldDrawLayer) {\n result.push(layer);\n this.drawParameters[layer.id] = drawParamsByIndex[i].layerParameters;\n }\n }\n\n return result;\n }\n\n renderTerrainCover(terrainCover: TerrainCover, opts: Partial<TerrainPickingPassRenderOptions>) {\n // console.log('Updating terrain cover for picking ' + terrainCover.id)\n const target = terrainCover.getPickingFramebuffer();\n const viewport = terrainCover.renderViewport;\n\n if (!target || !viewport) {\n return;\n }\n\n const layers = terrainCover.filterLayers(opts.layers!);\n const terrainLayer = terrainCover.targetLayer;\n if (terrainLayer.props.pickable) {\n layers.unshift(terrainLayer);\n }\n target.resize(viewport);\n\n withParameters(\n this.gl,\n {\n depthTest: false\n },\n () =>\n this.render({\n ...opts,\n pickingFBO: target,\n pass: `terrain-cover-picking-${terrainCover.id}`,\n layers,\n effects: [],\n viewports: [viewport],\n // Disable the default culling because TileLayer would cull sublayers based on the screen viewport,\n // not the viewport of the terrain cover. Culling is already done by `terrainCover.filterLayers`\n cullRect: undefined,\n deviceRect: viewport,\n pickZ: false\n })\n );\n }\n\n protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any {\n if (this.drawParameters[layer.id]) {\n return this.drawParameters[layer.id];\n }\n const parameters = super.getLayerParameters(layer, layerIndex, viewport);\n parameters.blend = true;\n return parameters;\n }\n}\n"],"file":"terrain-picking-pass.js"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { LayerExtension } from '@deck.gl/core';
|
|
3
|
+
import { TerrainEffect } from './terrain-effect';
|
|
4
|
+
import { terrainModule } from './shader-module';
|
|
5
|
+
const defaultProps = {
|
|
6
|
+
terrainFittingMode: undefined
|
|
7
|
+
};
|
|
8
|
+
export default class TerrainExtension extends LayerExtension {
|
|
9
|
+
getShaders() {
|
|
10
|
+
return {
|
|
11
|
+
modules: [terrainModule]
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
initializeState() {
|
|
16
|
+
var _this$context$deck;
|
|
17
|
+
|
|
18
|
+
(_this$context$deck = this.context.deck) === null || _this$context$deck === void 0 ? void 0 : _this$context$deck._addDefaultEffect(new TerrainEffect());
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
updateState(params) {
|
|
22
|
+
const {
|
|
23
|
+
props,
|
|
24
|
+
oldProps
|
|
25
|
+
} = params;
|
|
26
|
+
|
|
27
|
+
if (this.state.terrainFittingMode && props.terrainFittingMode === oldProps.terrainFittingMode && props.extruded === oldProps.extruded) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let {
|
|
32
|
+
terrainFittingMode
|
|
33
|
+
} = props;
|
|
34
|
+
|
|
35
|
+
if (!terrainFittingMode) {
|
|
36
|
+
var _this$getAttributeMan;
|
|
37
|
+
|
|
38
|
+
const is3d = this.props.extruded;
|
|
39
|
+
const attributes = (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 ? void 0 : _this$getAttributeMan.attributes;
|
|
40
|
+
const hasAnchor = attributes && 'instancePositions' in attributes;
|
|
41
|
+
terrainFittingMode = is3d || hasAnchor ? 'offset' : 'drape';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
this.setState({
|
|
45
|
+
terrainFittingMode
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
onNeedsRedraw() {
|
|
50
|
+
const state = this.state;
|
|
51
|
+
|
|
52
|
+
if (state.terrainFittingMode === 'drape') {
|
|
53
|
+
state.terrainCoverNeedsRedraw = true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
_defineProperty(TerrainExtension, "defaultProps", defaultProps);
|
|
60
|
+
|
|
61
|
+
_defineProperty(TerrainExtension, "extensionName", 'TerrainExtension');
|
|
62
|
+
//# sourceMappingURL=terrain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/terrain/terrain.ts"],"names":["LayerExtension","TerrainEffect","terrainModule","defaultProps","terrainFittingMode","undefined","TerrainExtension","getShaders","modules","initializeState","context","deck","_addDefaultEffect","updateState","params","props","oldProps","state","extruded","is3d","attributes","getAttributeManager","hasAnchor","setState","onNeedsRedraw","terrainCoverNeedsRedraw"],"mappings":";AAAA,SAAQA,cAAR,QAA+C,eAA/C;AACA,SAAQC,aAAR,QAA4B,kBAA5B;AACA,SAAQC,aAAR,QAA4B,iBAA5B;AAIA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,kBAAkB,EAAEC;AADD,CAArB;AAoBA,eAAe,MAAMC,gBAAN,SAA+BN,cAA/B,CAA8C;AAI3DO,EAAAA,UAAU,GAA0C;AAClD,WAAO;AACLC,MAAAA,OAAO,EAAE,CAACN,aAAD;AADJ,KAAP;AAGD;;AAEDO,EAAAA,eAAe,GAAqC;AAAA;;AAClD,+BAAKC,OAAL,CAAaC,IAAb,0EAAmBC,iBAAnB,CAAqC,IAAIX,aAAJ,EAArC;AACD;;AAEDY,EAAAA,WAAW,CAETC,MAFS,EAGT;AACA,UAAM;AAACC,MAAAA,KAAD;AAAQC,MAAAA;AAAR,QAAoBF,MAA1B;;AAEA,QACE,KAAKG,KAAL,CAAWb,kBAAX,IACAW,KAAK,CAACX,kBAAN,KAA6BY,QAAQ,CAACZ,kBADtC,IAGAW,KAAK,CAACG,QAAN,KAAmBF,QAAQ,CAACE,QAJ9B,EAKE;AACA;AACD;;AAED,QAAI;AAACd,MAAAA;AAAD,QAAuBW,KAA3B;;AACA,QAAI,CAACX,kBAAL,EAAyB;AAAA;;AAGvB,YAAMe,IAAI,GAAG,KAAKJ,KAAL,CAAWG,QAAxB;AACA,YAAME,UAAU,4BAAG,KAAKC,mBAAL,EAAH,0DAAG,sBAA4BD,UAA/C;AACA,YAAME,SAAS,GAAGF,UAAU,IAAI,uBAAuBA,UAAvD;AACAhB,MAAAA,kBAAkB,GAAGe,IAAI,IAAIG,SAAR,GAAoB,QAApB,GAA+B,OAApD;AACD;;AACD,SAAKC,QAAL,CAAc;AAACnB,MAAAA;AAAD,KAAd;AACD;;AAEDoB,EAAAA,aAAa,GAAwB;AACnC,UAAMP,KAAK,GAAG,KAAKA,KAAnB;;AACA,QAAIA,KAAK,CAACb,kBAAN,KAA6B,OAAjC,EAA0C;AACxCa,MAAAA,KAAK,CAACQ,uBAAN,GAAgC,IAAhC;AACD;AACF;;AA9C0D;;gBAAxCnB,gB,kBACGH,Y;;gBADHG,gB,mBAEI,kB","sourcesContent":["import {LayerExtension, UpdateParameters} from '@deck.gl/core';\nimport {TerrainEffect} from './terrain-effect';\nimport {terrainModule} from './shader-module';\n\nimport type {Layer} from '@deck.gl/core';\n\nconst defaultProps = {\n terrainFittingMode: undefined\n};\n\nexport type TerrainExtensionProps = {\n /**\n * controls whether an object is drawn over the terrain surface by its anchor (usually defined by an accessor called `getPosition`, e.g. icon, scatterplot) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n terrainFittingMode?: 'offset' | 'drape';\n};\n\ntype TerrainExtensionState = {\n /** Resolved fitting mode */\n terrainFittingMode: 'offset' | 'drape';\n /** Set when a layer is flagged as needs redraw */\n terrainCoverNeedsRedraw: boolean;\n};\n\n/** Allows layers to show/hide objects by a geofence. */\nexport default class TerrainExtension extends LayerExtension {\n static defaultProps = defaultProps;\n static extensionName = 'TerrainExtension';\n\n getShaders(this: Layer<TerrainExtensionProps>): any {\n return {\n modules: [terrainModule]\n };\n }\n\n initializeState(this: Layer<TerrainExtensionProps>) {\n this.context.deck?._addDefaultEffect(new TerrainEffect());\n }\n\n updateState(\n this: Layer<TerrainExtensionProps>,\n params: UpdateParameters<Layer<TerrainExtensionProps>>\n ) {\n const {props, oldProps} = params;\n\n if (\n this.state.terrainFittingMode &&\n props.terrainFittingMode === oldProps.terrainFittingMode &&\n // @ts-ignore `extruded` may not exist in props\n props.extruded === oldProps.extruded\n ) {\n return;\n }\n\n let {terrainFittingMode} = props;\n if (!terrainFittingMode) {\n // props.extruded is used as an indication that the layer is 2.5D\n // @ts-ignore `extruded` may not exist in props\n const is3d = this.props.extruded as boolean;\n const attributes = this.getAttributeManager()?.attributes;\n const hasAnchor = attributes && 'instancePositions' in attributes;\n terrainFittingMode = is3d || hasAnchor ? 'offset' : 'drape';\n }\n this.setState({terrainFittingMode});\n }\n\n onNeedsRedraw(this: Layer<{}>): void {\n const state = this.state as TerrainExtensionState;\n if (state.terrainFittingMode === 'drape') {\n state.terrainCoverNeedsRedraw = true;\n }\n }\n}\n"],"file":"terrain.js"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Framebuffer, Texture2D, isWebGL2 } from '@luma.gl/core';
|
|
2
|
+
export function createRenderTarget(gl, opts) {
|
|
3
|
+
return new Framebuffer(gl, {
|
|
4
|
+
id: opts.id,
|
|
5
|
+
attachments: {
|
|
6
|
+
[36064]: new Texture2D(gl, { ...(opts.float && {
|
|
7
|
+
format: isWebGL2(gl) ? 34836 : 6408,
|
|
8
|
+
type: 5126
|
|
9
|
+
}),
|
|
10
|
+
mipmaps: false,
|
|
11
|
+
parameters: {
|
|
12
|
+
[10241]: 9729,
|
|
13
|
+
[10240]: 9729,
|
|
14
|
+
[10242]: 33071,
|
|
15
|
+
[10243]: 33071
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/terrain/utils.ts"],"names":["Framebuffer","Texture2D","isWebGL2","createRenderTarget","gl","opts","id","attachments","float","format","type","mipmaps","parameters"],"mappings":"AAAA,SAAQA,WAAR,EAAqBC,SAArB,EAAgCC,QAAhC,QAA+C,eAA/C;AAGA,OAAO,SAASC,kBAAT,CACLC,EADK,EAELC,IAFK,EAML;AACA,SAAO,IAAIL,WAAJ,CAAgBI,EAAhB,EAAoB;AACzBE,IAAAA,EAAE,EAAED,IAAI,CAACC,EADgB;AAEzBC,IAAAA,WAAW,EAAE;AACX,eAAwB,IAAIN,SAAJ,CAAcG,EAAd,EAAkB,EACxC,IAAIC,IAAI,CAACG,KAAL,IAAc;AAChBC,UAAAA,MAAM,EAAEP,QAAQ,CAACE,EAAD,CAAR,eADQ;AAEhBM,UAAAA,IAAI;AAFY,SAAlB,CADwC;AAKxCC,QAAAA,OAAO,EAAE,KAL+B;AAMxCC,QAAAA,UAAU,EAAE;AACV,uBADU;AAEV,uBAFU;AAGV,wBAHU;AAIV;AAJU;AAN4B,OAAlB;AADb;AAFY,GAApB,CAAP;AAkBD","sourcesContent":["import {Framebuffer, Texture2D, isWebGL2} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nexport function createRenderTarget(\n gl: WebGLRenderingContext,\n opts: {\n id: string;\n float?: boolean;\n }\n) {\n return new Framebuffer(gl, {\n id: opts.id,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: new Texture2D(gl, {\n ...(opts.float && {\n format: isWebGL2(gl) ? GL.RGBA32F : GL.RGBA,\n type: GL.FLOAT\n }),\n mipmaps: false,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.LINEAR,\n [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n })\n }\n });\n}\n"],"file":"utils.js"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readPixelsToArray } from '@luma.gl/core';
|
|
2
|
+
export const debugFBO = function (fbo, {
|
|
3
|
+
minimap,
|
|
4
|
+
opaque
|
|
5
|
+
} = {}) {
|
|
6
|
+
const color = readPixelsToArray(fbo);
|
|
7
|
+
let canvas = document.getElementById('fbo-canvas');
|
|
8
|
+
const canvasHeight = (minimap ? 2 : 1) * fbo.height;
|
|
9
|
+
|
|
10
|
+
if (!canvas) {
|
|
11
|
+
canvas = document.createElement('canvas');
|
|
12
|
+
canvas.id = 'fbo-canvas';
|
|
13
|
+
canvas.style.zIndex = '100';
|
|
14
|
+
canvas.style.position = 'absolute';
|
|
15
|
+
canvas.style.top = '0';
|
|
16
|
+
canvas.style.right = '0';
|
|
17
|
+
canvas.style.border = 'blue 1px solid';
|
|
18
|
+
canvas.style.transform = 'scaleY(-1)';
|
|
19
|
+
document.body.appendChild(canvas);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (canvas.width !== fbo.width || canvas.height !== canvasHeight) {
|
|
23
|
+
canvas.width = fbo.width;
|
|
24
|
+
canvas.height = canvasHeight;
|
|
25
|
+
canvas.style.width = '400px';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const ctx = canvas.getContext('2d');
|
|
29
|
+
const imageData = ctx.createImageData(canvas.width, canvas.height);
|
|
30
|
+
|
|
31
|
+
if (minimap) {
|
|
32
|
+
const zoom = 8;
|
|
33
|
+
const {
|
|
34
|
+
width,
|
|
35
|
+
height
|
|
36
|
+
} = canvas;
|
|
37
|
+
|
|
38
|
+
for (let y = 0; y < height; y++) {
|
|
39
|
+
for (let x = 0; x < width; x++) {
|
|
40
|
+
const d = 4 * (x + y * width);
|
|
41
|
+
const s = 4 * (Math.floor(x / zoom) + Math.floor(y / zoom) * width);
|
|
42
|
+
imageData.data[d + 0] = color[s + 0];
|
|
43
|
+
imageData.data[d + 1] = color[s + 1];
|
|
44
|
+
imageData.data[d + 2] = color[s + 2];
|
|
45
|
+
imageData.data[d + 3] = opaque ? 255 : color[s + 3];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const offset = minimap ? color.length : 0;
|
|
51
|
+
|
|
52
|
+
for (let i = 0; i < color.length; i += 4) {
|
|
53
|
+
imageData.data[offset + i + 0] = color[i + 0];
|
|
54
|
+
imageData.data[offset + i + 1] = color[i + 1];
|
|
55
|
+
imageData.data[offset + i + 2] = color[i + 2];
|
|
56
|
+
imageData.data[offset + i + 3] = opaque ? 255 : color[i + 3];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
ctx.putImageData(imageData, 0, 0);
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/debug.ts"],"names":["readPixelsToArray","debugFBO","fbo","minimap","opaque","color","canvas","document","getElementById","canvasHeight","height","createElement","id","style","zIndex","position","top","right","border","transform","body","appendChild","width","ctx","getContext","imageData","createImageData","zoom","y","x","d","s","Math","floor","data","offset","length","i","putImageData"],"mappings":"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","sourcesContent":["/* global document */\n\nimport {Framebuffer, readPixelsToArray} from '@luma.gl/core';\n\n/** Debug utility to draw FBO contents onto screen */\n// eslint-disable-next-line\nexport const debugFBO = function (\n fbo: Framebuffer,\n {minimap, opaque}: {minimap?: boolean; opaque?: boolean} = {}\n) {\n const color = readPixelsToArray(fbo);\n let canvas = document.getElementById('fbo-canvas') as HTMLCanvasElement;\n const canvasHeight = (minimap ? 2 : 1) * fbo.height;\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'fbo-canvas';\n canvas.style.zIndex = '100';\n canvas.style.position = 'absolute';\n canvas.style.top = '0';\n canvas.style.right = '0';\n canvas.style.border = 'blue 1px solid';\n canvas.style.transform = 'scaleY(-1)';\n document.body.appendChild(canvas);\n }\n if (canvas.width !== fbo.width || canvas.height !== canvasHeight) {\n canvas.width = fbo.width;\n canvas.height = canvasHeight;\n canvas.style.width = '400px';\n }\n const ctx = canvas.getContext('2d')!;\n const imageData = ctx.createImageData(canvas.width, canvas.height);\n\n // Minimap\n if (minimap) {\n const zoom = 8; // Zoom factor for minimap\n const {width, height} = canvas;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const d = 4 * (x + y * width); // destination pixel\n const s = 4 * (Math.floor(x / zoom) + Math.floor(y / zoom) * width); // source\n imageData.data[d + 0] = color[s + 0];\n imageData.data[d + 1] = color[s + 1];\n imageData.data[d + 2] = color[s + 2];\n imageData.data[d + 3] = opaque ? 255 : color[s + 3];\n }\n }\n }\n\n // Full map\n const offset = minimap ? color.length : 0;\n for (let i = 0; i < color.length; i += 4) {\n imageData.data[offset + i + 0] = color[i + 0];\n imageData.data[offset + i + 1] = color[i + 1];\n imageData.data[offset + i + 2] = color[i + 2];\n imageData.data[offset + i + 3] = opaque ? 255 : color[i + 3];\n }\n\n ctx.putImageData(imageData, 0, 0);\n};\n"],"file":"debug.js"}
|