@deck.gl/extensions 9.0.0-beta.1 → 9.0.0-beta.11

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 (273) hide show
  1. package/dist/brushing/brushing-extension.js +80 -0
  2. package/{typed → dist}/brushing/shader-module.d.ts +1 -1
  3. package/{typed → dist}/brushing/shader-module.d.ts.map +1 -1
  4. package/dist/brushing/shader-module.js +92 -0
  5. package/{typed → dist}/clip/clip-extension.d.ts.map +1 -1
  6. package/dist/clip/clip-extension.js +117 -0
  7. package/{typed → dist}/collision-filter/collision-filter-effect.d.ts +4 -2
  8. package/dist/collision-filter/collision-filter-effect.d.ts.map +1 -0
  9. package/dist/collision-filter/collision-filter-effect.js +194 -0
  10. package/dist/collision-filter/collision-filter-extension.js +49 -0
  11. package/{typed → dist}/collision-filter/collision-filter-pass.d.ts +3 -2
  12. package/dist/collision-filter/collision-filter-pass.d.ts.map +1 -0
  13. package/dist/collision-filter/collision-filter-pass.js +23 -0
  14. package/{typed → dist}/collision-filter/shader-module.d.ts.map +1 -1
  15. package/dist/collision-filter/shader-module.js +87 -0
  16. package/dist/data-filter/aggregator.d.ts.map +1 -0
  17. package/dist/{esm/data-filter → data-filter}/aggregator.js +40 -41
  18. package/{typed → dist}/data-filter/data-filter-extension.d.ts +39 -7
  19. package/dist/data-filter/data-filter-extension.d.ts.map +1 -0
  20. package/dist/data-filter/data-filter-extension.js +256 -0
  21. package/dist/data-filter/shader-module.d.ts +39 -0
  22. package/dist/data-filter/shader-module.d.ts.map +1 -0
  23. package/dist/data-filter/shader-module.js +199 -0
  24. package/dist/dist.dev.js +2667 -11058
  25. package/{typed → dist}/fill-style/fill-style-extension.d.ts +2 -30
  26. package/dist/fill-style/fill-style-extension.d.ts.map +1 -0
  27. package/dist/fill-style/fill-style-extension.js +116 -0
  28. package/{typed/fill-style/shaders.glsl.d.ts → dist/fill-style/shader-module.d.ts} +1 -1
  29. package/dist/fill-style/shader-module.d.ts.map +1 -0
  30. package/dist/fill-style/shader-module.js +96 -0
  31. package/dist/fp64/fp64-extension.js +35 -0
  32. package/dist/fp64/project64.glsl.js +81 -0
  33. package/dist/fp64/project64.js +50 -0
  34. package/dist/index.cjs +2795 -0
  35. package/dist/index.cjs.map +7 -0
  36. package/dist/index.d.ts +19 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +11 -0
  39. package/{typed → dist}/mask/mask-effect.d.ts +6 -5
  40. package/dist/mask/mask-effect.d.ts.map +1 -0
  41. package/dist/mask/mask-effect.js +192 -0
  42. package/dist/mask/mask-extension.js +57 -0
  43. package/dist/mask/mask-pass.d.ts +61 -0
  44. package/dist/mask/mask-pass.d.ts.map +1 -0
  45. package/dist/mask/mask-pass.js +52 -0
  46. package/{typed → dist}/mask/shader-module.d.ts.map +1 -1
  47. package/dist/mask/shader-module.js +77 -0
  48. package/{typed → dist}/path-style/path-style-extension.d.ts.map +1 -1
  49. package/dist/path-style/path-style-extension.js +112 -0
  50. package/dist/path-style/shaders.glsl.js +86 -0
  51. package/{typed → dist}/terrain/height-map-builder.d.ts +1 -1
  52. package/dist/terrain/height-map-builder.d.ts.map +1 -0
  53. package/dist/terrain/height-map-builder.js +104 -0
  54. package/{typed → dist}/terrain/shader-module.d.ts +2 -2
  55. package/dist/terrain/shader-module.d.ts.map +1 -0
  56. package/dist/terrain/shader-module.js +137 -0
  57. package/{typed → dist}/terrain/terrain-cover.d.ts +1 -1
  58. package/dist/terrain/terrain-cover.d.ts.map +1 -0
  59. package/dist/terrain/terrain-cover.js +188 -0
  60. package/{typed → dist}/terrain/terrain-effect.d.ts +6 -7
  61. package/dist/terrain/terrain-effect.d.ts.map +1 -0
  62. package/dist/terrain/terrain-effect.js +174 -0
  63. package/dist/terrain/terrain-extension.js +44 -0
  64. package/dist/terrain/terrain-pass.d.ts +53 -0
  65. package/dist/terrain/terrain-pass.d.ts.map +1 -0
  66. package/dist/terrain/terrain-pass.js +69 -0
  67. package/{typed → dist}/terrain/terrain-picking-pass.d.ts +1 -1
  68. package/dist/terrain/terrain-picking-pass.d.ts.map +1 -0
  69. package/dist/terrain/terrain-picking-pass.js +67 -0
  70. package/{typed → dist}/terrain/utils.d.ts +1 -0
  71. package/{typed → dist}/terrain/utils.d.ts.map +1 -1
  72. package/dist/terrain/utils.js +25 -0
  73. package/{typed → dist}/utils/debug.d.ts.map +1 -1
  74. package/dist/utils/debug.js +50 -0
  75. package/dist/utils/projection-utils.js +153 -0
  76. package/dist/utils/syntax-tags.d.ts +6 -0
  77. package/dist/utils/syntax-tags.d.ts.map +1 -0
  78. package/dist/utils/syntax-tags.js +5 -0
  79. package/dist.min.js +918 -1254
  80. package/package.json +19 -16
  81. package/src/brushing/shader-module.ts +4 -3
  82. package/src/clip/clip-extension.ts +10 -9
  83. package/src/collision-filter/collision-filter-effect.ts +35 -31
  84. package/src/collision-filter/collision-filter-pass.ts +7 -13
  85. package/src/collision-filter/shader-module.ts +6 -4
  86. package/src/data-filter/aggregator.ts +8 -13
  87. package/src/data-filter/data-filter-extension.ts +181 -56
  88. package/src/data-filter/shader-module.ts +132 -37
  89. package/src/fill-style/fill-style-extension.ts +4 -5
  90. package/src/fill-style/{shaders.glsl.ts → shader-module.ts} +6 -5
  91. package/src/mask/mask-effect.ts +30 -20
  92. package/src/mask/mask-pass.ts +22 -18
  93. package/src/mask/shader-module.ts +7 -6
  94. package/src/path-style/path-style-extension.ts +1 -0
  95. package/src/terrain/shader-module.ts +14 -13
  96. package/src/terrain/terrain-cover.ts +2 -1
  97. package/src/terrain/terrain-effect.ts +19 -23
  98. package/src/terrain/terrain-pass.ts +37 -37
  99. package/src/terrain/terrain-picking-pass.ts +19 -25
  100. package/src/terrain/utils.ts +13 -7
  101. package/src/utils/debug.ts +1 -2
  102. package/src/utils/syntax-tags.ts +5 -0
  103. package/dist/es5/brushing/brushing-extension.js +0 -108
  104. package/dist/es5/brushing/brushing-extension.js.map +0 -1
  105. package/dist/es5/brushing/shader-module.js +0 -50
  106. package/dist/es5/brushing/shader-module.js.map +0 -1
  107. package/dist/es5/clip/clip-extension.js +0 -98
  108. package/dist/es5/clip/clip-extension.js.map +0 -1
  109. package/dist/es5/collision-filter/collision-filter-effect.js +0 -294
  110. package/dist/es5/collision-filter/collision-filter-effect.js.map +0 -1
  111. package/dist/es5/collision-filter/collision-filter-extension.js +0 -109
  112. package/dist/es5/collision-filter/collision-filter-extension.js.map +0 -1
  113. package/dist/es5/collision-filter/collision-filter-pass.js +0 -79
  114. package/dist/es5/collision-filter/collision-filter-pass.js.map +0 -1
  115. package/dist/es5/collision-filter/shader-module.js +0 -39
  116. package/dist/es5/collision-filter/shader-module.js.map +0 -1
  117. package/dist/es5/data-filter/aggregator.js +0 -79
  118. package/dist/es5/data-filter/aggregator.js.map +0 -1
  119. package/dist/es5/data-filter/data-filter-extension.js +0 -236
  120. package/dist/es5/data-filter/data-filter-extension.js.map +0 -1
  121. package/dist/es5/data-filter/shader-module.js +0 -122
  122. package/dist/es5/data-filter/shader-module.js.map +0 -1
  123. package/dist/es5/fill-style/fill-style-extension.js +0 -190
  124. package/dist/es5/fill-style/fill-style-extension.js.map +0 -1
  125. package/dist/es5/fill-style/shaders.glsl.js +0 -59
  126. package/dist/es5/fill-style/shaders.glsl.js.map +0 -1
  127. package/dist/es5/fp64/fp64-extension.js +0 -55
  128. package/dist/es5/fp64/fp64-extension.js.map +0 -1
  129. package/dist/es5/fp64/project64.glsl.js +0 -9
  130. package/dist/es5/fp64/project64.glsl.js.map +0 -1
  131. package/dist/es5/fp64/project64.js +0 -52
  132. package/dist/es5/fp64/project64.js.map +0 -1
  133. package/dist/es5/index.js +0 -88
  134. package/dist/es5/index.js.map +0 -1
  135. package/dist/es5/mask/mask-effect.js +0 -279
  136. package/dist/es5/mask/mask-effect.js.map +0 -1
  137. package/dist/es5/mask/mask-extension.js +0 -113
  138. package/dist/es5/mask/mask-extension.js.map +0 -1
  139. package/dist/es5/mask/mask-pass.js +0 -106
  140. package/dist/es5/mask/mask-pass.js.map +0 -1
  141. package/dist/es5/mask/shader-module.js +0 -38
  142. package/dist/es5/mask/shader-module.js.map +0 -1
  143. package/dist/es5/path-style/path-style-extension.js +0 -169
  144. package/dist/es5/path-style/path-style-extension.js.map +0 -1
  145. package/dist/es5/path-style/shaders.glsl.js +0 -25
  146. package/dist/es5/path-style/shaders.glsl.js.map +0 -1
  147. package/dist/es5/terrain/height-map-builder.js +0 -111
  148. package/dist/es5/terrain/height-map-builder.js.map +0 -1
  149. package/dist/es5/terrain/shader-module.js +0 -86
  150. package/dist/es5/terrain/shader-module.js.map +0 -1
  151. package/dist/es5/terrain/terrain-cover.js +0 -256
  152. package/dist/es5/terrain/terrain-cover.js.map +0 -1
  153. package/dist/es5/terrain/terrain-effect.js +0 -326
  154. package/dist/es5/terrain/terrain-effect.js.map +0 -1
  155. package/dist/es5/terrain/terrain-extension.js +0 -94
  156. package/dist/es5/terrain/terrain-extension.js.map +0 -1
  157. package/dist/es5/terrain/terrain-pass.js +0 -121
  158. package/dist/es5/terrain/terrain-pass.js.map +0 -1
  159. package/dist/es5/terrain/terrain-picking-pass.js +0 -124
  160. package/dist/es5/terrain/terrain-picking-pass.js.map +0 -1
  161. package/dist/es5/terrain/utils.js +0 -35
  162. package/dist/es5/terrain/utils.js.map +0 -1
  163. package/dist/es5/utils/debug.js +0 -71
  164. package/dist/es5/utils/debug.js.map +0 -1
  165. package/dist/es5/utils/projection-utils.js +0 -168
  166. package/dist/es5/utils/projection-utils.js.map +0 -1
  167. package/dist/esm/brushing/brushing-extension.js +0 -68
  168. package/dist/esm/brushing/brushing-extension.js.map +0 -1
  169. package/dist/esm/brushing/shader-module.js +0 -103
  170. package/dist/esm/brushing/shader-module.js.map +0 -1
  171. package/dist/esm/clip/clip-extension.js +0 -86
  172. package/dist/esm/clip/clip-extension.js.map +0 -1
  173. package/dist/esm/collision-filter/collision-filter-effect.js +0 -246
  174. package/dist/esm/collision-filter/collision-filter-effect.js.map +0 -1
  175. package/dist/esm/collision-filter/collision-filter-extension.js +0 -75
  176. package/dist/esm/collision-filter/collision-filter-extension.js.map +0 -1
  177. package/dist/esm/collision-filter/collision-filter-pass.js +0 -32
  178. package/dist/esm/collision-filter/collision-filter-pass.js.map +0 -1
  179. package/dist/esm/collision-filter/shader-module.js +0 -104
  180. package/dist/esm/collision-filter/shader-module.js.map +0 -1
  181. package/dist/esm/data-filter/aggregator.js.map +0 -1
  182. package/dist/esm/data-filter/data-filter-extension.js +0 -189
  183. package/dist/esm/data-filter/data-filter-extension.js.map +0 -1
  184. package/dist/esm/data-filter/shader-module.js +0 -164
  185. package/dist/esm/data-filter/shader-module.js.map +0 -1
  186. package/dist/esm/fill-style/fill-style-extension.js +0 -156
  187. package/dist/esm/fill-style/fill-style-extension.js.map +0 -1
  188. package/dist/esm/fill-style/shaders.glsl.js +0 -108
  189. package/dist/esm/fill-style/shaders.glsl.js.map +0 -1
  190. package/dist/esm/fp64/fp64-extension.js +0 -20
  191. package/dist/esm/fp64/fp64-extension.js.map +0 -1
  192. package/dist/esm/fp64/project64.glsl.js +0 -82
  193. package/dist/esm/fp64/project64.glsl.js.map +0 -1
  194. package/dist/esm/fp64/project64.js +0 -43
  195. package/dist/esm/fp64/project64.js.map +0 -1
  196. package/dist/esm/index.js +0 -11
  197. package/dist/esm/index.js.map +0 -1
  198. package/dist/esm/mask/mask-effect.js +0 -228
  199. package/dist/esm/mask/mask-effect.js.map +0 -1
  200. package/dist/esm/mask/mask-extension.js +0 -83
  201. package/dist/esm/mask/mask-extension.js.map +0 -1
  202. package/dist/esm/mask/mask-pass.js +0 -58
  203. package/dist/esm/mask/mask-pass.js.map +0 -1
  204. package/dist/esm/mask/shader-module.js +0 -84
  205. package/dist/esm/mask/shader-module.js.map +0 -1
  206. package/dist/esm/path-style/path-style-extension.js +0 -130
  207. package/dist/esm/path-style/path-style-extension.js.map +0 -1
  208. package/dist/esm/path-style/shaders.glsl.js +0 -84
  209. package/dist/esm/path-style/shaders.glsl.js.map +0 -1
  210. package/dist/esm/terrain/height-map-builder.js +0 -86
  211. package/dist/esm/terrain/height-map-builder.js.map +0 -1
  212. package/dist/esm/terrain/shader-module.js +0 -127
  213. package/dist/esm/terrain/shader-module.js.map +0 -1
  214. package/dist/esm/terrain/terrain-cover.js +0 -212
  215. package/dist/esm/terrain/terrain-cover.js.map +0 -1
  216. package/dist/esm/terrain/terrain-effect.js +0 -219
  217. package/dist/esm/terrain/terrain-effect.js.map +0 -1
  218. package/dist/esm/terrain/terrain-extension.js +0 -59
  219. package/dist/esm/terrain/terrain-extension.js.map +0 -1
  220. package/dist/esm/terrain/terrain-pass.js +0 -71
  221. package/dist/esm/terrain/terrain-pass.js.map +0 -1
  222. package/dist/esm/terrain/terrain-picking-pass.js +0 -73
  223. package/dist/esm/terrain/terrain-picking-pass.js.map +0 -1
  224. package/dist/esm/terrain/utils.js +0 -19
  225. package/dist/esm/terrain/utils.js.map +0 -1
  226. package/dist/esm/utils/debug.js +0 -61
  227. package/dist/esm/utils/debug.js.map +0 -1
  228. package/dist/esm/utils/projection-utils.js +0 -134
  229. package/dist/esm/utils/projection-utils.js.map +0 -1
  230. package/typed/collision-filter/collision-filter-effect.d.ts.map +0 -1
  231. package/typed/collision-filter/collision-filter-pass.d.ts.map +0 -1
  232. package/typed/data-filter/aggregator.d.ts.map +0 -1
  233. package/typed/data-filter/data-filter-extension.d.ts.map +0 -1
  234. package/typed/data-filter/shader-module.d.ts +0 -9
  235. package/typed/data-filter/shader-module.d.ts.map +0 -1
  236. package/typed/fill-style/fill-style-extension.d.ts.map +0 -1
  237. package/typed/fill-style/shaders.glsl.d.ts.map +0 -1
  238. package/typed/index.d.ts +0 -19
  239. package/typed/index.d.ts.map +0 -1
  240. package/typed/mask/mask-effect.d.ts.map +0 -1
  241. package/typed/mask/mask-pass.d.ts +0 -19
  242. package/typed/mask/mask-pass.d.ts.map +0 -1
  243. package/typed/terrain/height-map-builder.d.ts.map +0 -1
  244. package/typed/terrain/shader-module.d.ts.map +0 -1
  245. package/typed/terrain/terrain-cover.d.ts.map +0 -1
  246. package/typed/terrain/terrain-effect.d.ts.map +0 -1
  247. package/typed/terrain/terrain-pass.d.ts +0 -11
  248. package/typed/terrain/terrain-pass.d.ts.map +0 -1
  249. package/typed/terrain/terrain-picking-pass.d.ts.map +0 -1
  250. /package/{typed → dist}/brushing/brushing-extension.d.ts +0 -0
  251. /package/{typed → dist}/brushing/brushing-extension.d.ts.map +0 -0
  252. /package/{typed → dist}/clip/clip-extension.d.ts +0 -0
  253. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts +0 -0
  254. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts.map +0 -0
  255. /package/{typed → dist}/collision-filter/shader-module.d.ts +0 -0
  256. /package/{typed → dist}/data-filter/aggregator.d.ts +0 -0
  257. /package/{typed → dist}/fp64/fp64-extension.d.ts +0 -0
  258. /package/{typed → dist}/fp64/fp64-extension.d.ts.map +0 -0
  259. /package/{typed → dist}/fp64/project64.d.ts +0 -0
  260. /package/{typed → dist}/fp64/project64.d.ts.map +0 -0
  261. /package/{typed → dist}/fp64/project64.glsl.d.ts +0 -0
  262. /package/{typed → dist}/fp64/project64.glsl.d.ts.map +0 -0
  263. /package/{typed → dist}/mask/mask-extension.d.ts +0 -0
  264. /package/{typed → dist}/mask/mask-extension.d.ts.map +0 -0
  265. /package/{typed → dist}/mask/shader-module.d.ts +0 -0
  266. /package/{typed → dist}/path-style/path-style-extension.d.ts +0 -0
  267. /package/{typed → dist}/path-style/shaders.glsl.d.ts +0 -0
  268. /package/{typed → dist}/path-style/shaders.glsl.d.ts.map +0 -0
  269. /package/{typed → dist}/terrain/terrain-extension.d.ts +0 -0
  270. /package/{typed → dist}/terrain/terrain-extension.d.ts.map +0 -0
  271. /package/{typed → dist}/utils/debug.d.ts +0 -0
  272. /package/{typed → dist}/utils/projection-utils.d.ts +0 -0
  273. /package/{typed → dist}/utils/projection-utils.d.ts.map +0 -0
