@deck.gl/aggregation-layers 9.4.0-alpha.2 → 9.4.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 (145) hide show
  1. package/dist/dist.dev.js +148 -18
  2. package/dist/grid-layer/grid-cell-layer.d.ts.map +1 -1
  3. package/dist/grid-layer/grid-cell-layer.js +2 -2
  4. package/dist/grid-layer/grid-cell-layer.js.map +1 -1
  5. package/dist/grid-layer/grid-cell-layer.wgsl.d.ts +3 -0
  6. package/dist/grid-layer/grid-cell-layer.wgsl.d.ts.map +1 -0
  7. package/dist/grid-layer/grid-cell-layer.wgsl.js +114 -0
  8. package/dist/grid-layer/grid-cell-layer.wgsl.js.map +1 -0
  9. package/dist/grid-layer/grid-layer-uniforms.d.ts +1 -0
  10. package/dist/grid-layer/grid-layer-uniforms.d.ts.map +1 -1
  11. package/dist/grid-layer/grid-layer-uniforms.js +14 -0
  12. package/dist/grid-layer/grid-layer-uniforms.js.map +1 -1
  13. package/dist/hexagon-layer/hexagon-cell-layer.d.ts.map +1 -1
  14. package/dist/hexagon-layer/hexagon-cell-layer.js +0 -1
  15. package/dist/hexagon-layer/hexagon-cell-layer.js.map +1 -1
  16. package/dist/index.cjs +13228 -1557
  17. package/dist/index.cjs.map +3 -4
  18. package/dist.min.js +158 -39
  19. package/dist.webgl-only/common/aggregation-layer.js +68 -0
  20. package/dist.webgl-only/common/aggregation-layer.js.map +1 -0
  21. package/dist.webgl-only/common/aggregator/aggregator.js +5 -0
  22. package/dist.webgl-only/common/aggregator/aggregator.js.map +1 -0
  23. package/dist.webgl-only/common/aggregator/cpu-aggregator/aggregate.js +69 -0
  24. package/dist.webgl-only/common/aggregator/cpu-aggregator/aggregate.js.map +1 -0
  25. package/dist.webgl-only/common/aggregator/cpu-aggregator/cpu-aggregator.js +141 -0
  26. package/dist.webgl-only/common/aggregator/cpu-aggregator/cpu-aggregator.js.map +1 -0
  27. package/dist.webgl-only/common/aggregator/cpu-aggregator/sort-bins.js +44 -0
  28. package/dist.webgl-only/common/aggregator/cpu-aggregator/sort-bins.js.map +1 -0
  29. package/dist.webgl-only/common/aggregator/cpu-aggregator/vertex-accessor.js +56 -0
  30. package/dist.webgl-only/common/aggregator/cpu-aggregator/vertex-accessor.js.map +1 -0
  31. package/dist.webgl-only/common/aggregator/gpu-aggregator/aggregation-transform-uniforms.js +22 -0
  32. package/dist.webgl-only/common/aggregator/gpu-aggregator/aggregation-transform-uniforms.js.map +1 -0
  33. package/dist.webgl-only/common/aggregator/gpu-aggregator/bin-sorter-uniforms.js +18 -0
  34. package/dist.webgl-only/common/aggregator/gpu-aggregator/bin-sorter-uniforms.js.map +1 -0
  35. package/dist.webgl-only/common/aggregator/gpu-aggregator/utils.js +24 -0
  36. package/dist.webgl-only/common/aggregator/gpu-aggregator/utils.js.map +1 -0
  37. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregation-transform.js +222 -0
  38. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregation-transform.js.map +1 -0
  39. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregator.js +203 -0
  40. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-aggregator.js.map +1 -0
  41. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-bin-sorter.js +225 -0
  42. package/dist.webgl-only/common/aggregator/gpu-aggregator/webgl-bin-sorter.js.map +1 -0
  43. package/dist.webgl-only/common/aggregator/index.js +6 -0
  44. package/dist.webgl-only/common/aggregator/index.js.map +1 -0
  45. package/dist.webgl-only/common/types.js +5 -0
  46. package/dist.webgl-only/common/types.js.map +1 -0
  47. package/dist.webgl-only/common/utils/bounds-utils.js +21 -0
  48. package/dist.webgl-only/common/utils/bounds-utils.js.map +1 -0
  49. package/dist.webgl-only/common/utils/color-utils.js +65 -0
  50. package/dist.webgl-only/common/utils/color-utils.js.map +1 -0
  51. package/dist.webgl-only/common/utils/prop-utils.js +13 -0
  52. package/dist.webgl-only/common/utils/prop-utils.js.map +1 -0
  53. package/dist.webgl-only/common/utils/scale-utils.js +181 -0
  54. package/dist.webgl-only/common/utils/scale-utils.js.map +1 -0
  55. package/dist.webgl-only/contour-layer/bin-options-uniforms.js +18 -0
  56. package/dist.webgl-only/contour-layer/bin-options-uniforms.js.map +1 -0
  57. package/dist.webgl-only/contour-layer/contour-layer.js +282 -0
  58. package/dist.webgl-only/contour-layer/contour-layer.js.map +1 -0
  59. package/dist.webgl-only/contour-layer/contour-utils.js +60 -0
  60. package/dist.webgl-only/contour-layer/contour-utils.js.map +1 -0
  61. package/dist.webgl-only/contour-layer/marching-squares-codes.js +341 -0
  62. package/dist.webgl-only/contour-layer/marching-squares-codes.js.map +1 -0
  63. package/dist.webgl-only/contour-layer/marching-squares.js +151 -0
  64. package/dist.webgl-only/contour-layer/marching-squares.js.map +1 -0
  65. package/dist.webgl-only/contour-layer/value-reader.js +47 -0
  66. package/dist.webgl-only/contour-layer/value-reader.js.map +1 -0
  67. package/dist.webgl-only/grid-layer/bin-options-uniforms.js +18 -0
  68. package/dist.webgl-only/grid-layer/bin-options-uniforms.js.map +1 -0
  69. package/dist.webgl-only/grid-layer/grid-cell-layer-vertex.glsl.js +51 -0
  70. package/dist.webgl-only/grid-layer/grid-cell-layer-vertex.glsl.js.map +1 -0
  71. package/dist.webgl-only/grid-layer/grid-cell-layer.js +95 -0
  72. package/dist.webgl-only/grid-layer/grid-cell-layer.js.map +1 -0
  73. package/dist.webgl-only/grid-layer/grid-cell-layer.wgsl.js +5 -0
  74. package/dist.webgl-only/grid-layer/grid-cell-layer.wgsl.js.map +1 -0
  75. package/dist.webgl-only/grid-layer/grid-layer-uniforms.js +26 -0
  76. package/dist.webgl-only/grid-layer/grid-layer-uniforms.js.map +1 -0
  77. package/dist.webgl-only/grid-layer/grid-layer.js +362 -0
  78. package/dist.webgl-only/grid-layer/grid-layer.js.map +1 -0
  79. package/dist.webgl-only/heatmap-layer/aggregation-layer.js +140 -0
  80. package/dist.webgl-only/heatmap-layer/aggregation-layer.js.map +1 -0
  81. package/dist.webgl-only/heatmap-layer/heatmap-layer-uniforms.js +36 -0
  82. package/dist.webgl-only/heatmap-layer/heatmap-layer-uniforms.js.map +1 -0
  83. package/dist.webgl-only/heatmap-layer/heatmap-layer-utils.js +67 -0
  84. package/dist.webgl-only/heatmap-layer/heatmap-layer-utils.js.map +1 -0
  85. package/dist.webgl-only/heatmap-layer/heatmap-layer.js +513 -0
  86. package/dist.webgl-only/heatmap-layer/heatmap-layer.js.map +1 -0
  87. package/dist.webgl-only/heatmap-layer/max-fs.glsl.js +13 -0
  88. package/dist.webgl-only/heatmap-layer/max-fs.glsl.js.map +1 -0
  89. package/dist.webgl-only/heatmap-layer/max-vs.glsl.js +18 -0
  90. package/dist.webgl-only/heatmap-layer/max-vs.glsl.js.map +1 -0
  91. package/dist.webgl-only/heatmap-layer/max.wgsl.js +5 -0
  92. package/dist.webgl-only/heatmap-layer/max.wgsl.js.map +1 -0
  93. package/dist.webgl-only/heatmap-layer/triangle-layer-fragment.glsl.js +34 -0
  94. package/dist.webgl-only/heatmap-layer/triangle-layer-fragment.glsl.js.map +1 -0
  95. package/dist.webgl-only/heatmap-layer/triangle-layer-uniforms.js +25 -0
  96. package/dist.webgl-only/heatmap-layer/triangle-layer-uniforms.js.map +1 -0
  97. package/dist.webgl-only/heatmap-layer/triangle-layer-vertex.glsl.js +28 -0
  98. package/dist.webgl-only/heatmap-layer/triangle-layer-vertex.glsl.js.map +1 -0
  99. package/dist.webgl-only/heatmap-layer/triangle-layer.js +49 -0
  100. package/dist.webgl-only/heatmap-layer/triangle-layer.js.map +1 -0
  101. package/dist.webgl-only/heatmap-layer/triangle-layer.wgsl.js +5 -0
  102. package/dist.webgl-only/heatmap-layer/triangle-layer.wgsl.js.map +1 -0
  103. package/dist.webgl-only/heatmap-layer/weights-fs.glsl.js +21 -0
  104. package/dist.webgl-only/heatmap-layer/weights-fs.glsl.js.map +1 -0
  105. package/dist.webgl-only/heatmap-layer/weights-vs.glsl.js +21 -0
  106. package/dist.webgl-only/heatmap-layer/weights-vs.glsl.js.map +1 -0
  107. package/dist.webgl-only/heatmap-layer/weights.wgsl.js +5 -0
  108. package/dist.webgl-only/heatmap-layer/weights.wgsl.js.map +1 -0
  109. package/dist.webgl-only/hexagon-layer/bin-options-uniforms.js +18 -0
  110. package/dist.webgl-only/hexagon-layer/bin-options-uniforms.js.map +1 -0
  111. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer-vertex.glsl.js +55 -0
  112. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer-vertex.glsl.js.map +1 -0
  113. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.js +90 -0
  114. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.js.map +1 -0
  115. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.wgsl.js +5 -0
  116. package/dist.webgl-only/hexagon-layer/hexagon-cell-layer.wgsl.js.map +1 -0
  117. package/dist.webgl-only/hexagon-layer/hexagon-layer-uniforms.js +24 -0
  118. package/dist.webgl-only/hexagon-layer/hexagon-layer-uniforms.js.map +1 -0
  119. package/dist.webgl-only/hexagon-layer/hexagon-layer.js +360 -0
  120. package/dist.webgl-only/hexagon-layer/hexagon-layer.js.map +1 -0
  121. package/dist.webgl-only/hexagon-layer/hexbin.js +70 -0
  122. package/dist.webgl-only/hexagon-layer/hexbin.js.map +1 -0
  123. package/dist.webgl-only/index.cjs +15990 -0
  124. package/dist.webgl-only/index.cjs.map +6 -0
  125. package/dist.webgl-only/index.js +11 -0
  126. package/dist.webgl-only/index.js.map +1 -0
  127. package/dist.webgl-only/screen-grid-layer/bin-options-uniforms.js +16 -0
  128. package/dist.webgl-only/screen-grid-layer/bin-options-uniforms.js.map +1 -0
  129. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.js +88 -0
  130. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.js.map +1 -0
  131. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.wgsl.js +5 -0
  132. package/dist.webgl-only/screen-grid-layer/screen-grid-cell-layer.wgsl.js.map +1 -0
  133. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-fragment.glsl.js +16 -0
  134. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-fragment.glsl.js.map +1 -0
  135. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-uniforms.js +22 -0
  136. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-uniforms.js.map +1 -0
  137. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-vertex.glsl.js +31 -0
  138. package/dist.webgl-only/screen-grid-layer/screen-grid-layer-vertex.glsl.js.map +1 -0
  139. package/dist.webgl-only/screen-grid-layer/screen-grid-layer.js +194 -0
  140. package/dist.webgl-only/screen-grid-layer/screen-grid-layer.js.map +1 -0
  141. package/package.json +10 -5
  142. package/src/grid-layer/grid-cell-layer.ts +2 -2
  143. package/src/grid-layer/grid-cell-layer.wgsl.ts +114 -0
  144. package/src/grid-layer/grid-layer-uniforms.ts +15 -0
  145. package/src/hexagon-layer/hexagon-cell-layer.ts +0 -2
