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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/brushing/brushing-extension.js +80 -0
  2. package/dist/{esm/brushing → brushing}/shader-module.js +24 -30
  3. package/dist/clip/clip-extension.js +117 -0
  4. package/{typed → dist}/collision-filter/collision-filter-effect.d.ts.map +1 -1
  5. package/dist/collision-filter/collision-filter-effect.js +193 -0
  6. package/dist/collision-filter/collision-filter-extension.js +49 -0
  7. package/{typed → dist}/collision-filter/collision-filter-pass.d.ts.map +1 -1
  8. package/dist/collision-filter/collision-filter-pass.js +25 -0
  9. package/dist/{esm/collision-filter → collision-filter}/shader-module.js +17 -24
  10. package/dist/data-filter/aggregator.js +104 -0
  11. package/{typed → dist}/data-filter/data-filter-extension.d.ts.map +1 -1
  12. package/dist/data-filter/data-filter-extension.js +162 -0
  13. package/dist/data-filter/shader-module.js +159 -0
  14. package/dist/dist.dev.js +1519 -9832
  15. package/dist/fill-style/fill-style-extension.js +118 -0
  16. package/dist/{esm/fill-style → fill-style}/shaders.glsl.js +37 -43
  17. package/dist/fp64/fp64-extension.js +35 -0
  18. package/dist/{esm/fp64 → fp64}/project64.glsl.js +19 -1
  19. package/dist/fp64/project64.js +50 -0
  20. package/dist/index.cjs +2724 -0
  21. package/dist/index.cjs.map +7 -0
  22. package/dist/index.js +11 -0
  23. package/{typed → dist}/mask/mask-effect.d.ts.map +1 -1
  24. package/dist/mask/mask-effect.js +194 -0
  25. package/dist/mask/mask-extension.js +57 -0
  26. package/{typed → dist}/mask/mask-pass.d.ts.map +1 -1
  27. package/dist/mask/mask-pass.js +44 -0
  28. package/dist/{esm/mask → mask}/shader-module.js +18 -21
  29. package/dist/path-style/path-style-extension.js +111 -0
  30. package/dist/{esm/path-style → path-style}/shaders.glsl.js +20 -13
  31. package/dist/terrain/height-map-builder.js +104 -0
  32. package/dist/terrain/shader-module.js +139 -0
  33. package/dist/terrain/terrain-cover.js +187 -0
  34. package/{typed → dist}/terrain/terrain-effect.d.ts.map +1 -1
  35. package/dist/terrain/terrain-effect.js +184 -0
  36. package/dist/terrain/terrain-extension.js +44 -0
  37. package/{typed → dist}/terrain/terrain-pass.d.ts.map +1 -1
  38. package/dist/terrain/terrain-pass.js +61 -0
  39. package/{typed → dist}/terrain/terrain-picking-pass.d.ts.map +1 -1
  40. package/dist/terrain/terrain-picking-pass.js +66 -0
  41. package/dist/terrain/utils.js +21 -0
  42. package/{typed → dist}/utils/debug.d.ts.map +1 -1
  43. package/dist/utils/debug.js +50 -0
  44. package/dist/utils/projection-utils.js +153 -0
  45. package/dist.min.js +72 -201
  46. package/package.json +19 -12
  47. package/src/collision-filter/collision-filter-effect.ts +12 -8
  48. package/src/collision-filter/collision-filter-pass.ts +1 -3
  49. package/src/data-filter/data-filter-extension.ts +3 -5
  50. package/src/mask/mask-effect.ts +0 -1
  51. package/src/mask/mask-pass.ts +1 -3
  52. package/src/terrain/terrain-effect.ts +8 -2
  53. package/src/terrain/terrain-pass.ts +2 -5
  54. package/src/terrain/terrain-picking-pass.ts +1 -3
  55. package/src/utils/debug.ts +1 -2
  56. package/dist/es5/brushing/brushing-extension.js +0 -108
  57. package/dist/es5/brushing/brushing-extension.js.map +0 -1
  58. package/dist/es5/brushing/shader-module.js +0 -50
  59. package/dist/es5/brushing/shader-module.js.map +0 -1
  60. package/dist/es5/clip/clip-extension.js +0 -98
  61. package/dist/es5/clip/clip-extension.js.map +0 -1
  62. package/dist/es5/collision-filter/collision-filter-effect.js +0 -294
  63. package/dist/es5/collision-filter/collision-filter-effect.js.map +0 -1
  64. package/dist/es5/collision-filter/collision-filter-extension.js +0 -109
  65. package/dist/es5/collision-filter/collision-filter-extension.js.map +0 -1
  66. package/dist/es5/collision-filter/collision-filter-pass.js +0 -79
  67. package/dist/es5/collision-filter/collision-filter-pass.js.map +0 -1
  68. package/dist/es5/collision-filter/shader-module.js +0 -39
  69. package/dist/es5/collision-filter/shader-module.js.map +0 -1
  70. package/dist/es5/data-filter/aggregator.js +0 -79
  71. package/dist/es5/data-filter/aggregator.js.map +0 -1
  72. package/dist/es5/data-filter/data-filter-extension.js +0 -236
  73. package/dist/es5/data-filter/data-filter-extension.js.map +0 -1
  74. package/dist/es5/data-filter/shader-module.js +0 -122
  75. package/dist/es5/data-filter/shader-module.js.map +0 -1
  76. package/dist/es5/fill-style/fill-style-extension.js +0 -190
  77. package/dist/es5/fill-style/fill-style-extension.js.map +0 -1
  78. package/dist/es5/fill-style/shaders.glsl.js +0 -59
  79. package/dist/es5/fill-style/shaders.glsl.js.map +0 -1
  80. package/dist/es5/fp64/fp64-extension.js +0 -55
  81. package/dist/es5/fp64/fp64-extension.js.map +0 -1
  82. package/dist/es5/fp64/project64.glsl.js +0 -9
  83. package/dist/es5/fp64/project64.glsl.js.map +0 -1
  84. package/dist/es5/fp64/project64.js +0 -52
  85. package/dist/es5/fp64/project64.js.map +0 -1
  86. package/dist/es5/index.js +0 -88
  87. package/dist/es5/index.js.map +0 -1
  88. package/dist/es5/mask/mask-effect.js +0 -279
  89. package/dist/es5/mask/mask-effect.js.map +0 -1
  90. package/dist/es5/mask/mask-extension.js +0 -113
  91. package/dist/es5/mask/mask-extension.js.map +0 -1
  92. package/dist/es5/mask/mask-pass.js +0 -106
  93. package/dist/es5/mask/mask-pass.js.map +0 -1
  94. package/dist/es5/mask/shader-module.js +0 -38
  95. package/dist/es5/mask/shader-module.js.map +0 -1
  96. package/dist/es5/path-style/path-style-extension.js +0 -169
  97. package/dist/es5/path-style/path-style-extension.js.map +0 -1
  98. package/dist/es5/path-style/shaders.glsl.js +0 -25
  99. package/dist/es5/path-style/shaders.glsl.js.map +0 -1
  100. package/dist/es5/terrain/height-map-builder.js +0 -111
  101. package/dist/es5/terrain/height-map-builder.js.map +0 -1
  102. package/dist/es5/terrain/shader-module.js +0 -86
  103. package/dist/es5/terrain/shader-module.js.map +0 -1
  104. package/dist/es5/terrain/terrain-cover.js +0 -256
  105. package/dist/es5/terrain/terrain-cover.js.map +0 -1
  106. package/dist/es5/terrain/terrain-effect.js +0 -326
  107. package/dist/es5/terrain/terrain-effect.js.map +0 -1
  108. package/dist/es5/terrain/terrain-extension.js +0 -94
  109. package/dist/es5/terrain/terrain-extension.js.map +0 -1
  110. package/dist/es5/terrain/terrain-pass.js +0 -121
  111. package/dist/es5/terrain/terrain-pass.js.map +0 -1
  112. package/dist/es5/terrain/terrain-picking-pass.js +0 -124
  113. package/dist/es5/terrain/terrain-picking-pass.js.map +0 -1
  114. package/dist/es5/terrain/utils.js +0 -35
  115. package/dist/es5/terrain/utils.js.map +0 -1
  116. package/dist/es5/utils/debug.js +0 -71
  117. package/dist/es5/utils/debug.js.map +0 -1
  118. package/dist/es5/utils/projection-utils.js +0 -168
  119. package/dist/es5/utils/projection-utils.js.map +0 -1
  120. package/dist/esm/brushing/brushing-extension.js +0 -68
  121. package/dist/esm/brushing/brushing-extension.js.map +0 -1
  122. package/dist/esm/brushing/shader-module.js.map +0 -1
  123. package/dist/esm/clip/clip-extension.js +0 -86
  124. package/dist/esm/clip/clip-extension.js.map +0 -1
  125. package/dist/esm/collision-filter/collision-filter-effect.js +0 -246
  126. package/dist/esm/collision-filter/collision-filter-effect.js.map +0 -1
  127. package/dist/esm/collision-filter/collision-filter-extension.js +0 -75
  128. package/dist/esm/collision-filter/collision-filter-extension.js.map +0 -1
  129. package/dist/esm/collision-filter/collision-filter-pass.js +0 -32
  130. package/dist/esm/collision-filter/collision-filter-pass.js.map +0 -1
  131. package/dist/esm/collision-filter/shader-module.js.map +0 -1
  132. package/dist/esm/data-filter/aggregator.js +0 -102
  133. package/dist/esm/data-filter/aggregator.js.map +0 -1
  134. package/dist/esm/data-filter/data-filter-extension.js +0 -189
  135. package/dist/esm/data-filter/data-filter-extension.js.map +0 -1
  136. package/dist/esm/data-filter/shader-module.js +0 -164
  137. package/dist/esm/data-filter/shader-module.js.map +0 -1
  138. package/dist/esm/fill-style/fill-style-extension.js +0 -156
  139. package/dist/esm/fill-style/fill-style-extension.js.map +0 -1
  140. package/dist/esm/fill-style/shaders.glsl.js.map +0 -1
  141. package/dist/esm/fp64/fp64-extension.js +0 -20
  142. package/dist/esm/fp64/fp64-extension.js.map +0 -1
  143. package/dist/esm/fp64/project64.glsl.js.map +0 -1
  144. package/dist/esm/fp64/project64.js +0 -43
  145. package/dist/esm/fp64/project64.js.map +0 -1
  146. package/dist/esm/index.js +0 -11
  147. package/dist/esm/index.js.map +0 -1
  148. package/dist/esm/mask/mask-effect.js +0 -228
  149. package/dist/esm/mask/mask-effect.js.map +0 -1
  150. package/dist/esm/mask/mask-extension.js +0 -83
  151. package/dist/esm/mask/mask-extension.js.map +0 -1
  152. package/dist/esm/mask/mask-pass.js +0 -58
  153. package/dist/esm/mask/mask-pass.js.map +0 -1
  154. package/dist/esm/mask/shader-module.js.map +0 -1
  155. package/dist/esm/path-style/path-style-extension.js +0 -130
  156. package/dist/esm/path-style/path-style-extension.js.map +0 -1
  157. package/dist/esm/path-style/shaders.glsl.js.map +0 -1
  158. package/dist/esm/terrain/height-map-builder.js +0 -86
  159. package/dist/esm/terrain/height-map-builder.js.map +0 -1
  160. package/dist/esm/terrain/shader-module.js +0 -127
  161. package/dist/esm/terrain/shader-module.js.map +0 -1
  162. package/dist/esm/terrain/terrain-cover.js +0 -212
  163. package/dist/esm/terrain/terrain-cover.js.map +0 -1
  164. package/dist/esm/terrain/terrain-effect.js +0 -219
  165. package/dist/esm/terrain/terrain-effect.js.map +0 -1
  166. package/dist/esm/terrain/terrain-extension.js +0 -59
  167. package/dist/esm/terrain/terrain-extension.js.map +0 -1
  168. package/dist/esm/terrain/terrain-pass.js +0 -71
  169. package/dist/esm/terrain/terrain-pass.js.map +0 -1
  170. package/dist/esm/terrain/terrain-picking-pass.js +0 -73
  171. package/dist/esm/terrain/terrain-picking-pass.js.map +0 -1
  172. package/dist/esm/terrain/utils.js +0 -19
  173. package/dist/esm/terrain/utils.js.map +0 -1
  174. package/dist/esm/utils/debug.js +0 -61
  175. package/dist/esm/utils/debug.js.map +0 -1
  176. package/dist/esm/utils/projection-utils.js +0 -134
  177. package/dist/esm/utils/projection-utils.js.map +0 -1
  178. /package/{typed → dist}/brushing/brushing-extension.d.ts +0 -0
  179. /package/{typed → dist}/brushing/brushing-extension.d.ts.map +0 -0
  180. /package/{typed → dist}/brushing/shader-module.d.ts +0 -0
  181. /package/{typed → dist}/brushing/shader-module.d.ts.map +0 -0
  182. /package/{typed → dist}/clip/clip-extension.d.ts +0 -0
  183. /package/{typed → dist}/clip/clip-extension.d.ts.map +0 -0
  184. /package/{typed → dist}/collision-filter/collision-filter-effect.d.ts +0 -0
  185. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts +0 -0
  186. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts.map +0 -0
  187. /package/{typed → dist}/collision-filter/collision-filter-pass.d.ts +0 -0
  188. /package/{typed → dist}/collision-filter/shader-module.d.ts +0 -0
  189. /package/{typed → dist}/collision-filter/shader-module.d.ts.map +0 -0
  190. /package/{typed → dist}/data-filter/aggregator.d.ts +0 -0
  191. /package/{typed → dist}/data-filter/aggregator.d.ts.map +0 -0
  192. /package/{typed → dist}/data-filter/data-filter-extension.d.ts +0 -0
  193. /package/{typed → dist}/data-filter/shader-module.d.ts +0 -0
  194. /package/{typed → dist}/data-filter/shader-module.d.ts.map +0 -0
  195. /package/{typed → dist}/fill-style/fill-style-extension.d.ts +0 -0
  196. /package/{typed → dist}/fill-style/fill-style-extension.d.ts.map +0 -0
  197. /package/{typed → dist}/fill-style/shaders.glsl.d.ts +0 -0
  198. /package/{typed → dist}/fill-style/shaders.glsl.d.ts.map +0 -0
  199. /package/{typed → dist}/fp64/fp64-extension.d.ts +0 -0
  200. /package/{typed → dist}/fp64/fp64-extension.d.ts.map +0 -0
  201. /package/{typed → dist}/fp64/project64.d.ts +0 -0
  202. /package/{typed → dist}/fp64/project64.d.ts.map +0 -0
  203. /package/{typed → dist}/fp64/project64.glsl.d.ts +0 -0
  204. /package/{typed → dist}/fp64/project64.glsl.d.ts.map +0 -0
  205. /package/{typed → dist}/index.d.ts +0 -0
  206. /package/{typed → dist}/index.d.ts.map +0 -0
  207. /package/{typed → dist}/mask/mask-effect.d.ts +0 -0
  208. /package/{typed → dist}/mask/mask-extension.d.ts +0 -0
  209. /package/{typed → dist}/mask/mask-extension.d.ts.map +0 -0
  210. /package/{typed → dist}/mask/mask-pass.d.ts +0 -0
  211. /package/{typed → dist}/mask/shader-module.d.ts +0 -0
  212. /package/{typed → dist}/mask/shader-module.d.ts.map +0 -0
  213. /package/{typed → dist}/path-style/path-style-extension.d.ts +0 -0
  214. /package/{typed → dist}/path-style/path-style-extension.d.ts.map +0 -0
  215. /package/{typed → dist}/path-style/shaders.glsl.d.ts +0 -0
  216. /package/{typed → dist}/path-style/shaders.glsl.d.ts.map +0 -0
  217. /package/{typed → dist}/terrain/height-map-builder.d.ts +0 -0
  218. /package/{typed → dist}/terrain/height-map-builder.d.ts.map +0 -0
  219. /package/{typed → dist}/terrain/shader-module.d.ts +0 -0
  220. /package/{typed → dist}/terrain/shader-module.d.ts.map +0 -0
  221. /package/{typed → dist}/terrain/terrain-cover.d.ts +0 -0
  222. /package/{typed → dist}/terrain/terrain-cover.d.ts.map +0 -0
  223. /package/{typed → dist}/terrain/terrain-effect.d.ts +0 -0
  224. /package/{typed → dist}/terrain/terrain-extension.d.ts +0 -0
  225. /package/{typed → dist}/terrain/terrain-extension.d.ts.map +0 -0
  226. /package/{typed → dist}/terrain/terrain-pass.d.ts +0 -0
  227. /package/{typed → dist}/terrain/terrain-picking-pass.d.ts +0 -0
  228. /package/{typed → dist}/terrain/utils.d.ts +0 -0
  229. /package/{typed → dist}/terrain/utils.d.ts.map +0 -0
  230. /package/{typed → dist}/utils/debug.d.ts +0 -0
  231. /package/{typed → dist}/utils/projection-utils.d.ts +0 -0
  232. /package/{typed → dist}/utils/projection-utils.d.ts.map +0 -0