@@ -0,0 +1,44 @@
1
+ import { LayerExtension } from '@deck.gl/core';
2
+ import { TerrainEffect } from "./terrain-effect.js";
3
+ import { terrainModule } from "./shader-module.js";
4
+ const defaultProps = {
5
+ terrainDrawMode: undefined
6
+ };
7
+ /** Allows layers to show/hide objects by a geofence. */
8
+ export default class TerrainExtension extends LayerExtension {
9
+ static { this.defaultProps = defaultProps; }
10
+ static { this.extensionName = 'TerrainExtension'; }
11
+ getShaders() {
12
+ return {
13
+ modules: [terrainModule]
14
+ };
15
+ }
16
+ initializeState() {
17
+ this.context.deck?._addDefaultEffect(new TerrainEffect());
18
+ }
19
+ updateState(params) {
20
+ const { props, oldProps } = params;
21
+ if (this.state.terrainDrawMode &&
22
+ props.terrainDrawMode === oldProps.terrainDrawMode &&
23
+ // @ts-ignore `extruded` may not exist in props
24
+ props.extruded === oldProps.extruded) {
25
+ return;
26
+ }
27
+ let { terrainDrawMode } = props;
28
+ if (!terrainDrawMode) {
29
+ // props.extruded is used as an indication that the layer is 2.5D
30
+ // @ts-ignore `extruded` may not exist in props
31
+ const is3d = this.props.extruded;
32
+ const attributes = this.getAttributeManager()?.attributes;
33
+ const hasAnchor = attributes && 'instancePositions' in attributes;
34
+ terrainDrawMode = is3d || hasAnchor ? 'offset' : 'drape';
35
+ }
36
+ this.setState({ terrainDrawMode });
37
+ }
38
+ onNeedsRedraw() {
39
+ const state = this.state;
40
+ if (state.terrainDrawMode === 'drape') {
41
+ state.terrainCoverNeedsRedraw = true;
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,53 @@
1
+ import { Layer, Viewport, _LayersPass as LayersPass, LayersPassRenderOptions } from '@deck.gl/core';
2
+ import type { HeightMapBuilder } from "./height-map-builder.js";
3
+ import type { TerrainCover } from "./terrain-cover.js";
4
+ export type TerrainPassRenderOptions = LayersPassRenderOptions;
5
+ /** Renders textures used by the TerrainEffect render pass */
6
+ export declare class TerrainPass extends LayersPass {
7
+ getRenderableLayers(viewport: Viewport, opts: TerrainPassRenderOptions): Layer[];
8
+ renderHeightMap(heightMap: HeightMapBuilder, opts: Partial<TerrainPassRenderOptions>): void;
9
+ renderTerrainCover(terrainCover: TerrainCover, opts: Partial<TerrainPassRenderOptions>): void;
10
+ protected getLayerParameters(layer: Layer<{}>, layerIndex: number, viewport: Viewport): {
11
+ cullMode?: import("@luma.gl/core").CullMode | undefined;
12
+ frontFace?: import("@luma.gl/core").FrontFace | undefined;
13
+ depthBias?: number | undefined;
14
+ depthBiasSlopeScale?: number | undefined;
15
+ depthBiasClamp?: number | undefined;
16
+ unclippedDepth?: boolean | undefined;
17
+ provokingVertex?: "first" | "last" | undefined;
18
+ polygonMode?: "fill" | "line" | undefined;
19
+ polygonOffsetLine?: boolean | undefined;
20
+ clipDistance0?: boolean | undefined;
21
+ clipDistance1?: boolean | undefined;
22
+ clipDistance2?: boolean | undefined;
23
+ clipDistance3?: boolean | undefined;
24
+ clipDistance4?: boolean | undefined;
25
+ clipDistance5?: boolean | undefined;
26
+ clipDistance6?: boolean | undefined;
27
+ clipDistance7?: boolean | undefined;
28
+ topology?: import("@luma.gl/core").PrimitiveTopology | undefined;
29
+ stripIndexFormat?: import("@luma.gl/core").IndexFormat | undefined;
30
+ depthWriteEnabled?: boolean | undefined;
31
+ depthCompare?: import("@luma.gl/core").CompareFunction | undefined;
32
+ depthFormat?: import("@luma.gl/core").DepthStencilTextureFormat | undefined;
33
+ stencilReadMask?: number | undefined;
34
+ stencilWriteMask?: number | undefined;
35
+ stencilCompare?: import("@luma.gl/core").CompareFunction | undefined;
36
+ stencilPassOperation?: import("@luma.gl/core").StencilOperation | undefined;
37
+ stencilFailOperation?: import("@luma.gl/core").StencilOperation | undefined;
38
+ stencilDepthFailOperation?: import("@luma.gl/core").StencilOperation | undefined;
39
+ blendColorOperation?: import("@luma.gl/core").BlendOperation | undefined;
40
+ blendColorSrcFactor?: import("@luma.gl/core").BlendFactor | undefined;
41
+ blendColorDstFactor?: import("@luma.gl/core").BlendFactor | undefined;
42
+ blendAlphaOperation?: import("@luma.gl/core").BlendOperation | undefined;
43
+ blendAlphaSrcFactor?: import("@luma.gl/core").BlendFactor | undefined;
44
+ blendAlphaDstFactor?: import("@luma.gl/core").BlendFactor | undefined;
45
+ colorMask?: number | undefined;
46
+ sampleCount?: number | undefined;
47
+ sampleMask?: number | undefined;
48
+ sampleAlphaToCoverageEnabled?: boolean | undefined;
49
+ blend: boolean;
50
+ depthTest: boolean;
51
+ };
52
+ }
53
+ //# sourceMappingURL=terrain-pass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terrain-pass.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-pass.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,IAAI,UAAU,EAAE,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAClG,OAAO,KAAK,EAAC,gBAAgB,EAAC,gCAA6B;AAC3D,OAAO,KAAK,EAAC,YAAY,EAAC,2BAAwB;AAElD,MAAM,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAW/D,6DAA6D;AAC7D,qBAAa,WAAY,SAAQ,UAAU;IACzC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,GAAG,KAAK,EAAE;IAchF,eAAe,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,wBAAwB,CAAC;IAsBpF,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,wBAAwB,CAAC;IAuBtF,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQtF"}
@@ -0,0 +1,69 @@
1
+ import { _LayersPass as LayersPass } from '@deck.gl/core';
2
+ const TERRAIN_BLENDING = {
3
+ blendColorOperation: 'max',
4
+ blendColorSrcFactor: 'one',
5
+ blendColorDstFactor: 'one',
6
+ blendAlphaOperation: 'max',
7
+ blendAlphaSrcFactor: 'one',
8
+ blendAlphaDstFactor: 'one'
9
+ };
10
+ /** Renders textures used by the TerrainEffect render pass */
11
+ export class TerrainPass extends LayersPass {
12
+ getRenderableLayers(viewport, opts) {
13
+ const { layers } = opts;
14
+ const result = [];
15
+ const drawParamsByIndex = this._getDrawLayerParams(viewport, opts, true);
16
+ for (let i = 0; i < layers.length; i++) {
17
+ const layer = layers[i];
18
+ if (!layer.isComposite && drawParamsByIndex[i].shouldDrawLayer) {
19
+ result.push(layer);
20
+ }
21
+ }
22
+ return result;
23
+ }
24
+ renderHeightMap(heightMap, opts) {
25
+ // console.log('Updating height map')
26
+ const target = heightMap.getRenderFramebuffer();
27
+ const viewport = heightMap.renderViewport;
28
+ if (!target || !viewport) {
29
+ return;
30
+ }
31
+ target.resize(viewport);
32
+ this.render({
33
+ ...opts,
34
+ target,
35
+ pass: 'terrain-height-map',
36
+ layers: opts.layers,
37
+ viewports: [viewport],
38
+ effects: [],
39
+ clearColor: [0, 0, 0, 0]
40
+ });
41
+ }
42
+ renderTerrainCover(terrainCover, opts) {
43
+ // console.log('Updating terrain cover ' + terrainCover.id)
44
+ const target = terrainCover.getRenderFramebuffer();
45
+ const viewport = terrainCover.renderViewport;
46
+ if (!target || !viewport) {
47
+ return;
48
+ }
49
+ const layers = terrainCover.filterLayers(opts.layers);
50
+ target.resize(viewport);
51
+ this.render({
52
+ ...opts,
53
+ target,
54
+ pass: `terrain-cover-${terrainCover.id}`,
55
+ layers,
56
+ effects: [],
57
+ viewports: [viewport],
58
+ clearColor: [0, 0, 0, 0]
59
+ });
60
+ }
61
+ getLayerParameters(layer, layerIndex, viewport) {
62
+ return {
63
+ ...layer.props.parameters,
64
+ blend: true,
65
+ depthTest: false,
66
+ ...(layer.props.operation.includes('terrain') && TERRAIN_BLENDING)
67
+ };
68
+ }
69
+ }
@@ -1,5 +1,5 @@
1
1
  import { Layer, Viewport, LayersPassRenderOptions, _PickLayersPass as PickLayersPass } from '@deck.gl/core';
2
- import type { TerrainCover } from './terrain-cover';
2
+ import type { TerrainCover } from "./terrain-cover.js";
3
3
  export type TerrainPickingPassRenderOptions = LayersPassRenderOptions & {
4
4
  pickZ: boolean;
5
5
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terrain-picking-pass.d.ts","sourceRoot":"","sources":["../../src/terrain/terrain-picking-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,QAAQ,EACR,uBAAuB,EACvB,eAAe,IAAI,cAAc,EAClC,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAC,YAAY,EAAC,2BAAwB;AAElD,MAAM,MAAM,+BAA+B,GAAG,uBAAuB,GAAG;IACtE,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,8DAA8D;AAC9D,qBAAa,kBAAmB,SAAQ,cAAc;IACpD;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IAEzC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,+BAA+B,GAAG,KAAK,EAAE;IAiBvF,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC;IA+B7F,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;CAUxF"}
@@ -0,0 +1,67 @@
1
+ import { _PickLayersPass as PickLayersPass } from '@deck.gl/core';
2
+ /** Renders textures used by the TerrainEffect picking pass */
3
+ export class TerrainPickingPass extends PickLayersPass {
4
+ constructor() {
5
+ super(...arguments);
6
+ /** Save layer index for use when drawing to terrain cover.
7
+ * When a terrain cover's picking buffer is rendered,
8
+ * we need to make sure each layer receives a consistent index (encoded in the alpha channel)
9
+ * so that a picked color can be decoded back to the correct layer.
10
+ * Updated in getRenderableLayers which is called in TerrainEffect.preRender
11
+ */
12
+ this.drawParameters = {};
13
+ }
14
+ getRenderableLayers(viewport, opts) {
15
+ const { layers } = opts;
16
+ const result = [];
17
+ this.drawParameters = {};
18
+ this._resetColorEncoder(opts.pickZ);
19
+ const drawParamsByIndex = this._getDrawLayerParams(viewport, opts);
20
+ for (let i = 0; i < layers.length; i++) {
21
+ const layer = layers[i];
22
+ if (!layer.isComposite && drawParamsByIndex[i].shouldDrawLayer) {
23
+ result.push(layer);
24
+ this.drawParameters[layer.id] = drawParamsByIndex[i].layerParameters;
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ renderTerrainCover(terrainCover, opts) {
30
+ // console.log('Updating terrain cover for picking ' + terrainCover.id)
31
+ const target = terrainCover.getPickingFramebuffer();
32
+ const viewport = terrainCover.renderViewport;
33
+ if (!target || !viewport) {
34
+ return;
35
+ }
36
+ const layers = terrainCover.filterLayers(opts.layers);
37
+ const terrainLayer = terrainCover.targetLayer;
38
+ if (terrainLayer.props.pickable) {
39
+ layers.unshift(terrainLayer);
40
+ }
41
+ target.resize(viewport);
42
+ this.render({
43
+ ...opts,
44
+ pickingFBO: target,
45
+ pass: `terrain-cover-picking-${terrainCover.id}`,
46
+ layers,
47
+ effects: [],
48
+ viewports: [viewport],
49
+ // Disable the default culling because TileLayer would cull sublayers based on the screen viewport,
50
+ // not the viewport of the terrain cover. Culling is already done by `terrainCover.filterLayers`
51
+ cullRect: undefined,
52
+ deviceRect: viewport,
53
+ pickZ: false
54
+ });
55
+ }
56
+ getLayerParameters(layer, layerIndex, viewport) {
57
+ let parameters;
58
+ if (this.drawParameters[layer.id]) {
59
+ parameters = this.drawParameters[layer.id];
60
+ }
61
+ else {
62
+ parameters = super.getLayerParameters(layer, layerIndex, viewport);
63
+ parameters.blend = true;
64
+ }
65
+ return { ...parameters, depthTest: false };
66
+ }
67
+ }
@@ -2,5 +2,6 @@ import type { Device } from '@luma.gl/core';
2
2
  export declare function createRenderTarget(device: Device, opts: {
3
3
  id: string;
4
4
  float?: boolean;
5
+ interpolate?: boolean;
5
6
  }): import("@luma.gl/core").Framebuffer;
6
7
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/terrain/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAG1C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,uCAoBF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/terrain/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAG1C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,uCAyBF"}
@@ -0,0 +1,25 @@
1
+ import { GL } from '@luma.gl/constants';
2
+ export function createRenderTarget(device, opts) {
3
+ return device.createFramebuffer({
4
+ id: opts.id,
5
+ colorAttachments: [
6
+ device.createTexture({
7
+ id: opts.id,
8
+ ...(opts.float && {
9
+ format: 'rgba32float',
10
+ type: 5126
11
+ }),
12
+ mipmaps: false,
13
+ sampler: opts.interpolate === false
14
+ ? {
15
+ minFilter: 'nearest',
16
+ magFilter: 'nearest'
17
+ }
18
+ : {
19
+ minFilter: 'linear',
20
+ magFilter: 'linear'
21
+ }
22
+ })
23
+ ]
24
+ });
25
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,qDAAqD;AAErD,eAAO,MAAM,QAAQ,QACd,WAAW;;;UAmDjB,CAAC"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,qDAAqD;AAErD,eAAO,MAAM,QAAQ,QACd,WAAW;;;UAmDjB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /* global document */
2
+ /** Debug utility to draw FBO contents onto screen */
3
+ // eslint-disable-next-line
4
+ export const debugFBO = function (fbo, { minimap, opaque } = {}) {
5
+ const color = fbo.device.readPixelsToArrayWebGL(fbo);
6
+ let canvas = document.getElementById('fbo-canvas');
7
+ const canvasHeight = (minimap ? 2 : 1) * fbo.height;
8
+ if (!canvas) {
9
+ canvas = document.createElement('canvas');
10
+ canvas.id = 'fbo-canvas';
11
+ canvas.style.zIndex = '100';
12
+ canvas.style.position = 'absolute';
13
+ canvas.style.top = '0';
14
+ canvas.style.right = '0';
15
+ canvas.style.border = 'blue 1px solid';
16
+ canvas.style.transform = 'scaleY(-1)';
17
+ document.body.appendChild(canvas);
18
+ }
19
+ if (canvas.width !== fbo.width || canvas.height !== canvasHeight) {
20
+ canvas.width = fbo.width;
21
+ canvas.height = canvasHeight;
22
+ canvas.style.width = '400px';
23
+ }
24
+ const ctx = canvas.getContext('2d');
25
+ const imageData = ctx.createImageData(canvas.width, canvas.height);
26
+ // Minimap
27
+ if (minimap) {
28
+ const zoom = 8; // Zoom factor for minimap
29
+ const { width, height } = canvas;
30
+ for (let y = 0; y < height; y++) {
31
+ for (let x = 0; x < width; x++) {
32
+ const d = 4 * (x + y * width); // destination pixel
33
+ const s = 4 * (Math.floor(x / zoom) + Math.floor(y / zoom) * width); // source
34
+ imageData.data[d + 0] = color[s + 0];
35
+ imageData.data[d + 1] = color[s + 1];
36
+ imageData.data[d + 2] = color[s + 2];
37
+ imageData.data[d + 3] = opaque ? 255 : color[s + 3];
38
+ }
39
+ }
40
+ }
41
+ // Full map
42
+ const offset = minimap ? color.length : 0;
43
+ for (let i = 0; i < color.length; i += 4) {
44
+ imageData.data[offset + i + 0] = color[i + 0];
45
+ imageData.data[offset + i + 1] = color[i + 1];
46
+ imageData.data[offset + i + 2] = color[i + 2];
47
+ imageData.data[offset + i + 3] = opaque ? 255 : color[i + 3];
48
+ }
49
+ ctx.putImageData(imageData, 0, 0);
50
+ };
@@ -0,0 +1,153 @@
1
+ import { WebMercatorViewport, OrthographicViewport } from '@deck.gl/core';
2
+ /*
3
+ * Compute the union of bounds from multiple layers
4
+ * Returns bounds in CARTESIAN coordinates
5
+ */
6
+ export function joinLayerBounds(
7
+ /** The layers to combine */
8
+ layers,
9
+ /** A Viewport instance that is used to determine the type of the view */
10
+ viewport) {
11
+ // Join the bounds of layer data
12
+ const bounds = [Infinity, Infinity, -Infinity, -Infinity];
13
+ for (const layer of layers) {
14
+ const layerBounds = layer.getBounds();
15
+ if (layerBounds) {
16
+ const bottomLeftCommon = layer.projectPosition(layerBounds[0], { viewport, autoOffset: false });
17
+ const topRightCommon = layer.projectPosition(layerBounds[1], { viewport, autoOffset: false });
18
+ bounds[0] = Math.min(bounds[0], bottomLeftCommon[0]);
19
+ bounds[1] = Math.min(bounds[1], bottomLeftCommon[1]);
20
+ bounds[2] = Math.max(bounds[2], topRightCommon[0]);
21
+ bounds[3] = Math.max(bounds[3], topRightCommon[1]);
22
+ }
23
+ }
24
+ if (Number.isFinite(bounds[0])) {
25
+ return bounds;
26
+ }
27
+ return null;
28
+ }
29
+ const MAX_VIEWPORT_SIZE = 2048;
30
+ /** Construct a viewport that just covers the target bounds. Used for rendering to common space indexed texture. */
31
+ export function makeViewport(opts) {
32
+ const { bounds, viewport, border = 0 } = opts;
33
+ const { isGeospatial } = viewport;
34
+ if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {
35
+ return null;
36
+ }
37
+ const centerWorld = viewport.unprojectPosition([
38
+ (bounds[0] + bounds[2]) / 2,
39
+ (bounds[1] + bounds[3]) / 2,
40
+ 0
41
+ ]);
42
+ let { width, height, zoom } = opts;
43
+ if (zoom === undefined) {
44
+ // Use width and height to determine zoom
45
+ width = width - border * 2;
46
+ height = height - border * 2;
47
+ const scale = Math.min(width / (bounds[2] - bounds[0]), height / (bounds[3] - bounds[1]));
48
+ zoom = Math.min(Math.log2(scale), 20);
49
+ }
50
+ else if (!width || !height) {
51
+ // Use zoom to determine width and height
52
+ const scale = 2 ** zoom;
53
+ width = Math.round(Math.abs(bounds[2] - bounds[0]) * scale);
54
+ height = Math.round(Math.abs(bounds[3] - bounds[1]) * scale);
55
+ const maxSize = MAX_VIEWPORT_SIZE - border * 2;
56
+ if (width > maxSize || height > maxSize) {
57
+ const r = maxSize / Math.max(width, height);
58
+ width = Math.round(width * r);
59
+ height = Math.round(height * r);
60
+ zoom += Math.log2(r);
61
+ }
62
+ }
63
+ // TODO - find a more generic way to construct this viewport
64
+ // Geospatial viewports may not be web-mercator
65
+ return isGeospatial
66
+ ? new WebMercatorViewport({
67
+ id: viewport.id,
68
+ x: border,
69
+ y: border,
70
+ width,
71
+ height,
72
+ longitude: centerWorld[0],
73
+ latitude: centerWorld[1],
74
+ zoom,
75
+ orthographic: true
76
+ })
77
+ : new OrthographicViewport({
78
+ id: viewport.id,
79
+ x: border,
80
+ y: border,
81
+ width,
82
+ height,
83
+ target: centerWorld,
84
+ zoom,
85
+ flipY: false
86
+ });
87
+ }
88
+ /** Returns viewport bounds in CARTESIAN coordinates */
89
+ export function getViewportBounds(viewport, zRange) {
90
+ // Viewport bounds in world coordinates
91
+ let viewportBoundsWorld;
92
+ if (zRange && zRange.length === 2) {
93
+ const [minZ, maxZ] = zRange;
94
+ const bounds0 = viewport.getBounds({ z: minZ });
95
+ const bounds1 = viewport.getBounds({ z: maxZ });
96
+ viewportBoundsWorld = [
97
+ Math.min(bounds0[0], bounds1[0]),
98
+ Math.min(bounds0[1], bounds1[1]),
99
+ Math.max(bounds0[2], bounds1[2]),
100
+ Math.max(bounds0[3], bounds1[3])
101
+ ];
102
+ }
103
+ else {
104
+ viewportBoundsWorld = viewport.getBounds();
105
+ }
106
+ // Viewport bounds in cartesian coordinates
107
+ const viewportBottomLeftCommon = viewport.projectPosition(viewportBoundsWorld.slice(0, 2));
108
+ const viewportTopRightCommon = viewport.projectPosition(viewportBoundsWorld.slice(2, 4));
109
+ return [
110
+ viewportBottomLeftCommon[0],
111
+ viewportBottomLeftCommon[1],
112
+ viewportTopRightCommon[0],
113
+ viewportTopRightCommon[1]
114
+ ];
115
+ }
116
+ /*
117
+ * Determine the common space bounds that best cover the given data for the given viewport
118
+ * Returns bounds in CARTESIAN coordinates
119
+ */
120
+ export function getRenderBounds(layerBounds, viewport, zRange) {
121
+ if (!layerBounds) {
122
+ return [0, 0, 1, 1];
123
+ }
124
+ const viewportBounds = getViewportBounds(viewport, zRange);
125
+ // Expand viewport bounds by 2X. Heurestically chosen to avoid masking
126
+ // errors when mask is partially out of view
127
+ const paddedBounds = doubleBounds(viewportBounds);
128
+ // When bounds of the layers are smaller than the viewport bounds simply use
129
+ // mask bounds, so as to maximize resolution & avoid rerenders
130
+ if (layerBounds[2] - layerBounds[0] <= paddedBounds[2] - paddedBounds[0] &&
131
+ layerBounds[3] - layerBounds[1] <= paddedBounds[3] - paddedBounds[1]) {
132
+ return layerBounds;
133
+ }
134
+ // As viewport shrinks, to avoid pixelation along mask edges
135
+ // we need to reduce the bounds and only render the visible portion
136
+ // of the mask.
137
+ // We pad the viewport bounds to capture the section
138
+ // of the mask just outside the viewport to correctly maskByInstance.
139
+ // Intersect mask & padded viewport bounds
140
+ return [
141
+ Math.max(layerBounds[0], paddedBounds[0]),
142
+ Math.max(layerBounds[1], paddedBounds[1]),
143
+ Math.min(layerBounds[2], paddedBounds[2]),
144
+ Math.min(layerBounds[3], paddedBounds[3])
145
+ ];
146
+ }
147
+ function doubleBounds(bounds) {
148
+ const dx = bounds[2] - bounds[0];
149
+ const dy = bounds[3] - bounds[1];
150
+ const centerX = (bounds[0] + bounds[2]) / 2;
151
+ const centerY = (bounds[1] + bounds[3]) / 2;
152
+ return [centerX - dx, centerY - dy, centerX + dx, centerY + dy];
153
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Marks GLSL shaders for syntax highlighting: glsl`...`
3
+ * Install https://marketplace.visualstudio.com/items?itemName=boyswan.glsl-literal
4
+ */
5
+ export declare const glsl: (s: TemplateStringsArray) => string;
6
+ //# sourceMappingURL=syntax-tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-tags.d.ts","sourceRoot":"","sources":["../../src/utils/syntax-tags.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI,MAAO,oBAAoB,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Marks GLSL shaders for syntax highlighting: glsl`...`
3
+ * Install https://marketplace.visualstudio.com/items?itemName=boyswan.glsl-literal
4
+ */
5
+ export const glsl = (s) => `${s}`;