@deck.gl/aggregation-layers 8.10.0-alpha.7 → 9.0.0-alpha.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 (184) hide show
  1. package/dist/dist.dev.js +9369 -356
  2. package/dist/es5/aggregation-layer.js +4 -6
  3. package/dist/es5/aggregation-layer.js.map +1 -1
  4. package/dist/es5/contour-layer/contour-layer.js +13 -2
  5. package/dist/es5/contour-layer/contour-layer.js.map +1 -1
  6. package/dist/es5/cpu-grid-layer/cpu-grid-layer.js +12 -1
  7. package/dist/es5/cpu-grid-layer/cpu-grid-layer.js.map +1 -1
  8. package/dist/es5/cpu-grid-layer/grid-aggregator.js +12 -8
  9. package/dist/es5/cpu-grid-layer/grid-aggregator.js.map +1 -1
  10. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js +27 -13
  11. package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js.map +1 -1
  12. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js +19 -10
  13. package/dist/es5/gpu-grid-layer/gpu-grid-layer.js.map +1 -1
  14. package/dist/es5/grid-aggregation-layer.js +7 -9
  15. package/dist/es5/grid-aggregation-layer.js.map +1 -1
  16. package/dist/es5/grid-layer/grid-layer.js +1 -1
  17. package/dist/es5/grid-layer/grid-layer.js.map +1 -1
  18. package/dist/es5/heatmap-layer/heatmap-layer-utils.js +3 -3
  19. package/dist/es5/heatmap-layer/heatmap-layer-utils.js.map +1 -1
  20. package/dist/es5/heatmap-layer/heatmap-layer.js +58 -55
  21. package/dist/es5/heatmap-layer/heatmap-layer.js.map +1 -1
  22. package/dist/es5/heatmap-layer/triangle-layer.js +22 -12
  23. package/dist/es5/heatmap-layer/triangle-layer.js.map +1 -1
  24. package/dist/es5/hexagon-layer/hexagon-aggregator.js.map +1 -1
  25. package/dist/es5/hexagon-layer/hexagon-layer.js +2 -0
  26. package/dist/es5/hexagon-layer/hexagon-layer.js.map +1 -1
  27. package/dist/es5/index.js.map +1 -1
  28. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js +23 -20
  29. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  30. package/dist/es5/screen-grid-layer/screen-grid-layer.js +6 -6
  31. package/dist/es5/screen-grid-layer/screen-grid-layer.js.map +1 -1
  32. package/dist/es5/utils/aggregation-operation-utils.js.map +1 -1
  33. package/dist/es5/utils/bin-sorter.js.map +1 -1
  34. package/dist/es5/utils/cpu-aggregator.js +11 -7
  35. package/dist/es5/utils/cpu-aggregator.js.map +1 -1
  36. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js +7 -2
  37. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js.map +1 -1
  38. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +83 -60
  39. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  40. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.md +3 -3
  41. package/dist/es5/utils/grid-aggregation-utils.js.map +1 -1
  42. package/dist/es5/utils/prop-utils.js.map +1 -1
  43. package/dist/es5/utils/resource-utils.js +12 -23
  44. package/dist/es5/utils/resource-utils.js.map +1 -1
  45. package/dist/esm/aggregation-layer.js +4 -5
  46. package/dist/esm/aggregation-layer.js.map +1 -1
  47. package/dist/esm/contour-layer/contour-layer.js +7 -1
  48. package/dist/esm/contour-layer/contour-layer.js.map +1 -1
  49. package/dist/esm/cpu-grid-layer/cpu-grid-layer.js +6 -0
  50. package/dist/esm/cpu-grid-layer/cpu-grid-layer.js.map +1 -1
  51. package/dist/esm/cpu-grid-layer/grid-aggregator.js +2 -1
  52. package/dist/esm/cpu-grid-layer/grid-aggregator.js.map +1 -1
  53. package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer.js +19 -10
  54. package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer.js.map +1 -1
  55. package/dist/esm/gpu-grid-layer/gpu-grid-layer.js +13 -10
  56. package/dist/esm/gpu-grid-layer/gpu-grid-layer.js.map +1 -1
  57. package/dist/esm/grid-aggregation-layer.js +4 -8
  58. package/dist/esm/grid-aggregation-layer.js.map +1 -1
  59. package/dist/esm/grid-layer/grid-layer.js +1 -1
  60. package/dist/esm/grid-layer/grid-layer.js.map +1 -1
  61. package/dist/esm/heatmap-layer/heatmap-layer-utils.js +3 -3
  62. package/dist/esm/heatmap-layer/heatmap-layer-utils.js.map +1 -1
  63. package/dist/esm/heatmap-layer/heatmap-layer.js +40 -58
  64. package/dist/esm/heatmap-layer/heatmap-layer.js.map +1 -1
  65. package/dist/esm/heatmap-layer/triangle-layer.js +13 -7
  66. package/dist/esm/heatmap-layer/triangle-layer.js.map +1 -1
  67. package/dist/esm/hexagon-layer/hexagon-aggregator.js.map +1 -1
  68. package/dist/esm/hexagon-layer/hexagon-layer.js +1 -0
  69. package/dist/esm/hexagon-layer/hexagon-layer.js.map +1 -1
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js +21 -24
  72. package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  73. package/dist/esm/screen-grid-layer/screen-grid-layer.js +5 -8
  74. package/dist/esm/screen-grid-layer/screen-grid-layer.js.map +1 -1
  75. package/dist/esm/utils/aggregation-operation-utils.js.map +1 -1
  76. package/dist/esm/utils/bin-sorter.js.map +1 -1
  77. package/dist/esm/utils/cpu-aggregator.js +11 -7
  78. package/dist/esm/utils/cpu-aggregator.js.map +1 -1
  79. package/dist/esm/utils/gpu-grid-aggregation/aggregate-all-fs.glsl.js.map +1 -1
  80. package/dist/esm/utils/gpu-grid-aggregation/aggregate-all-vs.glsl.js.map +1 -1
  81. package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js.map +1 -1
  82. package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js.map +1 -1
  83. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js +4 -3
  84. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js.map +1 -1
  85. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +62 -51
  86. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  87. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.md +3 -3
  88. package/dist/esm/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js.map +1 -1
  89. package/dist/esm/utils/grid-aggregation-utils.js.map +1 -1
  90. package/dist/esm/utils/prop-utils.js.map +1 -1
  91. package/dist/esm/utils/resource-utils.js +10 -17
  92. package/dist/esm/utils/resource-utils.js.map +1 -1
  93. package/dist.min.js +185 -30
  94. package/package.json +7 -5
  95. package/src/aggregation-layer.ts +7 -6
  96. package/src/contour-layer/contour-layer.ts +25 -9
  97. package/src/cpu-grid-layer/cpu-grid-layer.ts +8 -3
  98. package/src/cpu-grid-layer/{grid-aggregator.js → grid-aggregator.ts} +28 -4
  99. package/src/gpu-grid-layer/gpu-grid-cell-layer.ts +38 -27
  100. package/src/gpu-grid-layer/gpu-grid-layer.ts +18 -12
  101. package/src/grid-aggregation-layer.ts +39 -13
  102. package/src/grid-layer/grid-layer.ts +2 -2
  103. package/src/heatmap-layer/heatmap-layer-utils.ts +10 -4
  104. package/src/heatmap-layer/heatmap-layer.ts +74 -67
  105. package/src/heatmap-layer/triangle-layer.ts +26 -22
  106. package/src/hexagon-layer/{hexagon-aggregator.js → hexagon-aggregator.ts} +5 -1
  107. package/src/hexagon-layer/hexagon-layer.ts +8 -5
  108. package/src/index.ts +0 -1
  109. package/src/screen-grid-layer/screen-grid-cell-layer.ts +36 -33
  110. package/src/screen-grid-layer/screen-grid-layer.ts +12 -11
  111. package/src/utils/{aggregation-operation-utils.js → aggregation-operation-utils.ts} +8 -2
  112. package/src/utils/bin-sorter.ts +1 -1
  113. package/src/utils/{cpu-aggregator.js → cpu-aggregator.ts} +42 -30
  114. package/src/utils/gpu-grid-aggregation/{gpu-grid-aggregator-constants.js → gpu-grid-aggregator-constants.ts} +4 -4
  115. package/src/utils/gpu-grid-aggregation/gpu-grid-aggregator.md +3 -3
  116. package/src/utils/gpu-grid-aggregation/{gpu-grid-aggregator.js → gpu-grid-aggregator.ts} +123 -94
  117. package/src/utils/{grid-aggregation-utils.js → grid-aggregation-utils.ts} +1 -1
  118. package/src/utils/resource-utils.ts +59 -0
  119. package/typed/aggregation-layer.d.ts +4 -3
  120. package/typed/aggregation-layer.d.ts.map +1 -1
  121. package/typed/contour-layer/contour-layer.d.ts +19 -5
  122. package/typed/contour-layer/contour-layer.d.ts.map +1 -1
  123. package/typed/cpu-grid-layer/cpu-grid-layer.d.ts +8 -3
  124. package/typed/cpu-grid-layer/cpu-grid-layer.d.ts.map +1 -1
  125. package/typed/cpu-grid-layer/grid-aggregator.d.ts +16 -4
  126. package/typed/cpu-grid-layer/grid-aggregator.d.ts.map +1 -1
  127. package/typed/gpu-grid-layer/gpu-grid-cell-layer.d.ts +18 -4
  128. package/typed/gpu-grid-layer/gpu-grid-cell-layer.d.ts.map +1 -1
  129. package/typed/gpu-grid-layer/gpu-grid-layer.d.ts +8 -3
  130. package/typed/gpu-grid-layer/gpu-grid-layer.d.ts.map +1 -1
  131. package/typed/grid-aggregation-layer.d.ts +39 -4
  132. package/typed/grid-aggregation-layer.d.ts.map +1 -1
  133. package/typed/grid-layer/grid-layer.d.ts +2 -2
  134. package/typed/grid-layer/grid-layer.d.ts.map +1 -1
  135. package/typed/heatmap-layer/heatmap-layer-utils.d.ts +7 -5
  136. package/typed/heatmap-layer/heatmap-layer-utils.d.ts.map +1 -1
  137. package/typed/heatmap-layer/heatmap-layer.d.ts +19 -6
  138. package/typed/heatmap-layer/heatmap-layer.d.ts.map +1 -1
  139. package/typed/heatmap-layer/triangle-layer.d.ts +10 -6
  140. package/typed/heatmap-layer/triangle-layer.d.ts.map +1 -1
  141. package/typed/hexagon-layer/hexagon-aggregator.d.ts +6 -3
  142. package/typed/hexagon-layer/hexagon-aggregator.d.ts.map +1 -1
  143. package/typed/hexagon-layer/hexagon-layer.d.ts +5 -4
  144. package/typed/hexagon-layer/hexagon-layer.d.ts.map +1 -1
  145. package/typed/index.d.ts.map +1 -1
  146. package/typed/screen-grid-layer/screen-grid-cell-layer.d.ts +10 -9
  147. package/typed/screen-grid-layer/screen-grid-cell-layer.d.ts.map +1 -1
  148. package/typed/screen-grid-layer/screen-grid-layer.d.ts +6 -4
  149. package/typed/screen-grid-layer/screen-grid-layer.d.ts.map +1 -1
  150. package/typed/utils/aggregation-operation-utils.d.ts +18 -12
  151. package/typed/utils/aggregation-operation-utils.d.ts.map +1 -1
  152. package/typed/utils/bin-sorter.d.ts +1 -1
  153. package/typed/utils/bin-sorter.d.ts.map +1 -1
  154. package/typed/utils/cpu-aggregator.d.ts +28 -14
  155. package/typed/utils/cpu-aggregator.d.ts.map +1 -1
  156. package/typed/utils/gpu-grid-aggregation/aggregate-all-fs.glsl.d.ts +1 -1
  157. package/typed/utils/gpu-grid-aggregation/aggregate-all-fs.glsl.d.ts.map +1 -1
  158. package/typed/utils/gpu-grid-aggregation/aggregate-all-vs.glsl.d.ts +1 -1
  159. package/typed/utils/gpu-grid-aggregation/aggregate-all-vs.glsl.d.ts.map +1 -1
  160. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.d.ts +1 -1
  161. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.d.ts.map +1 -1
  162. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.d.ts +1 -1
  163. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.d.ts.map +1 -1
  164. package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.d.ts +35 -33
  165. package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.d.ts.map +1 -1
  166. package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator-utils.d.ts.map +1 -1
  167. package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator.d.ts +29 -19
  168. package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator.d.ts.map +1 -1
  169. package/typed/utils/gpu-grid-aggregation/transform-mean-vs.glsl.d.ts +1 -1
  170. package/typed/utils/gpu-grid-aggregation/transform-mean-vs.glsl.d.ts.map +1 -1
  171. package/typed/utils/grid-aggregation-utils.d.ts +11 -5
  172. package/typed/utils/grid-aggregation-utils.d.ts.map +1 -1
  173. package/typed/utils/prop-utils.d.ts +1 -1
  174. package/typed/utils/prop-utils.d.ts.map +1 -1
  175. package/typed/utils/resource-utils.d.ts +13 -3
  176. package/typed/utils/resource-utils.d.ts.map +1 -1
  177. package/src/utils/resource-utils.js +0 -51
  178. /package/src/utils/gpu-grid-aggregation/{aggregate-all-fs.glsl.js → aggregate-all-fs.glsl.ts} +0 -0
  179. /package/src/utils/gpu-grid-aggregation/{aggregate-all-vs.glsl.js → aggregate-all-vs.glsl.ts} +0 -0
  180. /package/src/utils/gpu-grid-aggregation/{aggregate-to-grid-fs.glsl.js → aggregate-to-grid-fs.glsl.ts} +0 -0
  181. /package/src/utils/gpu-grid-aggregation/{aggregate-to-grid-vs.glsl.js → aggregate-to-grid-vs.glsl.ts} +0 -0
  182. /package/src/utils/gpu-grid-aggregation/{gpu-grid-aggregator-utils.js → gpu-grid-aggregator-utils.ts} +0 -0
  183. /package/src/utils/gpu-grid-aggregation/{transform-mean-vs.glsl.js → transform-mean-vs.glsl.ts} +0 -0
  184. /package/src/utils/{prop-utils.js → prop-utils.ts} +0 -0