@@ -0,0 +1,68 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { CompositeLayer, AttributeManager } from '@deck.gl/core';
5
+ class AggregationLayer extends CompositeLayer {
6
+ /** Allow this layer to participates in the draw cycle */
7
+ get isDrawable() {
8
+ return true;
9
+ }
10
+ initializeState() { }
11
+ // Extend Layer.updateState to update the Aggregator instance
12
+ // returns true if aggregator is changed
13
+ updateState(params) {
14
+ super.updateState(params);
15
+ const aggregatorType = this.getAggregatorType();
16
+ if (params.changeFlags.extensionsChanged || this.state.aggregatorType !== aggregatorType) {
17
+ this.state.aggregator?.destroy();
18
+ const aggregator = this.createAggregator(aggregatorType);
19
+ aggregator.setProps({
20
+ attributes: this.getAttributeManager()?.attributes
21
+ });
22
+ this.setState({ aggregator, aggregatorType });
23
+ return true;
24
+ }
25
+ return false;
26
+ }
27
+ // Override Layer.finalizeState to dispose the Aggregator instance
28
+ finalizeState(context) {
29
+ super.finalizeState(context);
30
+ this.state.aggregator.destroy();
31
+ }
32
+ // Override Layer.updateAttributes to update the aggregator
33
+ updateAttributes(changedAttributes) {
34
+ const { aggregator } = this.state;
35
+ aggregator.setProps({
36
+ attributes: changedAttributes
37
+ });
38
+ for (const id in changedAttributes) {
39
+ this.onAttributeChange(id);
40
+ }
41
+ // In aggregator.update() the aggregator allocates the buffers to store its output
42
+ // These buffers will be exposed by aggregator.getResults() and passed to the sublayers
43
+ // Therefore update() must be called before renderLayers()
44
+ // CPUAggregator's output is populated right here in update()
45
+ // GPUAggregator's output is pre-allocated and populated in preDraw(), see comments below
46
+ aggregator.update();
47
+ }
48
+ draw({ shaderModuleProps }) {
49
+ // GPU aggregation needs `shaderModuleProps` for projection/filter uniforms which are only accessible at draw time
50
+ // GPUAggregator's Buffers are pre-allocated during `update()` and passed down to the sublayer attributes in renderLayers()
51
+ // Although the Buffers have been bound to the sublayer's Model, their content are not populated yet
52
+ // GPUAggregator.preDraw() is called in the draw cycle here right before Buffers are used by sublayer.draw()
53
+ const { aggregator } = this.state;
54
+ // @ts-expect-error only used by GPU aggregators
55
+ aggregator.setProps({ shaderModuleProps });
56
+ aggregator.preDraw();
57
+ }
58
+ // override CompositeLayer._getAttributeManager to create AttributeManager instance
59
+ _getAttributeManager() {
60
+ return new AttributeManager(this.context.device, {
61
+ id: this.props.id,
62
+ stats: this.context.stats
63
+ });
64
+ }
65
+ }
66
+ AggregationLayer.layerName = 'AggregationLayer';
67
+ export default AggregationLayer;
68
+ //# sourceMappingURL=aggregation-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregation-layer.js","sourceRoot":"","sources":["../../src/common/aggregation-layer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EACL,cAAc,EAMd,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAOvB,MAA8B,gBAG5B,SAAQ,cAA+D;IAQvE,yDAAyD;IACzD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,eAAe,KAAU,CAAC;IAE1B,6DAA6D;IAC7D,wCAAwC;IACxC,WAAW,CAAC,MAA8B;QACxC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,WAAW,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;YACzF,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACzD,UAAU,CAAC,QAAQ,CAAC;gBAClB,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU;aACnD,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,cAAc,EAAC,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kEAAkE;IAClE,aAAa,CAAC,OAAqB;QACjC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,2DAA2D;IACjD,gBAAgB,CAAC,iBAA4C;QACrE,MAAM,EAAC,UAAU,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAChC,UAAU,CAAC,QAAQ,CAAC;YAClB,UAAU,EAAE,iBAAiB;SAC9B,CAAC,CAAC;QAEH,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;QAED,kFAAkF;QAClF,uFAAuF;QACvF,0DAA0D;QAC1D,6DAA6D;QAC7D,yFAAyF;QACzF,UAAU,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,EAAC,iBAAiB,EAAC;QACtB,kHAAkH;QAClH,2HAA2H;QAC3H,oGAAoG;QACpG,4GAA4G;QAC5G,MAAM,EAAC,UAAU,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAChC,gDAAgD;QAChD,UAAU,CAAC,QAAQ,CAAC,EAAC,iBAAiB,EAAC,CAAC,CAAC;QACzC,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,mFAAmF;IACnF,oBAAoB;QAClB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC/C,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;YACjB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC1B,CAAC,CAAC;IACL,CAAC;;AAhFM,0BAAS,GAAG,kBAAkB,CAAC;eAJV,gBAAgB"}
@@ -0,0 +1,5 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export {};
5
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../../src/common/aggregator/aggregator.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC"}
@@ -0,0 +1,69 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ const count = pointIndices => {
5
+ return pointIndices.length;
6
+ };
7
+ const sum = (pointIndices, getValue) => {
8
+ let result = 0;
9
+ for (const i of pointIndices) {
10
+ result += getValue(i);
11
+ }
12
+ return result;
13
+ };
14
+ const mean = (pointIndices, getValue) => {
15
+ if (pointIndices.length === 0) {
16
+ return NaN;
17
+ }
18
+ return sum(pointIndices, getValue) / pointIndices.length;
19
+ };
20
+ const min = (pointIndices, getValue) => {
21
+ let result = Infinity;
22
+ for (const i of pointIndices) {
23
+ const value = getValue(i);
24
+ if (value < result) {
25
+ result = value;
26
+ }
27
+ }
28
+ return result;
29
+ };
30
+ const max = (pointIndices, getValue) => {
31
+ let result = -Infinity;
32
+ for (const i of pointIndices) {
33
+ const value = getValue(i);
34
+ if (value > result) {
35
+ result = value;
36
+ }
37
+ }
38
+ return result;
39
+ };
40
+ export const BUILT_IN_OPERATIONS = {
41
+ COUNT: count,
42
+ SUM: sum,
43
+ MEAN: mean,
44
+ MIN: min,
45
+ MAX: max
46
+ };
47
+ /**
48
+ * Performs the aggregation step. See interface Aggregator comments.
49
+ * @returns Floa32Array of aggregated values, one for each bin, and the [min,max] of the values
50
+ */
51
+ export function aggregate({ bins, getValue, operation, target }) {
52
+ if (!target || target.length < bins.length) {
53
+ target = new Float32Array(bins.length);
54
+ }
55
+ // eslint-disable-next-line @typescript-eslint/no-shadow
56
+ let min = Infinity;
57
+ // eslint-disable-next-line @typescript-eslint/no-shadow
58
+ let max = -Infinity;
59
+ for (let j = 0; j < bins.length; j++) {
60
+ const { points } = bins[j];
61
+ target[j] = operation(points, getValue);
62
+ if (target[j] < min)
63
+ min = target[j];
64
+ if (target[j] > max)
65
+ max = target[j];
66
+ }
67
+ return { value: target, domain: [min, max] };
68
+ }
69
+ //# sourceMappingURL=aggregate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../../src/common/aggregator/cpu-aggregator/aggregate.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAapC,MAAM,KAAK,GAAoB,YAAY,CAAC,EAAE;IAC5C,OAAO,YAAY,CAAC,MAAM,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,GAAG,GAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE;IACtD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE;IACvD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,GAAG,GAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE;IACtD,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACnB,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,GAAG,GAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE;IACtD,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACnB,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAkD;IAChF,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;CACA,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,MAAM,EAUP;IAIC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,wDAAwD;IACxD,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,wDAAwD;IACxD,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;YAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;YAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,141 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { _deepEqual as deepEqual } from '@deck.gl/core';
5
+ import { sortBins, packBinIds } from "./sort-bins.js";
6
+ import { aggregate, BUILT_IN_OPERATIONS } from "./aggregate.js";
7
+ import { evaluateVertexAccessor } from "./vertex-accessor.js";
8
+ /** An Aggregator implementation that calculates aggregation on the CPU */
9
+ export class CPUAggregator {
10
+ constructor(props) {
11
+ this.bins = [];
12
+ this.binIds = null;
13
+ this.results = [];
14
+ this.dimensions = props.dimensions;
15
+ this.channelCount = props.getValue.length;
16
+ this.props = {
17
+ ...props,
18
+ binOptions: {},
19
+ pointCount: 0,
20
+ operations: [],
21
+ customOperations: [],
22
+ attributes: {}
23
+ };
24
+ this.needsUpdate = true;
25
+ this.setProps(props);
26
+ }
27
+ destroy() { }
28
+ get binCount() {
29
+ return this.bins.length;
30
+ }
31
+ /** Update aggregation props */
32
+ // eslint-disable-next-line complexity
33
+ setProps(props) {
34
+ const oldProps = this.props;
35
+ if (props.binOptions) {
36
+ if (!deepEqual(props.binOptions, oldProps.binOptions, 2)) {
37
+ this.setNeedsUpdate();
38
+ }
39
+ }
40
+ if (props.operations) {
41
+ for (let channel = 0; channel < this.channelCount; channel++) {
42
+ if (props.operations[channel] !== oldProps.operations[channel]) {
43
+ this.setNeedsUpdate(channel);
44
+ }
45
+ }
46
+ }
47
+ if (props.customOperations) {
48
+ for (let channel = 0; channel < this.channelCount; channel++) {
49
+ if (Boolean(props.customOperations[channel]) !== Boolean(oldProps.customOperations[channel])) {
50
+ this.setNeedsUpdate(channel);
51
+ }
52
+ }
53
+ }
54
+ if (props.pointCount !== undefined && props.pointCount !== oldProps.pointCount) {
55
+ this.setNeedsUpdate();
56
+ }
57
+ if (props.attributes) {
58
+ props.attributes = { ...oldProps.attributes, ...props.attributes };
59
+ }
60
+ Object.assign(this.props, props);
61
+ }
62
+ /** Flags a channel to need update
63
+ * This is called internally by setProps() if certain props change
64
+ * Users of this class still need to manually set the dirty flag sometimes, because even if no props changed
65
+ * the underlying buffers could have been updated and require rerunning the aggregation
66
+ * @param {number} channel - mark the given channel as dirty. If not provided, all channels will be updated.
67
+ */
68
+ setNeedsUpdate(channel) {
69
+ if (channel === undefined) {
70
+ this.needsUpdate = true;
71
+ }
72
+ else if (this.needsUpdate !== true) {
73
+ this.needsUpdate = this.needsUpdate || [];
74
+ this.needsUpdate[channel] = true;
75
+ }
76
+ }
77
+ /** Run aggregation */
78
+ update() {
79
+ if (this.needsUpdate === true) {
80
+ this.bins = sortBins({
81
+ pointCount: this.props.pointCount,
82
+ getBinId: evaluateVertexAccessor(this.props.getBin, this.props.attributes, this.props.binOptions)
83
+ });
84
+ const value = packBinIds({
85
+ bins: this.bins,
86
+ dimensions: this.dimensions,
87
+ // Reuse allocated typed array
88
+ target: this.binIds?.value
89
+ });
90
+ this.binIds = { value, type: 'float32', size: this.dimensions };
91
+ }
92
+ for (let channel = 0; channel < this.channelCount; channel++) {
93
+ if (this.needsUpdate === true || this.needsUpdate[channel]) {
94
+ const operation = this.props.customOperations[channel] ||
95
+ BUILT_IN_OPERATIONS[this.props.operations[channel]];
96
+ const { value, domain } = aggregate({
97
+ bins: this.bins,
98
+ getValue: evaluateVertexAccessor(this.props.getValue[channel], this.props.attributes, undefined),
99
+ operation,
100
+ // Reuse allocated typed array
101
+ target: this.results[channel]?.value
102
+ });
103
+ this.results[channel] = { value, domain, type: 'float32', size: 1 };
104
+ this.props.onUpdate?.({ channel });
105
+ }
106
+ }
107
+ this.needsUpdate = false;
108
+ }
109
+ preDraw() { }
110
+ /** Returns an accessor to the bins. */
111
+ getBins() {
112
+ return this.binIds;
113
+ }
114
+ /** Returns an accessor to the output for a given channel. */
115
+ getResult(channel) {
116
+ return this.results[channel];
117
+ }
118
+ /** Returns the [min, max] of aggregated values for a given channel. */
119
+ getResultDomain(channel) {
120
+ return this.results[channel]?.domain ?? [Infinity, -Infinity];
121
+ }
122
+ /** Returns the information for a given bin. */
123
+ getBin(index) {
124
+ const bin = this.bins[index];
125
+ if (!bin) {
126
+ return null;
127
+ }
128
+ const value = new Array(this.channelCount);
129
+ for (let i = 0; i < value.length; i++) {
130
+ const result = this.results[i];
131
+ value[i] = result?.value[index];
132
+ }
133
+ return {
134
+ id: bin.id,
135
+ value,
136
+ count: bin.points.length,
137
+ pointIndices: bin.points
138
+ };
139
+ }
140
+ }
141
+ //# sourceMappingURL=cpu-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpu-aggregator.js","sourceRoot":"","sources":["../../../../src/common/aggregator/cpu-aggregator/cpu-aggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** Group data points into bins */
5
+ export function sortBins({ pointCount, getBinId }) {
6
+ const binsById = new Map();
7
+ for (let i = 0; i < pointCount; i++) {
8
+ const id = getBinId(i);
9
+ if (id === null) {
10
+ continue;
11
+ }
12
+ let bin = binsById.get(String(id));
13
+ if (bin) {
14
+ bin.points.push(i);
15
+ }
16
+ else {
17
+ bin = {
18
+ id,
19
+ index: binsById.size,
20
+ points: [i]
21
+ };
22
+ binsById.set(String(id), bin);
23
+ }
24
+ }
25
+ return Array.from(binsById.values());
26
+ }
27
+ /** Pack bin ids into a typed array */
28
+ export function packBinIds({ bins, dimensions, target }) {
29
+ const targetLength = bins.length * dimensions;
30
+ if (!target || target.length < targetLength) {
31
+ target = new Float32Array(targetLength);
32
+ }
33
+ for (let i = 0; i < bins.length; i++) {
34
+ const { id } = bins[i];
35
+ if (Array.isArray(id)) {
36
+ target.set(id, i * dimensions);
37
+ }
38
+ else {
39
+ target[i] = id;
40
+ }
41
+ }
42
+ return target;
43
+ }
44
+ //# sourceMappingURL=sort-bins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-bins.js","sourceRoot":"","sources":["../../../../src/common/aggregator/cpu-aggregator/sort-bins.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,kCAAkC;AAClC,MAAM,UAAU,QAAQ,CAAC,EACvB,UAAU,EACV,QAAQ,EAIT;IACC,MAAM,QAAQ,GAAqB,IAAI,GAAG,EAAE,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG;gBACJ,EAAE;gBACF,KAAK,EAAE,QAAQ,CAAC,IAAI;gBACpB,MAAM,EAAE,CAAC,CAAC,CAAC;aACZ,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,UAAU,EACV,MAAM,EAOP;IACC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IAC9C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAC5C,MAAM,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAC,EAAE,EAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,56 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** Evaluate a VertexAccessor with a set of attributes */
5
+ export function evaluateVertexAccessor(accessor, attributes, options) {
6
+ const vertexReaders = {};
7
+ for (const id of accessor.sources || []) {
8
+ const attribute = attributes[id];
9
+ if (attribute) {
10
+ vertexReaders[id] = getVertexReader(attribute);
11
+ }
12
+ else {
13
+ throw new Error(`Cannot find attribute ${id}`);
14
+ }
15
+ }
16
+ const data = {};
17
+ return (vertexIndex) => {
18
+ for (const id in vertexReaders) {
19
+ data[id] = vertexReaders[id](vertexIndex);
20
+ }
21
+ return accessor.getValue(data, vertexIndex, options);
22
+ };
23
+ }
24
+ /** Read value out of a deck.gl Attribute by vertex */
25
+ function getVertexReader(attribute) {
26
+ const value = attribute.value;
27
+ const { offset = 0, stride, size } = attribute.getAccessor();
28
+ const bytesPerElement = value.BYTES_PER_ELEMENT;
29
+ const elementOffset = offset / bytesPerElement;
30
+ const elementStride = stride ? stride / bytesPerElement : size;
31
+ if (size === 1) {
32
+ // Size 1, returns (i: number) => number
33
+ if (attribute.isConstant) {
34
+ return () => value[0];
35
+ }
36
+ return (vertexIndex) => {
37
+ const i = elementOffset + elementStride * vertexIndex;
38
+ return value[i];
39
+ };
40
+ }
41
+ // Size >1, returns (i: number) => number[]
42
+ let result;
43
+ if (attribute.isConstant) {
44
+ result = Array.from(value);
45
+ return () => result;
46
+ }
47
+ result = new Array(size);
48
+ return (vertexIndex) => {
49
+ const i = elementOffset + elementStride * vertexIndex;
50
+ for (let j = 0; j < size; j++) {
51
+ result[j] = value[i + j];
52
+ }
53
+ return result;
54
+ };
55
+ }
56
+ //# sourceMappingURL=vertex-accessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-accessor.js","sourceRoot":"","sources":["../../../../src/common/aggregator/cpu-aggregator/vertex-accessor.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAwBpC,yDAAyD;AACzD,MAAM,UAAU,sBAAsB,CACpC,QAA0C,EAC1C,UAAqC,EACrC,OAAiB;IAEjB,MAAM,aAAa,GAAqD,EAAE,CAAC;IAC3E,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,SAAS,EAAE,CAAC;YACd,aAAa,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAsC,EAAE,CAAC;IAEnD,OAAO,CAAC,WAAmB,EAAE,EAAE;QAC7B,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,IAAI,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,SAAS,eAAe,CAAC,SAAoB;IAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAmB,CAAC;IAC5C,MAAM,EAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAC,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAChD,MAAM,aAAa,GAAG,MAAM,GAAG,eAAe,CAAC;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/D,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,wCAAwC;QACxC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACzB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,WAAmB,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;YACtD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,IAAI,MAAgB,CAAC;IACrB,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACzB,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,WAAmB,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ const uniformBlock = /* glsl */ `\
5
+ layout(std140) uniform aggregatorTransformUniforms {
6
+ ivec4 binIdRange;
7
+ bvec3 isCount;
8
+ bvec3 isMean;
9
+ float naN;
10
+ } aggregatorTransform;
11
+ `;
12
+ export const aggregatorTransformUniforms = {
13
+ name: 'aggregatorTransform',
14
+ vs: uniformBlock,
15
+ uniformTypes: {
16
+ binIdRange: 'vec4<i32>',
17
+ isCount: 'vec3<f32>',
18
+ isMean: 'vec3<f32>',
19
+ naN: 'f32'
20
+ }
21
+ };
22
+ //# sourceMappingURL=aggregation-transform-uniforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregation-transform-uniforms.js","sourceRoot":"","sources":["../../../../src/common/aggregator/gpu-aggregator/aggregation-transform-uniforms.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAMpC,MAAM,YAAY,GAAG,UAAU,CAAC;;;;;;;CAO/B,CAAC;AAUF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,qBAAqB;IAC3B,EAAE,EAAE,YAAY;IAChB,YAAY,EAAE;QACZ,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,WAAW;QACnB,GAAG,EAAE,KAAK;KACX;CACwD,CAAC"}
@@ -0,0 +1,18 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ const uniformBlock = /* glsl */ `\
5
+ layout(std140) uniform binSorterUniforms {
6
+ ivec4 binIdRange;
7
+ ivec2 targetSize;
8
+ } binSorter;
9
+ `;
10
+ export const binSorterUniforms = {
11
+ name: 'binSorter',
12
+ vs: uniformBlock,
13
+ uniformTypes: {
14
+ binIdRange: 'vec4<i32>',
15
+ targetSize: 'vec2<i32>'
16
+ }
17
+ };
18
+ //# sourceMappingURL=bin-sorter-uniforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin-sorter-uniforms.js","sourceRoot":"","sources":["../../../../src/common/aggregator/gpu-aggregator/bin-sorter-uniforms.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,MAAM,YAAY,GAAG,UAAU,CAAC;;;;;CAK/B,CAAC;AAOF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,WAAW;IACjB,EAAE,EAAE,YAAY;IAChB,YAAY,EAAE;QACZ,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,WAAW;KACxB;CAC8C,CAAC"}
@@ -0,0 +1,24 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /**
5
+ * Create a float texture to store aggregation result
6
+ */
7
+ export function createRenderTarget(device, width, height) {
8
+ return device.createFramebuffer({
9
+ width,
10
+ height,
11
+ colorAttachments: [
12
+ device.createTexture({
13
+ width,
14
+ height,
15
+ format: 'rgba32float',
16
+ sampler: {
17
+ minFilter: 'nearest',
18
+ magFilter: 'nearest'
19
+ }
20
+ })
21
+ ]
22
+ });
23
+ }
24
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/common/aggregator/gpu-aggregator/utils.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,KAAa,EAAE,MAAc;IAC9E,OAAO,MAAM,CAAC,iBAAiB,CAAC;QAC9B,KAAK;QACL,MAAM;QACN,gBAAgB,EAAE;YAChB,MAAM,CAAC,aAAa,CAAC;gBACnB,KAAK;gBACL,MAAM;gBACN,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,SAAS;iBACrB;aACF,CAAC;SACH;KACF,CAAC,CAAC;AACL,CAAC"}