@@ -1,219 +0,0 @@
1
- import { log, getShaderAssembler } from '@deck.gl/core';
2
- import { terrainModule } from './shader-module';
3
- import { TerrainCover } from './terrain-cover';
4
- import { TerrainPass } from './terrain-pass';
5
- import { TerrainPickingPass } from './terrain-picking-pass';
6
- import { HeightMapBuilder } from './height-map-builder';
7
- export class TerrainEffect {
8
- constructor() {
9
- this.id = 'terrain-effect';
10
- this.props = null;
11
- this.useInPicking = true;
12
- this.isPicking = false;
13
- this.isDrapingEnabled = false;
14
- this.dummyHeightMap = void 0;
15
- this.heightMap = void 0;
16
- this.terrainPass = void 0;
17
- this.terrainPickingPass = void 0;
18
- this.terrainCovers = new Map();
19
- }
20
-
21
- initialize(device) {
22
- this.dummyHeightMap = device.createTexture({
23
- width: 1,
24
- height: 1,
25
- data: new Uint8Array([0, 0, 0, 0])
26
- });
27
- this.terrainPass = new TerrainPass(device, {
28
- id: 'terrain'
29
- });
30
- this.terrainPickingPass = new TerrainPickingPass(device, {
31
- id: 'terrain-picking'
32
- });
33
-
34
- if (HeightMapBuilder.isSupported(device)) {
35
- this.heightMap = new HeightMapBuilder(device);
36
- } else {
37
- log.warn('Terrain offset mode is not supported by this browser')();
38
- }
39
-
40
- getShaderAssembler().addDefaultModule(terrainModule);
41
- }
42
-
43
- preRender(device, opts) {
44
- if (!this.dummyHeightMap) {
45
- this.initialize(device);
46
-
47
- for (const layer of opts.layers) {
48
- if (layer.props.operation.includes('terrain')) {
49
- layer.setChangeFlags({
50
- extensionsChanged: true
51
- });
52
- }
53
- }
54
- }
55
-
56
- if (opts.pickZ) {
57
- this.isDrapingEnabled = false;
58
- return;
59
- }
60
-
61
- const {
62
- viewports,
63
- isPicking = false
64
- } = opts;
65
- this.isPicking = isPicking;
66
- this.isDrapingEnabled = true;
67
- const viewport = viewports[0];
68
- const layers = (isPicking ? this.terrainPickingPass : this.terrainPass).getRenderableLayers(viewport, opts);
69
- const terrainLayers = layers.filter(l => l.props.operation.includes('terrain'));
70
-
71
- if (terrainLayers.length === 0) {
72
- return;
73
- }
74
-
75
- if (!isPicking) {
76
- const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');
77
-
78
- if (offsetLayers.length > 0) {
79
- this._updateHeightMap(terrainLayers, viewport, opts);
80
- }
81
- }
82
-
83
- const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');
84
-
85
- this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);
86
- }
87
-
88
- getModuleParameters(layer) {
89
- var _this$heightMap, _this$heightMap2;
90
-
91
- const {
92
- terrainDrawMode
93
- } = layer.state;
94
- return {
95
- heightMap: (_this$heightMap = this.heightMap) === null || _this$heightMap === void 0 ? void 0 : _this$heightMap.getRenderFramebuffer(),
96
- heightMapBounds: (_this$heightMap2 = this.heightMap) === null || _this$heightMap2 === void 0 ? void 0 : _this$heightMap2.bounds,
97
- dummyHeightMap: this.dummyHeightMap,
98
- terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,
99
- useTerrainHeightMap: terrainDrawMode === 'offset',
100
- terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')
101
- };
102
- }
103
-
104
- cleanup() {
105
- if (this.dummyHeightMap) {
106
- this.dummyHeightMap.delete();
107
- this.dummyHeightMap = undefined;
108
- }
109
-
110
- if (this.heightMap) {
111
- this.heightMap.delete();
112
- this.heightMap = undefined;
113
- }
114
-
115
- for (const terrainCover of this.terrainCovers.values()) {
116
- terrainCover.delete();
117
- }
118
-
119
- this.terrainCovers.clear();
120
- }
121
-
122
- _updateHeightMap(terrainLayers, viewport, opts) {
123
- if (!this.heightMap) {
124
- return;
125
- }
126
-
127
- const shouldUpdate = this.heightMap.shouldUpdate({
128
- layers: terrainLayers,
129
- viewport
130
- });
131
-
132
- if (!shouldUpdate) {
133
- return;
134
- }
135
-
136
- this.terrainPass.renderHeightMap(this.heightMap, { ...opts,
137
- layers: terrainLayers,
138
- moduleParameters: {
139
- heightMapBounds: this.heightMap.bounds,
140
- dummyHeightMap: this.dummyHeightMap,
141
- devicePixelRatio: 1,
142
- drawToTerrainHeightMap: true
143
- }
144
- });
145
- }
146
-
147
- _updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts) {
148
- const layerNeedsRedraw = {};
149
-
150
- for (const layer of drapeLayers) {
151
- if (layer.state.terrainCoverNeedsRedraw) {
152
- layerNeedsRedraw[layer.id] = true;
153
- layer.state.terrainCoverNeedsRedraw = false;
154
- }
155
- }
156
-
157
- for (const terrainCover of this.terrainCovers.values()) {
158
- terrainCover.isDirty = terrainCover.isDirty || terrainCover.shouldUpdate({
159
- layerNeedsRedraw
160
- });
161
- }
162
-
163
- for (const layer of terrainLayers) {
164
- this._updateTerrainCover(layer, drapeLayers, viewport, opts);
165
- }
166
-
167
- if (!this.isPicking) {
168
- this._pruneTerrainCovers();
169
- }
170
- }
171
-
172
- _updateTerrainCover(terrainLayer, drapeLayers, viewport, opts) {
173
- const renderPass = this.isPicking ? this.terrainPickingPass : this.terrainPass;
174
- let terrainCover = this.terrainCovers.get(terrainLayer.id);
175
-
176
- if (!terrainCover) {
177
- terrainCover = new TerrainCover(terrainLayer);
178
- this.terrainCovers.set(terrainLayer.id, terrainCover);
179
- }
180
-
181
- try {
182
- const isDirty = terrainCover.shouldUpdate({
183
- targetLayer: terrainLayer,
184
- viewport,
185
- layers: drapeLayers
186
- });
187
-
188
- if (this.isPicking || terrainCover.isDirty || isDirty) {
189
- renderPass.renderTerrainCover(terrainCover, { ...opts,
190
- layers: drapeLayers,
191
- moduleParameters: {
192
- dummyHeightMap: this.dummyHeightMap,
193
- terrainSkipRender: false,
194
- devicePixelRatio: 1
195
- }
196
- });
197
- terrainCover.isDirty = false;
198
- }
199
- } catch (err) {
200
- terrainLayer.raiseError(err, `Error rendering terrain cover ${terrainCover.id}`);
201
- }
202
- }
203
-
204
- _pruneTerrainCovers() {
205
- const idsToRemove = [];
206
-
207
- for (const [id, terrainCover] of this.terrainCovers) {
208
- if (!terrainCover.isActive) {
209
- idsToRemove.push(id);
210
- }
211
- }
212
-
213
- for (const id of idsToRemove) {
214
- this.terrainCovers.delete(id);
215
- }
216
- }
217
-
218
- }
219
- //# sourceMappingURL=terrain-effect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/terrain/terrain-effect.ts"],"names":["log","getShaderAssembler","terrainModule","TerrainCover","TerrainPass","TerrainPickingPass","HeightMapBuilder","TerrainEffect","id","props","useInPicking","isPicking","isDrapingEnabled","dummyHeightMap","heightMap","terrainPass","terrainPickingPass","terrainCovers","Map","initialize","device","createTexture","width","height","data","Uint8Array","isSupported","warn","addDefaultModule","preRender","opts","layer","layers","operation","includes","setChangeFlags","extensionsChanged","pickZ","viewports","viewport","getRenderableLayers","terrainLayers","filter","l","length","offsetLayers","state","terrainDrawMode","_updateHeightMap","drapeLayers","_updateTerrainCovers","getModuleParameters","getRenderFramebuffer","heightMapBounds","bounds","terrainCover","get","useTerrainHeightMap","terrainSkipRender","cleanup","delete","undefined","values","clear","shouldUpdate","renderHeightMap","moduleParameters","devicePixelRatio","drawToTerrainHeightMap","layerNeedsRedraw","terrainCoverNeedsRedraw","isDirty","_updateTerrainCover","_pruneTerrainCovers","terrainLayer","renderPass","set","targetLayer","renderTerrainCover","err","raiseError","idsToRemove","isActive","push"],"mappings":"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","sourcesContent":["import {Device, Texture} from '@luma.gl/core';\nimport {log, getShaderAssembler} from '@deck.gl/core';\n\nimport {terrainModule, TerrainModuleSettings} from './shader-module';\nimport {TerrainCover} from './terrain-cover';\nimport {TerrainPass} from './terrain-pass';\nimport {TerrainPickingPass, TerrainPickingPassRenderOptions} from './terrain-picking-pass';\nimport {HeightMapBuilder} from './height-map-builder';\n\nimport type {Effect, PreRenderOptions, Layer, Viewport} from '@deck.gl/core';\n\n/** Class to manage terrain effect */\nexport class TerrainEffect implements Effect {\n id = 'terrain-effect';\n props = null;\n useInPicking = true;\n\n /** true if picking in the current pass */\n private isPicking: boolean = false;\n /** true if should use in the current pass */\n private isDrapingEnabled: boolean = false;\n /** An empty texture as placeholder */\n private dummyHeightMap?: Texture;\n /** A texture encoding the ground elevation, updated once per redraw. Used by layers with offset mode */\n private heightMap?: HeightMapBuilder;\n private terrainPass!: TerrainPass;\n private terrainPickingPass!: TerrainPickingPass;\n /** One texture for each primitive terrain layer, into which the draped layers render */\n private terrainCovers: Map<string, TerrainCover> = new Map();\n\n initialize(device: Device) {\n this.dummyHeightMap = device.createTexture({\n width: 1,\n height: 1,\n data: new Uint8Array([0, 0, 0, 0])\n });\n this.terrainPass = new TerrainPass(device, {id: 'terrain'});\n this.terrainPickingPass = new TerrainPickingPass(device, {id: 'terrain-picking'});\n\n if (HeightMapBuilder.isSupported(device)) {\n this.heightMap = new HeightMapBuilder(device);\n } else {\n log.warn('Terrain offset mode is not supported by this browser')();\n }\n\n getShaderAssembler().addDefaultModule(terrainModule);\n }\n\n preRender(device: Device, opts: PreRenderOptions): void {\n if (!this.dummyHeightMap) {\n // First time this effect is in use, initialize resources and register the shader module\n this.initialize(device);\n for (const layer of opts.layers) {\n // Force the terrain layer (and its descendents) to rebuild their models with the new shader\n if (layer.props.operation.includes('terrain')) {\n layer.setChangeFlags({extensionsChanged: true});\n }\n }\n }\n\n // @ts-expect-error pickZ only defined in picking pass\n if (opts.pickZ) {\n // Do not update if picking attributes\n this.isDrapingEnabled = false;\n return;\n }\n\n const {viewports, isPicking = false} = opts;\n this.isPicking = isPicking;\n this.isDrapingEnabled = true;\n\n // TODO - support multiple views?\n const viewport = viewports[0];\n const layers = (isPicking ? this.terrainPickingPass : this.terrainPass).getRenderableLayers(\n viewport,\n opts as TerrainPickingPassRenderOptions\n );\n\n const terrainLayers = layers.filter(l => l.props.operation.includes('terrain'));\n if (terrainLayers.length === 0) {\n return;\n }\n\n if (!isPicking) {\n const offsetLayers = layers.filter(l => l.state.terrainDrawMode === 'offset');\n if (offsetLayers.length > 0) {\n this._updateHeightMap(terrainLayers, viewport, opts);\n }\n }\n\n const drapeLayers = layers.filter(l => l.state.terrainDrawMode === 'drape');\n this._updateTerrainCovers(terrainLayers, drapeLayers, viewport, opts);\n }\n\n getModuleParameters(layer: Layer): TerrainModuleSettings {\n const {terrainDrawMode} = layer.state;\n\n return {\n // @ts-expect-error\n heightMap: this.heightMap?.getRenderFramebuffer(),\n heightMapBounds: this.heightMap?.bounds,\n dummyHeightMap: this.dummyHeightMap!,\n terrainCover: this.isDrapingEnabled ? this.terrainCovers.get(layer.id) : null,\n useTerrainHeightMap: terrainDrawMode === 'offset',\n terrainSkipRender: terrainDrawMode === 'drape' || !layer.props.operation.includes('draw')\n };\n }\n\n cleanup(): void {\n if (this.dummyHeightMap) {\n this.dummyHeightMap.delete();\n this.dummyHeightMap = undefined;\n }\n\n if (this.heightMap) {\n this.heightMap.delete();\n this.heightMap = undefined;\n }\n\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.delete();\n }\n this.terrainCovers.clear();\n }\n\n private _updateHeightMap(terrainLayers: Layer[], viewport: Viewport, opts: PreRenderOptions) {\n if (!this.heightMap) {\n // Not supported\n return;\n }\n\n const shouldUpdate = this.heightMap.shouldUpdate({layers: terrainLayers, viewport});\n if (!shouldUpdate) {\n return;\n }\n\n this.terrainPass.renderHeightMap(this.heightMap, {\n ...opts,\n layers: terrainLayers,\n moduleParameters: {\n heightMapBounds: this.heightMap.bounds,\n dummyHeightMap: this.dummyHeightMap,\n devicePixelRatio: 1,\n drawToTerrainHeightMap: true\n }\n });\n }\n\n private _updateTerrainCovers(\n terrainLayers: Layer[],\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n // Mark a terrain cover as dirty if one of the drape layers needs redraw\n const layerNeedsRedraw: Record<string, boolean> = {};\n for (const layer of drapeLayers) {\n if (layer.state.terrainCoverNeedsRedraw) {\n layerNeedsRedraw[layer.id] = true;\n layer.state.terrainCoverNeedsRedraw = false;\n }\n }\n for (const terrainCover of this.terrainCovers.values()) {\n terrainCover.isDirty = terrainCover.isDirty || terrainCover.shouldUpdate({layerNeedsRedraw});\n }\n\n for (const layer of terrainLayers) {\n this._updateTerrainCover(layer, drapeLayers, viewport, opts);\n }\n\n if (!this.isPicking) {\n this._pruneTerrainCovers();\n }\n }\n\n private _updateTerrainCover(\n terrainLayer: Layer,\n drapeLayers: Layer[],\n viewport: Viewport,\n opts: PreRenderOptions\n ) {\n const renderPass = this.isPicking ? this.terrainPickingPass : this.terrainPass;\n let terrainCover = this.terrainCovers.get(terrainLayer.id);\n if (!terrainCover) {\n terrainCover = new TerrainCover(terrainLayer);\n this.terrainCovers.set(terrainLayer.id, terrainCover);\n }\n try {\n const isDirty = terrainCover.shouldUpdate({\n targetLayer: terrainLayer,\n viewport,\n layers: drapeLayers\n });\n if (this.isPicking || terrainCover.isDirty || isDirty) {\n renderPass.renderTerrainCover(terrainCover, {\n ...opts,\n layers: drapeLayers,\n moduleParameters: {\n dummyHeightMap: this.dummyHeightMap,\n terrainSkipRender: false,\n devicePixelRatio: 1\n }\n });\n terrainCover.isDirty = false;\n }\n } catch (err) {\n terrainLayer.raiseError(err as Error, `Error rendering terrain cover ${terrainCover.id}`);\n }\n }\n\n private _pruneTerrainCovers() {\n /** Prune the cache, remove textures for layers that have been removed */\n const idsToRemove: string[] = [];\n for (const [id, terrainCover] of this.terrainCovers) {\n if (!terrainCover.isActive) {\n idsToRemove.push(id);\n }\n }\n for (const id of idsToRemove) {\n this.terrainCovers.delete(id);\n }\n }\n}\n"],"file":"terrain-effect.js"}
@@ -1,59 +0,0 @@
1
- import { LayerExtension } from '@deck.gl/core';
2
- import { TerrainEffect } from './terrain-effect';
3
- import { terrainModule } from './shader-module';
4
- const defaultProps = {
5
- terrainDrawMode: undefined
6
- };
7
- export default class TerrainExtension extends LayerExtension {
8
- getShaders() {
9
- return {
10
- modules: [terrainModule]
11
- };
12
- }
13
-
14
- initializeState() {
15
- var _this$context$deck;
16
-
17
- (_this$context$deck = this.context.deck) === null || _this$context$deck === void 0 ? void 0 : _this$context$deck._addDefaultEffect(new TerrainEffect());
18
- }
19
-
20
- updateState(params) {
21
- const {
22
- props,
23
- oldProps
24
- } = params;
25
-
26
- if (this.state.terrainDrawMode && props.terrainDrawMode === oldProps.terrainDrawMode && props.extruded === oldProps.extruded) {
27
- return;
28
- }
29
-
30
- let {
31
- terrainDrawMode
32
- } = props;
33
-
34
- if (!terrainDrawMode) {
35
- var _this$getAttributeMan;
36
-
37
- const is3d = this.props.extruded;
38
- const attributes = (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 ? void 0 : _this$getAttributeMan.attributes;
39
- const hasAnchor = attributes && 'instancePositions' in attributes;
40
- terrainDrawMode = is3d || hasAnchor ? 'offset' : 'drape';
41
- }
42
-
43
- this.setState({
44
- terrainDrawMode
45
- });
46
- }
47
-
48
- onNeedsRedraw() {
49
- const state = this.state;
50
-
51
- if (state.terrainDrawMode === 'drape') {
52
- state.terrainCoverNeedsRedraw = true;
53
- }
54
- }
55
-
56
- }
57
- TerrainExtension.defaultProps = defaultProps;
58
- TerrainExtension.extensionName = 'TerrainExtension';
59
- //# sourceMappingURL=terrain-extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/terrain/terrain-extension.ts"],"names":["LayerExtension","TerrainEffect","terrainModule","defaultProps","terrainDrawMode","undefined","TerrainExtension","getShaders","modules","initializeState","context","deck","_addDefaultEffect","updateState","params","props","oldProps","state","extruded","is3d","attributes","getAttributeManager","hasAnchor","setState","onNeedsRedraw","terrainCoverNeedsRedraw","extensionName"],"mappings":"AAAA,SAAQA,cAAR,QAA+C,eAA/C;AACA,SAAQC,aAAR,QAA4B,kBAA5B;AACA,SAAQC,aAAR,QAA4B,iBAA5B;AAIA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,eAAe,EAAEC;AADE,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,eAAX,IACAW,KAAK,CAACX,eAAN,KAA0BY,QAAQ,CAACZ,eADnC,IAGAW,KAAK,CAACG,QAAN,KAAmBF,QAAQ,CAACE,QAJ9B,EAKE;AACA;AACD;;AAED,QAAI;AAACd,MAAAA;AAAD,QAAoBW,KAAxB;;AACA,QAAI,CAACX,eAAL,EAAsB;AAAA;;AAGpB,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,eAAe,GAAGe,IAAI,IAAIG,SAAR,GAAoB,QAApB,GAA+B,OAAjD;AACD;;AACD,SAAKC,QAAL,CAAc;AAACnB,MAAAA;AAAD,KAAd;AACD;;AAEDoB,EAAAA,aAAa,GAAwB;AACnC,UAAMP,KAAK,GAAG,KAAKA,KAAnB;;AACA,QAAIA,KAAK,CAACb,eAAN,KAA0B,OAA9B,EAAuC;AACrCa,MAAAA,KAAK,CAACQ,uBAAN,GAAgC,IAAhC;AACD;AACF;;AA9C0D;AAAxCnB,gB,CACZH,Y,GAAeA,Y;AADHG,gB,CAEZoB,a,GAAgB,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 terrainDrawMode: 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 terrainDrawMode?: 'offset' | 'drape';\n};\n\ntype TerrainExtensionState = {\n /** Resolved fitting mode */\n terrainDrawMode: '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.terrainDrawMode &&\n props.terrainDrawMode === oldProps.terrainDrawMode &&\n // @ts-ignore `extruded` may not exist in props\n props.extruded === oldProps.extruded\n ) {\n return;\n }\n\n let {terrainDrawMode} = props;\n if (!terrainDrawMode) {\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 terrainDrawMode = is3d || hasAnchor ? 'offset' : 'drape';\n }\n this.setState({terrainDrawMode});\n }\n\n onNeedsRedraw(this: Layer<{}>): void {\n const state = this.state as TerrainExtensionState;\n if (state.terrainDrawMode === 'drape') {\n state.terrainCoverNeedsRedraw = true;\n }\n }\n}\n"],"file":"terrain-extension.js"}
@@ -1,71 +0,0 @@
1
- import { withGLParameters } from '@luma.gl/webgl';
2
- import { GL } from '@luma.gl/constants';
3
- import { _LayersPass as LayersPass } from '@deck.gl/core';
4
- export class TerrainPass extends LayersPass {
5
- getRenderableLayers(viewport, opts) {
6
- const {
7
- layers
8
- } = opts;
9
- const result = [];
10
-
11
- const drawParamsByIndex = this._getDrawLayerParams(viewport, opts, true);
12
-
13
- for (let i = 0; i < layers.length; i++) {
14
- const layer = layers[i];
15
-
16
- if (!layer.isComposite && drawParamsByIndex[i].shouldDrawLayer) {
17
- result.push(layer);
18
- }
19
- }
20
-
21
- return result;
22
- }
23
-
24
- renderHeightMap(heightMap, opts) {
25
- const target = heightMap.getRenderFramebuffer();
26
- const viewport = heightMap.renderViewport;
27
-
28
- if (!target || !viewport) {
29
- return;
30
- }
31
-
32
- target.resize(viewport);
33
- withGLParameters(this.device, {
34
- clearColor: [0, 0, 0, 0],
35
- blend: true,
36
- blendFunc: [1, 1],
37
- blendEquation: 32776,
38
- depthTest: false
39
- }, () => this.render({ ...opts,
40
- target,
41
- pass: 'terrain-height-map',
42
- layers: opts.layers,
43
- viewports: [viewport],
44
- effects: []
45
- }));
46
- }
47
-
48
- renderTerrainCover(terrainCover, opts) {
49
- const target = terrainCover.getRenderFramebuffer();
50
- const viewport = terrainCover.renderViewport;
51
-
52
- if (!target || !viewport) {
53
- return;
54
- }
55
-
56
- const layers = terrainCover.filterLayers(opts.layers);
57
- target.resize(viewport);
58
- withGLParameters(this.device, {
59
- clearColor: [0, 0, 0, 0],
60
- depthTest: false
61
- }, () => this.render({ ...opts,
62
- target,
63
- pass: `terrain-cover-${terrainCover.id}`,
64
- layers,
65
- effects: [],
66
- viewports: [viewport]
67
- }));
68
- }
69
-
70
- }
71
- //# sourceMappingURL=terrain-pass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/terrain/terrain-pass.ts"],"names":["withGLParameters","GL","_LayersPass","LayersPass","TerrainPass","getRenderableLayers","viewport","opts","layers","result","drawParamsByIndex","_getDrawLayerParams","i","length","layer","isComposite","shouldDrawLayer","push","renderHeightMap","heightMap","target","getRenderFramebuffer","renderViewport","resize","device","clearColor","blend","blendFunc","blendEquation","depthTest","render","pass","viewports","effects","renderTerrainCover","terrainCover","filterLayers","id"],"mappings":"AAAA,SAAQA,gBAAR,QAA+B,gBAA/B;AACA,SAAQC,EAAR,QAAiB,oBAAjB;AACA,SAAyBC,WAAW,IAAIC,UAAxC,QAAkF,eAAlF;AAOA,OAAO,MAAMC,WAAN,SAA0BD,UAA1B,CAAqC;AAC1CE,EAAAA,mBAAmB,CAACC,QAAD,EAAqBC,IAArB,EAA8D;AAC/E,UAAM;AAACC,MAAAA;AAAD,QAAWD,IAAjB;AACA,UAAME,MAAe,GAAG,EAAxB;;AACA,UAAMC,iBAAiB,GAAG,KAAKC,mBAAL,CAAyBL,QAAzB,EAAmCC,IAAnC,EAAyC,IAAzC,CAA1B;;AACA,SAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,MAAM,CAACK,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;AACtC,YAAME,KAAK,GAAGN,MAAM,CAACI,CAAD,CAApB;;AACA,UAAI,CAACE,KAAK,CAACC,WAAP,IAAsBL,iBAAiB,CAACE,CAAD,CAAjB,CAAqBI,eAA/C,EAAgE;AAC9DP,QAAAA,MAAM,CAACQ,IAAP,CAAYH,KAAZ;AACD;AACF;;AAED,WAAOL,MAAP;AACD;;AAEDS,EAAAA,eAAe,CAACC,SAAD,EAA8BZ,IAA9B,EAAuE;AAEpF,UAAMa,MAAM,GAAGD,SAAS,CAACE,oBAAV,EAAf;AACA,UAAMf,QAAQ,GAAGa,SAAS,CAACG,cAA3B;;AAEA,QAAI,CAACF,MAAD,IAAW,CAACd,QAAhB,EAA0B;AACxB;AACD;;AAEDc,IAAAA,MAAM,CAACG,MAAP,CAAcjB,QAAd;AAEAN,IAAAA,gBAAgB,CACd,KAAKwB,MADS,EAEd;AACEC,MAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CADd;AAEEC,MAAAA,KAAK,EAAE,IAFT;AAGEC,MAAAA,SAAS,EAAE,MAHb;AAIEC,MAAAA,aAAa,OAJf;AAKEC,MAAAA,SAAS,EAAE;AALb,KAFc,EASd,MACE,KAAKC,MAAL,CAAY,EACV,GAAGvB,IADO;AAEVa,MAAAA,MAFU;AAGVW,MAAAA,IAAI,EAAE,oBAHI;AAIVvB,MAAAA,MAAM,EAAED,IAAI,CAACC,MAJH;AAKVwB,MAAAA,SAAS,EAAE,CAAC1B,QAAD,CALD;AAMV2B,MAAAA,OAAO,EAAE;AANC,KAAZ,CAVY,CAAhB;AAmBD;;AAEDC,EAAAA,kBAAkB,CAACC,YAAD,EAA6B5B,IAA7B,EAAsE;AAEtF,UAAMa,MAAM,GAAGe,YAAY,CAACd,oBAAb,EAAf;AACA,UAAMf,QAAQ,GAAG6B,YAAY,CAACb,cAA9B;;AAEA,QAAI,CAACF,MAAD,IAAW,CAACd,QAAhB,EAA0B;AACxB;AACD;;AAED,UAAME,MAAM,GAAG2B,YAAY,CAACC,YAAb,CAA0B7B,IAAI,CAACC,MAA/B,CAAf;AACAY,IAAAA,MAAM,CAACG,MAAP,CAAcjB,QAAd;AAEAN,IAAAA,gBAAgB,CACd,KAAKwB,MADS,EAEd;AACEC,MAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CADd;AAEEI,MAAAA,SAAS,EAAE;AAFb,KAFc,EAMd,MACE,KAAKC,MAAL,CAAY,EACV,GAAGvB,IADO;AAEVa,MAAAA,MAFU;AAGVW,MAAAA,IAAI,EAAG,iBAAgBI,YAAY,CAACE,EAAG,EAH7B;AAIV7B,MAAAA,MAJU;AAKVyB,MAAAA,OAAO,EAAE,EALC;AAMVD,MAAAA,SAAS,EAAE,CAAC1B,QAAD;AAND,KAAZ,CAPY,CAAhB;AAgBD;;AA3EyC","sourcesContent":["import {withGLParameters} from '@luma.gl/webgl';\nimport {GL} from '@luma.gl/constants';\nimport {Layer, Viewport, _LayersPass as LayersPass, LayersPassRenderOptions} from '@deck.gl/core';\nimport type {HeightMapBuilder} from './height-map-builder';\nimport type {TerrainCover} from './terrain-cover';\n\nexport type TerrainPassRenderOptions = LayersPassRenderOptions;\n\n/** Renders textures used by the TerrainEffect render pass */\nexport class TerrainPass extends LayersPass {\n getRenderableLayers(viewport: Viewport, opts: TerrainPassRenderOptions): Layer[] {\n const {layers} = opts;\n const result: Layer[] = [];\n const drawParamsByIndex = this._getDrawLayerParams(viewport, opts, true);\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 }\n }\n\n return result;\n }\n\n renderHeightMap(heightMap: HeightMapBuilder, opts: Partial<TerrainPassRenderOptions>) {\n // console.log('Updating height map')\n const target = heightMap.getRenderFramebuffer();\n const viewport = heightMap.renderViewport;\n\n if (!target || !viewport) {\n return;\n }\n\n target.resize(viewport);\n\n withGLParameters(\n this.device,\n {\n clearColor: [0, 0, 0, 0],\n blend: true,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.MAX,\n depthTest: false\n },\n () =>\n this.render({\n ...opts,\n target,\n pass: 'terrain-height-map',\n layers: opts.layers!,\n viewports: [viewport],\n effects: []\n })\n );\n }\n\n renderTerrainCover(terrainCover: TerrainCover, opts: Partial<TerrainPassRenderOptions>) {\n // console.log('Updating terrain cover ' + terrainCover.id)\n const target = terrainCover.getRenderFramebuffer();\n const viewport = terrainCover.renderViewport;\n\n if (!target || !viewport) {\n return;\n }\n\n const layers = terrainCover.filterLayers(opts.layers!);\n target.resize(viewport);\n\n withGLParameters(\n this.device,\n {\n clearColor: [0, 0, 0, 0],\n depthTest: false\n },\n () =>\n this.render({\n ...opts,\n target,\n pass: `terrain-cover-${terrainCover.id}`,\n layers,\n effects: [],\n viewports: [viewport]\n })\n );\n }\n}\n"],"file":"terrain-pass.js"}
@@ -1,73 +0,0 @@
1
- import { _PickLayersPass as PickLayersPass } from '@deck.gl/core';
2
- import { withGLParameters } from '@luma.gl/webgl';
3
- export class TerrainPickingPass extends PickLayersPass {
4
- constructor(...args) {
5
- super(...args);
6
- this.drawParameters = {};
7
- }
8
-
9
- getRenderableLayers(viewport, opts) {
10
- const {
11
- layers
12
- } = opts;
13
- const result = [];
14
- this.drawParameters = {};
15
-
16
- this._resetColorEncoder(opts.pickZ);
17
-
18
- const drawParamsByIndex = this._getDrawLayerParams(viewport, opts);
19
-
20
- for (let i = 0; i < layers.length; i++) {
21
- const layer = layers[i];
22
-
23
- if (!layer.isComposite && drawParamsByIndex[i].shouldDrawLayer) {
24
- result.push(layer);
25
- this.drawParameters[layer.id] = drawParamsByIndex[i].layerParameters;
26
- }
27
- }
28
-
29
- return result;
30
- }
31
-
32
- renderTerrainCover(terrainCover, opts) {
33
- const target = terrainCover.getPickingFramebuffer();
34
- const viewport = terrainCover.renderViewport;
35
-
36
- if (!target || !viewport) {
37
- return;
38
- }
39
-
40
- const layers = terrainCover.filterLayers(opts.layers);
41
- const terrainLayer = terrainCover.targetLayer;
42
-
43
- if (terrainLayer.props.pickable) {
44
- layers.unshift(terrainLayer);
45
- }
46
-
47
- target.resize(viewport);
48
- withGLParameters(this.device, {
49
- depthTest: false
50
- }, () => this.render({ ...opts,
51
- pickingFBO: target,
52
- pass: `terrain-cover-picking-${terrainCover.id}`,
53
- layers,
54
- effects: [],
55
- viewports: [viewport],
56
- cullRect: undefined,
57
- deviceRect: viewport,
58
- pickZ: false
59
- }));
60
- }
61
-
62
- getLayerParameters(layer, layerIndex, viewport) {
63
- if (this.drawParameters[layer.id]) {
64
- return this.drawParameters[layer.id];
65
- }
66
-
67
- const parameters = super.getLayerParameters(layer, layerIndex, viewport);
68
- parameters.blend = true;
69
- return parameters;
70
- }
71
-
72
- }
73
- //# sourceMappingURL=terrain-picking-pass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/terrain/terrain-picking-pass.ts"],"names":["_PickLayersPass","PickLayersPass","withGLParameters","TerrainPickingPass","drawParameters","getRenderableLayers","viewport","opts","layers","result","_resetColorEncoder","pickZ","drawParamsByIndex","_getDrawLayerParams","i","length","layer","isComposite","shouldDrawLayer","push","id","layerParameters","renderTerrainCover","terrainCover","target","getPickingFramebuffer","renderViewport","filterLayers","terrainLayer","targetLayer","props","pickable","unshift","resize","device","depthTest","render","pickingFBO","pass","effects","viewports","cullRect","undefined","deviceRect","getLayerParameters","layerIndex","parameters","blend"],"mappings":"AAAA,SAIEA,eAAe,IAAIC,cAJrB,QAKO,eALP;AAMA,SAAQC,gBAAR,QAA+B,gBAA/B;AAQA,OAAO,MAAMC,kBAAN,SAAiCF,cAAjC,CAAgD;AAAA;AAAA;AAAA,SAOrDG,cAPqD,GAOf,EAPe;AAAA;;AASrDC,EAAAA,mBAAmB,CAACC,QAAD,EAAqBC,IAArB,EAAqE;AACtF,UAAM;AAACC,MAAAA;AAAD,QAAWD,IAAjB;AACA,UAAME,MAAe,GAAG,EAAxB;AACA,SAAKL,cAAL,GAAsB,EAAtB;;AACA,SAAKM,kBAAL,CAAwBH,IAAI,CAACI,KAA7B;;AACA,UAAMC,iBAAiB,GAAG,KAAKC,mBAAL,CAAyBP,QAAzB,EAAmCC,IAAnC,CAA1B;;AACA,SAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,MAAM,CAACO,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;AACtC,YAAME,KAAK,GAAGR,MAAM,CAACM,CAAD,CAApB;;AACA,UAAI,CAACE,KAAK,CAACC,WAAP,IAAsBL,iBAAiB,CAACE,CAAD,CAAjB,CAAqBI,eAA/C,EAAgE;AAC9DT,QAAAA,MAAM,CAACU,IAAP,CAAYH,KAAZ;AACA,aAAKZ,cAAL,CAAoBY,KAAK,CAACI,EAA1B,IAAgCR,iBAAiB,CAACE,CAAD,CAAjB,CAAqBO,eAArD;AACD;AACF;;AAED,WAAOZ,MAAP;AACD;;AAEDa,EAAAA,kBAAkB,CAACC,YAAD,EAA6BhB,IAA7B,EAA6E;AAE7F,UAAMiB,MAAM,GAAGD,YAAY,CAACE,qBAAb,EAAf;AACA,UAAMnB,QAAQ,GAAGiB,YAAY,CAACG,cAA9B;;AAEA,QAAI,CAACF,MAAD,IAAW,CAAClB,QAAhB,EAA0B;AACxB;AACD;;AAED,UAAME,MAAM,GAAGe,YAAY,CAACI,YAAb,CAA0BpB,IAAI,CAACC,MAA/B,CAAf;AACA,UAAMoB,YAAY,GAAGL,YAAY,CAACM,WAAlC;;AACA,QAAID,YAAY,CAACE,KAAb,CAAmBC,QAAvB,EAAiC;AAC/BvB,MAAAA,MAAM,CAACwB,OAAP,CAAeJ,YAAf;AACD;;AACDJ,IAAAA,MAAM,CAACS,MAAP,CAAc3B,QAAd;AAEAJ,IAAAA,gBAAgB,CACd,KAAKgC,MADS,EAEd;AACEC,MAAAA,SAAS,EAAE;AADb,KAFc,EAKd,MACE,KAAKC,MAAL,CAAY,EACV,GAAG7B,IADO;AAEV8B,MAAAA,UAAU,EAAEb,MAFF;AAGVc,MAAAA,IAAI,EAAG,yBAAwBf,YAAY,CAACH,EAAG,EAHrC;AAIVZ,MAAAA,MAJU;AAKV+B,MAAAA,OAAO,EAAE,EALC;AAMVC,MAAAA,SAAS,EAAE,CAAClC,QAAD,CAND;AASVmC,MAAAA,QAAQ,EAAEC,SATA;AAUVC,MAAAA,UAAU,EAAErC,QAVF;AAWVK,MAAAA,KAAK,EAAE;AAXG,KAAZ,CANY,CAAhB;AAoBD;;AAESiC,EAAAA,kBAAkB,CAAC5B,KAAD,EAAe6B,UAAf,EAAmCvC,QAAnC,EAA4D;AACtF,QAAI,KAAKF,cAAL,CAAoBY,KAAK,CAACI,EAA1B,CAAJ,EAAmC;AACjC,aAAO,KAAKhB,cAAL,CAAoBY,KAAK,CAACI,EAA1B,CAAP;AACD;;AACD,UAAM0B,UAAU,GAAG,MAAMF,kBAAN,CAAyB5B,KAAzB,EAAgC6B,UAAhC,EAA4CvC,QAA5C,CAAnB;AACAwC,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 {withGLParameters} from '@luma.gl/webgl';\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 withGLParameters(\n this.device,\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"}
@@ -1,19 +0,0 @@
1
- import { GL } from '@luma.gl/constants';
2
- export function createRenderTarget(device, opts) {
3
- return device.createFramebuffer({
4
- id: opts.id,
5
- colorAttachments: [device.createTexture({ ...(opts.float && {
6
- format: device.info.type === 'webgl2' ? 'rgba32float' : 'rgba8unorm',
7
- type: 5126
8
- }),
9
- mipmaps: false,
10
- sampler: {
11
- minFilter: 'linear',
12
- magFilter: 'linear',
13
- addressModeU: 'clamp-to-edge',
14
- addressModeV: 'clamp-to-edge'
15
- }
16
- })]
17
- });
18
- }
19
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/terrain/utils.ts"],"names":["GL","createRenderTarget","device","opts","createFramebuffer","id","colorAttachments","createTexture","float","format","info","type","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV"],"mappings":"AACA,SAAQA,EAAR,QAAiB,oBAAjB;AAEA,OAAO,SAASC,kBAAT,CACLC,MADK,EAELC,IAFK,EAML;AACA,SAAOD,MAAM,CAACE,iBAAP,CAAyB;AAC9BC,IAAAA,EAAE,EAAEF,IAAI,CAACE,EADqB;AAE9BC,IAAAA,gBAAgB,EAAE,CAChBJ,MAAM,CAACK,aAAP,CAAqB,EACnB,IAAIJ,IAAI,CAACK,KAAL,IAAc;AAChBC,QAAAA,MAAM,EAAEP,MAAM,CAACQ,IAAP,CAAYC,IAAZ,KAAqB,QAArB,GAAgC,aAAhC,GAAgD,YADxC;AAEhBA,QAAAA,IAAI;AAFY,OAAlB,CADmB;AAKnBC,MAAAA,OAAO,EAAE,KALU;AAMnBC,MAAAA,OAAO,EAAE;AACPC,QAAAA,SAAS,EAAE,QADJ;AAEPC,QAAAA,SAAS,EAAE,QAFJ;AAGPC,QAAAA,YAAY,EAAE,eAHP;AAIPC,QAAAA,YAAY,EAAE;AAJP;AANU,KAArB,CADgB;AAFY,GAAzB,CAAP;AAkBD","sourcesContent":["import type {Device} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\nexport function createRenderTarget(\n device: Device,\n opts: {\n id: string;\n float?: boolean;\n }\n) {\n return device.createFramebuffer({\n id: opts.id,\n colorAttachments: [\n device.createTexture({\n ...(opts.float && {\n format: device.info.type === 'webgl2' ? 'rgba32float' : 'rgba8unorm',\n type: GL.FLOAT\n }),\n mipmaps: false,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n })\n ]\n });\n}\n"],"file":"utils.js"}
@@ -1,61 +0,0 @@
1
- import { readPixelsToArray } from '@luma.gl/webgl';
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
@@ -1 +0,0 @@
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} from '@luma.gl/core';\nimport {readPixelsToArray} from '@luma.gl/webgl';\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"}