@@ -11,11 +11,15 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
 
12
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
13
 
14
- var _core = require("@luma.gl/core");
14
+ var _engine = require("@luma.gl/engine");
15
15
 
16
16
  var _shadertools = require("@luma.gl/shadertools");
17
17
 
18
- var _core2 = require("@deck.gl/core");
18
+ var _webgl = require("@luma.gl/webgl");
19
+
20
+ var _constants = require("@luma.gl/constants");
21
+
22
+ var _core = require("@deck.gl/core");
19
23
 
20
24
  var _gpuGridAggregatorConstants = require("./gpu-grid-aggregator-constants");
21
25
 
@@ -31,7 +35,7 @@ var _aggregateAllFs = _interopRequireDefault(require("./aggregate-all-fs.glsl"))
31
35
 
32
36
  var _transformMeanVs = _interopRequireDefault(require("./transform-mean-vs.glsl"));
33
37
 
34
- var _resourceUtils = require("./../resource-utils.js");
38
+ var _resourceUtils = require("./../resource-utils");
35
39
 
36
40
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
37
41
 
@@ -49,7 +53,7 @@ var ARRAY_BUFFER_MAP = {
49
53
  minData: 'minBuffer',
50
54
  maxMinData: 'maxMinBuffer'
51
55
  };
52
- var REQUIRED_FEATURES = [_core.FEATURES.WEBGL2, _core.FEATURES.COLOR_ATTACHMENT_RGBA32F, _core.FEATURES.BLEND_EQUATION_MINMAX, _core.FEATURES.FLOAT_BLEND, _core.FEATURES.TEXTURE_FLOAT];
56
+ var REQUIRED_FEATURES = ['webgl2', 'blend-minmax-webgl1', 'texture-renderable-float32-webgl', 'texture-blend-float-webgl1', 'texture-formats-float32-webgl1'];
53
57
 
