@deck.gl/aggregation-layers 9.4.0-alpha.1 → 9.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/common/aggregator/gpu-aggregator/webgl-aggregation-transform.d.ts.map +1 -1
  2. package/dist/common/aggregator/gpu-aggregator/webgl-aggregation-transform.js +1 -3
  3. package/dist/common/aggregator/gpu-aggregator/webgl-aggregation-transform.js.map +1 -1
  4. package/dist/common/aggregator/gpu-aggregator/webgl-bin-sorter.js +0 -1
  5. package/dist/common/aggregator/gpu-aggregator/webgl-bin-sorter.js.map +1 -1
  6. package/dist/dist.dev.js +642 -38
  7. package/dist/grid-layer/grid-cell-layer.d.ts.map +1 -1
  8. package/dist/grid-layer/grid-cell-layer.js +3 -2
  9. package/dist/grid-layer/grid-cell-layer.js.map +1 -1
  10. package/dist/grid-layer/grid-cell-layer.wgsl.d.ts +3 -0
  11. package/dist/grid-layer/grid-cell-layer.wgsl.d.ts.map +1 -0
  12. package/dist/grid-layer/grid-cell-layer.wgsl.js +114 -0
  13. package/dist/grid-layer/grid-cell-layer.wgsl.js.map +1 -0
  14. package/dist/grid-layer/grid-layer-uniforms.d.ts +1 -0
  15. package/dist/grid-layer/grid-layer-uniforms.d.ts.map +1 -1
  16. package/dist/grid-layer/grid-layer-uniforms.js +14 -0
  17. package/dist/grid-layer/grid-layer-uniforms.js.map +1 -1
  18. package/dist/heatmap-layer/heatmap-layer-uniforms.d.ts +2 -0
  19. package/dist/heatmap-layer/heatmap-layer-uniforms.d.ts.map +1 -1
  20. package/dist/heatmap-layer/heatmap-layer-uniforms.js +19 -0
  21. package/dist/heatmap-layer/heatmap-layer-uniforms.js.map +1 -1
  22. package/dist/heatmap-layer/heatmap-layer.d.ts.map +1 -1
  23. package/dist/heatmap-layer/heatmap-layer.js +59 -12
  24. package/dist/heatmap-layer/heatmap-layer.js.map +1 -1
  25. package/dist/heatmap-layer/max.wgsl.d.ts +3 -0
  26. package/dist/heatmap-layer/max.wgsl.d.ts.map +1 -0
  27. package/dist/heatmap-layer/max.wgsl.js +48 -0
  28. package/dist/heatmap-layer/max.wgsl.js.map +1 -0
  29. package/dist/heatmap-layer/triangle-layer-uniforms.d.ts +1 -0
  30. package/dist/heatmap-layer/triangle-layer-uniforms.d.ts.map +1 -1
  31. package/dist/heatmap-layer/triangle-layer-uniforms.js +16 -0
  32. package/dist/heatmap-layer/triangle-layer-uniforms.js.map +1 -1
  33. package/dist/heatmap-layer/triangle-layer.d.ts.map +1 -1
  34. package/dist/heatmap-layer/triangle-layer.js +3 -2
  35. package/dist/heatmap-layer/triangle-layer.js.map +1 -1
  36. package/dist/heatmap-layer/triangle-layer.wgsl.d.ts +3 -0
  37. package/dist/heatmap-layer/triangle-layer.wgsl.d.ts.map +1 -0
  38. package/dist/heatmap-layer/triangle-layer.wgsl.js +65 -0
  39. package/dist/heatmap-layer/triangle-layer.wgsl.js.map +1 -0
  40. package/dist/heatmap-layer/weights.wgsl.d.ts +3 -0
  41. package/dist/heatmap-layer/weights.wgsl.d.ts.map +1 -0
  42. package/dist/heatmap-layer/weights.wgsl.js +64 -0
  43. package/dist/heatmap-layer/weights.wgsl.js.map +1 -0
  44. package/dist/hexagon-layer/hexagon-cell-layer.d.ts.map +1 -1
  45. package/dist/hexagon-layer/hexagon-cell-layer.js +2 -2
  46. package/dist/hexagon-layer/hexagon-cell-layer.js.map +1 -1
  47. package/dist/hexagon-layer/hexagon-cell-layer.wgsl.d.ts +3 -0
  48. package/dist/hexagon-layer/hexagon-cell-layer.wgsl.d.ts.map +1 -0
  49. package/dist/hexagon-layer/hexagon-cell-layer.wgsl.js +120 -0
  50. package/dist/hexagon-layer/hexagon-cell-layer.wgsl.js.map +1 -0
  51. package/dist/hexagon-layer/hexagon-layer-uniforms.d.ts +1 -0
  52. package/dist/hexagon-layer/hexagon-layer-uniforms.d.ts.map +1 -1
  53. package/dist/hexagon-layer/hexagon-layer-uniforms.js +13 -0
  54. package/dist/hexagon-layer/hexagon-layer-uniforms.js.map +1 -1
  55. package/dist/index.cjs +13268 -1488
  56. package/dist/index.cjs.map +3 -4
  57. package/dist/screen-grid-layer/screen-grid-cell-layer.d.ts +1 -6
  58. package/dist/screen-grid-layer/screen-grid-cell-layer.d.ts.map +1 -1
  59. package/dist/screen-grid-layer/screen-grid-cell-layer.js +3 -2
  60. package/dist/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  61. package/dist/screen-grid-layer/screen-grid-cell-layer.wgsl.d.ts +3 -0
  62. package/dist/screen-grid-layer/screen-grid-cell-layer.wgsl.d.ts.map +1 -0
  63. package/dist/screen-grid-layer/screen-grid-cell-layer.wgsl.js +76 -0
  64. package/dist/screen-grid-layer/screen-grid-cell-layer.wgsl.js.map +1 -0
  65. package/dist/screen-grid-layer/screen-grid-layer-uniforms.d.ts +1 -0
  66. package/dist/screen-grid-layer/screen-grid-layer-uniforms.d.ts.map +1 -1
  67. package/dist/screen-grid-layer/screen-grid-layer-uniforms.js +12 -0
  68. package/dist/screen-grid-layer/screen-grid-layer-uniforms.js.map +1 -1
  69. package/dist.min.js +545 -35
  70. package/dist.webgl-only/common/aggregation-layer.js +68 -0
  71. package/dist.webgl-only/common/aggregation-layer.js.map +1 -0
  72. package/dist.webgl-only/common/aggregator/aggregator.js +5 -0
  73. package/dist.webgl-only/common/aggregator/aggregator.js.map +1 -0
  74. package/dist.webgl-only/common/aggregator/cpu-aggregator/aggregate.js +69 -0
  75. package/dist.webgl-only/common/aggregator/cpu-aggregator/aggregate.js.map +1 -0
  76. package/dist.webgl-only/common/aggregator/cpu-aggregator/cpu-aggregator.js +141 -0
  77. package/dist.webgl-only/common/aggregator/cpu-aggregator/cpu-aggregator.js.map +1 -0
  78. package/dist.webgl-only/common/aggregator/cpu-aggregator/sort-bins.js +44 -0
  79. package/dist.webgl-only/common/aggregator/cpu-aggregator/sort-bins.js.map +1 -0
  80. package/dist.webgl-only/common/aggregator/cpu-aggregator/vertex-accessor.js +56 -0
  81. package/dist.webgl-only/common/aggregator/cpu-aggregator/vertex-accessor.js.map +1 -0
  82. package/dist.webgl-only/common/aggregator/gpu-aggregator/aggregation-transform-uniforms.js +22 -0
  83. package/dist.webgl-only/common/aggregator/gpu-aggregator/aggregation-transform-uniforms.js.map +1 -0
  84. package/dist.webgl-only/common/aggregator/gpu-aggregator/bin-sorter-uniforms.js +18 -0
  85. package/dist.webgl-only/common/aggregator/gpu-aggregator/bin-sorter-uniforms.js.map +1 -0
  86. package/dist.webgl-only/common/aggregator/gpu-aggregator/utils.js +24 -0
  87. package/dist.webgl-only/common/aggregator/gpu-aggregator/utils.js.map +1 -0
  88. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregation-transform.js +222 -0
  89. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregation-transform.js.map +1 -0
  90. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregator.js +203 -0
  91. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregator.js.map +1 -0
  92. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-bin-sorter.js +225 -0
  93. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-bin-sorter.js.map +1 -0
  94. package/dist.webgl-only/common/aggregator/index.js +6 -0
  95. package/dist.webgl-only/common/aggregator/index.js.map +1 -0
  96. package/dist.webgl-only/common/types.js +5 -0
  97. package/dist.webgl-only/common/types.js.map +1 -0
  98. package/dist.webgl-only/common/utils/bounds-utils.js +21 -0
  99. package/dist.webgl-only/common/utils/bounds-utils.js.map +1 -0
  100. package/dist.webgl-only/common/utils/color-utils.js +65 -0
  101. package/dist.webgl-only/common/utils/color-utils.js.map +1 -0
  102. package/dist.webgl-only/common/utils/prop-utils.js +13 -0
  103. package/dist.webgl-only/common/utils/prop-utils.js.map +1 -0
  104. package/dist.webgl-only/common/utils/scale-utils.js +181 -0
  105. package/dist.webgl-only/common/utils/scale-utils.js.map +1 -0
  106. package/dist.webgl-only/contour-layer/bin-options-uniforms.js +18 -0
  107. package/dist.webgl-only/contour-layer/bin-options-uniforms.js.map +1 -0
  108. package/dist.webgl-only/contour-layer/contour-layer.js +282 -0
  109. package/dist.webgl-only/contour-layer/contour-layer.js.map +1 -0
  110. package/dist.webgl-only/contour-layer/contour-utils.js +60 -0
  111. package/dist.webgl-only/contour-layer/contour-utils.js.map +1 -0
  112. package/dist.webgl-only/contour-layer/marching-squares-codes.js +341 -0
  113. package/dist.webgl-only/contour-layer/marching-squares-codes.js.map +1 -0
  114. package/dist.webgl-only/contour-layer/marching-squares.js +151 -0
  115. package/dist.webgl-only/contour-layer/marching-squares.js.map +1 -0
  116. package/dist.webgl-only/contour-layer/value-reader.js +47 -0
  117. package/dist.webgl-only/contour-layer/value-reader.js.map +1 -0
  118. package/dist.webgl-only/grid-layer/bin-options-uniforms.js +18 -0
  119. package/dist.webgl-only/grid-layer/bin-options-uniforms.js.map +1 -0
  120. package/dist.webgl-only/grid-layer/grid-cell-layer-vertex.glsl.js +51 -0
  121. package/dist.webgl-only/grid-layer/grid-cell-layer-vertex.glsl.js.map +1 -0
  122. package/dist.webgl-only/grid-layer/grid-cell-layer.js +95 -0
  123. package/dist.webgl-only/grid-layer/grid-cell-layer.js.map +1 -0
  124. package/dist.webgl-only/grid-layer/grid-cell-layer.wgsl.js +5 -0
  125. package/dist.webgl-only/grid-layer/grid-cell-layer.wgsl.js.map +1 -0
  126. package/dist.webgl-only/grid-layer/grid-layer-uniforms.js +26 -0
  127. package/dist.webgl-only/grid-layer/grid-layer-uniforms.js.map +1 -0
  128. package/dist.webgl-only/grid-layer/grid-layer.js +362 -0
  129. package/dist.webgl-only/grid-layer/grid-layer.js.map +1 -0
  130. package/dist.webgl-only/heatmap-layer/aggregation-layer.js +140 -0
  131. package/dist.webgl-only/heatmap-layer/aggregation-layer.js.map +1 -0
  132. package/dist.webgl-only/heatmap-layer/heatmap-layer-uniforms.js +36 -0
  133. package/dist.webgl-only/heatmap-layer/heatmap-layer-uniforms.js.map +1 -0
  134. package/dist.webgl-only/heatmap-layer/heatmap-layer-utils.js +67 -0
  135. package/dist.webgl-only/heatmap-layer/heatmap-layer-utils.js.map +1 -0
  136. package/dist.webgl-only/heatmap-layer/heatmap-layer.js +513 -0
  137. package/dist.webgl-only/heatmap-layer/heatmap-layer.js.map +1 -0
  138. package/dist.webgl-only/heatmap-layer/max-fs.glsl.js +13 -0
  139. package/dist.webgl-only/heatmap-layer/max-fs.glsl.js.map +1 -0
  140. package/dist.webgl-only/heatmap-layer/max-vs.glsl.js +18 -0
  141. package/dist.webgl-only/heatmap-layer/max-vs.glsl.js.map +1 -0
  142. package/dist.webgl-only/heatmap-layer/max.wgsl.js +5 -0
  143. package/dist.webgl-only/heatmap-layer/max.wgsl.js.map +1 -0
  144. package/dist.webgl-only/heatmap-layer/triangle-layer-fragment.glsl.js +34 -0
  145. package/dist.webgl-only/heatmap-layer/triangle-layer-fragment.glsl.js.map +1 -0
  146. package/dist.webgl-only/heatmap-layer/triangle-layer-uniforms.js +25 -0
  147. package/dist.webgl-only/heatmap-layer/triangle-layer-uniforms.js.map +1 -0
  148. package/dist.webgl-only/heatmap-layer/triangle-layer-vertex.glsl.js +28 -0
  149. package/dist.webgl-only/heatmap-layer/triangle-layer-vertex.glsl.js.map +1 -0
  150. package/dist.webgl-only/heatmap-layer/triangle-layer.js +49 -0
  151. package/dist.webgl-only/heatmap-layer/triangle-layer.js.map +1 -0
  152. package/dist.webgl-only/heatmap-layer/triangle-layer.wgsl.js +5 -0
  153. package/dist.webgl-only/heatmap-layer/triangle-layer.wgsl.js.map +1 -0
  154. package/dist.webgl-only/heatmap-layer/weights-fs.glsl.js +21 -0
  155. package/dist.webgl-only/heatmap-layer/weights-fs.glsl.js.map +1 -0
  156. package/dist.webgl-only/heatmap-layer/weights-vs.glsl.js +21 -0
  157. package/dist.webgl-only/heatmap-layer/weights-vs.glsl.js.map +1 -0
  158. package/dist.webgl-only/heatmap-layer/weights.wgsl.js +5 -0
  159. package/dist.webgl-only/heatmap-layer/weights.wgsl.js.map +1 -0
  160. package/dist.webgl-only/hexagon-layer/bin-options-uniforms.js +18 -0
  161. package/dist.webgl-only/hexagon-layer/bin-options-uniforms.js.map +1 -0
  162. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer-vertex.glsl.js +55 -0
  163. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer-vertex.glsl.js.map +1 -0
  164. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.js +90 -0
  165. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.js.map +1 -0
  166. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.wgsl.js +5 -0
  167. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.wgsl.js.map +1 -0
  168. package/dist.webgl-only/hexagon-layer/hexagon-layer-uniforms.js +24 -0
  169. package/dist.webgl-only/hexagon-layer/hexagon-layer-uniforms.js.map +1 -0
  170. package/dist.webgl-only/hexagon-layer/hexagon-layer.js +360 -0
  171. package/dist.webgl-only/hexagon-layer/hexagon-layer.js.map +1 -0
  172. package/dist.webgl-only/hexagon-layer/hexbin.js +70 -0
  173. package/dist.webgl-only/hexagon-layer/hexbin.js.map +1 -0
  174. package/dist.webgl-only/index.cjs +15625 -0
  175. package/dist.webgl-only/index.cjs.map +6 -0
  176. package/dist.webgl-only/index.js +11 -0
  177. package/dist.webgl-only/index.js.map +1 -0
  178. package/dist.webgl-only/screen-grid-layer/bin-options-uniforms.js +16 -0
  179. package/dist.webgl-only/screen-grid-layer/bin-options-uniforms.js.map +1 -0
  180. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.js +88 -0
  181. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.js.map +1 -0
  182. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.wgsl.js +5 -0
  183. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.wgsl.js.map +1 -0
  184. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-fragment.glsl.js +16 -0
  185. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-fragment.glsl.js.map +1 -0
  186. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-uniforms.js +22 -0
  187. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-uniforms.js.map +1 -0
  188. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-vertex.glsl.js +31 -0
  189. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-vertex.glsl.js.map +1 -0
  190. package/dist.webgl-only/screen-grid-layer/screen-grid-layer.js +194 -0
  191. package/dist.webgl-only/screen-grid-layer/screen-grid-layer.js.map +1 -0
  192. package/package.json +14 -5
  193. package/src/common/aggregator/gpu-aggregator/webgl-aggregation-transform.ts +1 -3
  194. package/src/common/aggregator/gpu-aggregator/webgl-bin-sorter.ts +0 -1
  195. package/src/grid-layer/grid-cell-layer.ts +3 -2
  196. package/src/grid-layer/grid-cell-layer.wgsl.ts +114 -0
  197. package/src/grid-layer/grid-layer-uniforms.ts +15 -0
  198. package/src/heatmap-layer/heatmap-layer-uniforms.ts +20 -0
  199. package/src/heatmap-layer/heatmap-layer.ts +67 -13
  200. package/src/heatmap-layer/max.wgsl.ts +48 -0
  201. package/src/heatmap-layer/triangle-layer-uniforms.ts +17 -0
  202. package/src/heatmap-layer/triangle-layer.ts +3 -2
  203. package/src/heatmap-layer/triangle-layer.wgsl.ts +65 -0
  204. package/src/heatmap-layer/weights.wgsl.ts +64 -0
  205. package/src/hexagon-layer/hexagon-cell-layer.ts +2 -3
  206. package/src/hexagon-layer/hexagon-cell-layer.wgsl.ts +120 -0
  207. package/src/hexagon-layer/hexagon-layer-uniforms.ts +14 -0
  208. package/src/screen-grid-layer/screen-grid-cell-layer.ts +4 -4
  209. package/src/screen-grid-layer/screen-grid-cell-layer.wgsl.ts +76 -0
  210. package/src/screen-grid-layer/screen-grid-layer-uniforms.ts +13 -0
