@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.
Files changed (201) hide show
  1. package/dist/dist.dev.js +3688 -14538
  2. package/dist/es5/brushing/brushing.js +0 -8
  3. package/dist/es5/brushing/brushing.js.map +1 -1
  4. package/dist/es5/clip/clip.js +5 -5
  5. package/dist/es5/clip/clip.js.map +1 -1
  6. package/dist/es5/collide/collide-effect.js +285 -0
  7. package/dist/es5/collide/collide-effect.js.map +1 -0
  8. package/dist/es5/collide/collide-pass.js +80 -0
  9. package/dist/es5/collide/collide-pass.js.map +1 -0
  10. package/dist/es5/collide/collide.js +116 -0
  11. package/dist/es5/collide/collide.js.map +1 -0
  12. package/dist/es5/collide/shader-module.js +39 -0
  13. package/dist/es5/collide/shader-module.js.map +1 -0
  14. package/dist/es5/common/projection-utils.js +164 -0
  15. package/dist/es5/common/projection-utils.js.map +1 -0
  16. package/dist/es5/data-filter/shader-module.js +1 -0
  17. package/dist/es5/data-filter/shader-module.js.map +1 -1
  18. package/dist/es5/fill-style/fill-style.js +16 -125
  19. package/dist/es5/fill-style/fill-style.js.map +1 -1
  20. package/dist/es5/fill-style/shaders.glsl.js +6 -8
  21. package/dist/es5/fill-style/shaders.glsl.js.map +1 -1
  22. package/dist/es5/fp64/project64.glsl.js +1 -1
  23. package/dist/es5/index.js +16 -0
  24. package/dist/es5/index.js.map +1 -1
  25. package/dist/es5/mask/mask-effect.js +280 -0
  26. package/dist/es5/mask/mask-effect.js.map +1 -0
  27. package/dist/es5/mask/mask-pass.js +106 -0
  28. package/dist/es5/mask/mask-pass.js.map +1 -0
  29. package/dist/es5/mask/mask.js +17 -4
  30. package/dist/es5/mask/mask.js.map +1 -1
  31. package/dist/es5/mask/shader-module.js +1 -1
  32. package/dist/es5/mask/shader-module.js.map +1 -1
  33. package/dist/es5/mask/utils.js +136 -0
  34. package/dist/es5/mask/utils.js.map +1 -0
  35. package/dist/es5/path-style/shaders.glsl.js +1 -1
  36. package/dist/es5/terrain/height-map-builder.js +116 -0
  37. package/dist/es5/terrain/height-map-builder.js.map +1 -0
  38. package/dist/es5/terrain/shader-module.js +84 -0
  39. package/dist/es5/terrain/shader-module.js.map +1 -0
  40. package/dist/es5/terrain/terrain-cover.js +259 -0
  41. package/dist/es5/terrain/terrain-cover.js.map +1 -0
  42. package/dist/es5/terrain/terrain-effect.js +337 -0
  43. package/dist/es5/terrain/terrain-effect.js.map +1 -0
  44. package/dist/es5/terrain/terrain-pass.js +122 -0
  45. package/dist/es5/terrain/terrain-pass.js.map +1 -0
  46. package/dist/es5/terrain/terrain-picking-pass.js +130 -0
  47. package/dist/es5/terrain/terrain-picking-pass.js.map +1 -0
  48. package/dist/es5/terrain/terrain.js +101 -0
  49. package/dist/es5/terrain/terrain.js.map +1 -0
  50. package/dist/es5/terrain/utils.js +32 -0
  51. package/dist/es5/terrain/utils.js.map +1 -0
  52. package/dist/es5/utils/debug.js +71 -0
  53. package/dist/es5/utils/debug.js.map +1 -0
  54. package/dist/esm/brushing/brushing.js +0 -7
  55. package/dist/esm/brushing/brushing.js.map +1 -1
  56. package/dist/esm/clip/clip.js +5 -4
  57. package/dist/esm/clip/clip.js.map +1 -1
  58. package/dist/esm/collide/collide-effect.js +250 -0
  59. package/dist/esm/collide/collide-effect.js.map +1 -0
  60. package/dist/esm/collide/collide-pass.js +30 -0
  61. package/dist/esm/collide/collide-pass.js.map +1 -0
  62. package/dist/esm/collide/collide.js +78 -0
  63. package/dist/esm/collide/collide.js.map +1 -0
  64. package/dist/esm/collide/shader-module.js +32 -0
  65. package/dist/esm/collide/shader-module.js.map +1 -0
  66. package/dist/esm/common/projection-utils.js +130 -0
  67. package/dist/esm/common/projection-utils.js.map +1 -0
  68. package/dist/esm/data-filter/shader-module.js +1 -0
  69. package/dist/esm/data-filter/shader-module.js.map +1 -1
  70. package/dist/esm/fill-style/fill-style.js +20 -72
  71. package/dist/esm/fill-style/fill-style.js.map +1 -1
  72. package/dist/esm/fill-style/shaders.glsl.js +5 -7
  73. package/dist/esm/fill-style/shaders.glsl.js.map +1 -1
  74. package/dist/esm/fp64/project64.glsl.js +1 -1
  75. package/dist/esm/index.js +2 -0
  76. package/dist/esm/index.js.map +1 -1
  77. package/dist/esm/mask/mask-effect.js +233 -0
  78. package/dist/esm/mask/mask-effect.js.map +1 -0
  79. package/dist/esm/mask/mask-pass.js +62 -0
  80. package/dist/esm/mask/mask-pass.js.map +1 -0
  81. package/dist/esm/mask/mask.js +14 -3
  82. package/dist/esm/mask/mask.js.map +1 -1
  83. package/dist/esm/mask/shader-module.js +1 -1
  84. package/dist/esm/mask/shader-module.js.map +1 -1
  85. package/dist/esm/mask/utils.js +109 -0
  86. package/dist/esm/mask/utils.js.map +1 -0
  87. package/dist/esm/path-style/shaders.glsl.js +1 -1
  88. package/dist/esm/terrain/height-map-builder.js +92 -0
  89. package/dist/esm/terrain/height-map-builder.js.map +1 -0
  90. package/dist/esm/terrain/shader-module.js +73 -0
  91. package/dist/esm/terrain/shader-module.js.map +1 -0
  92. package/dist/esm/terrain/terrain-cover.js +219 -0
  93. package/dist/esm/terrain/terrain-cover.js.map +1 -0
  94. package/dist/esm/terrain/terrain-effect.js +231 -0
  95. package/dist/esm/terrain/terrain-effect.js.map +1 -0
  96. package/dist/esm/terrain/terrain-pass.js +69 -0
  97. package/dist/esm/terrain/terrain-pass.js.map +1 -0
  98. package/dist/esm/terrain/terrain-picking-pass.js +75 -0
  99. package/dist/esm/terrain/terrain-picking-pass.js.map +1 -0
  100. package/dist/esm/terrain/terrain.js +62 -0
  101. package/dist/esm/terrain/terrain.js.map +1 -0
  102. package/dist/esm/terrain/utils.js +21 -0
  103. package/dist/esm/terrain/utils.js.map +1 -0
  104. package/dist/esm/utils/debug.js +61 -0
  105. package/dist/esm/utils/debug.js.map +1 -0
  106. package/dist.min.js +1359 -1
  107. package/package.json +6 -4
  108. package/src/brushing/brushing.ts +0 -11
  109. package/src/clip/clip.ts +6 -5
  110. package/src/collide/collide-effect.ts +257 -0
  111. package/src/collide/collide-pass.ts +35 -0
  112. package/src/collide/collide.ts +79 -0
  113. package/src/collide/shader-module.ts +113 -0
  114. package/src/common/projection-utils.ts +187 -0
  115. package/src/data-filter/shader-module.ts +6 -0
  116. package/src/fill-style/fill-style.ts +15 -53
  117. package/src/fill-style/shaders.glsl.ts +6 -7
  118. package/src/index.ts +4 -0
  119. package/src/mask/mask-effect.ts +255 -0
  120. package/src/mask/mask-pass.ts +67 -0
  121. package/src/mask/mask.ts +17 -7
  122. package/src/mask/shader-module.ts +7 -1
  123. package/src/mask/utils.ts +148 -0
  124. package/src/terrain/height-map-builder.ts +120 -0
  125. package/src/terrain/shader-module.ts +161 -0
  126. package/src/terrain/terrain-cover.ts +225 -0
  127. package/src/terrain/terrain-effect.ts +223 -0
  128. package/src/terrain/terrain-pass.ts +86 -0
  129. package/src/terrain/terrain-picking-pass.ts +87 -0
  130. package/src/terrain/terrain.ts +74 -0
  131. package/src/terrain/utils.ts +29 -0
  132. package/src/utils/debug.ts +59 -0
  133. package/typed/brushing/brushing.d.ts +0 -1
  134. package/typed/brushing/brushing.d.ts.map +1 -1
  135. package/typed/brushing/brushing.js +83 -0
  136. package/typed/brushing/shader-module.js +116 -0
  137. package/typed/clip/clip.d.ts +1 -1
  138. package/typed/clip/clip.d.ts.map +1 -1
  139. package/typed/clip/clip.js +114 -0
  140. package/typed/collide/collide-effect.d.ts +28 -0
  141. package/typed/collide/collide-effect.d.ts.map +1 -0
  142. package/typed/collide/collide-pass.d.ts +14 -0
  143. package/typed/collide/collide-pass.d.ts.map +1 -0
  144. package/typed/collide/collide.d.ts +41 -0
  145. package/typed/collide/collide.d.ts.map +1 -0
  146. package/typed/collide/shader-module.d.ts +4 -0
  147. package/typed/collide/shader-module.d.ts.map +1 -0
  148. package/typed/common/projection-utils.d.ts +27 -0
  149. package/typed/common/projection-utils.d.ts.map +1 -0
  150. package/typed/data-filter/aggregator.js +98 -0
  151. package/typed/data-filter/data-filter.js +159 -0
  152. package/typed/data-filter/shader-module.d.ts.map +1 -1
  153. package/typed/data-filter/shader-module.js +152 -0
  154. package/typed/fill-style/fill-style.d.ts +14 -5
  155. package/typed/fill-style/fill-style.d.ts.map +1 -1
  156. package/typed/fill-style/fill-style.js +152 -0
  157. package/typed/fill-style/shaders.glsl.d.ts.map +1 -1
  158. package/typed/fill-style/shaders.glsl.js +95 -0
  159. package/typed/fp64/fp64.js +34 -0
  160. package/typed/fp64/project64.glsl.js +100 -0
  161. package/typed/fp64/project64.js +50 -0
  162. package/typed/index.d.ts +4 -0
  163. package/typed/index.d.ts.map +1 -1
  164. package/typed/index.js +9 -0
  165. package/typed/mask/mask-effect.d.ts +42 -0
  166. package/typed/mask/mask-effect.d.ts.map +1 -0
  167. package/typed/mask/mask-pass.d.ts +19 -0
  168. package/typed/mask/mask-pass.d.ts.map +1 -0
  169. package/typed/mask/mask.d.ts +9 -3
  170. package/typed/mask/mask.d.ts.map +1 -1
  171. package/typed/mask/mask.js +48 -0
  172. package/typed/mask/shader-module.d.ts.map +1 -1
  173. package/typed/mask/shader-module.js +73 -0
  174. package/typed/mask/utils.d.ts +13 -0
  175. package/typed/mask/utils.d.ts.map +1 -0
  176. package/typed/path-style/path-style.js +107 -0
  177. package/typed/path-style/shaders.glsl.js +93 -0
  178. package/typed/terrain/height-map-builder.d.ts +38 -0
  179. package/typed/terrain/height-map-builder.d.ts.map +1 -0
  180. package/typed/terrain/height-map.d.ts +27 -0
  181. package/typed/terrain/height-map.d.ts.map +1 -0
  182. package/typed/terrain/shader-module-offset.d.ts +4 -0
  183. package/typed/terrain/shader-module-offset.d.ts.map +1 -0
  184. package/typed/terrain/shader-module-source.d.ts +4 -0
  185. package/typed/terrain/shader-module-source.d.ts.map +1 -0
  186. package/typed/terrain/shader-module.d.ts +31 -0
  187. package/typed/terrain/shader-module.d.ts.map +1 -0
  188. package/typed/terrain/terrain-cover.d.ts +46 -0
  189. package/typed/terrain/terrain-cover.d.ts.map +1 -0
  190. package/typed/terrain/terrain-effect.d.ts +29 -0
  191. package/typed/terrain/terrain-effect.d.ts.map +1 -0
  192. package/typed/terrain/terrain-pass.d.ts +11 -0
  193. package/typed/terrain/terrain-pass.d.ts.map +1 -0
  194. package/typed/terrain/terrain-picking-pass.d.ts +19 -0
  195. package/typed/terrain/terrain-picking-pass.d.ts.map +1 -0
  196. package/typed/terrain/terrain.d.ts +21 -0
  197. package/typed/terrain/terrain.d.ts.map +1 -0
  198. package/typed/terrain/utils.d.ts +5 -0
  199. package/typed/terrain/utils.d.ts.map +1 -0
  200. package/typed/utils/debug.d.ts +6 -0
  201. 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"}