@deck.gl/aggregation-layers 9.0.0-alpha.5 → 9.0.0-alpha.7

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 (125) hide show
  1. package/dist/dist.dev.js +4529 -4307
  2. package/dist/es5/heatmap-layer/heatmap-layer.js +7 -8
  3. package/dist/es5/heatmap-layer/heatmap-layer.js.map +1 -1
  4. package/dist/es5/heatmap-layer/max-fs.glsl.js +1 -1
  5. package/dist/es5/heatmap-layer/max-vs.glsl.js +1 -1
  6. package/dist/es5/heatmap-layer/triangle-layer-fragment.glsl.js +1 -1
  7. package/dist/es5/heatmap-layer/triangle-layer-vertex.glsl.js +1 -1
  8. package/dist/es5/heatmap-layer/weights-fs.glsl.js +1 -1
  9. package/dist/es5/heatmap-layer/weights-vs.glsl.js +1 -1
  10. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js +4 -4
  11. package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  12. package/dist/es5/screen-grid-layer/screen-grid-layer-fragment.glsl.js +1 -1
  13. package/dist/es5/screen-grid-layer/screen-grid-layer-vertex.glsl.js +1 -1
  14. package/dist/es5/screen-grid-layer/screen-grid-layer.js +1 -3
  15. package/dist/es5/screen-grid-layer/screen-grid-layer.js.map +1 -1
  16. package/dist/es5/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js +1 -1
  17. package/dist/es5/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js +1 -1
  18. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +1 -1
  19. package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  20. package/dist/es5/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js +1 -1
  21. package/dist/esm/heatmap-layer/heatmap-layer.js +8 -11
  22. package/dist/esm/heatmap-layer/heatmap-layer.js.map +1 -1
  23. package/dist/esm/heatmap-layer/max-fs.glsl.js +5 -3
  24. package/dist/esm/heatmap-layer/max-fs.glsl.js.map +1 -1
  25. package/dist/esm/heatmap-layer/max-vs.glsl.js +3 -2
  26. package/dist/esm/heatmap-layer/max-vs.glsl.js.map +1 -1
  27. package/dist/esm/heatmap-layer/triangle-layer-fragment.glsl.js +9 -6
  28. package/dist/esm/heatmap-layer/triangle-layer-fragment.glsl.js.map +1 -1
  29. package/dist/esm/heatmap-layer/triangle-layer-vertex.glsl.js +7 -6
  30. package/dist/esm/heatmap-layer/triangle-layer-vertex.glsl.js.map +1 -1
  31. package/dist/esm/heatmap-layer/weights-fs.glsl.js +5 -3
  32. package/dist/esm/heatmap-layer/weights-fs.glsl.js.map +1 -1
  33. package/dist/esm/heatmap-layer/weights-vs.glsl.js +5 -4
  34. package/dist/esm/heatmap-layer/weights-vs.glsl.js.map +1 -1
  35. package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js +4 -4
  36. package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
  37. package/dist/esm/screen-grid-layer/screen-grid-layer-fragment.glsl.js +7 -4
  38. package/dist/esm/screen-grid-layer/screen-grid-layer-fragment.glsl.js.map +1 -1
  39. package/dist/esm/screen-grid-layer/screen-grid-layer-vertex.glsl.js +8 -7
  40. package/dist/esm/screen-grid-layer/screen-grid-layer-vertex.glsl.js.map +1 -1
  41. package/dist/esm/screen-grid-layer/screen-grid-layer.js +1 -3
  42. package/dist/esm/screen-grid-layer/screen-grid-layer.js.map +1 -1
  43. package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js +6 -3
  44. package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js.map +1 -1
  45. package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js +5 -4
  46. package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js.map +1 -1
  47. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +2 -2
  48. package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
  49. package/dist/esm/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js +3 -2
  50. package/dist/esm/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js.map +1 -1
  51. package/dist.min.js +152 -122
  52. package/package.json +7 -7
  53. package/src/heatmap-layer/heatmap-layer.ts +17 -17
  54. package/src/heatmap-layer/max-fs.glsl.ts +5 -3
  55. package/src/heatmap-layer/max-vs.glsl.ts +3 -2
  56. package/src/heatmap-layer/triangle-layer-fragment.glsl.ts +9 -6
  57. package/src/heatmap-layer/triangle-layer-vertex.glsl.ts +7 -6
  58. package/src/heatmap-layer/weights-fs.glsl.ts +5 -3
  59. package/src/heatmap-layer/weights-vs.glsl.ts +5 -4
  60. package/src/screen-grid-layer/screen-grid-cell-layer.ts +16 -8
  61. package/src/screen-grid-layer/screen-grid-layer-fragment.glsl.ts +7 -4
  62. package/src/screen-grid-layer/screen-grid-layer-vertex.glsl.ts +8 -7
  63. package/src/screen-grid-layer/screen-grid-layer.ts +1 -1
  64. package/src/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.ts +6 -3
  65. package/src/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.ts +5 -4
  66. package/src/utils/gpu-grid-aggregation/gpu-grid-aggregator.ts +2 -2
  67. package/src/utils/gpu-grid-aggregation/transform-mean-vs.glsl.ts +3 -2
  68. package/typed/aggregation-layer.d.ts +1 -1
  69. package/typed/aggregation-layer.d.ts.map +1 -1
  70. package/typed/contour-layer/contour-layer.d.ts +2 -2
  71. package/typed/contour-layer/contour-layer.d.ts.map +1 -1
  72. package/typed/cpu-grid-layer/cpu-grid-layer.d.ts +2 -2
  73. package/typed/cpu-grid-layer/cpu-grid-layer.d.ts.map +1 -1
  74. package/typed/cpu-grid-layer/grid-aggregator.d.ts +1 -1
  75. package/typed/cpu-grid-layer/grid-aggregator.d.ts.map +1 -1
  76. package/typed/gpu-grid-layer/gpu-grid-cell-layer.d.ts +1 -1
  77. package/typed/gpu-grid-layer/gpu-grid-cell-layer.d.ts.map +1 -1
  78. package/typed/gpu-grid-layer/gpu-grid-layer.d.ts +2 -2
  79. package/typed/gpu-grid-layer/gpu-grid-layer.d.ts.map +1 -1
  80. package/typed/grid-aggregation-layer.d.ts +1 -1
  81. package/typed/grid-aggregation-layer.d.ts.map +1 -1
  82. package/typed/grid-layer/grid-layer.d.ts +2 -2
  83. package/typed/grid-layer/grid-layer.d.ts.map +1 -1
  84. package/typed/heatmap-layer/heatmap-layer.d.ts +8 -9
  85. package/typed/heatmap-layer/heatmap-layer.d.ts.map +1 -1
  86. package/typed/heatmap-layer/max-fs.glsl.d.ts +1 -1
  87. package/typed/heatmap-layer/max-fs.glsl.d.ts.map +1 -1
  88. package/typed/heatmap-layer/max-vs.glsl.d.ts +1 -1
  89. package/typed/heatmap-layer/max-vs.glsl.d.ts.map +1 -1
  90. package/typed/heatmap-layer/triangle-layer-fragment.glsl.d.ts +1 -1
  91. package/typed/heatmap-layer/triangle-layer-fragment.glsl.d.ts.map +1 -1
  92. package/typed/heatmap-layer/triangle-layer-vertex.glsl.d.ts +1 -1
  93. package/typed/heatmap-layer/triangle-layer-vertex.glsl.d.ts.map +1 -1
  94. package/typed/heatmap-layer/triangle-layer.d.ts +2 -2
  95. package/typed/heatmap-layer/triangle-layer.d.ts.map +1 -1
  96. package/typed/heatmap-layer/weights-fs.glsl.d.ts +1 -1
  97. package/typed/heatmap-layer/weights-fs.glsl.d.ts.map +1 -1
  98. package/typed/heatmap-layer/weights-vs.glsl.d.ts +1 -1
  99. package/typed/heatmap-layer/weights-vs.glsl.d.ts.map +1 -1
  100. package/typed/hexagon-layer/hexagon-layer.d.ts +2 -2
  101. package/typed/hexagon-layer/hexagon-layer.d.ts.map +1 -1
  102. package/typed/screen-grid-layer/screen-grid-cell-layer.d.ts +4 -8
  103. package/typed/screen-grid-layer/screen-grid-cell-layer.d.ts.map +1 -1
  104. package/typed/screen-grid-layer/screen-grid-layer-fragment.glsl.d.ts +1 -1
  105. package/typed/screen-grid-layer/screen-grid-layer-fragment.glsl.d.ts.map +1 -1
  106. package/typed/screen-grid-layer/screen-grid-layer-vertex.glsl.d.ts +1 -1
  107. package/typed/screen-grid-layer/screen-grid-layer-vertex.glsl.d.ts.map +1 -1
  108. package/typed/screen-grid-layer/screen-grid-layer.d.ts +2 -2
  109. package/typed/screen-grid-layer/screen-grid-layer.d.ts.map +1 -1
  110. package/typed/types.d.ts +1 -1
  111. package/typed/types.d.ts.map +1 -1
  112. package/typed/utils/aggregation-operation-utils.d.ts +1 -1
  113. package/typed/utils/aggregation-operation-utils.d.ts.map +1 -1
  114. package/typed/utils/bin-sorter.d.ts +1 -1
  115. package/typed/utils/bin-sorter.d.ts.map +1 -1
  116. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.d.ts +1 -1
  117. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.d.ts.map +1 -1
  118. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.d.ts +1 -1
  119. package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.d.ts.map +1 -1
  120. package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator.d.ts +1 -1
  121. package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator.d.ts.map +1 -1
  122. package/typed/utils/gpu-grid-aggregation/transform-mean-vs.glsl.d.ts +1 -1
  123. package/typed/utils/gpu-grid-aggregation/transform-mean-vs.glsl.d.ts.map +1 -1
  124. package/typed/utils/resource-utils.d.ts +1 -1
  125. package/typed/utils/resource-utils.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/heatmap-layer/triangle-layer-fragment.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAtCA","sourcesContent":["// Copyright (c) 2015 - 2017 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\nexport default `\\\n#define SHADER_NAME triangle-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D texture;\nuniform sampler2D colorTexture;\nuniform float aggregationMode;\n\nvarying vec2 vTexCoords;\nvarying float vIntensityMin;\nvarying float vIntensityMax;\n\nvec4 getLinearColor(float value) {\n float factor = clamp(value * vIntensityMax, 0., 1.);\n vec4 color = texture2D(colorTexture, vec2(factor, 0.5));\n color.a *= min(value * vIntensityMin, 1.0);\n return color;\n}\n\nvoid main(void) {\n vec4 weights = texture2D(texture, vTexCoords);\n float weight = weights.r;\n\n if (aggregationMode > 0.5) {\n weight /= max(1.0, weights.a);\n }\n\n // discard pixels with 0 weight.\n if (weight <= 0.) {\n discard;\n }\n\n vec4 linearColor = getLinearColor(weight);\n linearColor.a *= opacity;\n gl_FragColor =linearColor;\n}\n`;\n"],"file":"triangle-layer-fragment.glsl.js"}