54
58
  var GPUGridAggregator = function () {
55
59
  GPUGridAggregator.getAggregationData = function getAggregationData(_ref) {
@@ -77,7 +81,7 @@ var GPUGridAggregator = function () {
77
81
 
78
82
  if (minData) {
79
83
  results.minCellWeight = minData[0];
80
- results.totalCount = maxData[3];
84
+ results.totalCount = minData[3];
81
85
  }
82
86
  }
83
87
 
@@ -106,15 +110,15 @@ var GPUGridAggregator = function () {
106
110
  };
107
111
  };
108
112
 
109
- GPUGridAggregator.isSupported = function isSupported(gl) {
110
- return (0, _core.hasFeatures)(gl, REQUIRED_FEATURES);
113
+ GPUGridAggregator.isSupported = function isSupported(device) {
114
+ return REQUIRED_FEATURES.every(function (feature) {
115
+ return device.features.has(feature);
116
+ });
111
117
  };
112
118
 
113
- function GPUGridAggregator(gl) {
114
- var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
119
+ function GPUGridAggregator(device) {
120
+ var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
115
121
  (0, _classCallCheck2.default)(this, GPUGridAggregator);
116
- this.id = opts.id || 'gpu-grid-aggregator';
117
- this.gl = gl;
118
122
  this.state = {
119
123
  weightAttributes: {},
120
124
  textures: {},
@@ -125,10 +129,23 @@ var GPUGridAggregator = function () {
125
129
  minFramebuffers: {},
126
130
  maxFramebuffers: {},
127
131
  equations: {},
132
+ shaderOptions: {},
133
+ modelDirty: false,
128
134
  resources: {},
129
135
  results: {}
130
136
  };
131
- this._hasGPUSupport = (0, _core.isWebGL2)(gl) && (0, _core.hasFeatures)(this.gl, _core.FEATURES.BLEND_EQUATION_MINMAX, _core.FEATURES.COLOR_ATTACHMENT_RGBA32F, _core.FEATURES.TEXTURE_FLOAT);
137
+ this.id = void 0;
138
+ this.device = void 0;
139
+ this._hasGPUSupport = void 0;
140
+ this.gridAggregationModel = void 0;
141
+ this.allAggregationModel = void 0;
142
+ this.meanTransform = void 0;
143
+ this.id = props.id || 'gpu-grid-aggregator';
144
+ this.device = device;
145
+ var REQUIRED_FEATURES = ['blend-minmax-webgl1', 'texture-renderable-float32-webgl', 'texture-formats-float32-webgl1'];
146
+ this._hasGPUSupport = this.device.info.type === 'webgl2' && REQUIRED_FEATURES.every(function (feature) {
147
+ return device.features.has(feature);
148
+ });
132
149
 
133
150
  if (this._hasGPUSupport) {
134
151
  this._setupModels();
@@ -149,9 +166,9 @@ var GPUGridAggregator = function () {
149
166
  maxFramebuffers = _this$state.maxFramebuffers,
150
167
  meanTextures = _this$state.meanTextures,
151
168
  resources = _this$state.resources;
152
- gridAggregationModel === null || gridAggregationModel === void 0 ? void 0 : gridAggregationModel.delete();
153
- allAggregationModel === null || allAggregationModel === void 0 ? void 0 : allAggregationModel.delete();
154
- meanTransform === null || meanTransform === void 0 ? void 0 : meanTransform.delete();
169
+ gridAggregationModel === null || gridAggregationModel === void 0 ? void 0 : gridAggregationModel.destroy();
170
+ allAggregationModel === null || allAggregationModel === void 0 ? void 0 : allAggregationModel.destroy();
171
+ meanTransform === null || meanTransform === void 0 ? void 0 : meanTransform.destroy();
155
172
  deleteResources([framebuffers, textures, maxMinFramebuffers, minFramebuffers, maxFramebuffers, meanTextures, resources]);
156
173
  };
157
174
 
@@ -164,7 +181,7 @@ var GPUGridAggregator = function () {
164
181
  var aggregationParams = this._normalizeAggregationParams(opts);
165
182
 
166
183
  if (!this._hasGPUSupport) {
167
- _core2.log.log(1, 'GPUGridAggregator: not supported')();
184
+ _core.log.log(1, 'GPUGridAggregator: not supported')();
168
185
  }
169
186
 
170
187
  return this._runAggregation(aggregationParams);
@@ -234,20 +251,20 @@ var GPUGridAggregator = function () {
234
251
  needMax = _weights$id.needMax,
235
252
  combineMaxMin = _weights$id.combineMaxMin;
236
253
  results[id].aggregationTexture = textures[id];
237
- results[id].aggregationBuffer = (0, _core.readPixelsToBuffer)(framebuffers[id], {
254
+ results[id].aggregationBuffer = (0, _webgl.readPixelsToBuffer)(framebuffers[id], {
238
255
  target: weights[id].aggregationBuffer,
239
256
  sourceType: 5126
240
257
  });
241
258
 
242
259
  if (needMin && needMax && combineMaxMin) {
243
- results[id].maxMinBuffer = (0, _core.readPixelsToBuffer)(maxMinFramebuffers[id], {
260
+ results[id].maxMinBuffer = (0, _webgl.readPixelsToBuffer)(maxMinFramebuffers[id], {
244
261
  target: weights[id].maxMinBuffer,
245
262
  sourceType: 5126
246
263
  });
247
264
  results[id].maxMinTexture = resources["".concat(id, "-maxMinTexture")];
248
265
  } else {
249
266
  if (needMin) {
250
- results[id].minBuffer = (0, _core.readPixelsToBuffer)(minFramebuffers[id], {
267
+ results[id].minBuffer = (0, _webgl.readPixelsToBuffer)(minFramebuffers[id], {
251
268
  target: weights[id].minBuffer,
252
269
  sourceType: 5126
253
270
  });
@@ -255,7 +272,7 @@ var GPUGridAggregator = function () {
255
272
  }
256
273
 
257
274
  if (needMax) {
258
- results[id].maxBuffer = (0, _core.readPixelsToBuffer)(maxFramebuffers[id], {
275
+ results[id].maxBuffer = (0, _webgl.readPixelsToBuffer)(maxFramebuffers[id], {
259
276
  target: weights[id].maxBuffer,
260
277
  sourceType: 5126
261
278
  });
@@ -361,6 +378,8 @@ var GPUGridAggregator = function () {
361
378
  };
362
379
 
363
380
  _proto._renderToMaxMinTexture = function _renderToMaxMinTexture(opts) {
381
+ var _this = this;
382
+
364
383
  var id = opts.id,
365
384
  parameters = opts.parameters,
366
385
  gridSize = opts.gridSize,
@@ -369,25 +388,28 @@ var GPUGridAggregator = function () {
369
388
  _opts$clearParams = opts.clearParams,
370
389
  clearParams = _opts$clearParams === void 0 ? {} : _opts$clearParams;
371
390
  var framebuffers = this.state.framebuffers;
372
- var gl = this.gl,
373
- allAggregationModel = this.allAggregationModel;
374
- (0, _core.withParameters)(gl, _objectSpread(_objectSpread({}, clearParams), {}, {
391
+ var allAggregationModel = this.allAggregationModel;
392
+ (0, _webgl.withGLParameters)(this.device, _objectSpread(_objectSpread({}, clearParams), {}, {
375
393
  framebuffer: minOrMaxFb,
376
394
  viewport: [0, 0, gridSize[0], gridSize[1]]
377
395
  }), function () {
378
- gl.clear(16384);
379
- allAggregationModel.draw({
380
- parameters: parameters,
381
- uniforms: {
382
- uSampler: framebuffers[id].texture,
383
- gridSize: gridSize,
384
- combineMaxMin: combineMaxMin
385
- }
396
+ (0, _webgl.clear)(_this.device, {
397
+ color: true
398
+ });
399
+ allAggregationModel.setUniforms({
400
+ gridSize: gridSize,
401
+ combineMaxMin: combineMaxMin
402
+ });
403
+ allAggregationModel.setBindings({
404
+ uSampler: framebuffers[id].texture
386
405
  });
406
+ allAggregationModel.draw();
387
407
  });
388
408
  };
389
409
 
390
410
  _proto._renderToWeightsTexture = function _renderToWeightsTexture(opts) {
411
+ var _this2 = this;
412
+
391
413
  var id = opts.id,
392
414
  parameters = opts.parameters,
393
415
  moduleSettings = opts.moduleSettings,
@@ -398,16 +420,17 @@ var GPUGridAggregator = function () {
398
420
  framebuffers = _this$state4.framebuffers,
399
421
  equations = _this$state4.equations,
400
422
  weightAttributes = _this$state4.weightAttributes;
401
- var gl = this.gl,
402
- gridAggregationModel = this.gridAggregationModel;
423
+ var gridAggregationModel = this.gridAggregationModel;
403
424
  var operation = weights[id].operation;
404
425
  var clearColor = operation === _aggregationOperationUtils.AGGREGATION_OPERATION.MIN ? [_gpuGridAggregatorConstants.MAX_32_BIT_FLOAT, _gpuGridAggregatorConstants.MAX_32_BIT_FLOAT, _gpuGridAggregatorConstants.MAX_32_BIT_FLOAT, 0] : [0, 0, 0, 0];
405
- (0, _core.withParameters)(gl, {
426
+ (0, _webgl.withGLParameters)(this.device, {
406
427
  framebuffer: framebuffers[id],
407
428
  viewport: [0, 0, gridSize[0], gridSize[1]],
408
429
  clearColor: clearColor
409
430
  }, function () {
410
- gl.clear(16384);
431
+ (0, _webgl.clear)(_this2.device, {
432
+ color: true
433
+ });
411
434
  var attributes = {
412
435
  weights: weightAttributes[id]
413
436
  };
@@ -436,7 +459,7 @@ var GPUGridAggregator = function () {
436
459
  if (this.meanTransform) {
437
460
  this.meanTransform.update(transformOptions);
438
461
  } else {
439
- this.meanTransform = getMeanTransform(gl, transformOptions);
462
+ this.meanTransform = getMeanTransform(this.device, transformOptions);
440
463
  }
441
464
 
442
465
  this.meanTransform.run({
@@ -487,7 +510,7 @@ var GPUGridAggregator = function () {
487
510
  needMax = _weights$id3.needMax,
488
511
  combineMaxMin = _weights$id3.combineMaxMin,
489
512
  operation = _weights$id3.operation;
490
- textures[id] = weights[id].aggregationTexture || textures[id] || (0, _resourceUtils.getFloatTexture)(this.gl, {
513
+ textures[id] = weights[id].aggregationTexture || textures[id] || (0, _resourceUtils.getFloatTexture)(this.device, {
491
514
  id: "".concat(id, "-texture"),
492
515
  width: numCol,
493
516
  height: numRow
@@ -496,7 +519,7 @@ var GPUGridAggregator = function () {
496
519
  var texture = textures[id];
497
520
 
498
521
  if (operation === _aggregationOperationUtils.AGGREGATION_OPERATION.MEAN) {
499
- meanTextures[id] = meanTextures[id] || (0, _resourceUtils.getFloatTexture)(this.gl, {
522
+ meanTextures[id] = meanTextures[id] || (0, _resourceUtils.getFloatTexture)(this.device, {
500
523
  id: "".concat(id, "-mean-texture"),
501
524
  width: numCol,
502
525
  height: numRow
@@ -508,7 +531,7 @@ var GPUGridAggregator = function () {
508
531
  if (framebuffers[id]) {
509
532
  framebuffers[id].attach((0, _defineProperty2.default)({}, 36064, texture));
510
533
  } else {
511
- framebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.gl, {
534
+ framebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.device, {
512
535
  id: "".concat(id, "-fb"),
513
536
  width: numCol,
514
537
  height: numRow,
@@ -517,13 +540,13 @@ var GPUGridAggregator = function () {
517
540
  }
518
541
 
519
542
  framebuffers[id].resize(framebufferSize);
520
- equations[id] = _gpuGridAggregatorConstants.EQUATION_MAP[operation] || _gpuGridAggregatorConstants.EQUATION_MAP.SUM;
543
+ equations[id] = _gpuGridAggregatorConstants.EQUATION_MAP[operation] || _gpuGridAggregatorConstants.EQUATION_MAP[_aggregationOperationUtils.AGGREGATION_OPERATION.SUM];
521
544
 
522
545
  if (needMin || needMax) {
523
546
  if (needMin && needMax && combineMaxMin) {
524
547
  if (!maxMinFramebuffers[id]) {
525
548
  texture = weights[id].maxMinTexture || this._getMinMaxTexture("".concat(id, "-maxMinTexture"));
526
- maxMinFramebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.gl, {
549
+ maxMinFramebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.device, {
527
550
  id: "".concat(id, "-maxMinFb"),
528
551
  texture: texture
529
552
  });
@@ -532,7 +555,7 @@ var GPUGridAggregator = function () {
532
555
  if (needMin) {
533
556
  if (!minFramebuffers[id]) {
534
557
  texture = weights[id].minTexture || this._getMinMaxTexture("".concat(id, "-minTexture"));
535
- minFramebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.gl, {
558
+ minFramebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.device, {
536
559
  id: "".concat(id, "-minFb"),
537
560
  texture: texture
538
561
  });
@@ -542,7 +565,7 @@ var GPUGridAggregator = function () {
542
565
  if (needMax) {
543
566
  if (!maxFramebuffers[id]) {
544
567
  texture = weights[id].maxTexture || this._getMinMaxTexture("".concat(id, "-maxTexture"));
545
- maxFramebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.gl, {
568
+ maxFramebuffers[id] = (0, _resourceUtils.getFramebuffer)(this.device, {
546
569
  id: "".concat(id, "-maxFb"),
547
570
  texture: texture
548
571
  });
@@ -557,8 +580,8 @@ var GPUGridAggregator = function () {
557
580
  var resources = this.state.resources;
558
581
 
559
582
  if (!resources[name]) {
560
- resources[name] = (0, _resourceUtils.getFloatTexture)(this.gl, {
561
- id: "resourceName"
583
+ resources[name] = (0, _resourceUtils.getFloatTexture)(this.device, {
584
+ id: 'resourceName'
562
585
  });
563
586
  }
564
587
 
@@ -574,14 +597,13 @@ var GPUGridAggregator = function () {
574
597
  _ref3$numRow = _ref3.numRow,
575
598
  numRow = _ref3$numRow === void 0 ? 0 : _ref3$numRow;
576
599
 
577
- var gl = this.gl;
578
600
  var shaderOptions = this.state.shaderOptions;
579
- (_this$gridAggregation = this.gridAggregationModel) === null || _this$gridAggregation === void 0 ? void 0 : _this$gridAggregation.delete();
580
- this.gridAggregationModel = getAggregationModel(gl, shaderOptions);
601
+ (_this$gridAggregation = this.gridAggregationModel) === null || _this$gridAggregation === void 0 ? void 0 : _this$gridAggregation.destroy();
602
+ this.gridAggregationModel = getAggregationModel(this.device, shaderOptions);
581
603
 
582
604
  if (!this.allAggregationModel) {
583
605
  var instanceCount = numCol * numRow;
584
- this.allAggregationModel = getAllAggregationModel(gl, instanceCount);
606
+ this.allAggregationModel = getAllAggregationModel(this.device, instanceCount);
585
607
  }
586
608
  };
587
609
 
@@ -671,27 +693,28 @@ function deleteResources(resources) {
671
693
  });
672
694
  }
673
695
 
674
- function getAggregationModel(gl, shaderOptions) {
675
- var shaders = (0, _core2._mergeShaders)({
696
+ function getAggregationModel(device, shaderOptions) {
697
+ var shaders = (0, _core._mergeShaders)({
676
698
  vs: _aggregateToGridVs.default,
677
699
  fs: _aggregateToGridFs.default,
678
- modules: [_shadertools.fp64arithmetic, _core2.project32]
700
+ modules: [_shadertools.fp64arithmetic, _core.project32]
679
701
  }, shaderOptions);
680
- return new _core.Model(gl, _objectSpread({
681
- id: 'Gird-Aggregation-Model',
702
+ return new _engine.Model(device, _objectSpread({
703
+ id: 'Grid-Aggregation-Model',
682
704
  vertexCount: 1,
683
- drawMode: 0
705
+ drawMode: 0,
706
+ shaderAssembler: (0, _core.getShaderAssembler)()
684
707
  }, shaders));
685
708
  }
686
709
 
687
- function getAllAggregationModel(gl, instanceCount) {
688
- return new _core.Model(gl, {
710
+ function getAllAggregationModel(device, instanceCount) {
711
+ return new _engine.Model(device, {
689
712
  id: 'All-Aggregation-Model',
690
713
  vs: _aggregateAllVs.default,
691
714
  fs: _aggregateAllFs.default,
692
715
  modules: [_shadertools.fp64arithmetic],
693
716
  vertexCount: 1,
694
- drawMode: 0,
717
+ topology: 'point-list',
695
718
  isInstanced: true,
696
719
  instanceCount: instanceCount,
697
720
  attributes: {
@@ -700,8 +723,8 @@ function getAllAggregationModel(gl, instanceCount) {
700
723
  });
701
724
  }
702
725
 
703
- function getMeanTransform(gl, opts) {
704
- return new _core.Transform(gl, _objectSpread({
726
+ function getMeanTransform(device, opts) {
727
+ return new _engine.Transform(device, _objectSpread({
705
728
  vs: _transformMeanVs.default,
706
729
  _targetTextureVarying: 'meanValues'
707
730
  }, opts));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/gpu-grid-aggregator.js"],"names":["BUFFER_NAMES","ARRAY_BUFFER_MAP","maxData","minData","maxMinData","REQUIRED_FEATURES","FEATURES","WEBGL2","COLOR_ATTACHMENT_RGBA32F","BLEND_EQUATION_MINMAX","FLOAT_BLEND","TEXTURE_FLOAT","GPUGridAggregator","getAggregationData","aggregationData","pixelIndex","index","PIXEL_SIZE","results","cellCount","cellWeight","maxCellWieght","minCellWeight","totalCount","getCellData","countsData","size","numCells","length","cellWeights","Float32Array","cellCounts","Uint32Array","i","sizeIndex","isSupported","gl","opts","id","state","weightAttributes","textures","meanTextures","buffers","framebuffers","maxMinFramebuffers","minFramebuffers","maxFramebuffers","equations","resources","_hasGPUSupport","_setupModels","delete","gridAggregationModel","allAggregationModel","meanTransform","deleteResources","run","setState","aggregationParams","_normalizeAggregationParams","log","_runAggregation","getData","weightId","data","aggregationBuffer","arrayName","bufferName","updateShaders","shaderOptions","modelDirty","DEFAULT_RUN_PARAMS","weights","normalizeWeightParams","updateObject","Object","assign","_getAggregateData","needMin","needMax","combineMaxMin","aggregationTexture","target","sourceType","maxMinBuffer","maxMinTexture","minBuffer","minTexture","maxBuffer","maxTexture","_trackGPUResultBuffers","_renderAggregateData","cellSize","projectPoints","attributes","moduleSettings","numCol","numRow","translation","scaling","gridSize","parameters","blend","depthTest","blendFunc","uniforms","_renderToWeightsTexture","_renderToMaxMinTexture","blendEquation","MAX_MIN_BLEND_EQUATION","minOrMaxFb","clearParams","clearColor","MAX_32_BIT_FLOAT","MIN_BLEND_EQUATION","MAX_BLEND_EQUATION","framebuffer","viewport","clear","draw","uSampler","texture","operation","AGGREGATION_OPERATION","MIN","MEAN","transformOptions","_sourceTextures","aggregationValues","_targetTexture","elementCount","width","height","update","getMeanTransform","attach","_updateModels","_setupFramebuffers","framebufferSize","resize","EQUATION_MAP","SUM","_getMinMaxTexture","name","getAggregationModel","instanceCount","getAllAggregationModel","_setupWeightAttributes","vertexCount","setVertexCount","setAttributes","setInstanceCount","result","DEFAULT_WEIGHT_PARAMS","Array","isArray","forEach","obj","shaders","vs","AGGREGATE_TO_GRID_VS","fs","AGGREGATE_TO_GRID_FS","modules","fp64arithmetic","project32","Model","drawMode","AGGREGATE_ALL_VS","AGGREGATE_ALL_FS","isInstanced","position","Transform","TRANSFORM_MEAN_VS","_targetTextureVarying"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {\n Model,\n Transform,\n FEATURES,\n hasFeatures,\n isWebGL2,\n readPixelsToBuffer,\n withParameters\n} from '@luma.gl/core';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {log, project32, _mergeShaders as mergeShaders} from '@deck.gl/core';\n\nimport {\n DEFAULT_RUN_PARAMS,\n MAX_32_BIT_FLOAT,\n MIN_BLEND_EQUATION,\n MAX_BLEND_EQUATION,\n MAX_MIN_BLEND_EQUATION,\n EQUATION_MAP,\n DEFAULT_WEIGHT_PARAMS,\n PIXEL_SIZE\n} from './gpu-grid-aggregator-constants';\nimport {AGGREGATION_OPERATION} from '../aggregation-operation-utils';\n\nimport AGGREGATE_TO_GRID_VS from './aggregate-to-grid-vs.glsl';\nimport AGGREGATE_TO_GRID_FS from './aggregate-to-grid-fs.glsl';\nimport AGGREGATE_ALL_VS from './aggregate-all-vs.glsl';\nimport AGGREGATE_ALL_FS from './aggregate-all-fs.glsl';\nimport TRANSFORM_MEAN_VS from './transform-mean-vs.glsl';\nimport {getFloatTexture, getFramebuffer} from './../resource-utils.js';\n\nconst BUFFER_NAMES = ['aggregationBuffer', 'maxMinBuffer', 'minBuffer', 'maxBuffer'];\nconst ARRAY_BUFFER_MAP = {\n maxData: 'maxBuffer',\n minData: 'minBuffer',\n maxMinData: 'maxMinBuffer'\n};\n\nconst REQUIRED_FEATURES = [\n FEATURES.WEBGL2, // TODO: Remove after trannsform refactor\n FEATURES.COLOR_ATTACHMENT_RGBA32F,\n FEATURES.BLEND_EQUATION_MINMAX,\n FEATURES.FLOAT_BLEND,\n FEATURES.TEXTURE_FLOAT\n];\n\nexport default class GPUGridAggregator {\n // Decode and return aggregation data of given pixel.\n static getAggregationData({aggregationData, maxData, minData, maxMinData, pixelIndex}) {\n const index = pixelIndex * PIXEL_SIZE;\n const results = {};\n if (aggregationData) {\n results.cellCount = aggregationData[index + 3];\n results.cellWeight = aggregationData[index];\n }\n if (maxMinData) {\n results.maxCellWieght = maxMinData[0];\n results.minCellWeight = maxMinData[3];\n } else {\n if (maxData) {\n results.maxCellWieght = maxData[0];\n results.totalCount = maxData[3];\n }\n if (minData) {\n results.minCellWeight = minData[0];\n results.totalCount = maxData[3];\n }\n }\n return results;\n }\n\n // Decodes and retuns counts and weights of all cells\n static getCellData({countsData, size = 1}) {\n const numCells = countsData.length / 4;\n const cellWeights = new Float32Array(numCells * size);\n const cellCounts = new Uint32Array(numCells);\n for (let i = 0; i < numCells; i++) {\n // weights in RGB channels\n for (let sizeIndex = 0; sizeIndex < size; sizeIndex++) {\n cellWeights[i * size + sizeIndex] = countsData[i * 4 + sizeIndex];\n }\n // count in Alpha channel\n cellCounts[i] = countsData[i * 4 + 3];\n }\n return {cellCounts, cellWeights};\n }\n\n static isSupported(gl) {\n return hasFeatures(gl, REQUIRED_FEATURES);\n }\n\n // DEBUG ONLY\n // static logData({aggregationBuffer, minBuffer, maxBuffer, maxMinBuffer, limit = 10}) {\n // if (aggregationBuffer) {\n // console.log('Aggregation Data:');\n // const agrData = aggregationBuffer.getData();\n // for (let index = 0; index < agrData.length && limit > 0; index += 4) {\n // if (agrData[index + 3] > 0) {\n // console.log(\n // `index: ${index} weights: ${agrData[index]} ${agrData[index + 1]} ${\n // agrData[index + 2]\n // } count: ${agrData[index + 3]}`\n // );\n // limit--;\n // }\n // }\n // }\n // const obj = {minBuffer, maxBuffer, maxMinBuffer};\n // for (const key in obj) {\n // if (obj[key]) {\n // const data = obj[key].getData();\n // console.log(`${key} data : R: ${data[0]} G: ${data[1]} B: ${data[2]} A: ${data[3]}`);\n // }\n // }\n // }\n\n constructor(gl, opts = {}) {\n this.id = opts.id || 'gpu-grid-aggregator';\n this.gl = gl;\n this.state = {\n // per weight GPU resources\n weightAttributes: {},\n textures: {},\n meanTextures: {},\n buffers: {},\n framebuffers: {},\n maxMinFramebuffers: {},\n minFramebuffers: {},\n maxFramebuffers: {},\n equations: {},\n\n // common resources to be deleted\n resources: {},\n\n // results\n results: {}\n };\n this._hasGPUSupport =\n isWebGL2(gl) && // gl_InstanceID usage in min/max calculation shaders\n hasFeatures(\n this.gl,\n FEATURES.BLEND_EQUATION_MINMAX, // set min/max blend modes\n FEATURES.COLOR_ATTACHMENT_RGBA32F, // render to float texture\n FEATURES.TEXTURE_FLOAT // sample from a float texture\n );\n if (this._hasGPUSupport) {\n this._setupModels();\n }\n }\n\n // Delete owned resources.\n delete() {\n const {gridAggregationModel, allAggregationModel, meanTransform} = this;\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n } = this.state;\n\n gridAggregationModel?.delete();\n allAggregationModel?.delete();\n meanTransform?.delete();\n\n deleteResources([\n framebuffers,\n textures,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n ]);\n }\n\n // Perform aggregation and retun the results\n run(opts = {}) {\n // reset results\n this.setState({results: {}});\n const aggregationParams = this._normalizeAggregationParams(opts);\n if (!this._hasGPUSupport) {\n log.log(1, 'GPUGridAggregator: not supported')();\n }\n return this._runAggregation(aggregationParams);\n }\n\n // Reads aggregation data into JS Array object\n // For WebGL1, data is available in JS Array objects already.\n // For WebGL2, data is read from Buffer objects and cached for subsequent queries.\n getData(weightId) {\n const data = {};\n const results = this.state.results;\n if (!results[weightId].aggregationData) {\n // cache the results if reading from the buffer (WebGL2 path)\n results[weightId].aggregationData = results[weightId].aggregationBuffer.getData();\n }\n data.aggregationData = results[weightId].aggregationData;\n\n // Check for optional results\n for (const arrayName in ARRAY_BUFFER_MAP) {\n const bufferName = ARRAY_BUFFER_MAP[arrayName];\n\n if (results[weightId][arrayName] || results[weightId][bufferName]) {\n // cache the result\n results[weightId][arrayName] =\n results[weightId][arrayName] || results[weightId][bufferName].getData();\n data[arrayName] = results[weightId][arrayName];\n }\n }\n return data;\n }\n\n updateShaders(shaderOptions = {}) {\n this.setState({shaderOptions, modelDirty: true});\n }\n\n // PRIVATE\n\n _normalizeAggregationParams(opts) {\n const aggregationParams = {...DEFAULT_RUN_PARAMS, ...opts};\n const {weights} = aggregationParams;\n if (weights) {\n aggregationParams.weights = normalizeWeightParams(weights);\n }\n return aggregationParams;\n }\n\n // Update priveate state\n setState(updateObject) {\n Object.assign(this.state, updateObject);\n }\n\n // GPU Aggregation methods\n\n _getAggregateData(opts) {\n const results = {};\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n resources\n } = this.state;\n const {weights} = opts;\n\n for (const id in weights) {\n results[id] = {};\n const {needMin, needMax, combineMaxMin} = weights[id];\n results[id].aggregationTexture = textures[id];\n results[id].aggregationBuffer = readPixelsToBuffer(framebuffers[id], {\n target: weights[id].aggregationBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n if (needMin && needMax && combineMaxMin) {\n results[id].maxMinBuffer = readPixelsToBuffer(maxMinFramebuffers[id], {\n target: weights[id].maxMinBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxMinTexture = resources[`${id}-maxMinTexture`];\n } else {\n if (needMin) {\n results[id].minBuffer = readPixelsToBuffer(minFramebuffers[id], {\n target: weights[id].minBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].minTexture = resources[`${id}-minTexture`];\n }\n if (needMax) {\n results[id].maxBuffer = readPixelsToBuffer(maxFramebuffers[id], {\n target: weights[id].maxBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxTexture = resources[`${id}-maxTexture`];\n }\n }\n }\n this._trackGPUResultBuffers(results, weights);\n return results;\n }\n\n _renderAggregateData(opts) {\n const {\n cellSize,\n projectPoints,\n attributes,\n moduleSettings,\n numCol,\n numRow,\n weights,\n translation,\n scaling\n } = opts;\n const {maxMinFramebuffers, minFramebuffers, maxFramebuffers} = this.state;\n\n const gridSize = [numCol, numRow];\n const parameters = {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE]\n };\n const uniforms = {\n cellSize,\n gridSize,\n projectPoints,\n translation,\n scaling\n };\n\n for (const id in weights) {\n const {needMin, needMax} = weights[id];\n const combineMaxMin = needMin && needMax && weights[id].combineMaxMin;\n this._renderToWeightsTexture({\n id,\n parameters,\n moduleSettings,\n uniforms,\n gridSize,\n attributes,\n weights\n });\n if (combineMaxMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxMinFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, MAX_32_BIT_FLOAT]},\n combineMaxMin\n });\n } else {\n if (needMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: minFramebuffers[id],\n clearParams: {clearColor: [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]},\n combineMaxMin\n });\n }\n if (needMax) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, 0]},\n combineMaxMin\n });\n }\n }\n }\n }\n\n // render all aggregated grid-cells to generate Min, Max or MaxMin data texture\n _renderToMaxMinTexture(opts) {\n const {id, parameters, gridSize, minOrMaxFb, combineMaxMin, clearParams = {}} = opts;\n const {framebuffers} = this.state;\n const {gl, allAggregationModel} = this;\n\n withParameters(\n gl,\n {\n ...clearParams,\n framebuffer: minOrMaxFb,\n viewport: [0, 0, gridSize[0], gridSize[1]]\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n allAggregationModel.draw({\n parameters,\n uniforms: {\n uSampler: framebuffers[id].texture,\n gridSize,\n combineMaxMin\n }\n });\n }\n );\n }\n\n // render all data points to aggregate weights\n _renderToWeightsTexture(opts) {\n const {id, parameters, moduleSettings, uniforms, gridSize, weights} = opts;\n const {framebuffers, equations, weightAttributes} = this.state;\n const {gl, gridAggregationModel} = this;\n const {operation} = weights[id];\n\n const clearColor =\n operation === AGGREGATION_OPERATION.MIN\n ? [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]\n : [0, 0, 0, 0];\n withParameters(\n gl,\n {\n framebuffer: framebuffers[id],\n viewport: [0, 0, gridSize[0], gridSize[1]],\n clearColor\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n const attributes = {weights: weightAttributes[id]};\n gridAggregationModel.draw({\n parameters: {...parameters, blendEquation: equations[id]},\n moduleSettings,\n uniforms,\n attributes\n });\n }\n );\n\n if (operation === AGGREGATION_OPERATION.MEAN) {\n const {meanTextures, textures} = this.state;\n const transformOptions = {\n _sourceTextures: {aggregationValues: meanTextures[id]}, // contains aggregated data\n _targetTexture: textures[id], // store mean values,\n elementCount: textures[id].width * textures[id].height\n };\n if (this.meanTransform) {\n this.meanTransform.update(transformOptions);\n } else {\n this.meanTransform = getMeanTransform(gl, transformOptions);\n }\n this.meanTransform.run({\n parameters: {\n blend: false,\n depthTest: false\n }\n });\n\n // update framebuffer with mean results so readPixelsToBuffer returns mean values\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: textures[id]});\n }\n }\n\n _runAggregation(opts) {\n this._updateModels(opts);\n this._setupFramebuffers(opts);\n this._renderAggregateData(opts);\n const results = this._getAggregateData(opts);\n this.setState({results});\n return results;\n }\n\n // set up framebuffer for each weight\n /* eslint-disable complexity, max-depth, max-statements*/\n _setupFramebuffers(opts) {\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n equations\n } = this.state;\n const {weights} = opts;\n const {numCol, numRow} = opts;\n const framebufferSize = {width: numCol, height: numRow};\n for (const id in weights) {\n const {needMin, needMax, combineMaxMin, operation} = weights[id];\n textures[id] =\n weights[id].aggregationTexture ||\n textures[id] ||\n getFloatTexture(this.gl, {id: `${id}-texture`, width: numCol, height: numRow});\n textures[id].resize(framebufferSize);\n let texture = textures[id];\n if (operation === AGGREGATION_OPERATION.MEAN) {\n // For MEAN, we first aggregatet into a temp texture\n meanTextures[id] =\n meanTextures[id] ||\n getFloatTexture(this.gl, {id: `${id}-mean-texture`, width: numCol, height: numRow});\n meanTextures[id].resize(framebufferSize);\n texture = meanTextures[id];\n }\n if (framebuffers[id]) {\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: texture});\n } else {\n framebuffers[id] = getFramebuffer(this.gl, {\n id: `${id}-fb`,\n width: numCol,\n height: numRow,\n texture\n });\n }\n framebuffers[id].resize(framebufferSize);\n equations[id] = EQUATION_MAP[operation] || EQUATION_MAP.SUM;\n // For min/max framebuffers will use default size 1X1\n if (needMin || needMax) {\n if (needMin && needMax && combineMaxMin) {\n if (!maxMinFramebuffers[id]) {\n texture = weights[id].maxMinTexture || this._getMinMaxTexture(`${id}-maxMinTexture`);\n maxMinFramebuffers[id] = getFramebuffer(this.gl, {id: `${id}-maxMinFb`, texture});\n }\n } else {\n if (needMin) {\n if (!minFramebuffers[id]) {\n texture = weights[id].minTexture || this._getMinMaxTexture(`${id}-minTexture`);\n minFramebuffers[id] = getFramebuffer(this.gl, {\n id: `${id}-minFb`,\n texture\n });\n }\n }\n if (needMax) {\n if (!maxFramebuffers[id]) {\n texture = weights[id].maxTexture || this._getMinMaxTexture(`${id}-maxTexture`);\n maxFramebuffers[id] = getFramebuffer(this.gl, {\n id: `${id}-maxFb`,\n texture\n });\n }\n }\n }\n }\n }\n }\n /* eslint-enable complexity, max-depth, max-statements */\n\n _getMinMaxTexture(name) {\n const {resources} = this.state;\n if (!resources[name]) {\n resources[name] = getFloatTexture(this.gl, {id: `resourceName`});\n }\n return resources[name];\n }\n\n _setupModels({numCol = 0, numRow = 0} = {}) {\n const {gl} = this;\n const {shaderOptions} = this.state;\n this.gridAggregationModel?.delete();\n this.gridAggregationModel = getAggregationModel(gl, shaderOptions);\n if (!this.allAggregationModel) {\n const instanceCount = numCol * numRow;\n this.allAggregationModel = getAllAggregationModel(gl, instanceCount);\n }\n }\n\n // set up buffers for all weights\n _setupWeightAttributes(opts) {\n const {weightAttributes} = this.state;\n const {weights} = opts;\n for (const id in weights) {\n weightAttributes[id] = opts.attributes[id];\n }\n }\n\n // GPU Aggregation results are provided in Buffers, if new Buffer objects are created track them for later deletion.\n /* eslint-disable max-depth */\n _trackGPUResultBuffers(results, weights) {\n const {resources} = this.state;\n for (const id in results) {\n if (results[id]) {\n for (const bufferName of BUFFER_NAMES) {\n if (results[id][bufferName] && weights[id][bufferName] !== results[id][bufferName]) {\n // No result buffer is provided in weights object, `readPixelsToBuffer` has created a new Buffer object\n // collect the new buffer for garabge collection\n const name = `gpu-result-${id}-${bufferName}`;\n if (resources[name]) {\n resources[name].delete();\n }\n resources[name] = results[id][bufferName];\n }\n }\n }\n }\n }\n /* eslint-enable max-depth */\n\n _updateModels(opts) {\n const {vertexCount, attributes, numCol, numRow} = opts;\n const {modelDirty} = this.state;\n\n if (modelDirty) {\n this._setupModels(opts);\n this.setState({modelDirty: false});\n }\n\n // this maps color/elevation to weight name.\n this._setupWeightAttributes(opts);\n\n this.gridAggregationModel.setVertexCount(vertexCount);\n this.gridAggregationModel.setAttributes(attributes);\n\n this.allAggregationModel.setInstanceCount(numCol * numRow);\n }\n}\n\n// HELPER METHODS\n\nfunction normalizeWeightParams(weights) {\n const result = {};\n for (const id in weights) {\n result[id] = {...DEFAULT_WEIGHT_PARAMS, ...weights[id]};\n }\n return result;\n}\n\nfunction deleteResources(resources) {\n resources = Array.isArray(resources) ? resources : [resources];\n resources.forEach(obj => {\n for (const name in obj) {\n obj[name].delete();\n }\n });\n}\n\nfunction getAggregationModel(gl, shaderOptions) {\n const shaders = mergeShaders(\n {\n vs: AGGREGATE_TO_GRID_VS,\n fs: AGGREGATE_TO_GRID_FS,\n modules: [fp64arithmetic, project32]\n },\n shaderOptions\n );\n\n return new Model(gl, {\n id: 'Gird-Aggregation-Model',\n vertexCount: 1,\n drawMode: GL.POINTS,\n ...shaders\n });\n}\n\nfunction getAllAggregationModel(gl, instanceCount) {\n return new Model(gl, {\n id: 'All-Aggregation-Model',\n vs: AGGREGATE_ALL_VS,\n fs: AGGREGATE_ALL_FS,\n modules: [fp64arithmetic],\n vertexCount: 1,\n drawMode: GL.POINTS,\n isInstanced: true,\n instanceCount,\n attributes: {\n position: [0, 0]\n }\n });\n}\n\nfunction getMeanTransform(gl, opts) {\n return new Transform(gl, {\n vs: TRANSFORM_MEAN_VS,\n _targetTextureVarying: 'meanValues',\n ...opts\n });\n}\n"],"file":"gpu-grid-aggregator.js"}
1
+ {"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/gpu-grid-aggregator.ts"],"names":["BUFFER_NAMES","ARRAY_BUFFER_MAP","maxData","minData","maxMinData","REQUIRED_FEATURES","GPUGridAggregator","getAggregationData","aggregationData","pixelIndex","index","PIXEL_SIZE","results","cellCount","cellWeight","maxCellWieght","minCellWeight","totalCount","getCellData","countsData","size","numCells","length","cellWeights","Float32Array","cellCounts","Uint32Array","i","sizeIndex","isSupported","device","every","feature","features","has","props","state","weightAttributes","textures","meanTextures","buffers","framebuffers","maxMinFramebuffers","minFramebuffers","maxFramebuffers","equations","shaderOptions","modelDirty","resources","id","_hasGPUSupport","gridAggregationModel","allAggregationModel","meanTransform","info","type","_setupModels","delete","destroy","deleteResources","run","opts","setState","aggregationParams","_normalizeAggregationParams","log","_runAggregation","getData","weightId","data","aggregationBuffer","arrayName","bufferName","updateShaders","DEFAULT_RUN_PARAMS","weights","normalizeWeightParams","updateObject","Object","assign","_getAggregateData","needMin","needMax","combineMaxMin","aggregationTexture","target","sourceType","maxMinBuffer","maxMinTexture","minBuffer","minTexture","maxBuffer","maxTexture","_trackGPUResultBuffers","_renderAggregateData","cellSize","projectPoints","attributes","moduleSettings","numCol","numRow","translation","scaling","gridSize","parameters","blend","depthTest","blendFunc","uniforms","_renderToWeightsTexture","_renderToMaxMinTexture","blendEquation","MAX_MIN_BLEND_EQUATION","minOrMaxFb","clearParams","clearColor","MAX_32_BIT_FLOAT","MIN_BLEND_EQUATION","MAX_BLEND_EQUATION","framebuffer","viewport","color","setUniforms","setBindings","uSampler","texture","draw","operation","AGGREGATION_OPERATION","MIN","MEAN","transformOptions","_sourceTextures","aggregationValues","_targetTexture","elementCount","width","height","update","getMeanTransform","attach","_updateModels","_setupFramebuffers","framebufferSize","resize","EQUATION_MAP","SUM","_getMinMaxTexture","name","getAggregationModel","instanceCount","getAllAggregationModel","_setupWeightAttributes","vertexCount","setVertexCount","setAttributes","setInstanceCount","result","DEFAULT_WEIGHT_PARAMS","Array","isArray","forEach","obj","shaders","vs","AGGREGATE_TO_GRID_VS","fs","AGGREGATE_TO_GRID_FS","modules","fp64arithmetic","project32","Model","drawMode","shaderAssembler","AGGREGATE_ALL_VS","AGGREGATE_ALL_FS","topology","isInstanced","position","Transform","TRANSFORM_MEAN_VS","_targetTextureVarying"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {Device, DeviceFeature} from '@luma.gl/core';\nimport {Model, Transform} from '@luma.gl/engine';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {readPixelsToBuffer, withGLParameters, clear} from '@luma.gl/webgl';\nimport {GL} from '@luma.gl/constants';\nimport {log, project32, _mergeShaders as mergeShaders, getShaderAssembler} from '@deck.gl/core';\n\nimport {\n DEFAULT_RUN_PARAMS,\n MAX_32_BIT_FLOAT,\n MIN_BLEND_EQUATION,\n MAX_BLEND_EQUATION,\n MAX_MIN_BLEND_EQUATION,\n EQUATION_MAP,\n DEFAULT_WEIGHT_PARAMS,\n PIXEL_SIZE\n} from './gpu-grid-aggregator-constants';\nimport {AGGREGATION_OPERATION} from '../aggregation-operation-utils';\n\nimport AGGREGATE_TO_GRID_VS from './aggregate-to-grid-vs.glsl';\nimport AGGREGATE_TO_GRID_FS from './aggregate-to-grid-fs.glsl';\nimport AGGREGATE_ALL_VS from './aggregate-all-vs.glsl';\nimport AGGREGATE_ALL_FS from './aggregate-all-fs.glsl';\nimport TRANSFORM_MEAN_VS from './transform-mean-vs.glsl';\nimport {getFloatTexture, getFramebuffer} from './../resource-utils';\n\nconst BUFFER_NAMES = ['aggregationBuffer', 'maxMinBuffer', 'minBuffer', 'maxBuffer'];\nconst ARRAY_BUFFER_MAP = {\n maxData: 'maxBuffer',\n minData: 'minBuffer',\n maxMinData: 'maxMinBuffer'\n};\n\nconst REQUIRED_FEATURES: DeviceFeature[] = [\n 'webgl2',\n 'blend-minmax-webgl1',\n 'texture-renderable-float32-webgl',\n 'texture-blend-float-webgl1',\n 'texture-formats-float32-webgl1'\n];\n\nexport type GPUGridAggregatorProps = {\n id?: string;\n};\n\nexport default class GPUGridAggregator {\n // Decode and return aggregation data of given pixel.\n static getAggregationData({\n aggregationData,\n maxData,\n minData,\n maxMinData,\n pixelIndex\n }: {\n aggregationData?: Float32Array;\n maxData?: Float32Array;\n minData?: Float32Array;\n maxMinData?: Float32Array;\n pixelIndex: number;\n }) {\n const index = pixelIndex * PIXEL_SIZE;\n const results: {cellCount?; cellWeight?; maxCellWieght?; minCellWeight?; totalCount?} = {};\n if (aggregationData) {\n results.cellCount = aggregationData[index + 3];\n results.cellWeight = aggregationData[index];\n }\n if (maxMinData) {\n results.maxCellWieght = maxMinData[0];\n results.minCellWeight = maxMinData[3];\n } else {\n if (maxData) {\n results.maxCellWieght = maxData[0];\n results.totalCount = maxData[3];\n }\n if (minData) {\n results.minCellWeight = minData[0];\n results.totalCount = minData[3];\n }\n }\n return results;\n }\n\n // Decodes and retuns counts and weights of all cells\n static getCellData({countsData, size = 1}) {\n const numCells = countsData.length / 4;\n const cellWeights = new Float32Array(numCells * size);\n const cellCounts = new Uint32Array(numCells);\n for (let i = 0; i < numCells; i++) {\n // weights in RGB channels\n for (let sizeIndex = 0; sizeIndex < size; sizeIndex++) {\n cellWeights[i * size + sizeIndex] = countsData[i * 4 + sizeIndex];\n }\n // count in Alpha channel\n cellCounts[i] = countsData[i * 4 + 3];\n }\n return {cellCounts, cellWeights};\n }\n\n static isSupported(device: Device) {\n return REQUIRED_FEATURES.every(feature => device.features.has(feature));\n }\n\n // DEBUG ONLY\n // static logData({aggregationBuffer, minBuffer, maxBuffer, maxMinBuffer, limit = 10}) {\n // if (aggregationBuffer) {\n // console.log('Aggregation Data:');\n // const agrData = aggregationBuffer.getData();\n // for (let index = 0; index < agrData.length && limit > 0; index += 4) {\n // if (agrData[index + 3] > 0) {\n // console.log(\n // `index: ${index} weights: ${agrData[index]} ${agrData[index + 1]} ${\n // agrData[index + 2]\n // } count: ${agrData[index + 3]}`\n // );\n // limit--;\n // }\n // }\n // }\n // const obj = {minBuffer, maxBuffer, maxMinBuffer};\n // for (const key in obj) {\n // if (obj[key]) {\n // const data = obj[key].getData();\n // console.log(`${key} data : R: ${data[0]} G: ${data[1]} B: ${data[2]} A: ${data[3]}`);\n // }\n // }\n // }\n\n state = {\n // per weight GPU resources\n weightAttributes: {},\n textures: {},\n meanTextures: {},\n buffers: {},\n framebuffers: {},\n maxMinFramebuffers: {},\n minFramebuffers: {},\n maxFramebuffers: {},\n equations: {},\n\n shaderOptions: {},\n modelDirty: false,\n\n // common resources to be deleted\n resources: {},\n\n // results\n results: {}\n };\n\n id: string;\n device: Device;\n _hasGPUSupport: boolean;\n\n gridAggregationModel;\n allAggregationModel;\n meanTransform;\n\n constructor(device: Device, props: GPUGridAggregatorProps = {}) {\n this.id = props.id || 'gpu-grid-aggregator';\n this.device = device;\n\n const REQUIRED_FEATURES: DeviceFeature[] = [\n 'blend-minmax-webgl1', // set min/max blend modes\n 'texture-renderable-float32-webgl', // render to float texture\n 'texture-formats-float32-webgl1' // sample from a float texture\n ];\n\n // gl_InstanceID usage in min/max calculation shaders\n this._hasGPUSupport =\n this.device.info.type === 'webgl2' &&\n REQUIRED_FEATURES.every(feature => device.features.has(feature));\n if (this._hasGPUSupport) {\n this._setupModels();\n }\n }\n\n // Delete owned resources.\n delete() {\n const {gridAggregationModel, allAggregationModel, meanTransform} = this;\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n } = this.state;\n\n gridAggregationModel?.destroy();\n allAggregationModel?.destroy();\n meanTransform?.destroy();\n\n deleteResources([\n framebuffers,\n textures,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n ]);\n }\n\n // Perform aggregation and retun the results\n run(opts = {}) {\n // reset results\n this.setState({results: {}});\n const aggregationParams = this._normalizeAggregationParams(opts);\n if (!this._hasGPUSupport) {\n log.log(1, 'GPUGridAggregator: not supported')();\n }\n return this._runAggregation(aggregationParams);\n }\n\n // Reads aggregation data into JS Array object\n // For WebGL1, data is available in JS Array objects already.\n // For WebGL2, data is read from Buffer objects and cached for subsequent queries.\n getData(weightId) {\n const data: {\n aggregationData?: Float32Array;\n maxData?: Float32Array;\n minData?: Float32Array;\n maxMinData?: Float32Array;\n } = {};\n const results = this.state.results;\n if (!results[weightId].aggregationData) {\n // cache the results if reading from the buffer (WebGL2 path)\n results[weightId].aggregationData = results[weightId].aggregationBuffer.getData();\n }\n data.aggregationData = results[weightId].aggregationData;\n\n // Check for optional results\n for (const arrayName in ARRAY_BUFFER_MAP) {\n const bufferName = ARRAY_BUFFER_MAP[arrayName];\n\n if (results[weightId][arrayName] || results[weightId][bufferName]) {\n // cache the result\n results[weightId][arrayName] =\n results[weightId][arrayName] || results[weightId][bufferName].getData();\n data[arrayName] = results[weightId][arrayName];\n }\n }\n return data;\n }\n\n updateShaders(shaderOptions = {}) {\n this.setState({shaderOptions, modelDirty: true});\n }\n\n // PRIVATE\n\n _normalizeAggregationParams(opts) {\n const aggregationParams = {...DEFAULT_RUN_PARAMS, ...opts};\n const {weights} = aggregationParams;\n if (weights) {\n aggregationParams.weights = normalizeWeightParams(weights);\n }\n return aggregationParams;\n }\n\n // Update priveate state\n setState(updateObject) {\n Object.assign(this.state, updateObject);\n }\n\n // GPU Aggregation methods\n\n _getAggregateData(opts) {\n const results = {};\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n resources\n } = this.state;\n const {weights} = opts;\n\n for (const id in weights) {\n results[id] = {};\n const {needMin, needMax, combineMaxMin} = weights[id];\n results[id].aggregationTexture = textures[id];\n results[id].aggregationBuffer = readPixelsToBuffer(framebuffers[id], {\n target: weights[id].aggregationBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n if (needMin && needMax && combineMaxMin) {\n results[id].maxMinBuffer = readPixelsToBuffer(maxMinFramebuffers[id], {\n target: weights[id].maxMinBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxMinTexture = resources[`${id}-maxMinTexture`];\n } else {\n if (needMin) {\n results[id].minBuffer = readPixelsToBuffer(minFramebuffers[id], {\n target: weights[id].minBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].minTexture = resources[`${id}-minTexture`];\n }\n if (needMax) {\n results[id].maxBuffer = readPixelsToBuffer(maxFramebuffers[id], {\n target: weights[id].maxBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxTexture = resources[`${id}-maxTexture`];\n }\n }\n }\n this._trackGPUResultBuffers(results, weights);\n return results;\n }\n\n _renderAggregateData(opts) {\n const {\n cellSize,\n projectPoints,\n attributes,\n moduleSettings,\n numCol,\n numRow,\n weights,\n translation,\n scaling\n } = opts;\n const {maxMinFramebuffers, minFramebuffers, maxFramebuffers} = this.state;\n\n const gridSize = [numCol, numRow];\n const parameters = {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE]\n };\n const uniforms = {\n cellSize,\n gridSize,\n projectPoints,\n translation,\n scaling\n };\n\n for (const id in weights) {\n const {needMin, needMax} = weights[id];\n const combineMaxMin = needMin && needMax && weights[id].combineMaxMin;\n this._renderToWeightsTexture({\n id,\n parameters,\n moduleSettings,\n uniforms,\n gridSize,\n attributes,\n weights\n });\n if (combineMaxMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxMinFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, MAX_32_BIT_FLOAT]},\n combineMaxMin\n });\n } else {\n if (needMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: minFramebuffers[id],\n clearParams: {clearColor: [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]},\n combineMaxMin\n });\n }\n if (needMax) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, 0]},\n combineMaxMin\n });\n }\n }\n }\n }\n\n // render all aggregated grid-cells to generate Min, Max or MaxMin data texture\n _renderToMaxMinTexture(opts) {\n const {id, parameters, gridSize, minOrMaxFb, combineMaxMin, clearParams = {}} = opts;\n const {framebuffers} = this.state;\n const {allAggregationModel} = this;\n\n withGLParameters(\n this.device,\n {\n ...clearParams,\n framebuffer: minOrMaxFb,\n viewport: [0, 0, gridSize[0], gridSize[1]]\n },\n () => {\n clear(this.device, {color: true});\n\n // allAggregationModel.setParameters(parameters);\n allAggregationModel.setUniforms({gridSize, combineMaxMin});\n allAggregationModel.setBindings({uSampler: framebuffers[id].texture});\n allAggregationModel.draw();\n // TODO - we need to create a render pass for the aggregation\n // allAggregationModel.draw(renderPass);\n }\n );\n }\n\n // render all data points to aggregate weights\n _renderToWeightsTexture(opts) {\n const {id, parameters, moduleSettings, uniforms, gridSize, weights} = opts;\n const {framebuffers, equations, weightAttributes} = this.state;\n const {gridAggregationModel} = this;\n const {operation} = weights[id];\n\n const clearColor =\n operation === AGGREGATION_OPERATION.MIN\n ? [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]\n : [0, 0, 0, 0];\n withGLParameters(\n this.device,\n {\n framebuffer: framebuffers[id],\n viewport: [0, 0, gridSize[0], gridSize[1]],\n clearColor\n },\n () => {\n clear(this.device, {color: true});\n\n const attributes = {weights: weightAttributes[id]};\n gridAggregationModel.draw({\n parameters: {...parameters, blendEquation: equations[id]},\n moduleSettings,\n uniforms,\n attributes\n });\n }\n );\n\n if (operation === AGGREGATION_OPERATION.MEAN) {\n const {meanTextures, textures} = this.state;\n const transformOptions = {\n _sourceTextures: {aggregationValues: meanTextures[id]}, // contains aggregated data\n _targetTexture: textures[id], // store mean values,\n elementCount: textures[id].width * textures[id].height\n };\n if (this.meanTransform) {\n this.meanTransform.update(transformOptions);\n } else {\n this.meanTransform = getMeanTransform(this.device, transformOptions);\n }\n this.meanTransform.run({\n parameters: {\n blend: false,\n depthTest: false\n }\n });\n\n // update framebuffer with mean results so readPixelsToBuffer returns mean values\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: textures[id]});\n }\n }\n\n _runAggregation(opts) {\n this._updateModels(opts);\n this._setupFramebuffers(opts);\n this._renderAggregateData(opts);\n const results = this._getAggregateData(opts);\n this.setState({results});\n return results;\n }\n\n // set up framebuffer for each weight\n /* eslint-disable complexity, max-depth, max-statements*/\n _setupFramebuffers(opts) {\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n equations\n } = this.state;\n const {weights} = opts;\n const {numCol, numRow} = opts;\n const framebufferSize = {width: numCol, height: numRow};\n for (const id in weights) {\n const {needMin, needMax, combineMaxMin, operation} = weights[id];\n textures[id] =\n weights[id].aggregationTexture ||\n textures[id] ||\n getFloatTexture(this.device, {id: `${id}-texture`, width: numCol, height: numRow});\n textures[id].resize(framebufferSize);\n let texture = textures[id];\n if (operation === AGGREGATION_OPERATION.MEAN) {\n // For MEAN, we first aggregatet into a temp texture\n meanTextures[id] =\n meanTextures[id] ||\n getFloatTexture(this.device, {id: `${id}-mean-texture`, width: numCol, height: numRow});\n meanTextures[id].resize(framebufferSize);\n texture = meanTextures[id];\n }\n if (framebuffers[id]) {\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: texture});\n } else {\n framebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-fb`,\n width: numCol,\n height: numRow,\n texture\n });\n }\n framebuffers[id].resize(framebufferSize);\n equations[id] = EQUATION_MAP[operation] || EQUATION_MAP[AGGREGATION_OPERATION.SUM];\n // For min/max framebuffers will use default size 1X1\n if (needMin || needMax) {\n if (needMin && needMax && combineMaxMin) {\n if (!maxMinFramebuffers[id]) {\n texture = weights[id].maxMinTexture || this._getMinMaxTexture(`${id}-maxMinTexture`);\n maxMinFramebuffers[id] = getFramebuffer(this.device, {id: `${id}-maxMinFb`, texture});\n }\n } else {\n if (needMin) {\n if (!minFramebuffers[id]) {\n texture = weights[id].minTexture || this._getMinMaxTexture(`${id}-minTexture`);\n minFramebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-minFb`,\n texture\n });\n }\n }\n if (needMax) {\n if (!maxFramebuffers[id]) {\n texture = weights[id].maxTexture || this._getMinMaxTexture(`${id}-maxTexture`);\n maxFramebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-maxFb`,\n texture\n });\n }\n }\n }\n }\n }\n }\n /* eslint-enable complexity, max-depth, max-statements */\n\n _getMinMaxTexture(name) {\n const {resources} = this.state;\n if (!resources[name]) {\n resources[name] = getFloatTexture(this.device, {id: 'resourceName'});\n }\n return resources[name];\n }\n\n _setupModels({numCol = 0, numRow = 0} = {}) {\n const {shaderOptions} = this.state;\n this.gridAggregationModel?.destroy();\n this.gridAggregationModel = getAggregationModel(this.device, shaderOptions);\n if (!this.allAggregationModel) {\n const instanceCount = numCol * numRow;\n this.allAggregationModel = getAllAggregationModel(this.device, instanceCount);\n }\n }\n\n // set up buffers for all weights\n _setupWeightAttributes(opts) {\n const {weightAttributes} = this.state;\n const {weights} = opts;\n for (const id in weights) {\n weightAttributes[id] = opts.attributes[id];\n }\n }\n\n /** GPU Aggregation results are provided in Buffers, if new Buffer objects are created track them for later deletion. */\n /* eslint-disable max-depth */\n _trackGPUResultBuffers(results, weights) {\n const {resources} = this.state;\n for (const id in results) {\n if (results[id]) {\n for (const bufferName of BUFFER_NAMES) {\n if (results[id][bufferName] && weights[id][bufferName] !== results[id][bufferName]) {\n // No result buffer is provided in weights object, `readPixelsToBuffer` has created a new Buffer object\n // collect the new buffer for garabge collection\n const name = `gpu-result-${id}-${bufferName}`;\n if (resources[name]) {\n resources[name].delete();\n }\n resources[name] = results[id][bufferName];\n }\n }\n }\n }\n }\n /* eslint-enable max-depth */\n\n _updateModels(opts) {\n const {vertexCount, attributes, numCol, numRow} = opts;\n const {modelDirty} = this.state;\n\n if (modelDirty) {\n this._setupModels(opts);\n this.setState({modelDirty: false});\n }\n\n // this maps color/elevation to weight name.\n this._setupWeightAttributes(opts);\n\n this.gridAggregationModel.setVertexCount(vertexCount);\n this.gridAggregationModel.setAttributes(attributes);\n\n this.allAggregationModel.setInstanceCount(numCol * numRow);\n }\n}\n\n// HELPER METHODS\n\nfunction normalizeWeightParams(weights) {\n const result = {};\n for (const id in weights) {\n result[id] = {...DEFAULT_WEIGHT_PARAMS, ...weights[id]};\n }\n return result;\n}\n\nfunction deleteResources(resources) {\n resources = Array.isArray(resources) ? resources : [resources];\n resources.forEach(obj => {\n for (const name in obj) {\n obj[name].delete();\n }\n });\n}\n\nfunction getAggregationModel(device: Device, shaderOptions) {\n const shaders = mergeShaders(\n {\n vs: AGGREGATE_TO_GRID_VS,\n fs: AGGREGATE_TO_GRID_FS,\n modules: [fp64arithmetic, project32]\n },\n shaderOptions\n );\n\n return new Model(device, {\n id: 'Grid-Aggregation-Model',\n vertexCount: 1,\n drawMode: GL.POINTS,\n shaderAssembler: getShaderAssembler(),\n ...shaders\n });\n}\n\nfunction getAllAggregationModel(device: Device, instanceCount: number): Model {\n return new Model(device, {\n id: 'All-Aggregation-Model',\n vs: AGGREGATE_ALL_VS,\n fs: AGGREGATE_ALL_FS,\n modules: [fp64arithmetic],\n vertexCount: 1,\n topology: 'point-list',\n isInstanced: true,\n instanceCount,\n attributes: {\n // @ts-expect-error\n position: [0, 0]\n }\n });\n}\n\nfunction getMeanTransform(device: Device, opts) {\n return new Transform(device, {\n vs: TRANSFORM_MEAN_VS,\n _targetTextureVarying: 'meanValues',\n ...opts\n });\n}\n"],"file":"gpu-grid-aggregator.js"}
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Usage (Aggregation in World space)
6
6
  ```
7
- const aggregator = new GPUGridAggregator(gl);
7
+ const aggregator = new GPUGridAggregator(device);
8
8
 
9
9
  const results = aggregator.run({
10
10
  attributes, // position and weight attributes
@@ -29,7 +29,7 @@ const results = aggregator.run({
29
29
  You can also perform aggregation in screen space by provide a viewport and set `projectPoints` to true. Aggregator will first project positions and then aggregate them in screen space.
30
30
 
31
31
  ```
32
- const aggregator = new GPUGridAggregator(gl);
32
+ const aggregator = new GPUGridAggregator(device);
33
33
 
34
34
  const results = aggregator.run({
35
35
  attributes, // position and weight attributes
@@ -57,7 +57,7 @@ const results = aggregator.run({
57
57
 
58
58
  ‘ScreenGridAggregator’ constructor takes following arguments and constructs an object.
59
59
 
60
- * gl (WebGLContext) : used for querying WebGL features and creating required webgl resources.
60
+ * device (WebGLContext) : used for querying WebGL features and creating required webgl resources.
61
61
  * opts (Object) : Optionally contains and ‘id’ and ‘sahderCache’ object for caching/re-using shaders.
62
62
 
63
63