@@ -0,0 +1,513 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /* global setTimeout clearTimeout */
5
+ import { getBounds, boundsContain, packVertices, scaleToAspectRatio, getTextureCoordinates } from "./heatmap-layer-utils.js";
6
+ import { TextureTransform } from '@luma.gl/engine';
7
+ import { AttributeManager, log, project32 } from '@deck.gl/core';
8
+ import TriangleLayer from "./triangle-layer.js";
9
+ import AggregationLayer from "./aggregation-layer.js";
10
+ import { defaultColorRange, colorRangeToFlatArray } from "../common/utils/color-utils.js";
11
+ import weightsVs from "./weights-vs.glsl.js";
12
+ import weightsFs from "./weights-fs.glsl.js";
13
+ import maxVs from "./max-vs.glsl.js";
14
+ import maxFs from "./max-fs.glsl.js";
15
+ import maxSource from "./max.wgsl.js";
16
+ import weightsSource from "./weights.wgsl.js";
17
+ import { maxWeightUniforms, weightUniforms } from "./heatmap-layer-uniforms.js";
18
+ const RESOLUTION = 2; // (number of common space pixels) / (number texels)
19
+ const MAX_WEIGHT_REDUCTION_SIZE = 16;
20
+ const TEXTURE_PROPS = {
21
+ format: 'rgba8unorm',
22
+ dimension: '2d',
23
+ width: 1,
24
+ height: 1,
25
+ sampler: {
26
+ minFilter: 'linear',
27
+ magFilter: 'linear',
28
+ addressModeU: 'clamp-to-edge',
29
+ addressModeV: 'clamp-to-edge'
30
+ }
31
+ };
32
+ const DEFAULT_COLOR_DOMAIN = [0, 0];
33
+ const AGGREGATION_MODE = {
34
+ SUM: 0,
35
+ MEAN: 1
36
+ };
37
+ const defaultProps = {
38
+ getPosition: { type: 'accessor', value: (x) => x.position },
39
+ getWeight: { type: 'accessor', value: 1 },
40
+ intensity: { type: 'number', min: 0, value: 1 },
41
+ radiusPixels: { type: 'number', min: 1, max: 100, value: 50 },
42
+ colorRange: defaultColorRange,
43
+ threshold: { type: 'number', min: 0, max: 1, value: 0.05 },
44
+ colorDomain: { type: 'array', value: null, optional: true },
45
+ // 'SUM' or 'MEAN'
46
+ aggregation: 'SUM',
47
+ weightsTextureSize: { type: 'number', min: 128, max: 2048, value: 2048 },
48
+ debounceTimeout: { type: 'number', min: 0, max: 1000, value: 500 }
49
+ };
50
+ const FLOAT_TARGET_FEATURES = [
51
+ 'float32-renderable-webgl', // ability to render to float texture
52
+ 'texture-blend-float-webgl' // ability to blend when rendering to float texture
53
+ ];
54
+ const DIMENSIONS = {
55
+ data: {
56
+ props: ['radiusPixels']
57
+ }
58
+ };
59
+ /** Visualizes the spatial distribution of data. */
60
+ class HeatmapLayer extends AggregationLayer {
61
+ getShaders(shaders) {
62
+ let modules = [project32];
63
+ if (shaders.modules) {
64
+ modules = [...modules, ...shaders.modules];
65
+ }
66
+ return super.getShaders({ ...shaders, modules });
67
+ }
68
+ initializeState() {
69
+ super.initializeAggregationLayer(DIMENSIONS);
70
+ this.setState({ colorDomain: DEFAULT_COLOR_DOMAIN });
71
+ this._setupTextureParams();
72
+ this._setupAttributes();
73
+ this._setupResources();
74
+ }
75
+ shouldUpdateState({ changeFlags }) {
76
+ // Need to be updated when viewport changes
77
+ return changeFlags.somethingChanged;
78
+ }
79
+ /* eslint-disable max-statements,complexity */
80
+ updateState(opts) {
81
+ super.updateState(opts);
82
+ this._updateHeatmapState(opts);
83
+ }
84
+ _updateHeatmapState(opts) {
85
+ const { props, oldProps } = opts;
86
+ const changeFlags = this._getChangeFlags(opts);
87
+ if (changeFlags.dataChanged || changeFlags.viewportChanged) {
88
+ // if data is changed, do not debounce and immediately update the weight map
89
+ changeFlags.boundsChanged = this._updateBounds(changeFlags.dataChanged);
90
+ this._updateTextureRenderingBounds();
91
+ }
92
+ if (changeFlags.dataChanged || changeFlags.boundsChanged) {
93
+ // Update weight map immediately
94
+ clearTimeout(this.state.updateTimer);
95
+ this.setState({ isWeightMapDirty: true });
96
+ if (changeFlags.dataChanged) {
97
+ // Recreate weights transform if data changed, as buffer layout may have changed,
98
+ // happens when binary attibutes passed.
99
+ const weightsTransformShaders = this.getShaders({ vs: weightsVs, fs: weightsFs });
100
+ this._createWeightsTransform(weightsTransformShaders);
101
+ }
102
+ }
103
+ else if (changeFlags.viewportZoomChanged) {
104
+ // Update weight map when zoom stops
105
+ this._debouncedUpdateWeightmap();
106
+ }
107
+ if (props.colorRange !== oldProps.colorRange) {
108
+ this._updateColorTexture(opts);
109
+ }
110
+ if (this.state.isWeightMapDirty) {
111
+ this._updateWeightmap();
112
+ }
113
+ this.setState({ zoom: opts.context.viewport.zoom });
114
+ }
115
+ renderLayers() {
116
+ const { weightsTexture, triPositionBuffer, triTexCoordBuffer, maxWeightsTexture, colorTexture, colorDomain } = this.state;
117
+ const { updateTriggers, intensity, threshold, aggregation } = this.props;
118
+ const TriangleLayerClass = this.getSubLayerClass('triangle', TriangleLayer);
119
+ return new TriangleLayerClass(this.getSubLayerProps({
120
+ id: 'triangle-layer',
121
+ updateTriggers
122
+ }), {
123
+ // position buffer is filled with world coordinates generated from viewport.unproject
124
+ // i.e. LNGLAT if geospatial, CARTESIAN otherwise
125
+ coordinateSystem: 'default',
126
+ data: {
127
+ attributes: {
128
+ positions: triPositionBuffer,
129
+ texCoords: triTexCoordBuffer
130
+ }
131
+ },
132
+ vertexCount: 4,
133
+ maxTexture: maxWeightsTexture,
134
+ colorTexture,
135
+ aggregationMode: AGGREGATION_MODE[aggregation] || 0,
136
+ weightsTexture,
137
+ intensity,
138
+ threshold,
139
+ colorDomain
140
+ });
141
+ }
142
+ finalizeState(context) {
143
+ super.finalizeState(context);
144
+ const { weightsTransform, weightsTexture, maxWeightTransform, maxWeightsTexture, triPositionBuffer, triTexCoordBuffer, colorTexture, updateTimer } = this.state;
145
+ weightsTransform?.destroy();
146
+ weightsTexture?.destroy();
147
+ maxWeightTransform?.destroy();
148
+ maxWeightsTexture?.destroy();
149
+ triPositionBuffer?.destroy();
150
+ triTexCoordBuffer?.destroy();
151
+ colorTexture?.destroy();
152
+ if (updateTimer) {
153
+ clearTimeout(updateTimer);
154
+ }
155
+ }
156
+ // PRIVATE
157
+ // override Composite layer private method to create AttributeManager instance
158
+ _getAttributeManager() {
159
+ return new AttributeManager(this.context.device, {
160
+ id: this.props.id,
161
+ stats: this.context.stats
162
+ });
163
+ }
164
+ _getChangeFlags(opts) {
165
+ const changeFlags = {};
166
+ const { dimensions } = this.state;
167
+ changeFlags.dataChanged =
168
+ (this.isAttributeChanged() && 'attribute changed') || // if any attribute is changed
169
+ (this.isAggregationDirty(opts, {
170
+ compareAll: true,
171
+ dimension: dimensions.data
172
+ }) &&
173
+ 'aggregation is dirty');
174
+ changeFlags.viewportChanged = opts.changeFlags.viewportChanged;
175
+ const { zoom } = this.state;
176
+ if (!opts.context.viewport || opts.context.viewport.zoom !== zoom) {
177
+ changeFlags.viewportZoomChanged = true;
178
+ }
179
+ return changeFlags;
180
+ }
181
+ _createTextures() {
182
+ const { textureSize, format } = this.state;
183
+ this.setState({
184
+ weightsTexture: this.context.device.createTexture({
185
+ ...TEXTURE_PROPS,
186
+ width: textureSize,
187
+ height: textureSize,
188
+ format
189
+ }),
190
+ maxWeightsTexture: this.context.device.createTexture({
191
+ ...TEXTURE_PROPS,
192
+ width: 1,
193
+ height: 1,
194
+ format
195
+ })
196
+ });
197
+ }
198
+ _setupAttributes() {
199
+ const attributeManager = this.getAttributeManager();
200
+ if (false) {
201
+ attributeManager.addInstanced({
202
+ instancePositions: {
203
+ size: 3,
204
+ type: 'float64',
205
+ accessor: 'getPosition',
206
+ // Normalize binary XY positions into the packed XYZ high/low layout WebGPU requires.
207
+ transform: (position) => [position[0], position[1], position[2] ?? 0]
208
+ },
209
+ instanceWeights: { size: 1, accessor: 'getWeight' }
210
+ });
211
+ this.setState({ positionAttributeName: 'instancePositions' });
212
+ }
213
+ else {
214
+ attributeManager.add({
215
+ positions: { size: 3, type: 'float64', accessor: 'getPosition' },
216
+ weights: { size: 1, accessor: 'getWeight' }
217
+ });
218
+ this.setState({ positionAttributeName: 'positions' });
219
+ }
220
+ }
221
+ _setupTextureParams() {
222
+ const { device } = this.context;
223
+ const { weightsTextureSize } = this.props;
224
+ const textureSize = Math.min(weightsTextureSize, device.limits.maxTextureDimension2D);
225
+ const isWebGPU = false;
226
+ const floatTargetSupport = isWebGPU
227
+ ? device.getTextureFormatCapabilities('rgba16float').blend
228
+ : FLOAT_TARGET_FEATURES.every(feature => device.features.has(feature));
229
+ const format = floatTargetSupport
230
+ ? isWebGPU
231
+ ? 'rgba16float'
232
+ : 'rgba32float'
233
+ : 'rgba8unorm';
234
+ const weightsScale = floatTargetSupport ? 1 : 1 / 255;
235
+ this.setState({ textureSize, format, weightsScale });
236
+ if (!floatTargetSupport) {
237
+ log.warn(`HeatmapLayer: ${this.id} rendering to float texture not supported, falling back to low precision format`)();
238
+ }
239
+ }
240
+ _createWeightsTransform(shaders) {
241
+ let { weightsTransform } = this.state;
242
+ const { weightsTexture } = this.state;
243
+ const isWebGPU = false;
244
+ const attributeManager = this.getAttributeManager();
245
+ weightsTransform?.destroy();
246
+ weightsTransform = new TextureTransform(this.context.device, {
247
+ id: `${this.id}-weights-transform`,
248
+ ...shaders,
249
+ source: weightsSource,
250
+ bufferLayout: attributeManager.getBufferLayouts({ isInstanced: isWebGPU }),
251
+ vertexCount: isWebGPU ? 6 : 1,
252
+ ...(isWebGPU
253
+ ? {
254
+ colorAttachmentFormats: [weightsTexture.format],
255
+ isInstanced: true,
256
+ instanceCount: this.getNumInstances()
257
+ }
258
+ : {}),
259
+ targetTexture: weightsTexture,
260
+ parameters: {
261
+ depthWriteEnabled: false,
262
+ blend: true,
263
+ blendColorOperation: 'add',
264
+ blendColorSrcFactor: 'one',
265
+ blendColorDstFactor: 'one',
266
+ blendAlphaSrcFactor: 'one',
267
+ blendAlphaDstFactor: 'one'
268
+ },
269
+ topology: isWebGPU ? 'triangle-list' : 'point-list',
270
+ modules: [...shaders.modules, weightUniforms]
271
+ });
272
+ this.setState({ weightsTransform });
273
+ }
274
+ _setupResources() {
275
+ this._createTextures();
276
+ const { device } = this.context;
277
+ const { textureSize, weightsTexture, maxWeightsTexture } = this.state;
278
+ const weightsTransformShaders = this.getShaders({
279
+ vs: weightsVs,
280
+ fs: weightsFs
281
+ });
282
+ this._createWeightsTransform(weightsTransformShaders);
283
+ const maxWeightsTransformShaders = this.getShaders({
284
+ source: maxSource,
285
+ vs: maxVs,
286
+ fs: maxFs,
287
+ modules: [maxWeightUniforms]
288
+ });
289
+ const maxWeightTransform = new TextureTransform(device, {
290
+ id: `${this.id}-max-weights-transform`,
291
+ targetTexture: maxWeightsTexture,
292
+ ...maxWeightsTransformShaders,
293
+ ...({}),
294
+ vertexCount: textureSize * textureSize,
295
+ topology: 'point-list',
296
+ parameters: {
297
+ depthWriteEnabled: false,
298
+ blend: true,
299
+ blendColorOperation: 'max',
300
+ blendAlphaOperation: 'max',
301
+ blendColorSrcFactor: 'one',
302
+ blendColorDstFactor: 'one',
303
+ blendAlphaSrcFactor: 'one',
304
+ blendAlphaDstFactor: 'one'
305
+ }
306
+ });
307
+ const maxWeightProps = { inTexture: weightsTexture, textureSize };
308
+ maxWeightTransform.model.shaderInputs.setProps({
309
+ maxWeight: maxWeightProps
310
+ });
311
+ this.setState({
312
+ weightsTexture,
313
+ maxWeightsTexture,
314
+ maxWeightTransform,
315
+ zoom: null,
316
+ triPositionBuffer: device.createBuffer({ byteLength: 48 }),
317
+ triTexCoordBuffer: device.createBuffer({ byteLength: 48 })
318
+ });
319
+ }
320
+ // overwrite super class method to update transform model
321
+ updateShaders(shaderOptions) {
322
+ // shader params (modules, injects) changed, update model object
323
+ this._createWeightsTransform({
324
+ vs: weightsVs,
325
+ fs: weightsFs,
326
+ ...shaderOptions
327
+ });
328
+ }
329
+ _updateMaxWeightValue() {
330
+ const { maxWeightTransform } = this.state;
331
+ maxWeightTransform.run({
332
+ parameters: { viewport: [0, 0, 1, 1] },
333
+ clearColor: [0, 0, 0, 0]
334
+ });
335
+ }
336
+ // Computes world bounds area that needs to be processed for generate heatmap
337
+ _updateBounds(forceUpdate = false) {
338
+ const { viewport } = this.context;
339
+ // Unproject all 4 corners of the current screen coordinates into world coordinates (lng/lat)
340
+ // Takes care of viewport has non zero bearing/pitch (i.e axis not aligned with world coordiante system)
341
+ const viewportCorners = [
342
+ viewport.unproject([0, 0]),
343
+ viewport.unproject([viewport.width, 0]),
344
+ viewport.unproject([0, viewport.height]),
345
+ viewport.unproject([viewport.width, viewport.height])
346
+ ].map(p => p.map(Math.fround));
347
+ // #1: get world bounds for current viewport extends
348
+ const visibleWorldBounds = getBounds(viewportCorners); // TODO: Change to visible bounds
349
+ const newState = { visibleWorldBounds, viewportCorners };
350
+ let boundsChanged = false;
351
+ if (forceUpdate ||
352
+ !this.state.worldBounds ||
353
+ !boundsContain(this.state.worldBounds, visibleWorldBounds)) {
354
+ // #2 : convert world bounds to common (Flat) bounds
355
+ // #3 : extend common bounds to match aspect ratio with viewport
356
+ const scaledCommonBounds = this._worldToCommonBounds(visibleWorldBounds);
357
+ // #4 :convert aligned common bounds to world bounds
358
+ const worldBounds = this._commonToWorldBounds(scaledCommonBounds);
359
+ // Clip webmercator projection limits
360
+ if (this.props.coordinateSystem === 'lnglat') {
361
+ worldBounds[1] = Math.max(worldBounds[1], -85.051129);
362
+ worldBounds[3] = Math.min(worldBounds[3], 85.051129);
363
+ worldBounds[0] = Math.max(worldBounds[0], -360);
364
+ worldBounds[2] = Math.min(worldBounds[2], 360);
365
+ }
366
+ // #5: now convert world bounds to common using Layer's coordiante system and origin
367
+ const normalizedCommonBounds = this._worldToCommonBounds(worldBounds);
368
+ newState.worldBounds = worldBounds;
369
+ newState.normalizedCommonBounds = normalizedCommonBounds;
370
+ boundsChanged = true;
371
+ }
372
+ this.setState(newState);
373
+ return boundsChanged;
374
+ }
375
+ _updateTextureRenderingBounds() {
376
+ // Just render visible portion of the texture
377
+ const { triPositionBuffer, triTexCoordBuffer, normalizedCommonBounds, viewportCorners } = this.state;
378
+ const { viewport } = this.context;
379
+ triPositionBuffer.write(packVertices(viewportCorners, 3));
380
+ const textureBounds = viewportCorners.map(p => getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds));
381
+ triTexCoordBuffer.write(packVertices(textureBounds, 2));
382
+ }
383
+ _updateColorTexture(opts) {
384
+ const { colorRange } = opts.props;
385
+ let { colorTexture } = this.state;
386
+ const colors = colorRangeToFlatArray(colorRange, false, Uint8Array);
387
+ colorTexture?.destroy();
388
+ colorTexture = this.context.device.createTexture({
389
+ ...TEXTURE_PROPS,
390
+ data: colors,
391
+ width: colorRange.length,
392
+ height: 1
393
+ });
394
+ this.setState({ colorTexture });
395
+ }
396
+ _updateWeightmap() {
397
+ const { radiusPixels, colorDomain, aggregation } = this.props;
398
+ const { worldBounds, textureSize, weightsScale, weightsTexture } = this.state;
399
+ const weightsTransform = this.state.weightsTransform;
400
+ this.state.isWeightMapDirty = false;
401
+ // convert world bounds to common using Layer's coordiante system and origin
402
+ const commonBounds = this._worldToCommonBounds(worldBounds, {
403
+ useLayerCoordinateSystem: true
404
+ });
405
+ if (colorDomain && aggregation === 'SUM') {
406
+ // scale color domain to weight per pixel
407
+ const { viewport } = this.context;
408
+ const metersPerPixel = (viewport.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0])) /
409
+ textureSize;
410
+ this.state.colorDomain = [
411
+ colorDomain[0] * metersPerPixel * weightsScale,
412
+ colorDomain[1] * metersPerPixel * weightsScale
413
+ ];
414
+ }
415
+ else {
416
+ this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;
417
+ }
418
+ const attributeManager = this.getAttributeManager();
419
+ const attributes = attributeManager.getAttributes();
420
+ const moduleSettings = this.getModuleSettings();
421
+ this._setModelAttributes(weightsTransform.model, attributes);
422
+ if (false) {
423
+ const instanceCount = this.getNumInstances();
424
+ weightsTransform.model.setVertexCount(instanceCount > 0 ? 6 : 0);
425
+ weightsTransform.model.setInstanceCount(instanceCount);
426
+ }
427
+ else {
428
+ weightsTransform.model.setVertexCount(this.getNumInstances());
429
+ }
430
+ const weightProps = {
431
+ radiusPixels,
432
+ commonBounds,
433
+ textureWidth: textureSize,
434
+ weightsScale,
435
+ weightsTexture: weightsTexture
436
+ };
437
+ const { viewport, devicePixelRatio, coordinateSystem, coordinateOrigin } = moduleSettings;
438
+ const { modelMatrix } = this.props;
439
+ weightsTransform.model.shaderInputs.setProps({
440
+ project: { viewport, devicePixelRatio, modelMatrix, coordinateSystem, coordinateOrigin },
441
+ weight: weightProps
442
+ });
443
+ weightsTransform.run({
444
+ parameters: { viewport: [0, 0, textureSize, textureSize] },
445
+ clearColor: [0, 0, 0, 0]
446
+ });
447
+ this._updateMaxWeightValue();
448
+ }
449
+ _debouncedUpdateWeightmap(fromTimer = false) {
450
+ let { updateTimer } = this.state;
451
+ const { debounceTimeout } = this.props;
452
+ if (fromTimer) {
453
+ updateTimer = null;
454
+ // update
455
+ this._updateBounds(true);
456
+ this._updateTextureRenderingBounds();
457
+ this.setState({ isWeightMapDirty: true });
458
+ }
459
+ else {
460
+ this.setState({ isWeightMapDirty: false });
461
+ clearTimeout(updateTimer);
462
+ updateTimer = setTimeout(this._debouncedUpdateWeightmap.bind(this, true), debounceTimeout);
463
+ }
464
+ this.setState({ updateTimer });
465
+ }
466
+ // input: worldBounds: [minLong, minLat, maxLong, maxLat]
467
+ // input: opts.useLayerCoordinateSystem : layers coordiante system is used
468
+ // optput: commonBounds: [minX, minY, maxX, maxY] scaled to fit the current texture
469
+ _worldToCommonBounds(worldBounds, opts = {}) {
470
+ const { useLayerCoordinateSystem = false } = opts;
471
+ const [minLong, minLat, maxLong, maxLat] = worldBounds;
472
+ const { viewport } = this.context;
473
+ const { textureSize } = this.state;
474
+ const { coordinateSystem } = this.props;
475
+ const offsetMode = useLayerCoordinateSystem &&
476
+ (coordinateSystem === 'lnglat-offsets' || coordinateSystem === 'meter-offsets');
477
+ const offsetOriginCommon = offsetMode
478
+ ? viewport.projectPosition(this.props.coordinateOrigin)
479
+ : [0, 0];
480
+ const size = (textureSize * RESOLUTION) / viewport.scale;
481
+ let bottomLeftCommon;
482
+ let topRightCommon;
483
+ // Y-axis is flipped between World and Common bounds
484
+ if (useLayerCoordinateSystem && !offsetMode) {
485
+ bottomLeftCommon = this.projectPosition([minLong, minLat, 0]);
486
+ topRightCommon = this.projectPosition([maxLong, maxLat, 0]);
487
+ }
488
+ else {
489
+ bottomLeftCommon = viewport.projectPosition([minLong, minLat, 0]);
490
+ topRightCommon = viewport.projectPosition([maxLong, maxLat, 0]);
491
+ }
492
+ // Ignore z component
493
+ return scaleToAspectRatio([
494
+ bottomLeftCommon[0] - offsetOriginCommon[0],
495
+ bottomLeftCommon[1] - offsetOriginCommon[1],
496
+ topRightCommon[0] - offsetOriginCommon[0],
497
+ topRightCommon[1] - offsetOriginCommon[1]
498
+ ], size, size);
499
+ }
500
+ // input commonBounds: [xMin, yMin, xMax, yMax]
501
+ // output worldBounds: [minLong, minLat, maxLong, maxLat]
502
+ _commonToWorldBounds(commonBounds) {
503
+ const [xMin, yMin, xMax, yMax] = commonBounds;
504
+ const { viewport } = this.context;
505
+ const bottomLeftWorld = viewport.unprojectPosition([xMin, yMin]);
506
+ const topRightWorld = viewport.unprojectPosition([xMax, yMax]);
507
+ return bottomLeftWorld.slice(0, 2).concat(topRightWorld.slice(0, 2));
508
+ }
509
+ }
510
+ HeatmapLayer.layerName = 'HeatmapLayer';
511
+ HeatmapLayer.defaultProps = defaultProps;
512
+ export default HeatmapLayer;
513
+ //# sourceMappingURL=heatmap-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatmap-layer.js","sourceRoot":"","sources":["../../src/heatmap-layer/heatmap-layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export default `\
5
+ #version 300 es
6
+ in vec4 outTexture;
7
+ out vec4 fragColor;
8
+ void main() {
9
+ fragColor = outTexture;
10
+ fragColor.g = outTexture.r / max(1.0, outTexture.a);
11
+ }
12
+ `;
13
+ //# sourceMappingURL=max-fs.glsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-fs.glsl.js","sourceRoot":"","sources":["../../src/heatmap-layer/max-fs.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC;;;;;;;;EAQE"}
@@ -0,0 +1,18 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export default `\
5
+ #version 300 es
6
+ uniform sampler2D inTexture;
7
+ out vec4 outTexture;
8
+ void main()
9
+ {
10
+ int yIndex = gl_VertexID / int(maxWeight.textureSize);
11
+ int xIndex = gl_VertexID - (yIndex * int(maxWeight.textureSize));
12
+ vec2 uv = (0.5 + vec2(float(xIndex), float(yIndex))) / maxWeight.textureSize;
13
+ outTexture = texture(inTexture, uv);
14
+ gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
15
+ gl_PointSize = 1.0;
16
+ }
17
+ `;
18
+ //# sourceMappingURL=max-vs.glsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-vs.glsl.js","sourceRoot":"","sources":["../../src/heatmap-layer/max-vs.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC;;;;;;;;;;;;;EAiBE"}
@@ -0,0 +1,5 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export default /* wgsl */ null;
5
+ //# sourceMappingURL=max.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max.wgsl.js","sourceRoot":"","sources":["../../src/heatmap-layer/max.wgsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,eAAe,UAAU,MA2CvB"}
@@ -0,0 +1,34 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export default `\
5
+ #version 300 es
6
+ #define SHADER_NAME triangle-layer-fragment-shader
7
+ precision highp float;
8
+ uniform sampler2D weightsTexture;
9
+ uniform sampler2D colorTexture;
10
+ in vec2 vTexCoords;
11
+ in float vIntensityMin;
12
+ in float vIntensityMax;
13
+ out vec4 fragColor;
14
+ vec4 getLinearColor(float value) {
15
+ float factor = clamp(value * vIntensityMax, 0., 1.);
16
+ vec4 color = texture(colorTexture, vec2(factor, 0.5));
17
+ color.a *= min(value * vIntensityMin, 1.0);
18
+ return color;
19
+ }
20
+ void main(void) {
21
+ vec4 weights = texture(weightsTexture, vTexCoords);
22
+ float weight = weights.r;
23
+ if (triangle.aggregationMode > 0.5) {
24
+ weight /= max(1.0, weights.a);
25
+ }
26
+ if (weight <= 0.) {
27
+ discard;
28
+ }
29
+ vec4 linearColor = getLinearColor(weight);
30
+ linearColor.a *= layer.opacity;
31
+ fragColor = linearColor;
32
+ }
33
+ `;
34
+ //# sourceMappingURL=triangle-layer-fragment.glsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triangle-layer-fragment.glsl.js","sourceRoot":"","sources":["../../src/heatmap-layer/triangle-layer-fragment.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCE"}
@@ -0,0 +1,25 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ const uniformBlockWGSL = null;
5
+ const uniformBlock = `\
6
+ layout(std140) uniform triangleUniforms {
7
+ float aggregationMode;
8
+ vec2 colorDomain;
9
+ float intensity;
10
+ float threshold;
11
+ } triangle;
12
+ `;
13
+ export const triangleUniforms = {
14
+ name: 'triangle',
15
+ source: uniformBlockWGSL,
16
+ vs: uniformBlock,
17
+ fs: uniformBlock,
18
+ uniformTypes: {
19
+ aggregationMode: 'f32',
20
+ colorDomain: 'vec2<f32>',
21
+ intensity: 'f32',
22
+ threshold: 'f32'
23
+ }
24
+ };
25
+ //# sourceMappingURL=triangle-layer-uniforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triangle-layer-uniforms.js","sourceRoot":"","sources":["../../src/heatmap-layer/triangle-layer-uniforms.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,MAAM,gBAAgB,QAcpB;AAEF,MAAM,YAAY,GAAG;;;;;;;CAOpB,CAAC;AAYF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,gBAAgB;IACxB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,YAAY,EAAE;QACZ,eAAe,EAAE,KAAK;QACtB,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;KACjB;CAC6C,CAAC"}