1
+ {"version":3,"sources":["../../../src/heatmap-layer/triangle-layer-fragment.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAzCA","sourcesContent":["// Copyright (c) 2015 - 2017 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\nexport default `\\\n#version 300 es\n#define SHADER_NAME triangle-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D texture;\nuniform sampler2D colorTexture;\nuniform float aggregationMode;\n\nin vec2 vTexCoords;\nin float vIntensityMin;\nin float vIntensityMax;\n\nout vec4 fragColor;\n\nvec4 getLinearColor(float value) {\n float factor = clamp(value * vIntensityMax, 0., 1.);\n vec4 color = texture(colorTexture, vec2(factor, 0.5));\n color.a *= min(value * vIntensityMin, 1.0);\n return color;\n}\n\nvoid main(void) {\n vec4 weights = texture(texture, vTexCoords);\n float weight = weights.r;\n\n if (aggregationMode > 0.5) {\n weight /= max(1.0, weights.a);\n }\n\n // discard pixels with 0 weight.\n if (weight <= 0.) {\n discard;\n }\n\n vec4 linearColor = getLinearColor(weight);\n linearColor.a *= opacity;\n fragColor = linearColor;\n}\n`;\n"],"file":"triangle-layer-fragment.glsl.js"}
@@ -1,4 +1,5 @@
1
1
  export default `\
2
+ #version 300 es
2
3
  #define SHADER_NAME heatp-map-layer-vertex-shader
3
4
 
4
5
  uniform sampler2D maxTexture;
@@ -7,17 +8,17 @@ uniform vec2 colorDomain;
7
8
  uniform float threshold;
8
9
  uniform float aggregationMode;
9
10
 
10
- attribute vec3 positions;
11
- attribute vec2 texCoords;
11
+ in vec3 positions;
12
+ in vec2 texCoords;
12
13
 
13
- varying vec2 vTexCoords;
14
- varying float vIntensityMin;
15
- varying float vIntensityMax;
14
+ out vec2 vTexCoords;
15
+ out float vIntensityMin;
16
+ out float vIntensityMax;
16
17
 
17
18
  void main(void) {
18
19
  gl_Position = project_position_to_clipspace(positions, vec3(0.0), vec3(0.0));
19
20
  vTexCoords = texCoords;
20
- vec4 maxTexture = texture2D(maxTexture, vec2(0.5));
21
+ vec4 maxTexture = texture(maxTexture, vec2(0.5));
21
22
  float maxValue = aggregationMode < 0.5 ? maxTexture.r : maxTexture.g;
22
23
  float minValue = maxValue * threshold;
23
24
  if (colorDomain[1] > 0.) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/heatmap-layer/triangle-layer-vertex.glsl.ts"],"names":[],"mappings":"AAsBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA9BA","sourcesContent":["// Copyright (c) 2015 - 2017 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\n// Inspired by screen-grid-layer vertex shader in deck.gl\n\nexport default `\\\n#define SHADER_NAME heatp-map-layer-vertex-shader\n\nuniform sampler2D maxTexture;\nuniform float intensity;\nuniform vec2 colorDomain;\nuniform float threshold;\nuniform float aggregationMode;\n\nattribute vec3 positions;\nattribute vec2 texCoords;\n\nvarying vec2 vTexCoords;\nvarying float vIntensityMin;\nvarying float vIntensityMax;\n\nvoid main(void) {\n gl_Position = project_position_to_clipspace(positions, vec3(0.0), vec3(0.0));\n vTexCoords = texCoords;\n vec4 maxTexture = texture2D(maxTexture, vec2(0.5));\n float maxValue = aggregationMode < 0.5 ? maxTexture.r : maxTexture.g;\n float minValue = maxValue * threshold;\n if (colorDomain[1] > 0.) {\n // if user specified custom domain use it.\n maxValue = colorDomain[1];\n minValue = colorDomain[0];\n }\n vIntensityMax = intensity / maxValue;\n vIntensityMin = intensity / minValue;\n}\n`;\n"],"file":"triangle-layer-vertex.glsl.js"}
1
+ {"version":3,"sources":["../../../src/heatmap-layer/triangle-layer-vertex.glsl.ts"],"names":[],"mappings":"AAsBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA/BA","sourcesContent":["// Copyright (c) 2015 - 2017 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\n// Inspired by screen-grid-layer vertex shader in deck.gl\n\nexport default `\\\n#version 300 es\n#define SHADER_NAME heatp-map-layer-vertex-shader\n\nuniform sampler2D maxTexture;\nuniform float intensity;\nuniform vec2 colorDomain;\nuniform float threshold;\nuniform float aggregationMode;\n\nin vec3 positions;\nin vec2 texCoords;\n\nout vec2 vTexCoords;\nout float vIntensityMin;\nout float vIntensityMax;\n\nvoid main(void) {\n gl_Position = project_position_to_clipspace(positions, vec3(0.0), vec3(0.0));\n vTexCoords = texCoords;\n vec4 maxTexture = texture(maxTexture, vec2(0.5));\n float maxValue = aggregationMode < 0.5 ? maxTexture.r : maxTexture.g;\n float minValue = maxValue * threshold;\n if (colorDomain[1] > 0.) {\n // if user specified custom domain use it.\n maxValue = colorDomain[1];\n minValue = colorDomain[0];\n }\n vIntensityMax = intensity / maxValue;\n vIntensityMin = intensity / minValue;\n}\n`;\n"],"file":"triangle-layer-vertex.glsl.js"}
@@ -1,5 +1,7 @@
1
1
  export default `\
2
- varying vec4 weightsTexture;
2
+ #version 300 es
3
+ in vec4 weightsTexture;
4
+ out vec4 fragColor;
3
5
  // Epanechnikov function, keeping for reference
4
6
  // float epanechnikovKDE(float u) {
5
7
  // return 0.75 * (1.0 - u * u);
@@ -13,8 +15,8 @@ void main()
13
15
  if (dist > 0.5) {
14
16
  discard;
15
17
  }
16
- gl_FragColor = weightsTexture * gaussianKDE(2. * dist);
17
- DECKGL_FILTER_COLOR(gl_FragColor, geometry);
18
+ fragColor = weightsTexture * gaussianKDE(2. * dist);
19
+ DECKGL_FILTER_COLOR(fragColor, geometry);
18
20
  }
19
21
  `;
20
22
  //# sourceMappingURL=weights-fs.glsl.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/heatmap-layer/weights-fs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAlBA","sourcesContent":["export default `\\\nvarying vec4 weightsTexture;\n// Epanechnikov function, keeping for reference\n// float epanechnikovKDE(float u) {\n// return 0.75 * (1.0 - u * u);\n// }\nfloat gaussianKDE(float u){\n return pow(2.71828, -u*u/0.05555)/(1.77245385*0.166666);\n}\nvoid main()\n{\n float dist = length(gl_PointCoord - vec2(0.5, 0.5));\n if (dist > 0.5) {\n discard;\n }\n gl_FragColor = weightsTexture * gaussianKDE(2. * dist);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n"],"file":"weights-fs.glsl.js"}
1
+ {"version":3,"sources":["../../../src/heatmap-layer/weights-fs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CApBA","sourcesContent":["export default `\\\n#version 300 es\nin vec4 weightsTexture;\nout vec4 fragColor;\n// Epanechnikov function, keeping for reference\n// float epanechnikovKDE(float u) {\n// return 0.75 * (1.0 - u * u);\n// }\nfloat gaussianKDE(float u){\n return pow(2.71828, -u*u/0.05555)/(1.77245385*0.166666);\n}\nvoid main()\n{\n float dist = length(gl_PointCoord - vec2(0.5, 0.5));\n if (dist > 0.5) {\n discard;\n }\n fragColor = weightsTexture * gaussianKDE(2. * dist);\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n"],"file":"weights-fs.glsl.js"}
@@ -1,8 +1,9 @@
1
1
  export default `\
2
- attribute vec3 positions;
3
- attribute vec3 positions64Low;
4
- attribute float weights;
5
- varying vec4 weightsTexture;
2
+ #version 300 es
3
+ in vec3 positions;
4
+ in vec3 positions64Low;
5
+ in float weights;
6
+ out vec4 weightsTexture;
6
7
  uniform float radiusPixels;
7
8
  uniform float textureWidth;
8
9
  uniform vec4 commonBounds;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/heatmap-layer/weights-vs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAtBA","sourcesContent":["export default `\\\nattribute vec3 positions;\nattribute vec3 positions64Low;\nattribute float weights;\nvarying vec4 weightsTexture;\nuniform float radiusPixels;\nuniform float textureWidth;\nuniform vec4 commonBounds;\nuniform float weightsScale;\nvoid main()\n{\n weightsTexture = vec4(weights * weightsScale, 0., 0., 1.);\n\n float radiusTexels = project_pixel_size(radiusPixels) * textureWidth / (commonBounds.z - commonBounds.x);\n gl_PointSize = radiusTexels * 2.;\n\n vec3 commonPosition = project_position(positions, positions64Low);\n\n // map xy from commonBounds to [-1, 1]\n gl_Position.xy = (commonPosition.xy - commonBounds.xy) / (commonBounds.zw - commonBounds.xy) ;\n gl_Position.xy = (gl_Position.xy * 2.) - (1.);\n}\n`;\n"],"file":"weights-vs.glsl.js"}
1
+ {"version":3,"sources":["../../../src/heatmap-layer/weights-vs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAvBA","sourcesContent":["export default `\\\n#version 300 es\nin vec3 positions;\nin vec3 positions64Low;\nin float weights;\nout vec4 weightsTexture;\nuniform float radiusPixels;\nuniform float textureWidth;\nuniform vec4 commonBounds;\nuniform float weightsScale;\nvoid main()\n{\n weightsTexture = vec4(weights * weightsScale, 0., 0., 1.);\n\n float radiusTexels = project_pixel_size(radiusPixels) * textureWidth / (commonBounds.z - commonBounds.x);\n gl_PointSize = radiusTexels * 2.;\n\n vec3 commonPosition = project_position(positions, positions64Low);\n\n // map xy from commonBounds to [-1, 1]\n gl_Position.xy = (commonPosition.xy - commonBounds.xy) / (commonBounds.zw - commonBounds.xy) ;\n gl_Position.xy = (gl_Position.xy * 2.) - (1.);\n}\n`;\n"],"file":"weights-vs.glsl.js"}
@@ -135,13 +135,13 @@ export default class ScreenGridCellLayer extends Layer {
135
135
  _getModel() {
136
136
  return new Model(this.context.device, { ...this.getShaders(),
137
137
  id: this.props.id,
138
+ bufferLayout: this.getAttributeManager().getBufferLayouts(),
138
139
  geometry: new Geometry({
139
- topology: 'triangle-fan-webgl',
140
+ topology: 'triangle-list',
140
141
  attributes: {
141
- positions: new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0])
142
+ positions: new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0])
142
143
  }
143
- }),
144
- isInstanced: true
144
+ })
145
145
  });
146
146
  }
147
147
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-cell-layer.ts"],"names":["Model","Geometry","Layer","log","picking","defaultColorRange","colorRangeToFlatArray","vs","fs","DEFAULT_MINCOLOR","DEFAULT_MAXCOLOR","COLOR_PROPS","defaultProps","cellSizePixels","type","value","min","cellMarginPixels","max","colorDomain","colorRange","ScreenGridCellLayer","state","isSupported","device","features","has","getShaders","modules","initializeState","attributeManager","getAttributeManager","addInstanced","instancePositions","size","update","calculateInstancePositions","instanceCounts","noAlloc","setState","model","_getModel","shouldUpdateState","changeFlags","somethingChanged","updateState","params","oldProps","props","numInstances","invalidateAll","invalidate","_updateUniforms","draw","uniforms","parameters","maxTexture","minColor","maxColor","setUniforms","setBindings","setParameters","depthWriteEnabled","context","renderPass","attribute","width","height","viewport","numCol","Math","ceil","i","x","y","floor","id","geometry","topology","attributes","positions","Float32Array","isInstanced","_shouldUseMinMax","deprecated","some","key","shouldUseMinMax","viewportChanged","margin","cellScale","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2019 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 {Device, Texture} from '@luma.gl/core';\nimport {Model, Geometry} from '@luma.gl/engine';\nimport {GL} from '@luma.gl/constants';\nimport {Layer, LayerProps, log, picking, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport vs from './screen-grid-layer-vertex.glsl';\nimport fs from './screen-grid-layer-fragment.glsl';\nimport type {_ScreenGridLayerProps} from './screen-grid-layer';\n\nconst DEFAULT_MINCOLOR = [0, 0, 0, 0];\nconst DEFAULT_MAXCOLOR = [0, 255, 0, 255];\nconst COLOR_PROPS = ['minColor', 'maxColor', 'colorRange', 'colorDomain'];\n\nconst defaultProps: DefaultProps<ScreenGridCellLayerProps> = {\n cellSizePixels: {type: 'number', value: 100, min: 1},\n cellMarginPixels: {type: 'number', value: 2, min: 0, max: 5},\n\n colorDomain: null,\n colorRange: defaultColorRange\n};\n\n/** All properties supported by ScreenGridCellLayer. */\nexport type ScreenGridCellLayerProps<DataT = unknown> = _ScreenGridCellLayerProps<DataT> &\n LayerProps;\n\n/** Proprties added by ScreenGridCellLayer. */\nexport type _ScreenGridCellLayerProps<DataT> = _ScreenGridLayerProps<DataT> & {\n maxTexture: Texture;\n};\n\nexport default class ScreenGridCellLayer<DataT = any, ExtraPropsT extends {} = {}> extends Layer<\n ExtraPropsT & Required<_ScreenGridCellLayerProps<DataT>>\n> {\n static layerName = 'ScreenGridCellLayer';\n static defaultProps = defaultProps;\n\n static isSupported(device: Device) {\n return device.features.has('texture-formats-float32-webgl1');\n }\n\n state!: {\n model?: Model;\n };\n getShaders() {\n return {vs, fs, modules: [picking]};\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n attributeManager.addInstanced({\n // eslint-disable-next-line @typescript-eslint/unbound-method\n instancePositions: {size: 3, update: this.calculateInstancePositions},\n instanceCounts: {size: 4, noAlloc: true}\n });\n this.setState({\n model: this._getModel()\n });\n }\n\n shouldUpdateState({changeFlags}) {\n // 'instanceCounts' buffer contetns change on viewport change.\n return changeFlags.somethingChanged;\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {oldProps, props, changeFlags} = params;\n\n const attributeManager = this.getAttributeManager()!;\n if (props.numInstances !== oldProps.numInstances) {\n attributeManager.invalidateAll();\n } else if (oldProps.cellSizePixels !== props.cellSizePixels) {\n attributeManager.invalidate('instancePositions');\n }\n\n this._updateUniforms(oldProps, props, changeFlags);\n }\n\n draw({uniforms}) {\n const {parameters, maxTexture} = this.props;\n const minColor = this.props.minColor || DEFAULT_MINCOLOR;\n const maxColor = this.props.maxColor || DEFAULT_MAXCOLOR;\n\n // If colorDomain not specified we use default domain [1, maxCount]\n // maxCount value will be sampled form maxTexture in vertex shader.\n const colorDomain = this.props.colorDomain || [1, 0];\n const model = this.state.model!;\n model.setUniforms(uniforms);\n model.setBindings({\n maxTexture\n });\n model.setUniforms({\n minColor,\n maxColor,\n colorDomain\n });\n model.setParameters({\n depthWriteEnabled: false,\n // How to specify depth mask in WebGPU?\n // depthMask: false,\n ...parameters\n });\n model.draw(this.context.renderPass);\n }\n\n calculateInstancePositions(attribute, {numInstances}) {\n const {width, height} = this.context.viewport;\n const {cellSizePixels} = this.props;\n const numCol = Math.ceil(width / cellSizePixels);\n\n const {value, size} = attribute;\n\n for (let i = 0; i < numInstances; i++) {\n const x = i % numCol;\n const y = Math.floor(i / numCol);\n value[i * size + 0] = ((x * cellSizePixels) / width) * 2 - 1;\n value[i * size + 1] = 1 - ((y * cellSizePixels) / height) * 2;\n value[i * size + 2] = 0;\n }\n }\n\n // Private Methods\n\n _getModel(): Model {\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n topology: 'triangle-fan-webgl',\n attributes: {\n positions: new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0])\n }\n }),\n // @ts-expect-error TODO v9 API not as dynamic\n isInstanced: true\n });\n }\n\n _shouldUseMinMax(): boolean {\n const {minColor, maxColor, colorDomain, colorRange} = this.props;\n if (minColor || maxColor) {\n log.deprecated('ScreenGridLayer props: minColor and maxColor', 'colorRange, colorDomain')();\n return true;\n }\n // minColor and maxColor not supplied, check if colorRange or colorDomain supplied.\n // NOTE: colorDomain and colorRange are experimental features, use them only when supplied.\n if (colorDomain || colorRange) {\n return false;\n }\n // None specified, use default minColor and maxColor\n return true;\n }\n\n _updateUniforms(oldProps, props, changeFlags): void {\n const model = this.state.model!;\n if (COLOR_PROPS.some(key => oldProps[key] !== props[key])) {\n model.setUniforms({shouldUseMinMax: this._shouldUseMinMax()});\n }\n\n if (oldProps.colorRange !== props.colorRange) {\n model.setUniforms({colorRange: colorRangeToFlatArray(props.colorRange)});\n }\n\n if (\n oldProps.cellMarginPixels !== props.cellMarginPixels ||\n oldProps.cellSizePixels !== props.cellSizePixels ||\n changeFlags.viewportChanged\n ) {\n const {width, height} = this.context.viewport;\n const {cellSizePixels, cellMarginPixels} = this.props;\n const margin = cellSizePixels > cellMarginPixels ? cellMarginPixels : 0;\n\n const cellScale = new Float32Array([\n ((cellSizePixels - margin) / width) * 2,\n (-(cellSizePixels - margin) / height) * 2,\n 1\n ]);\n model.setUniforms({cellScale});\n }\n }\n}\n"],"file":"screen-grid-cell-layer.js"}
1
+ {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-cell-layer.ts"],"names":["Model","Geometry","Layer","log","picking","defaultColorRange","colorRangeToFlatArray","vs","fs","DEFAULT_MINCOLOR","DEFAULT_MAXCOLOR","COLOR_PROPS","defaultProps","cellSizePixels","type","value","min","cellMarginPixels","max","colorDomain","colorRange","ScreenGridCellLayer","state","isSupported","device","features","has","getShaders","modules","initializeState","attributeManager","getAttributeManager","addInstanced","instancePositions","size","update","calculateInstancePositions","instanceCounts","noAlloc","setState","model","_getModel","shouldUpdateState","changeFlags","somethingChanged","updateState","params","oldProps","props","numInstances","invalidateAll","invalidate","_updateUniforms","draw","uniforms","parameters","maxTexture","minColor","maxColor","setUniforms","setBindings","setParameters","depthWriteEnabled","context","renderPass","attribute","width","height","viewport","numCol","Math","ceil","i","x","y","floor","id","bufferLayout","getBufferLayouts","geometry","topology","attributes","positions","Float32Array","_shouldUseMinMax","deprecated","some","key","shouldUseMinMax","viewportChanged","margin","cellScale","layerName"],"mappings":"AAqBA,SAAQA,KAAR,EAAeC,QAAf,QAA8B,iBAA9B;AACA,SAAQC,KAAR,EAA2BC,GAA3B,EAAgCC,OAAhC,QAA8E,eAA9E;AACA,SAAQC,iBAAR,EAA2BC,qBAA3B,QAAuD,sBAAvD;AACA,OAAOC,EAAP,MAAe,iCAAf;AACA,OAAOC,EAAP,MAAe,mCAAf;AAIA,MAAMC,gBAAgB,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAAzB;AACA,MAAMC,gBAAgB,GAAG,CAAC,CAAD,EAAI,GAAJ,EAAS,CAAT,EAAY,GAAZ,CAAzB;AACA,MAAMC,WAAW,GAAG,CAAC,UAAD,EAAa,UAAb,EAAyB,YAAzB,EAAuC,aAAvC,CAApB;AAEA,MAAMC,YAAoD,GAAG;AAC3DC,EAAAA,cAAc,EAAE;AAACC,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,GAAxB;AAA6BC,IAAAA,GAAG,EAAE;AAAlC,GAD2C;AAE3DC,EAAAA,gBAAgB,EAAE;AAACH,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,CAAxB;AAA2BC,IAAAA,GAAG,EAAE,CAAhC;AAAmCE,IAAAA,GAAG,EAAE;AAAxC,GAFyC;AAI3DC,EAAAA,WAAW,EAAE,IAJ8C;AAK3DC,EAAAA,UAAU,EAAEf;AAL+C,CAA7D;AAiBA,eAAe,MAAMgB,mBAAN,SAA4EnB,KAA5E,CAEb;AAAA;AAAA;AAAA,SAQAoB,KARA;AAAA;;AAIkB,SAAXC,WAAW,CAACC,MAAD,EAAiB;AACjC,WAAOA,MAAM,CAACC,QAAP,CAAgBC,GAAhB,CAAoB,gCAApB,CAAP;AACD;;AAMDC,EAAAA,UAAU,GAAsD;AAC9D,WAAO;AAACpB,MAAAA,EAAD;AAAKC,MAAAA,EAAL;AAASoB,MAAAA,OAAO,EAAE,CAACxB,OAAD;AAAlB,KAAP;AACD;;AAEDyB,EAAAA,eAAe,GAAG;AAChB,UAAMC,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;AACAD,IAAAA,gBAAgB,CAACE,YAAjB,CAA8B;AAE5BC,MAAAA,iBAAiB,EAAE;AAACC,QAAAA,IAAI,EAAE,CAAP;AAAUC,QAAAA,MAAM,EAAE,KAAKC;AAAvB,OAFS;AAG5BC,MAAAA,cAAc,EAAE;AAACH,QAAAA,IAAI,EAAE,CAAP;AAAUI,QAAAA,OAAO,EAAE;AAAnB;AAHY,KAA9B;AAKA,SAAKC,QAAL,CAAc;AACZC,MAAAA,KAAK,EAAE,KAAKC,SAAL;AADK,KAAd;AAGD;;AAEDC,EAAAA,iBAAiB,CAAC;AAACC,IAAAA;AAAD,GAAD,EAAgB;AAE/B,WAAOA,WAAW,CAACC,gBAAnB;AACD;;AAEDC,EAAAA,WAAW,CAACC,MAAD,EAAiC;AAC1C,UAAMD,WAAN,CAAkBC,MAAlB;AAEA,UAAM;AAACC,MAAAA,QAAD;AAAWC,MAAAA,KAAX;AAAkBL,MAAAA;AAAlB,QAAiCG,MAAvC;AAEA,UAAMhB,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;;AACA,QAAIiB,KAAK,CAACC,YAAN,KAAuBF,QAAQ,CAACE,YAApC,EAAkD;AAChDnB,MAAAA,gBAAgB,CAACoB,aAAjB;AACD,KAFD,MAEO,IAAIH,QAAQ,CAAClC,cAAT,KAA4BmC,KAAK,CAACnC,cAAtC,EAAsD;AAC3DiB,MAAAA,gBAAgB,CAACqB,UAAjB,CAA4B,mBAA5B;AACD;;AAED,SAAKC,eAAL,CAAqBL,QAArB,EAA+BC,KAA/B,EAAsCL,WAAtC;AACD;;AAEDU,EAAAA,IAAI,CAAC;AAACC,IAAAA;AAAD,GAAD,EAAa;AACf,UAAM;AAACC,MAAAA,UAAD;AAAaC,MAAAA;AAAb,QAA2B,KAAKR,KAAtC;AACA,UAAMS,QAAQ,GAAG,KAAKT,KAAL,CAAWS,QAAX,IAAuBhD,gBAAxC;AACA,UAAMiD,QAAQ,GAAG,KAAKV,KAAL,CAAWU,QAAX,IAAuBhD,gBAAxC;AAIA,UAAMS,WAAW,GAAG,KAAK6B,KAAL,CAAW7B,WAAX,IAA0B,CAAC,CAAD,EAAI,CAAJ,CAA9C;AACA,UAAMqB,KAAK,GAAG,KAAKlB,KAAL,CAAWkB,KAAzB;AACAA,IAAAA,KAAK,CAACmB,WAAN,CAAkBL,QAAlB;AACAd,IAAAA,KAAK,CAACoB,WAAN,CAAkB;AAChBJ,MAAAA;AADgB,KAAlB;AAGAhB,IAAAA,KAAK,CAACmB,WAAN,CAAkB;AAChBF,MAAAA,QADgB;AAEhBC,MAAAA,QAFgB;AAGhBvC,MAAAA;AAHgB,KAAlB;AAKAqB,IAAAA,KAAK,CAACqB,aAAN,CAAoB;AAClBC,MAAAA,iBAAiB,EAAE,KADD;AAIlB,SAAGP;AAJe,KAApB;AAMAf,IAAAA,KAAK,CAACa,IAAN,CAAW,KAAKU,OAAL,CAAaC,UAAxB;AACD;;AAED5B,EAAAA,0BAA0B,CAAC6B,SAAD,EAAY;AAAChB,IAAAA;AAAD,GAAZ,EAA4B;AACpD,UAAM;AAACiB,MAAAA,KAAD;AAAQC,MAAAA;AAAR,QAAkB,KAAKJ,OAAL,CAAaK,QAArC;AACA,UAAM;AAACvD,MAAAA;AAAD,QAAmB,KAAKmC,KAA9B;AACA,UAAMqB,MAAM,GAAGC,IAAI,CAACC,IAAL,CAAUL,KAAK,GAAGrD,cAAlB,CAAf;AAEA,UAAM;AAACE,MAAAA,KAAD;AAAQmB,MAAAA;AAAR,QAAgB+B,SAAtB;;AAEA,SAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvB,YAApB,EAAkCuB,CAAC,EAAnC,EAAuC;AACrC,YAAMC,CAAC,GAAGD,CAAC,GAAGH,MAAd;AACA,YAAMK,CAAC,GAAGJ,IAAI,CAACK,KAAL,CAAWH,CAAC,GAAGH,MAAf,CAAV;AACAtD,MAAAA,KAAK,CAACyD,CAAC,GAAGtC,IAAJ,GAAW,CAAZ,CAAL,GAAwBuC,CAAC,GAAG5D,cAAL,GAAuBqD,KAAxB,GAAiC,CAAjC,GAAqC,CAA3D;AACAnD,MAAAA,KAAK,CAACyD,CAAC,GAAGtC,IAAJ,GAAW,CAAZ,CAAL,GAAsB,IAAMwC,CAAC,GAAG7D,cAAL,GAAuBsD,MAAxB,GAAkC,CAA5D;AACApD,MAAAA,KAAK,CAACyD,CAAC,GAAGtC,IAAJ,GAAW,CAAZ,CAAL,GAAsB,CAAtB;AACD;AACF;;AAIDO,EAAAA,SAAS,GAAU;AACjB,WAAO,IAAIzC,KAAJ,CAAU,KAAK+D,OAAL,CAAavC,MAAvB,EAA+B,EACpC,GAAG,KAAKG,UAAL,EADiC;AAEpCiD,MAAAA,EAAE,EAAE,KAAK5B,KAAL,CAAW4B,EAFqB;AAGpCC,MAAAA,YAAY,EAAE,KAAK9C,mBAAL,GAA4B+C,gBAA5B,EAHsB;AAIpCC,MAAAA,QAAQ,EAAE,IAAI9E,QAAJ,CAAa;AACrB+E,QAAAA,QAAQ,EAAE,eADW;AAErBC,QAAAA,UAAU,EAAE;AAEVC,UAAAA,SAAS,EAAE,IAAIC,YAAJ,CAAiB,CAC1B,CAD0B,EACvB,CADuB,EACpB,CADoB,EAE1B,CAF0B,EAEvB,CAFuB,EAEpB,CAFoB,EAG1B,CAH0B,EAGvB,CAHuB,EAGpB,CAHoB,EAI1B,CAJ0B,EAIvB,CAJuB,EAIpB,CAJoB,EAK1B,CAL0B,EAKvB,CALuB,EAKpB,CALoB,EAM1B,CAN0B,EAMvB,CANuB,EAMpB,CANoB,CAAjB;AAFD;AAFS,OAAb;AAJ0B,KAA/B,CAAP;AAmBD;;AAEDC,EAAAA,gBAAgB,GAAY;AAC1B,UAAM;AAAC3B,MAAAA,QAAD;AAAWC,MAAAA,QAAX;AAAqBvC,MAAAA,WAArB;AAAkCC,MAAAA;AAAlC,QAAgD,KAAK4B,KAA3D;;AACA,QAAIS,QAAQ,IAAIC,QAAhB,EAA0B;AACxBvD,MAAAA,GAAG,CAACkF,UAAJ,CAAe,8CAAf,EAA+D,yBAA/D;AACA,aAAO,IAAP;AACD;;AAGD,QAAIlE,WAAW,IAAIC,UAAnB,EAA+B;AAC7B,aAAO,KAAP;AACD;;AAED,WAAO,IAAP;AACD;;AAEDgC,EAAAA,eAAe,CAACL,QAAD,EAAWC,KAAX,EAAkBL,WAAlB,EAAqC;AAClD,UAAMH,KAAK,GAAG,KAAKlB,KAAL,CAAWkB,KAAzB;;AACA,QAAI7B,WAAW,CAAC2E,IAAZ,CAAiBC,GAAG,IAAIxC,QAAQ,CAACwC,GAAD,CAAR,KAAkBvC,KAAK,CAACuC,GAAD,CAA/C,CAAJ,EAA2D;AACzD/C,MAAAA,KAAK,CAACmB,WAAN,CAAkB;AAAC6B,QAAAA,eAAe,EAAE,KAAKJ,gBAAL;AAAlB,OAAlB;AACD;;AAED,QAAIrC,QAAQ,CAAC3B,UAAT,KAAwB4B,KAAK,CAAC5B,UAAlC,EAA8C;AAC5CoB,MAAAA,KAAK,CAACmB,WAAN,CAAkB;AAACvC,QAAAA,UAAU,EAAEd,qBAAqB,CAAC0C,KAAK,CAAC5B,UAAP;AAAlC,OAAlB;AACD;;AAED,QACE2B,QAAQ,CAAC9B,gBAAT,KAA8B+B,KAAK,CAAC/B,gBAApC,IACA8B,QAAQ,CAAClC,cAAT,KAA4BmC,KAAK,CAACnC,cADlC,IAEA8B,WAAW,CAAC8C,eAHd,EAIE;AACA,YAAM;AAACvB,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAkB,KAAKJ,OAAL,CAAaK,QAArC;AACA,YAAM;AAACvD,QAAAA,cAAD;AAAiBI,QAAAA;AAAjB,UAAqC,KAAK+B,KAAhD;AACA,YAAM0C,MAAM,GAAG7E,cAAc,GAAGI,gBAAjB,GAAoCA,gBAApC,GAAuD,CAAtE;AAEA,YAAM0E,SAAS,GAAG,IAAIR,YAAJ,CAAiB,CAChC,CAACtE,cAAc,GAAG6E,MAAlB,IAA4BxB,KAA7B,GAAsC,CADL,EAEhC,EAAErD,cAAc,GAAG6E,MAAnB,IAA6BvB,MAA9B,GAAwC,CAFP,EAGjC,CAHiC,CAAjB,CAAlB;AAKA3B,MAAAA,KAAK,CAACmB,WAAN,CAAkB;AAACgC,QAAAA;AAAD,OAAlB;AACD;AACF;;AA5JD;AAFmBtE,mB,CAGZuE,S,GAAY,qB;AAHAvE,mB,CAIZT,Y,GAAeA,Y","sourcesContent":["// Copyright (c) 2015 - 2019 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 {Device, Texture} from '@luma.gl/core';\nimport {Model, Geometry} from '@luma.gl/engine';\nimport {Layer, LayerProps, log, picking, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport vs from './screen-grid-layer-vertex.glsl';\nimport fs from './screen-grid-layer-fragment.glsl';\nimport type {_ScreenGridLayerProps} from './screen-grid-layer';\nimport {ShaderModule} from '@luma.gl/shadertools';\n\nconst DEFAULT_MINCOLOR = [0, 0, 0, 0];\nconst DEFAULT_MAXCOLOR = [0, 255, 0, 255];\nconst COLOR_PROPS = ['minColor', 'maxColor', 'colorRange', 'colorDomain'];\n\nconst defaultProps: DefaultProps<ScreenGridCellLayerProps> = {\n cellSizePixels: {type: 'number', value: 100, min: 1},\n cellMarginPixels: {type: 'number', value: 2, min: 0, max: 5},\n\n colorDomain: null,\n colorRange: defaultColorRange\n};\n\n/** All properties supported by ScreenGridCellLayer. */\nexport type ScreenGridCellLayerProps<DataT = unknown> = _ScreenGridCellLayerProps<DataT> &\n LayerProps;\n\n/** Proprties added by ScreenGridCellLayer. */\nexport type _ScreenGridCellLayerProps<DataT> = _ScreenGridLayerProps<DataT> & {\n maxTexture: Texture;\n};\n\nexport default class ScreenGridCellLayer<DataT = any, ExtraPropsT extends {} = {}> extends Layer<\n ExtraPropsT & Required<_ScreenGridCellLayerProps<DataT>>\n> {\n static layerName = 'ScreenGridCellLayer';\n static defaultProps = defaultProps;\n\n static isSupported(device: Device) {\n return device.features.has('texture-formats-float32-webgl1');\n }\n\n state!: {\n model?: Model;\n };\n\n getShaders(): {vs: string; fs: string; modules: ShaderModule[]} {\n return {vs, fs, modules: [picking as ShaderModule]};\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n attributeManager.addInstanced({\n // eslint-disable-next-line @typescript-eslint/unbound-method\n instancePositions: {size: 3, update: this.calculateInstancePositions},\n instanceCounts: {size: 4, noAlloc: true}\n });\n this.setState({\n model: this._getModel()\n });\n }\n\n shouldUpdateState({changeFlags}) {\n // 'instanceCounts' buffer contetns change on viewport change.\n return changeFlags.somethingChanged;\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {oldProps, props, changeFlags} = params;\n\n const attributeManager = this.getAttributeManager()!;\n if (props.numInstances !== oldProps.numInstances) {\n attributeManager.invalidateAll();\n } else if (oldProps.cellSizePixels !== props.cellSizePixels) {\n attributeManager.invalidate('instancePositions');\n }\n\n this._updateUniforms(oldProps, props, changeFlags);\n }\n\n draw({uniforms}) {\n const {parameters, maxTexture} = this.props;\n const minColor = this.props.minColor || DEFAULT_MINCOLOR;\n const maxColor = this.props.maxColor || DEFAULT_MAXCOLOR;\n\n // If colorDomain not specified we use default domain [1, maxCount]\n // maxCount value will be sampled form maxTexture in vertex shader.\n const colorDomain = this.props.colorDomain || [1, 0];\n const model = this.state.model!;\n model.setUniforms(uniforms);\n model.setBindings({\n maxTexture\n });\n model.setUniforms({\n minColor,\n maxColor,\n colorDomain\n });\n model.setParameters({\n depthWriteEnabled: false,\n // How to specify depth mask in WebGPU?\n // depthMask: false,\n ...parameters\n });\n model.draw(this.context.renderPass);\n }\n\n calculateInstancePositions(attribute, {numInstances}) {\n const {width, height} = this.context.viewport;\n const {cellSizePixels} = this.props;\n const numCol = Math.ceil(width / cellSizePixels);\n\n const {value, size} = attribute;\n\n for (let i = 0; i < numInstances; i++) {\n const x = i % numCol;\n const y = Math.floor(i / numCol);\n value[i * size + 0] = ((x * cellSizePixels) / width) * 2 - 1;\n value[i * size + 1] = 1 - ((y * cellSizePixels) / height) * 2;\n value[i * size + 2] = 0;\n }\n }\n\n // Private Methods\n\n _getModel(): Model {\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager()!.getBufferLayouts(),\n geometry: new Geometry({\n topology: 'triangle-list',\n attributes: {\n // prettier-ignore\n positions: new Float32Array([\n 0, 0, 0,\n 1, 0, 0,\n 1, 1, 0,\n 0, 0, 0,\n 1, 1, 0,\n 0, 1, 0,\n ])\n }\n })\n });\n }\n\n _shouldUseMinMax(): boolean {\n const {minColor, maxColor, colorDomain, colorRange} = this.props;\n if (minColor || maxColor) {\n log.deprecated('ScreenGridLayer props: minColor and maxColor', 'colorRange, colorDomain')();\n return true;\n }\n // minColor and maxColor not supplied, check if colorRange or colorDomain supplied.\n // NOTE: colorDomain and colorRange are experimental features, use them only when supplied.\n if (colorDomain || colorRange) {\n return false;\n }\n // None specified, use default minColor and maxColor\n return true;\n }\n\n _updateUniforms(oldProps, props, changeFlags): void {\n const model = this.state.model!;\n if (COLOR_PROPS.some(key => oldProps[key] !== props[key])) {\n model.setUniforms({shouldUseMinMax: this._shouldUseMinMax()});\n }\n\n if (oldProps.colorRange !== props.colorRange) {\n model.setUniforms({colorRange: colorRangeToFlatArray(props.colorRange)});\n }\n\n if (\n oldProps.cellMarginPixels !== props.cellMarginPixels ||\n oldProps.cellSizePixels !== props.cellSizePixels ||\n changeFlags.viewportChanged\n ) {\n const {width, height} = this.context.viewport;\n const {cellSizePixels, cellMarginPixels} = this.props;\n const margin = cellSizePixels > cellMarginPixels ? cellMarginPixels : 0;\n\n const cellScale = new Float32Array([\n ((cellSizePixels - margin) / width) * 2,\n (-(cellSizePixels - margin) / height) * 2,\n 1\n ]);\n model.setUniforms({cellScale});\n }\n }\n}\n"],"file":"screen-grid-cell-layer.js"}
@@ -1,18 +1,21 @@
1
1
  export default `\
2
+ #version 300 es
2
3
  #define SHADER_NAME screen-grid-layer-fragment-shader
3
4
 
4
5
  precision highp float;
5
6
 
6
- varying vec4 vColor;
7
- varying float vSampleCount;
7
+ in vec4 vColor;
8
+ in float vSampleCount;
9
+
10
+ out vec4 fragColor;
8
11
 
9
12
  void main(void) {
10
13
  if (vSampleCount <= 0.0) {
11
14
  discard;
12
15
  }
13
- gl_FragColor = vColor;
16
+ fragColor = vColor;
14
17
 
15
- DECKGL_FILTER_COLOR(gl_FragColor, geometry);
18
+ DECKGL_FILTER_COLOR(fragColor, geometry);
16
19
  }
17
20
  `;
18
21
  //# sourceMappingURL=screen-grid-layer-fragment.glsl.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-layer-fragment.glsl.ts"],"names":[],"mappings":"AAqBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAhBA","sourcesContent":["// Copyright (c) 2015 - 2017 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\n/* fragment shader for the grid-layer */\nexport default `\\\n#define SHADER_NAME screen-grid-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying float vSampleCount;\n\nvoid main(void) {\n if (vSampleCount <= 0.0) {\n discard;\n }\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n"],"file":"screen-grid-layer-fragment.glsl.js"}
1
+ {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-layer-fragment.glsl.ts"],"names":[],"mappings":"AAqBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAnBA","sourcesContent":["// Copyright (c) 2015 - 2017 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\n/* fragment shader for the grid-layer */\nexport default `\\\n#version 300 es\n#define SHADER_NAME screen-grid-layer-fragment-shader\n\nprecision highp float;\n\nin vec4 vColor;\nin float vSampleCount;\n\nout vec4 fragColor;\n\nvoid main(void) {\n if (vSampleCount <= 0.0) {\n discard;\n }\n fragColor = vColor;\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n"],"file":"screen-grid-layer-fragment.glsl.js"}
@@ -1,11 +1,12 @@
1
1
  export default `\
2
+ #version 300 es
2
3
  #define SHADER_NAME screen-grid-layer-vertex-shader
3
4
  #define RANGE_COUNT 6
4
5
 
5
- attribute vec3 positions;
6
- attribute vec3 instancePositions;
7
- attribute vec4 instanceCounts;
8
- attribute vec3 instancePickingColors;
6
+ in vec3 positions;
7
+ in vec3 instancePositions;
8
+ in vec4 instanceCounts;
9
+ in vec3 instancePickingColors;
9
10
 
10
11
  uniform float opacity;
11
12
  uniform vec3 cellScale;
@@ -16,8 +17,8 @@ uniform vec2 colorDomain;
16
17
  uniform bool shouldUseMinMax;
17
18
  uniform sampler2D maxTexture;
18
19
 
19
- varying vec4 vColor;
20
- varying float vSampleCount;
20
+ out vec4 vColor;
21
+ out float vSampleCount;
21
22
 
22
23
  vec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {
23
24
  vec4 outColor = vec4(0., 0., 0., 0.);
@@ -42,7 +43,7 @@ void main(void) {
42
43
  vSampleCount = instanceCounts.a;
43
44
 
44
45
  float weight = instanceCounts.r;
45
- float maxWeight = texture2D(maxTexture, vec2(0.5)).r;
46
+ float maxWeight = texture(maxTexture, vec2(0.5)).r;
46
47
 
47
48
  float step = weight / maxWeight;
48
49
  vec4 minMaxColor = mix(minColor, maxColor, step) / 255.;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-layer-vertex.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA/DA","sourcesContent":["// Copyright (c) 2015 - 2017 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\nexport default `\\\n#define SHADER_NAME screen-grid-layer-vertex-shader\n#define RANGE_COUNT 6\n\nattribute vec3 positions;\nattribute vec3 instancePositions;\nattribute vec4 instanceCounts;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform vec3 cellScale;\nuniform vec4 minColor;\nuniform vec4 maxColor;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 colorDomain;\nuniform bool shouldUseMinMax;\nuniform sampler2D maxTexture;\n\nvarying vec4 vColor;\nvarying float vSampleCount;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= domain.x && value <= domain.y) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n outColor = outColor / 255.;\n return outColor;\n}\n\nvoid main(void) {\n vSampleCount = instanceCounts.a;\n\n float weight = instanceCounts.r;\n float maxWeight = texture2D(maxTexture, vec2(0.5)).r;\n\n float step = weight / maxWeight;\n vec4 minMaxColor = mix(minColor, maxColor, step) / 255.;\n\n vec2 domain = colorDomain;\n float domainMaxValid = float(colorDomain.y != 0.);\n domain.y = mix(maxWeight, colorDomain.y, domainMaxValid);\n vec4 rangeColor = quantizeScale(domain, colorRange, weight);\n\n float rangeMinMax = float(shouldUseMinMax);\n vec4 color = mix(rangeColor, minMaxColor, rangeMinMax);\n vColor = vec4(color.rgb, color.a * opacity);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = vec4(instancePositions + positions * cellScale, 1.);\n}\n`;\n"],"file":"screen-grid-layer-vertex.glsl.js"}
1
+ {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-layer-vertex.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAhEA","sourcesContent":["// Copyright (c) 2015 - 2017 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\nexport default `\\\n#version 300 es\n#define SHADER_NAME screen-grid-layer-vertex-shader\n#define RANGE_COUNT 6\n\nin vec3 positions;\nin vec3 instancePositions;\nin vec4 instanceCounts;\nin vec3 instancePickingColors;\n\nuniform float opacity;\nuniform vec3 cellScale;\nuniform vec4 minColor;\nuniform vec4 maxColor;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 colorDomain;\nuniform bool shouldUseMinMax;\nuniform sampler2D maxTexture;\n\nout vec4 vColor;\nout float vSampleCount;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= domain.x && value <= domain.y) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n outColor = outColor / 255.;\n return outColor;\n}\n\nvoid main(void) {\n vSampleCount = instanceCounts.a;\n\n float weight = instanceCounts.r;\n float maxWeight = texture(maxTexture, vec2(0.5)).r;\n\n float step = weight / maxWeight;\n vec4 minMaxColor = mix(minColor, maxColor, step) / 255.;\n\n vec2 domain = colorDomain;\n float domainMaxValid = float(colorDomain.y != 0.);\n domain.y = mix(maxWeight, colorDomain.y, domainMaxValid);\n vec4 rangeColor = quantizeScale(domain, colorRange, weight);\n\n float rangeMinMax = float(shouldUseMinMax);\n vec4 color = mix(rangeColor, minMaxColor, rangeMinMax);\n vColor = vec4(color.rgb, color.a * opacity);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = vec4(instancePositions + positions * cellScale, 1.);\n}\n`;\n"],"file":"screen-grid-layer-vertex.glsl.js"}
@@ -168,9 +168,7 @@ export default class ScreenGridLayer extends GridAggregationLayer {
168
168
  count
169
169
  } = this.state.weights;
170
170
  count.aggregationData = aggregationData;
171
- count.aggregationBuffer.setData({
172
- data: aggregationData
173
- });
171
+ count.aggregationBuffer.write(aggregationData);
174
172
  count.maxData = maxData;
175
173
  count.maxTexture.setImageData({
176
174
  data: maxData
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-layer.ts"],"names":["log","GL","GPUGridAggregator","AGGREGATION_OPERATION","getValueFunc","ScreenGridCellLayer","GridAggregationLayer","getFloatTexture","defaultProps","getPosition","type","value","d","position","getWeight","gpuAggregation","aggregation","POSITION_ATTRIBUTE_NAME","DIMENSIONS","data","props","weights","accessors","ScreenGridLayer","state","initializeState","isSupported","context","device","setState","supported","error","id","initializeAggregationLayer","dimensions","getCellSize","cellSizePixels","count","size","operation","SUM","needMax","maxTexture","projectPoints","subLayerData","attributes","positionAttributeName","posOffset","translation","attributeManager","getAttributeManager","add","accessor","fp64","use64bitPositions","shouldUpdateState","changeFlags","somethingChanged","updateState","opts","renderLayers","numRow","numCol","updateTriggers","aggregationBuffer","CellLayerClass","getSubLayerClass","getSubLayerProps","instanceCounts","numInstances","finalizeState","maxBuffer","delete","getPickingInfo","info","index","gpuGridAggregator","aggregationResults","getData","object","getAggregationData","pixelIndex","updateResults","aggregationData","maxData","setData","setImageData","updateAggregationState","cellSize","cellSizeChanged","oldProps","viewportChanged","warn","gpuAggregationChanged","positionsChanged","isAttributeChanged","aggregationDataDirty","isAggregationDirty","compareAll","dimension","aggregationWeightsDirty","viewport","width","height","Math","ceil","allocateResources","scaling","gridOffset","xOffset","yOffset","_updateAccessors","_resetResults","getValue","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 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 {\n Accessor,\n Color,\n GetPickingInfoParams,\n Layer,\n LayerContext,\n LayersList,\n log,\n PickingInfo,\n Position,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport type {Buffer, Texture} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {AGGREGATION_OPERATION, getValueFunc} from '../utils/aggregation-operation-utils';\nimport ScreenGridCellLayer from './screen-grid-cell-layer';\nimport GridAggregationLayer, {GridAggregationLayerProps} from '../grid-aggregation-layer';\nimport {getFloatTexture} from '../utils/resource-utils';\n\nconst defaultProps: DefaultProps<ScreenGridLayerProps> = {\n ...(ScreenGridCellLayer.defaultProps as DefaultProps<ScreenGridLayerProps<unknown>>),\n getPosition: {type: 'accessor', value: (d: any) => d.position},\n getWeight: {type: 'accessor', value: 1},\n\n gpuAggregation: true,\n aggregation: 'SUM'\n};\n\nconst POSITION_ATTRIBUTE_NAME = 'positions';\nconst DIMENSIONS = {\n data: {\n props: ['cellSizePixels']\n },\n weights: {\n props: ['aggregation'],\n accessors: ['getWeight']\n }\n};\n\n/** All properties supported by ScreenGridLayer. */\nexport type ScreenGridLayerProps<DataT = unknown> = _ScreenGridLayerProps<DataT> &\n GridAggregationLayerProps<DataT>;\n\n/** Properties added by ScreenGridLayer. */\nexport type _ScreenGridLayerProps<DataT> = {\n /**\n * Unit width/height of the bins.\n * @default 100\n */\n cellSizePixels?: number;\n\n /**\n * Cell margin size in pixels.\n * @default 2\n */\n cellMarginPixels?: number;\n\n /**\n * Expressed as an rgba array, minimal color that could be rendered by a tile.\n * @default [0, 0, 0, 255]\n * @deprecated Deprecated in version 5.2.0, use `colorRange` and `colorDomain` instead.\n */\n minColor?: Color | null;\n\n /**\n * Expressed as an rgba array, maximal color that could be rendered by a tile.\n * @default [0, 255, 0, 255]\n * @deprecated Deprecated in version 5.2.0, use `colorRange` and `colorDomain` instead.\n */\n maxColor?: Color | null;\n\n /**\n * Color scale input domain. The color scale maps continues numeric domain into discrete color range.\n * @default [1, max(weight)]\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Specified as an array of colors [color1, color2, ...].\n *\n * @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)\n */\n colorRange?: Color[];\n\n /**\n * Method called to retrieve the position of each object.\n *\n * @default d => d.position\n */\n getPosition?: Accessor<DataT, Position>;\n\n /**\n * The weight of each object.\n *\n * @default 1\n */\n getWeight?: Accessor<DataT, number>;\n\n /**\n * Perform aggregation is performed on GPU.\n *\n * NOTE: GPU Aggregation requires WebGL2 support by the browser.\n * When `gpuAggregation` is set to true and browser doesn't support WebGL2, aggregation falls back to CPU.\n *\n * @default true\n */\n gpuAggregation?: boolean;\n\n /**\n * Defines the type of aggregation operation\n *\n * V valid values are 'SUM', 'MEAN', 'MIN' and 'MAX'.\n *\n * @default 'SUM'\n */\n aggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n};\n\n/** Aggregates data into histogram bins and renders them as a grid. */\nexport default class ScreenGridLayer<\n DataT = any,\n ExtraProps extends {} = {}\n> extends GridAggregationLayer<DataT, ExtraProps & Required<_ScreenGridLayerProps<DataT>>> {\n static layerName = 'ScreenGridLayer';\n static defaultProps = defaultProps;\n\n state!: GridAggregationLayer<DataT>['state'] & {\n supported: boolean;\n gpuGridAggregator?: any;\n gpuAggregation?: any;\n weights?: any;\n maxTexture?: Texture;\n aggregationBuffer?: Buffer;\n maxBuffer?: Buffer;\n };\n\n initializeState() {\n if (!ScreenGridCellLayer.isSupported(this.context.device)) {\n // max aggregated value is sampled from a float texture\n this.setState({supported: false});\n log.error(`ScreenGridLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeAggregationLayer({\n dimensions: DIMENSIONS,\n // @ts-expect-error\n getCellSize: props => props.cellSizePixels // TODO\n });\n const weights = {\n count: {\n size: 1,\n operation: AGGREGATION_OPERATION.SUM,\n needMax: true,\n maxTexture: getFloatTexture(this.context.device, {id: `${this.id}-max-texture`})\n }\n };\n this.setState({\n supported: true,\n projectPoints: true, // aggregation in screen space\n weights,\n subLayerData: {attributes: {}},\n maxTexture: weights.count.maxTexture,\n positionAttributeName: 'positions',\n posOffset: [0, 0],\n translation: [1, -1]\n });\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n [POSITION_ATTRIBUTE_NAME]: {\n size: 3,\n accessor: 'getPosition',\n type: GL.DOUBLE,\n fp64: this.use64bitPositions()\n },\n // this attribute is used in gpu aggregation path only\n count: {size: 3, accessor: 'getWeight'}\n });\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>) {\n return this.state.supported && changeFlags.somethingChanged;\n }\n\n updateState(opts: UpdateParameters<this>) {\n super.updateState(opts);\n }\n\n renderLayers(): LayersList | Layer {\n if (!this.state.supported) {\n return [];\n }\n const {maxTexture, numRow, numCol, weights} = this.state;\n const {updateTriggers} = this.props;\n const {aggregationBuffer} = weights.count;\n const CellLayerClass = this.getSubLayerClass('cells', ScreenGridCellLayer);\n\n return new CellLayerClass(\n this.props,\n this.getSubLayerProps({\n id: 'cell-layer',\n updateTriggers\n }),\n {\n data: {attributes: {instanceCounts: aggregationBuffer}},\n maxTexture,\n numInstances: numRow * numCol\n }\n );\n }\n\n finalizeState(context: LayerContext): void {\n super.finalizeState(context);\n\n const {aggregationBuffer, maxBuffer, maxTexture} = this.state;\n\n aggregationBuffer?.delete();\n maxBuffer?.delete();\n maxTexture?.delete();\n }\n\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n const {index} = info;\n if (index >= 0) {\n const {gpuGridAggregator, gpuAggregation, weights} = this.state;\n // Get count aggregation results\n const aggregationResults = gpuAggregation\n ? gpuGridAggregator.getData('count')\n : weights.count;\n\n // Each instance (one cell) is aggregated into single pixel,\n // Get current instance's aggregation details.\n info.object = GPUGridAggregator.getAggregationData({\n pixelIndex: index,\n ...aggregationResults\n });\n }\n\n return info;\n }\n\n // Aggregation Overrides\n\n updateResults({aggregationData, maxData}) {\n const {count} = this.state.weights;\n count.aggregationData = aggregationData;\n count.aggregationBuffer.setData({data: aggregationData});\n count.maxData = maxData;\n count.maxTexture.setImageData({data: maxData});\n }\n\n /* eslint-disable complexity, max-statements */\n updateAggregationState(opts) {\n const cellSize = opts.props.cellSizePixels;\n const cellSizeChanged = opts.oldProps.cellSizePixels !== cellSize;\n const {viewportChanged} = opts.changeFlags;\n let gpuAggregation = opts.props.gpuAggregation;\n if (this.state.gpuAggregation !== opts.props.gpuAggregation) {\n if (gpuAggregation && !GPUGridAggregator.isSupported(this.context.device)) {\n log.warn('GPU Grid Aggregation not supported, falling back to CPU')();\n gpuAggregation = false;\n }\n }\n const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;\n this.setState({\n gpuAggregation\n });\n\n const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);\n\n const {dimensions} = this.state;\n const {data, weights} = dimensions;\n const aggregationDataDirty =\n positionsChanged ||\n gpuAggregationChanged ||\n viewportChanged ||\n this.isAggregationDirty(opts, {\n compareAll: gpuAggregation, // check for all (including extentions props) when using gpu aggregation\n dimension: data\n });\n const aggregationWeightsDirty = this.isAggregationDirty(opts, {dimension: weights});\n\n this.setState({\n aggregationDataDirty,\n aggregationWeightsDirty\n });\n\n const {viewport} = this.context;\n\n if (viewportChanged || cellSizeChanged) {\n const {width, height} = viewport;\n const numCol = Math.ceil(width / cellSize);\n const numRow = Math.ceil(height / cellSize);\n this.allocateResources(numRow, numCol);\n this.setState({\n // transformation from clipspace to screen(pixel) space\n scaling: [width / 2, -height / 2, 1],\n\n gridOffset: {xOffset: cellSize, yOffset: cellSize},\n width,\n height,\n numCol,\n numRow\n });\n }\n\n if (aggregationWeightsDirty) {\n this._updateAccessors(opts);\n }\n if (aggregationDataDirty || aggregationWeightsDirty) {\n this._resetResults();\n }\n }\n /* eslint-enable complexity, max-statements */\n\n // Private\n\n _updateAccessors(opts) {\n const {getWeight, aggregation, data} = opts.props;\n const {count} = this.state.weights;\n if (count) {\n count.getWeight = getWeight;\n count.operation = AGGREGATION_OPERATION[aggregation];\n }\n this.setState({getValue: getValueFunc(aggregation, getWeight, {data})});\n }\n\n _resetResults() {\n const {count} = this.state.weights;\n if (count) {\n count.aggregationData = null;\n }\n }\n}\n"],"file":"screen-grid-layer.js"}
1
+ {"version":3,"sources":["../../../src/screen-grid-layer/screen-grid-layer.ts"],"names":["log","GL","GPUGridAggregator","AGGREGATION_OPERATION","getValueFunc","ScreenGridCellLayer","GridAggregationLayer","getFloatTexture","defaultProps","getPosition","type","value","d","position","getWeight","gpuAggregation","aggregation","POSITION_ATTRIBUTE_NAME","DIMENSIONS","data","props","weights","accessors","ScreenGridLayer","state","initializeState","isSupported","context","device","setState","supported","error","id","initializeAggregationLayer","dimensions","getCellSize","cellSizePixels","count","size","operation","SUM","needMax","maxTexture","projectPoints","subLayerData","attributes","positionAttributeName","posOffset","translation","attributeManager","getAttributeManager","add","accessor","fp64","use64bitPositions","shouldUpdateState","changeFlags","somethingChanged","updateState","opts","renderLayers","numRow","numCol","updateTriggers","aggregationBuffer","CellLayerClass","getSubLayerClass","getSubLayerProps","instanceCounts","numInstances","finalizeState","maxBuffer","delete","getPickingInfo","info","index","gpuGridAggregator","aggregationResults","getData","object","getAggregationData","pixelIndex","updateResults","aggregationData","maxData","write","setImageData","updateAggregationState","cellSize","cellSizeChanged","oldProps","viewportChanged","warn","gpuAggregationChanged","positionsChanged","isAttributeChanged","aggregationDataDirty","isAggregationDirty","compareAll","dimension","aggregationWeightsDirty","viewport","width","height","Math","ceil","allocateResources","scaling","gridOffset","xOffset","yOffset","_updateAccessors","_resetResults","getValue","layerName"],"mappings":"AAoBA,SAOEA,GAPF,QAYO,eAZP;AAcA,SAAQC,EAAR,QAAiB,oBAAjB;AACA,OAAOC,iBAAP,MAA8B,mDAA9B;AACA,SAAQC,qBAAR,EAA+BC,YAA/B,QAAkD,sCAAlD;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AACA,OAAOC,oBAAP,MAA8D,2BAA9D;AACA,SAAQC,eAAR,QAA8B,yBAA9B;AAEA,MAAMC,YAAgD,GAAG,EACvD,GAAIH,mBAAmB,CAACG,YAD+B;AAEvDC,EAAAA,WAAW,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAGC,CAAD,IAAYA,CAAC,CAACC;AAAxC,GAF0C;AAGvDC,EAAAA,SAAS,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE;AAA1B,GAH4C;AAKvDI,EAAAA,cAAc,EAAE,IALuC;AAMvDC,EAAAA,WAAW,EAAE;AAN0C,CAAzD;AASA,MAAMC,uBAAuB,GAAG,WAAhC;AACA,MAAMC,UAAU,GAAG;AACjBC,EAAAA,IAAI,EAAE;AACJC,IAAAA,KAAK,EAAE,CAAC,gBAAD;AADH,GADW;AAIjBC,EAAAA,OAAO,EAAE;AACPD,IAAAA,KAAK,EAAE,CAAC,aAAD,CADA;AAEPE,IAAAA,SAAS,EAAE,CAAC,WAAD;AAFJ;AAJQ,CAAnB;AA0FA,eAAe,MAAMC,eAAN,SAGLjB,oBAHK,CAG4E;AAAA;AAAA;AAAA,SAIzFkB,KAJyF;AAAA;;AAczFC,EAAAA,eAAe,GAAG;AAChB,QAAI,CAACpB,mBAAmB,CAACqB,WAApB,CAAgC,KAAKC,OAAL,CAAaC,MAA7C,CAAL,EAA2D;AAEzD,WAAKC,QAAL,CAAc;AAACC,QAAAA,SAAS,EAAE;AAAZ,OAAd;AACA9B,MAAAA,GAAG,CAAC+B,KAAJ,CAAW,oBAAmB,KAAKC,EAAG,mCAAtC;AACA;AACD;;AACD,UAAMC,0BAAN,CAAiC;AAC/BC,MAAAA,UAAU,EAAEhB,UADmB;AAG/BiB,MAAAA,WAAW,EAAEf,KAAK,IAAIA,KAAK,CAACgB;AAHG,KAAjC;AAKA,UAAMf,OAAO,GAAG;AACdgB,MAAAA,KAAK,EAAE;AACLC,QAAAA,IAAI,EAAE,CADD;AAELC,QAAAA,SAAS,EAAEpC,qBAAqB,CAACqC,GAF5B;AAGLC,QAAAA,OAAO,EAAE,IAHJ;AAILC,QAAAA,UAAU,EAAEnC,eAAe,CAAC,KAAKoB,OAAL,CAAaC,MAAd,EAAsB;AAACI,UAAAA,EAAE,EAAG,GAAE,KAAKA,EAAG;AAAhB,SAAtB;AAJtB;AADO,KAAhB;AAQA,SAAKH,QAAL,CAAc;AACZC,MAAAA,SAAS,EAAE,IADC;AAEZa,MAAAA,aAAa,EAAE,IAFH;AAGZtB,MAAAA,OAHY;AAIZuB,MAAAA,YAAY,EAAE;AAACC,QAAAA,UAAU,EAAE;AAAb,OAJF;AAKZH,MAAAA,UAAU,EAAErB,OAAO,CAACgB,KAAR,CAAcK,UALd;AAMZI,MAAAA,qBAAqB,EAAE,WANX;AAOZC,MAAAA,SAAS,EAAE,CAAC,CAAD,EAAI,CAAJ,CAPC;AAQZC,MAAAA,WAAW,EAAE,CAAC,CAAD,EAAI,CAAC,CAAL;AARD,KAAd;AAUA,UAAMC,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;AACAD,IAAAA,gBAAgB,CAACE,GAAjB,CAAqB;AACnB,OAAClC,uBAAD,GAA2B;AACzBqB,QAAAA,IAAI,EAAE,CADmB;AAEzBc,QAAAA,QAAQ,EAAE,aAFe;AAGzB1C,QAAAA,IAAI,MAHqB;AAIzB2C,QAAAA,IAAI,EAAE,KAAKC,iBAAL;AAJmB,OADR;AAQnBjB,MAAAA,KAAK,EAAE;AAACC,QAAAA,IAAI,EAAE,CAAP;AAAUc,QAAAA,QAAQ,EAAE;AAApB;AARY,KAArB;AAUD;;AAEDG,EAAAA,iBAAiB,CAAC;AAACC,IAAAA;AAAD,GAAD,EAAwC;AACvD,WAAO,KAAKhC,KAAL,CAAWM,SAAX,IAAwB0B,WAAW,CAACC,gBAA3C;AACD;;AAEDC,EAAAA,WAAW,CAACC,IAAD,EAA+B;AACxC,UAAMD,WAAN,CAAkBC,IAAlB;AACD;;AAEDC,EAAAA,YAAY,GAAuB;AACjC,QAAI,CAAC,KAAKpC,KAAL,CAAWM,SAAhB,EAA2B;AACzB,aAAO,EAAP;AACD;;AACD,UAAM;AAACY,MAAAA,UAAD;AAAamB,MAAAA,MAAb;AAAqBC,MAAAA,MAArB;AAA6BzC,MAAAA;AAA7B,QAAwC,KAAKG,KAAnD;AACA,UAAM;AAACuC,MAAAA;AAAD,QAAmB,KAAK3C,KAA9B;AACA,UAAM;AAAC4C,MAAAA;AAAD,QAAsB3C,OAAO,CAACgB,KAApC;AACA,UAAM4B,cAAc,GAAG,KAAKC,gBAAL,CAAsB,OAAtB,EAA+B7D,mBAA/B,CAAvB;AAEA,WAAO,IAAI4D,cAAJ,CACL,KAAK7C,KADA,EAEL,KAAK+C,gBAAL,CAAsB;AACpBnC,MAAAA,EAAE,EAAE,YADgB;AAEpB+B,MAAAA;AAFoB,KAAtB,CAFK,EAML;AACE5C,MAAAA,IAAI,EAAE;AAAC0B,QAAAA,UAAU,EAAE;AAACuB,UAAAA,cAAc,EAAEJ;AAAjB;AAAb,OADR;AAEEtB,MAAAA,UAFF;AAGE2B,MAAAA,YAAY,EAAER,MAAM,GAAGC;AAHzB,KANK,CAAP;AAYD;;AAEDQ,EAAAA,aAAa,CAAC3C,OAAD,EAA8B;AACzC,UAAM2C,aAAN,CAAoB3C,OAApB;AAEA,UAAM;AAACqC,MAAAA,iBAAD;AAAoBO,MAAAA,SAApB;AAA+B7B,MAAAA;AAA/B,QAA6C,KAAKlB,KAAxD;AAEAwC,IAAAA,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAEQ,MAAnB;AACAD,IAAAA,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAEC,MAAX;AACA9B,IAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAE8B,MAAZ;AACD;;AAEDC,EAAAA,cAAc,CAAC;AAACC,IAAAA;AAAD,GAAD,EAA4C;AACxD,UAAM;AAACC,MAAAA;AAAD,QAAUD,IAAhB;;AACA,QAAIC,KAAK,IAAI,CAAb,EAAgB;AACd,YAAM;AAACC,QAAAA,iBAAD;AAAoB7D,QAAAA,cAApB;AAAoCM,QAAAA;AAApC,UAA+C,KAAKG,KAA1D;AAEA,YAAMqD,kBAAkB,GAAG9D,cAAc,GACrC6D,iBAAiB,CAACE,OAAlB,CAA0B,OAA1B,CADqC,GAErCzD,OAAO,CAACgB,KAFZ;AAMAqC,MAAAA,IAAI,CAACK,MAAL,GAAc7E,iBAAiB,CAAC8E,kBAAlB,CAAqC;AACjDC,QAAAA,UAAU,EAAEN,KADqC;AAEjD,WAAGE;AAF8C,OAArC,CAAd;AAID;;AAED,WAAOH,IAAP;AACD;;AAIDQ,EAAAA,aAAa,CAAC;AAACC,IAAAA,eAAD;AAAkBC,IAAAA;AAAlB,GAAD,EAA6B;AACxC,UAAM;AAAC/C,MAAAA;AAAD,QAAU,KAAKb,KAAL,CAAWH,OAA3B;AACAgB,IAAAA,KAAK,CAAC8C,eAAN,GAAwBA,eAAxB;AACA9C,IAAAA,KAAK,CAAC2B,iBAAN,CAAwBqB,KAAxB,CAA8BF,eAA9B;AACA9C,IAAAA,KAAK,CAAC+C,OAAN,GAAgBA,OAAhB;AACA/C,IAAAA,KAAK,CAACK,UAAN,CAAiB4C,YAAjB,CAA8B;AAACnE,MAAAA,IAAI,EAAEiE;AAAP,KAA9B;AACD;;AAGDG,EAAAA,sBAAsB,CAAC5B,IAAD,EAAO;AAC3B,UAAM6B,QAAQ,GAAG7B,IAAI,CAACvC,KAAL,CAAWgB,cAA5B;AACA,UAAMqD,eAAe,GAAG9B,IAAI,CAAC+B,QAAL,CAActD,cAAd,KAAiCoD,QAAzD;AACA,UAAM;AAACG,MAAAA;AAAD,QAAoBhC,IAAI,CAACH,WAA/B;AACA,QAAIzC,cAAc,GAAG4C,IAAI,CAACvC,KAAL,CAAWL,cAAhC;;AACA,QAAI,KAAKS,KAAL,CAAWT,cAAX,KAA8B4C,IAAI,CAACvC,KAAL,CAAWL,cAA7C,EAA6D;AAC3D,UAAIA,cAAc,IAAI,CAACb,iBAAiB,CAACwB,WAAlB,CAA8B,KAAKC,OAAL,CAAaC,MAA3C,CAAvB,EAA2E;AACzE5B,QAAAA,GAAG,CAAC4F,IAAJ,CAAS,yDAAT;AACA7E,QAAAA,cAAc,GAAG,KAAjB;AACD;AACF;;AACD,UAAM8E,qBAAqB,GAAG9E,cAAc,KAAK,KAAKS,KAAL,CAAWT,cAA5D;AACA,SAAKc,QAAL,CAAc;AACZd,MAAAA;AADY,KAAd;AAIA,UAAM+E,gBAAgB,GAAG,KAAKC,kBAAL,CAAwB9E,uBAAxB,CAAzB;AAEA,UAAM;AAACiB,MAAAA;AAAD,QAAe,KAAKV,KAA1B;AACA,UAAM;AAACL,MAAAA,IAAD;AAAOE,MAAAA;AAAP,QAAkBa,UAAxB;AACA,UAAM8D,oBAAoB,GACxBF,gBAAgB,IAChBD,qBADA,IAEAF,eAFA,IAGA,KAAKM,kBAAL,CAAwBtC,IAAxB,EAA8B;AAC5BuC,MAAAA,UAAU,EAAEnF,cADgB;AAE5BoF,MAAAA,SAAS,EAAEhF;AAFiB,KAA9B,CAJF;AAQA,UAAMiF,uBAAuB,GAAG,KAAKH,kBAAL,CAAwBtC,IAAxB,EAA8B;AAACwC,MAAAA,SAAS,EAAE9E;AAAZ,KAA9B,CAAhC;AAEA,SAAKQ,QAAL,CAAc;AACZmE,MAAAA,oBADY;AAEZI,MAAAA;AAFY,KAAd;AAKA,UAAM;AAACC,MAAAA;AAAD,QAAa,KAAK1E,OAAxB;;AAEA,QAAIgE,eAAe,IAAIF,eAAvB,EAAwC;AACtC,YAAM;AAACa,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAkBF,QAAxB;AACA,YAAMvC,MAAM,GAAG0C,IAAI,CAACC,IAAL,CAAUH,KAAK,GAAGd,QAAlB,CAAf;AACA,YAAM3B,MAAM,GAAG2C,IAAI,CAACC,IAAL,CAAUF,MAAM,GAAGf,QAAnB,CAAf;AACA,WAAKkB,iBAAL,CAAuB7C,MAAvB,EAA+BC,MAA/B;AACA,WAAKjC,QAAL,CAAc;AAEZ8E,QAAAA,OAAO,EAAE,CAACL,KAAK,GAAG,CAAT,EAAY,CAACC,MAAD,GAAU,CAAtB,EAAyB,CAAzB,CAFG;AAIZK,QAAAA,UAAU,EAAE;AAACC,UAAAA,OAAO,EAAErB,QAAV;AAAoBsB,UAAAA,OAAO,EAAEtB;AAA7B,SAJA;AAKZc,QAAAA,KALY;AAMZC,QAAAA,MANY;AAOZzC,QAAAA,MAPY;AAQZD,QAAAA;AARY,OAAd;AAUD;;AAED,QAAIuC,uBAAJ,EAA6B;AAC3B,WAAKW,gBAAL,CAAsBpD,IAAtB;AACD;;AACD,QAAIqC,oBAAoB,IAAII,uBAA5B,EAAqD;AACnD,WAAKY,aAAL;AACD;AACF;;AAKDD,EAAAA,gBAAgB,CAACpD,IAAD,EAAO;AACrB,UAAM;AAAC7C,MAAAA,SAAD;AAAYE,MAAAA,WAAZ;AAAyBG,MAAAA;AAAzB,QAAiCwC,IAAI,CAACvC,KAA5C;AACA,UAAM;AAACiB,MAAAA;AAAD,QAAU,KAAKb,KAAL,CAAWH,OAA3B;;AACA,QAAIgB,KAAJ,EAAW;AACTA,MAAAA,KAAK,CAACvB,SAAN,GAAkBA,SAAlB;AACAuB,MAAAA,KAAK,CAACE,SAAN,GAAkBpC,qBAAqB,CAACa,WAAD,CAAvC;AACD;;AACD,SAAKa,QAAL,CAAc;AAACoF,MAAAA,QAAQ,EAAE7G,YAAY,CAACY,WAAD,EAAcF,SAAd,EAAyB;AAACK,QAAAA;AAAD,OAAzB;AAAvB,KAAd;AACD;;AAED6F,EAAAA,aAAa,GAAG;AACd,UAAM;AAAC3E,MAAAA;AAAD,QAAU,KAAKb,KAAL,CAAWH,OAA3B;;AACA,QAAIgB,KAAJ,EAAW;AACTA,MAAAA,KAAK,CAAC8C,eAAN,GAAwB,IAAxB;AACD;AACF;;AAjNwF;AAHtE5D,e,CAIZ2F,S,GAAY,iB;AAJA3F,e,CAKZf,Y,GAAeA,Y","sourcesContent":["// Copyright (c) 2015 - 2017 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 {\n Accessor,\n Color,\n GetPickingInfoParams,\n Layer,\n LayerContext,\n LayersList,\n log,\n PickingInfo,\n Position,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport type {Buffer, Texture} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {AGGREGATION_OPERATION, getValueFunc} from '../utils/aggregation-operation-utils';\nimport ScreenGridCellLayer from './screen-grid-cell-layer';\nimport GridAggregationLayer, {GridAggregationLayerProps} from '../grid-aggregation-layer';\nimport {getFloatTexture} from '../utils/resource-utils';\n\nconst defaultProps: DefaultProps<ScreenGridLayerProps> = {\n ...(ScreenGridCellLayer.defaultProps as DefaultProps<ScreenGridLayerProps<unknown>>),\n getPosition: {type: 'accessor', value: (d: any) => d.position},\n getWeight: {type: 'accessor', value: 1},\n\n gpuAggregation: true,\n aggregation: 'SUM'\n};\n\nconst POSITION_ATTRIBUTE_NAME = 'positions';\nconst DIMENSIONS = {\n data: {\n props: ['cellSizePixels']\n },\n weights: {\n props: ['aggregation'],\n accessors: ['getWeight']\n }\n};\n\n/** All properties supported by ScreenGridLayer. */\nexport type ScreenGridLayerProps<DataT = unknown> = _ScreenGridLayerProps<DataT> &\n GridAggregationLayerProps<DataT>;\n\n/** Properties added by ScreenGridLayer. */\nexport type _ScreenGridLayerProps<DataT> = {\n /**\n * Unit width/height of the bins.\n * @default 100\n */\n cellSizePixels?: number;\n\n /**\n * Cell margin size in pixels.\n * @default 2\n */\n cellMarginPixels?: number;\n\n /**\n * Expressed as an rgba array, minimal color that could be rendered by a tile.\n * @default [0, 0, 0, 255]\n * @deprecated Deprecated in version 5.2.0, use `colorRange` and `colorDomain` instead.\n */\n minColor?: Color | null;\n\n /**\n * Expressed as an rgba array, maximal color that could be rendered by a tile.\n * @default [0, 255, 0, 255]\n * @deprecated Deprecated in version 5.2.0, use `colorRange` and `colorDomain` instead.\n */\n maxColor?: Color | null;\n\n /**\n * Color scale input domain. The color scale maps continues numeric domain into discrete color range.\n * @default [1, max(weight)]\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Specified as an array of colors [color1, color2, ...].\n *\n * @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)\n */\n colorRange?: Color[];\n\n /**\n * Method called to retrieve the position of each object.\n *\n * @default d => d.position\n */\n getPosition?: Accessor<DataT, Position>;\n\n /**\n * The weight of each object.\n *\n * @default 1\n */\n getWeight?: Accessor<DataT, number>;\n\n /**\n * Perform aggregation is performed on GPU.\n *\n * NOTE: GPU Aggregation requires WebGL2 support by the browser.\n * When `gpuAggregation` is set to true and browser doesn't support WebGL2, aggregation falls back to CPU.\n *\n * @default true\n */\n gpuAggregation?: boolean;\n\n /**\n * Defines the type of aggregation operation\n *\n * V valid values are 'SUM', 'MEAN', 'MIN' and 'MAX'.\n *\n * @default 'SUM'\n */\n aggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n};\n\n/** Aggregates data into histogram bins and renders them as a grid. */\nexport default class ScreenGridLayer<\n DataT = any,\n ExtraProps extends {} = {}\n> extends GridAggregationLayer<DataT, ExtraProps & Required<_ScreenGridLayerProps<DataT>>> {\n static layerName = 'ScreenGridLayer';\n static defaultProps = defaultProps;\n\n state!: GridAggregationLayer<DataT>['state'] & {\n supported: boolean;\n gpuGridAggregator?: any;\n gpuAggregation?: any;\n weights?: any;\n maxTexture?: Texture;\n aggregationBuffer?: Buffer;\n maxBuffer?: Buffer;\n };\n\n initializeState() {\n if (!ScreenGridCellLayer.isSupported(this.context.device)) {\n // max aggregated value is sampled from a float texture\n this.setState({supported: false});\n log.error(`ScreenGridLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeAggregationLayer({\n dimensions: DIMENSIONS,\n // @ts-expect-error\n getCellSize: props => props.cellSizePixels // TODO\n });\n const weights = {\n count: {\n size: 1,\n operation: AGGREGATION_OPERATION.SUM,\n needMax: true,\n maxTexture: getFloatTexture(this.context.device, {id: `${this.id}-max-texture`})\n }\n };\n this.setState({\n supported: true,\n projectPoints: true, // aggregation in screen space\n weights,\n subLayerData: {attributes: {}},\n maxTexture: weights.count.maxTexture,\n positionAttributeName: 'positions',\n posOffset: [0, 0],\n translation: [1, -1]\n });\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n [POSITION_ATTRIBUTE_NAME]: {\n size: 3,\n accessor: 'getPosition',\n type: GL.DOUBLE,\n fp64: this.use64bitPositions()\n },\n // this attribute is used in gpu aggregation path only\n count: {size: 3, accessor: 'getWeight'}\n });\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>) {\n return this.state.supported && changeFlags.somethingChanged;\n }\n\n updateState(opts: UpdateParameters<this>) {\n super.updateState(opts);\n }\n\n renderLayers(): LayersList | Layer {\n if (!this.state.supported) {\n return [];\n }\n const {maxTexture, numRow, numCol, weights} = this.state;\n const {updateTriggers} = this.props;\n const {aggregationBuffer} = weights.count;\n const CellLayerClass = this.getSubLayerClass('cells', ScreenGridCellLayer);\n\n return new CellLayerClass(\n this.props,\n this.getSubLayerProps({\n id: 'cell-layer',\n updateTriggers\n }),\n {\n data: {attributes: {instanceCounts: aggregationBuffer}},\n maxTexture,\n numInstances: numRow * numCol\n }\n );\n }\n\n finalizeState(context: LayerContext): void {\n super.finalizeState(context);\n\n const {aggregationBuffer, maxBuffer, maxTexture} = this.state;\n\n aggregationBuffer?.delete();\n maxBuffer?.delete();\n maxTexture?.delete();\n }\n\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n const {index} = info;\n if (index >= 0) {\n const {gpuGridAggregator, gpuAggregation, weights} = this.state;\n // Get count aggregation results\n const aggregationResults = gpuAggregation\n ? gpuGridAggregator.getData('count')\n : weights.count;\n\n // Each instance (one cell) is aggregated into single pixel,\n // Get current instance's aggregation details.\n info.object = GPUGridAggregator.getAggregationData({\n pixelIndex: index,\n ...aggregationResults\n });\n }\n\n return info;\n }\n\n // Aggregation Overrides\n\n updateResults({aggregationData, maxData}) {\n const {count} = this.state.weights;\n count.aggregationData = aggregationData;\n count.aggregationBuffer.write(aggregationData);\n count.maxData = maxData;\n count.maxTexture.setImageData({data: maxData});\n }\n\n /* eslint-disable complexity, max-statements */\n updateAggregationState(opts) {\n const cellSize = opts.props.cellSizePixels;\n const cellSizeChanged = opts.oldProps.cellSizePixels !== cellSize;\n const {viewportChanged} = opts.changeFlags;\n let gpuAggregation = opts.props.gpuAggregation;\n if (this.state.gpuAggregation !== opts.props.gpuAggregation) {\n if (gpuAggregation && !GPUGridAggregator.isSupported(this.context.device)) {\n log.warn('GPU Grid Aggregation not supported, falling back to CPU')();\n gpuAggregation = false;\n }\n }\n const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;\n this.setState({\n gpuAggregation\n });\n\n const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);\n\n const {dimensions} = this.state;\n const {data, weights} = dimensions;\n const aggregationDataDirty =\n positionsChanged ||\n gpuAggregationChanged ||\n viewportChanged ||\n this.isAggregationDirty(opts, {\n compareAll: gpuAggregation, // check for all (including extentions props) when using gpu aggregation\n dimension: data\n });\n const aggregationWeightsDirty = this.isAggregationDirty(opts, {dimension: weights});\n\n this.setState({\n aggregationDataDirty,\n aggregationWeightsDirty\n });\n\n const {viewport} = this.context;\n\n if (viewportChanged || cellSizeChanged) {\n const {width, height} = viewport;\n const numCol = Math.ceil(width / cellSize);\n const numRow = Math.ceil(height / cellSize);\n this.allocateResources(numRow, numCol);\n this.setState({\n // transformation from clipspace to screen(pixel) space\n scaling: [width / 2, -height / 2, 1],\n\n gridOffset: {xOffset: cellSize, yOffset: cellSize},\n width,\n height,\n numCol,\n numRow\n });\n }\n\n if (aggregationWeightsDirty) {\n this._updateAccessors(opts);\n }\n if (aggregationDataDirty || aggregationWeightsDirty) {\n this._resetResults();\n }\n }\n /* eslint-enable complexity, max-statements */\n\n // Private\n\n _updateAccessors(opts) {\n const {getWeight, aggregation, data} = opts.props;\n const {count} = this.state.weights;\n if (count) {\n count.getWeight = getWeight;\n count.operation = AGGREGATION_OPERATION[aggregation];\n }\n this.setState({getValue: getValueFunc(aggregation, getWeight, {data})});\n }\n\n _resetResults() {\n const {count} = this.state.weights;\n if (count) {\n count.aggregationData = null;\n }\n }\n}\n"],"file":"screen-grid-layer.js"}
@@ -1,13 +1,16 @@
1
1
  export default `\
2
+ #version 300 es
2
3
  #define SHADER_NAME gpu-aggregation-to-grid-fs
3
4
 
4
5
  precision highp float;
5
6
 
6
- varying vec3 vWeights;
7
+ in vec3 vWeights;
8
+
9
+ out vec4 fragColor;
7
10
 
8
11
  void main(void) {
9
- gl_FragColor = vec4(vWeights, 1.0);
10
- DECKGL_FILTER_COLOR(gl_FragColor, geometry);
12
+ fragColor = vec4(vWeights, 1.0);
13
+ DECKGL_FILTER_COLOR(fragColor, geometry);
11
14
  }
12
15
  `;
13
16
  //# sourceMappingURL=aggregate-to-grid-fs.glsl.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAXA","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\nexport default `\\\n#define SHADER_NAME gpu-aggregation-to-grid-fs\n\nprecision highp float;\n\nvarying vec3 vWeights;\n\nvoid main(void) {\n gl_FragColor = vec4(vWeights, 1.0);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n"],"file":"aggregate-to-grid-fs.glsl.js"}
1
+ {"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAdA","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\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-to-grid-fs\n\nprecision highp float;\n\nin vec3 vWeights;\n\nout vec4 fragColor;\n\nvoid main(void) {\n fragColor = vec4(vWeights, 1.0);\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n"],"file":"aggregate-to-grid-fs.glsl.js"}
@@ -1,16 +1,17 @@
1
1
  export default `\
2
+ #version 300 es
2
3
  #define SHADER_NAME gpu-aggregation-to-grid-vs
3
4
 
4
- attribute vec3 positions;
5
- attribute vec3 positions64Low;
6
- attribute vec3 weights;
5
+ in vec3 positions;
6
+ in vec3 positions64Low;
7
+ in vec3 weights;
7
8
  uniform vec2 cellSize;
8
9
  uniform vec2 gridSize;
9
10
  uniform bool projectPoints;
10
11
  uniform vec2 translation;
11
12
  uniform vec3 scaling;
12
13
 
13
- varying vec3 vWeights;
14
+ out vec3 vWeights;
14
15
 
15
16
  vec2 project_to_pixel(vec4 pos) {
16
17
  vec4 result;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAzDA","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\nexport default `\\\n#define SHADER_NAME gpu-aggregation-to-grid-vs\n\nattribute vec3 positions;\nattribute vec3 positions64Low;\nattribute vec3 weights;\nuniform vec2 cellSize;\nuniform vec2 gridSize;\nuniform bool projectPoints;\nuniform vec2 translation;\nuniform vec3 scaling;\n\nvarying vec3 vWeights;\n\nvec2 project_to_pixel(vec4 pos) {\n vec4 result;\n pos.xy = pos.xy/pos.w;\n result = pos + vec4(translation, 0., 0.);\n result.xy = scaling.z > 0. ? result.xy * scaling.xy : result.xy;\n return result.xy;\n}\n\nvoid main(void) {\n\n vWeights = weights;\n\n vec4 windowPos = vec4(positions, 1.);\n if (projectPoints) {\n windowPos = project_position_to_clipspace(positions, positions64Low, vec3(0));\n }\n\n vec2 pos = project_to_pixel(windowPos);\n\n vec2 pixelXY64[2];\n pixelXY64[0] = vec2(pos.x, 0.);\n pixelXY64[1] = vec2(pos.y, 0.);\n\n // Transform (0,0):windowSize -> (0, 0): gridSize\n vec2 gridXY64[2];\n gridXY64[0] = div_fp64(pixelXY64[0], vec2(cellSize.x, 0));\n gridXY64[1] = div_fp64(pixelXY64[1], vec2(cellSize.y, 0));\n float x = floor(gridXY64[0].x);\n float y = floor(gridXY64[1].x);\n pos = vec2(x, y);\n\n // Transform (0,0):gridSize -> (-1, -1):(1,1)\n pos = (pos * (2., 2.) / (gridSize)) - (1., 1.);\n\n // Move to pixel center, pixel-size in screen sapce (2/gridSize) * 0.5 => 1/gridSize\n vec2 offset = 1.0 / gridSize;\n pos = pos + offset;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n\n // Enforce default value for ANGLE issue (https://bugs.chromium.org/p/angleproject/issues/detail?id=3941)\n gl_PointSize = 1.0;\n}\n`;\n"],"file":"aggregate-to-grid-vs.glsl.js"}
1
+ {"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.ts"],"names":[],"mappings":"AAoBA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA1DA","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\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-to-grid-vs\n\nin vec3 positions;\nin vec3 positions64Low;\nin vec3 weights;\nuniform vec2 cellSize;\nuniform vec2 gridSize;\nuniform bool projectPoints;\nuniform vec2 translation;\nuniform vec3 scaling;\n\nout vec3 vWeights;\n\nvec2 project_to_pixel(vec4 pos) {\n vec4 result;\n pos.xy = pos.xy/pos.w;\n result = pos + vec4(translation, 0., 0.);\n result.xy = scaling.z > 0. ? result.xy * scaling.xy : result.xy;\n return result.xy;\n}\n\nvoid main(void) {\n\n vWeights = weights;\n\n vec4 windowPos = vec4(positions, 1.);\n if (projectPoints) {\n windowPos = project_position_to_clipspace(positions, positions64Low, vec3(0));\n }\n\n vec2 pos = project_to_pixel(windowPos);\n\n vec2 pixelXY64[2];\n pixelXY64[0] = vec2(pos.x, 0.);\n pixelXY64[1] = vec2(pos.y, 0.);\n\n // Transform (0,0):windowSize -> (0, 0): gridSize\n vec2 gridXY64[2];\n gridXY64[0] = div_fp64(pixelXY64[0], vec2(cellSize.x, 0));\n gridXY64[1] = div_fp64(pixelXY64[1], vec2(cellSize.y, 0));\n float x = floor(gridXY64[0].x);\n float y = floor(gridXY64[1].x);\n pos = vec2(x, y);\n\n // Transform (0,0):gridSize -> (-1, -1):(1,1)\n pos = (pos * (2., 2.) / (gridSize)) - (1., 1.);\n\n // Move to pixel center, pixel-size in screen sapce (2/gridSize) * 0.5 => 1/gridSize\n vec2 offset = 1.0 / gridSize;\n pos = pos + offset;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n\n // Enforce default value for ANGLE issue (https://bugs.chromium.org/p/angleproject/issues/detail?id=3941)\n gl_PointSize = 1.0;\n}\n`;\n"],"file":"aggregate-to-grid-vs.glsl.js"}
@@ -1,4 +1,4 @@
1
- import { Model, Transform } from '@luma.gl/engine';
1
+ import { Model, TextureTransform } from '@luma.gl/engine';
2
2
  import { fp64arithmetic } from '@luma.gl/shadertools';
3
3
  import { readPixelsToBuffer, withGLParameters, clear } from '@luma.gl/webgl';
4
4
  import { GL } from '@luma.gl/constants';
@@ -711,7 +711,7 @@ function getAllAggregationModel(device, instanceCount) {
711
711
  }
712
712
 
713
713
  function getMeanTransform(device, opts) {
714
- return new Transform(device, {
714
+ return new TextureTransform(device, {
715
715
  vs: TRANSFORM_MEAN_VS,
716
716
  _targetTextureVarying: 'meanValues',
717
717
  ...opts