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

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 (273) hide show
  1. package/dist/brushing/brushing-extension.js +80 -0
  2. package/{typed → dist}/brushing/shader-module.d.ts +1 -1
  3. package/{typed → dist}/brushing/shader-module.d.ts.map +1 -1
  4. package/dist/brushing/shader-module.js +92 -0
  5. package/{typed → dist}/clip/clip-extension.d.ts.map +1 -1
  6. package/dist/clip/clip-extension.js +117 -0
  7. package/{typed → dist}/collision-filter/collision-filter-effect.d.ts +4 -2
  8. package/dist/collision-filter/collision-filter-effect.d.ts.map +1 -0
  9. package/dist/collision-filter/collision-filter-effect.js +194 -0
  10. package/dist/collision-filter/collision-filter-extension.js +49 -0
  11. package/{typed → dist}/collision-filter/collision-filter-pass.d.ts +3 -2
  12. package/dist/collision-filter/collision-filter-pass.d.ts.map +1 -0
  13. package/dist/collision-filter/collision-filter-pass.js +23 -0
  14. package/{typed → dist}/collision-filter/shader-module.d.ts.map +1 -1
  15. package/dist/collision-filter/shader-module.js +87 -0
  16. package/dist/data-filter/aggregator.d.ts.map +1 -0
  17. package/dist/{esm/data-filter → data-filter}/aggregator.js +40 -41
  18. package/{typed → dist}/data-filter/data-filter-extension.d.ts +39 -7
  19. package/dist/data-filter/data-filter-extension.d.ts.map +1 -0
  20. package/dist/data-filter/data-filter-extension.js +256 -0
  21. package/dist/data-filter/shader-module.d.ts +39 -0
  22. package/dist/data-filter/shader-module.d.ts.map +1 -0
  23. package/dist/data-filter/shader-module.js +199 -0
  24. package/dist/dist.dev.js +2667 -11058
  25. package/{typed → dist}/fill-style/fill-style-extension.d.ts +2 -30
  26. package/dist/fill-style/fill-style-extension.d.ts.map +1 -0
  27. package/dist/fill-style/fill-style-extension.js +116 -0
  28. package/{typed/fill-style/shaders.glsl.d.ts → dist/fill-style/shader-module.d.ts} +1 -1
  29. package/dist/fill-style/shader-module.d.ts.map +1 -0
  30. package/dist/fill-style/shader-module.js +96 -0
  31. package/dist/fp64/fp64-extension.js +35 -0
  32. package/dist/fp64/project64.glsl.js +81 -0
  33. package/dist/fp64/project64.js +50 -0
  34. package/dist/index.cjs +2795 -0
  35. package/dist/index.cjs.map +7 -0
  36. package/dist/index.d.ts +19 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +11 -0
  39. package/{typed → dist}/mask/mask-effect.d.ts +6 -5
  40. package/dist/mask/mask-effect.d.ts.map +1 -0
  41. package/dist/mask/mask-effect.js +192 -0
  42. package/dist/mask/mask-extension.js +57 -0
  43. package/dist/mask/mask-pass.d.ts +61 -0
  44. package/dist/mask/mask-pass.d.ts.map +1 -0
  45. package/dist/mask/mask-pass.js +52 -0
  46. package/{typed → dist}/mask/shader-module.d.ts.map +1 -1
  47. package/dist/mask/shader-module.js +77 -0
  48. package/{typed → dist}/path-style/path-style-extension.d.ts.map +1 -1
  49. package/dist/path-style/path-style-extension.js +112 -0
  50. package/dist/path-style/shaders.glsl.js +86 -0
  51. package/{typed → dist}/terrain/height-map-builder.d.ts +1 -1
  52. package/dist/terrain/height-map-builder.d.ts.map +1 -0
  53. package/dist/terrain/height-map-builder.js +104 -0
  54. package/{typed → dist}/terrain/shader-module.d.ts +2 -2
  55. package/dist/terrain/shader-module.d.ts.map +1 -0
  56. package/dist/terrain/shader-module.js +137 -0
  57. package/{typed → dist}/terrain/terrain-cover.d.ts +1 -1
  58. package/dist/terrain/terrain-cover.d.ts.map +1 -0
  59. package/dist/terrain/terrain-cover.js +188 -0
  60. package/{typed → dist}/terrain/terrain-effect.d.ts +6 -7
  61. package/dist/terrain/terrain-effect.d.ts.map +1 -0
  62. package/dist/terrain/terrain-effect.js +174 -0
  63. package/dist/terrain/terrain-extension.js +44 -0
  64. package/dist/terrain/terrain-pass.d.ts +53 -0
  65. package/dist/terrain/terrain-pass.d.ts.map +1 -0
  66. package/dist/terrain/terrain-pass.js +69 -0
  67. package/{typed → dist}/terrain/terrain-picking-pass.d.ts +1 -1
  68. package/dist/terrain/terrain-picking-pass.d.ts.map +1 -0
  69. package/dist/terrain/terrain-picking-pass.js +67 -0
  70. package/{typed → dist}/terrain/utils.d.ts +1 -0
  71. package/{typed → dist}/terrain/utils.d.ts.map +1 -1
  72. package/dist/terrain/utils.js +25 -0
  73. package/{typed → dist}/utils/debug.d.ts.map +1 -1
  74. package/dist/utils/debug.js +50 -0
  75. package/dist/utils/projection-utils.js +153 -0
  76. package/dist/utils/syntax-tags.d.ts +6 -0
  77. package/dist/utils/syntax-tags.d.ts.map +1 -0
  78. package/dist/utils/syntax-tags.js +5 -0
  79. package/dist.min.js +918 -1254
  80. package/package.json +19 -16
  81. package/src/brushing/shader-module.ts +4 -3
  82. package/src/clip/clip-extension.ts +10 -9
  83. package/src/collision-filter/collision-filter-effect.ts +35 -31
  84. package/src/collision-filter/collision-filter-pass.ts +7 -13
  85. package/src/collision-filter/shader-module.ts +6 -4
  86. package/src/data-filter/aggregator.ts +8 -13
  87. package/src/data-filter/data-filter-extension.ts +181 -56
  88. package/src/data-filter/shader-module.ts +132 -37
  89. package/src/fill-style/fill-style-extension.ts +4 -5
  90. package/src/fill-style/{shaders.glsl.ts → shader-module.ts} +6 -5
  91. package/src/mask/mask-effect.ts +30 -20
  92. package/src/mask/mask-pass.ts +22 -18
  93. package/src/mask/shader-module.ts +7 -6
  94. package/src/path-style/path-style-extension.ts +1 -0
  95. package/src/terrain/shader-module.ts +14 -13
  96. package/src/terrain/terrain-cover.ts +2 -1
  97. package/src/terrain/terrain-effect.ts +19 -23
  98. package/src/terrain/terrain-pass.ts +37 -37
  99. package/src/terrain/terrain-picking-pass.ts +19 -25
  100. package/src/terrain/utils.ts +13 -7
  101. package/src/utils/debug.ts +1 -2
  102. package/src/utils/syntax-tags.ts +5 -0
  103. package/dist/es5/brushing/brushing-extension.js +0 -108
  104. package/dist/es5/brushing/brushing-extension.js.map +0 -1
  105. package/dist/es5/brushing/shader-module.js +0 -50
  106. package/dist/es5/brushing/shader-module.js.map +0 -1
  107. package/dist/es5/clip/clip-extension.js +0 -98
  108. package/dist/es5/clip/clip-extension.js.map +0 -1
  109. package/dist/es5/collision-filter/collision-filter-effect.js +0 -294
  110. package/dist/es5/collision-filter/collision-filter-effect.js.map +0 -1
  111. package/dist/es5/collision-filter/collision-filter-extension.js +0 -109
  112. package/dist/es5/collision-filter/collision-filter-extension.js.map +0 -1
  113. package/dist/es5/collision-filter/collision-filter-pass.js +0 -79
  114. package/dist/es5/collision-filter/collision-filter-pass.js.map +0 -1
  115. package/dist/es5/collision-filter/shader-module.js +0 -39
  116. package/dist/es5/collision-filter/shader-module.js.map +0 -1
  117. package/dist/es5/data-filter/aggregator.js +0 -79
  118. package/dist/es5/data-filter/aggregator.js.map +0 -1
  119. package/dist/es5/data-filter/data-filter-extension.js +0 -236
  120. package/dist/es5/data-filter/data-filter-extension.js.map +0 -1
  121. package/dist/es5/data-filter/shader-module.js +0 -122
  122. package/dist/es5/data-filter/shader-module.js.map +0 -1
  123. package/dist/es5/fill-style/fill-style-extension.js +0 -190
  124. package/dist/es5/fill-style/fill-style-extension.js.map +0 -1
  125. package/dist/es5/fill-style/shaders.glsl.js +0 -59
  126. package/dist/es5/fill-style/shaders.glsl.js.map +0 -1
  127. package/dist/es5/fp64/fp64-extension.js +0 -55
  128. package/dist/es5/fp64/fp64-extension.js.map +0 -1
  129. package/dist/es5/fp64/project64.glsl.js +0 -9
  130. package/dist/es5/fp64/project64.glsl.js.map +0 -1
  131. package/dist/es5/fp64/project64.js +0 -52
  132. package/dist/es5/fp64/project64.js.map +0 -1
  133. package/dist/es5/index.js +0 -88
  134. package/dist/es5/index.js.map +0 -1
  135. package/dist/es5/mask/mask-effect.js +0 -279
  136. package/dist/es5/mask/mask-effect.js.map +0 -1
  137. package/dist/es5/mask/mask-extension.js +0 -113
  138. package/dist/es5/mask/mask-extension.js.map +0 -1
  139. package/dist/es5/mask/mask-pass.js +0 -106
  140. package/dist/es5/mask/mask-pass.js.map +0 -1
  141. package/dist/es5/mask/shader-module.js +0 -38
  142. package/dist/es5/mask/shader-module.js.map +0 -1
  143. package/dist/es5/path-style/path-style-extension.js +0 -169
  144. package/dist/es5/path-style/path-style-extension.js.map +0 -1
  145. package/dist/es5/path-style/shaders.glsl.js +0 -25
  146. package/dist/es5/path-style/shaders.glsl.js.map +0 -1
  147. package/dist/es5/terrain/height-map-builder.js +0 -111
  148. package/dist/es5/terrain/height-map-builder.js.map +0 -1
  149. package/dist/es5/terrain/shader-module.js +0 -86
  150. package/dist/es5/terrain/shader-module.js.map +0 -1
  151. package/dist/es5/terrain/terrain-cover.js +0 -256
  152. package/dist/es5/terrain/terrain-cover.js.map +0 -1
  153. package/dist/es5/terrain/terrain-effect.js +0 -326
  154. package/dist/es5/terrain/terrain-effect.js.map +0 -1
  155. package/dist/es5/terrain/terrain-extension.js +0 -94
  156. package/dist/es5/terrain/terrain-extension.js.map +0 -1
  157. package/dist/es5/terrain/terrain-pass.js +0 -121
  158. package/dist/es5/terrain/terrain-pass.js.map +0 -1
  159. package/dist/es5/terrain/terrain-picking-pass.js +0 -124
  160. package/dist/es5/terrain/terrain-picking-pass.js.map +0 -1
  161. package/dist/es5/terrain/utils.js +0 -35
  162. package/dist/es5/terrain/utils.js.map +0 -1
  163. package/dist/es5/utils/debug.js +0 -71
  164. package/dist/es5/utils/debug.js.map +0 -1
  165. package/dist/es5/utils/projection-utils.js +0 -168
  166. package/dist/es5/utils/projection-utils.js.map +0 -1
  167. package/dist/esm/brushing/brushing-extension.js +0 -68
  168. package/dist/esm/brushing/brushing-extension.js.map +0 -1
  169. package/dist/esm/brushing/shader-module.js +0 -103
  170. package/dist/esm/brushing/shader-module.js.map +0 -1
  171. package/dist/esm/clip/clip-extension.js +0 -86
  172. package/dist/esm/clip/clip-extension.js.map +0 -1
  173. package/dist/esm/collision-filter/collision-filter-effect.js +0 -246
  174. package/dist/esm/collision-filter/collision-filter-effect.js.map +0 -1
  175. package/dist/esm/collision-filter/collision-filter-extension.js +0 -75
  176. package/dist/esm/collision-filter/collision-filter-extension.js.map +0 -1
  177. package/dist/esm/collision-filter/collision-filter-pass.js +0 -32
  178. package/dist/esm/collision-filter/collision-filter-pass.js.map +0 -1
  179. package/dist/esm/collision-filter/shader-module.js +0 -104
  180. package/dist/esm/collision-filter/shader-module.js.map +0 -1
  181. package/dist/esm/data-filter/aggregator.js.map +0 -1
  182. package/dist/esm/data-filter/data-filter-extension.js +0 -189
  183. package/dist/esm/data-filter/data-filter-extension.js.map +0 -1
  184. package/dist/esm/data-filter/shader-module.js +0 -164
  185. package/dist/esm/data-filter/shader-module.js.map +0 -1
  186. package/dist/esm/fill-style/fill-style-extension.js +0 -156
  187. package/dist/esm/fill-style/fill-style-extension.js.map +0 -1
  188. package/dist/esm/fill-style/shaders.glsl.js +0 -108
  189. package/dist/esm/fill-style/shaders.glsl.js.map +0 -1
  190. package/dist/esm/fp64/fp64-extension.js +0 -20
  191. package/dist/esm/fp64/fp64-extension.js.map +0 -1
  192. package/dist/esm/fp64/project64.glsl.js +0 -82
  193. package/dist/esm/fp64/project64.glsl.js.map +0 -1
  194. package/dist/esm/fp64/project64.js +0 -43
  195. package/dist/esm/fp64/project64.js.map +0 -1
  196. package/dist/esm/index.js +0 -11
  197. package/dist/esm/index.js.map +0 -1
  198. package/dist/esm/mask/mask-effect.js +0 -228
  199. package/dist/esm/mask/mask-effect.js.map +0 -1
  200. package/dist/esm/mask/mask-extension.js +0 -83
  201. package/dist/esm/mask/mask-extension.js.map +0 -1
  202. package/dist/esm/mask/mask-pass.js +0 -58
  203. package/dist/esm/mask/mask-pass.js.map +0 -1
  204. package/dist/esm/mask/shader-module.js +0 -84
  205. package/dist/esm/mask/shader-module.js.map +0 -1
  206. package/dist/esm/path-style/path-style-extension.js +0 -130
  207. package/dist/esm/path-style/path-style-extension.js.map +0 -1
  208. package/dist/esm/path-style/shaders.glsl.js +0 -84
  209. package/dist/esm/path-style/shaders.glsl.js.map +0 -1
  210. package/dist/esm/terrain/height-map-builder.js +0 -86
  211. package/dist/esm/terrain/height-map-builder.js.map +0 -1
  212. package/dist/esm/terrain/shader-module.js +0 -127
  213. package/dist/esm/terrain/shader-module.js.map +0 -1
  214. package/dist/esm/terrain/terrain-cover.js +0 -212
  215. package/dist/esm/terrain/terrain-cover.js.map +0 -1
  216. package/dist/esm/terrain/terrain-effect.js +0 -219
  217. package/dist/esm/terrain/terrain-effect.js.map +0 -1
  218. package/dist/esm/terrain/terrain-extension.js +0 -59
  219. package/dist/esm/terrain/terrain-extension.js.map +0 -1
  220. package/dist/esm/terrain/terrain-pass.js +0 -71
  221. package/dist/esm/terrain/terrain-pass.js.map +0 -1
  222. package/dist/esm/terrain/terrain-picking-pass.js +0 -73
  223. package/dist/esm/terrain/terrain-picking-pass.js.map +0 -1
  224. package/dist/esm/terrain/utils.js +0 -19
  225. package/dist/esm/terrain/utils.js.map +0 -1
  226. package/dist/esm/utils/debug.js +0 -61
  227. package/dist/esm/utils/debug.js.map +0 -1
  228. package/dist/esm/utils/projection-utils.js +0 -134
  229. package/dist/esm/utils/projection-utils.js.map +0 -1
  230. package/typed/collision-filter/collision-filter-effect.d.ts.map +0 -1
  231. package/typed/collision-filter/collision-filter-pass.d.ts.map +0 -1
  232. package/typed/data-filter/aggregator.d.ts.map +0 -1
  233. package/typed/data-filter/data-filter-extension.d.ts.map +0 -1
  234. package/typed/data-filter/shader-module.d.ts +0 -9
  235. package/typed/data-filter/shader-module.d.ts.map +0 -1
  236. package/typed/fill-style/fill-style-extension.d.ts.map +0 -1
  237. package/typed/fill-style/shaders.glsl.d.ts.map +0 -1
  238. package/typed/index.d.ts +0 -19
  239. package/typed/index.d.ts.map +0 -1
  240. package/typed/mask/mask-effect.d.ts.map +0 -1
  241. package/typed/mask/mask-pass.d.ts +0 -19
  242. package/typed/mask/mask-pass.d.ts.map +0 -1
  243. package/typed/terrain/height-map-builder.d.ts.map +0 -1
  244. package/typed/terrain/shader-module.d.ts.map +0 -1
  245. package/typed/terrain/terrain-cover.d.ts.map +0 -1
  246. package/typed/terrain/terrain-effect.d.ts.map +0 -1
  247. package/typed/terrain/terrain-pass.d.ts +0 -11
  248. package/typed/terrain/terrain-pass.d.ts.map +0 -1
  249. package/typed/terrain/terrain-picking-pass.d.ts.map +0 -1
  250. /package/{typed → dist}/brushing/brushing-extension.d.ts +0 -0
  251. /package/{typed → dist}/brushing/brushing-extension.d.ts.map +0 -0
  252. /package/{typed → dist}/clip/clip-extension.d.ts +0 -0
  253. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts +0 -0
  254. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts.map +0 -0
  255. /package/{typed → dist}/collision-filter/shader-module.d.ts +0 -0
  256. /package/{typed → dist}/data-filter/aggregator.d.ts +0 -0
  257. /package/{typed → dist}/fp64/fp64-extension.d.ts +0 -0
  258. /package/{typed → dist}/fp64/fp64-extension.d.ts.map +0 -0
  259. /package/{typed → dist}/fp64/project64.d.ts +0 -0
  260. /package/{typed → dist}/fp64/project64.d.ts.map +0 -0
  261. /package/{typed → dist}/fp64/project64.glsl.d.ts +0 -0
  262. /package/{typed → dist}/fp64/project64.glsl.d.ts.map +0 -0
  263. /package/{typed → dist}/mask/mask-extension.d.ts +0 -0
  264. /package/{typed → dist}/mask/mask-extension.d.ts.map +0 -0
  265. /package/{typed → dist}/mask/shader-module.d.ts +0 -0
  266. /package/{typed → dist}/path-style/path-style-extension.d.ts +0 -0
  267. /package/{typed → dist}/path-style/shaders.glsl.d.ts +0 -0
  268. /package/{typed → dist}/path-style/shaders.glsl.d.ts.map +0 -0
  269. /package/{typed → dist}/terrain/terrain-extension.d.ts +0 -0
  270. /package/{typed → dist}/terrain/terrain-extension.d.ts.map +0 -0
  271. /package/{typed → dist}/utils/debug.d.ts +0 -0
  272. /package/{typed → dist}/utils/projection-utils.d.ts +0 -0
  273. /package/{typed → dist}/utils/projection-utils.d.ts.map +0 -0
@@ -1,168 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.joinLayerBounds = joinLayerBounds;
9
- exports.makeViewport = makeViewport;
10
- exports.getViewportBounds = getViewportBounds;
11
- exports.getRenderBounds = getRenderBounds;
12
-
13
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
-
15
- var _core = require("@deck.gl/core");
16
-
17
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
18
-
19
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
-
21
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
22
-
23
- function joinLayerBounds(layers, viewport) {
24
- var bounds = [Infinity, Infinity, -Infinity, -Infinity];
25
-
26
- var _iterator = _createForOfIteratorHelper(layers),
27
- _step;
28
-
29
- try {
30
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
31
- var layer = _step.value;
32
- var layerBounds = layer.getBounds();
33
-
34
- if (layerBounds) {
35
- var bottomLeftCommon = layer.projectPosition(layerBounds[0], {
36
- viewport: viewport,
37
- autoOffset: false
38
- });
39
- var topRightCommon = layer.projectPosition(layerBounds[1], {
40
- viewport: viewport,
41
- autoOffset: false
42
- });
43
- bounds[0] = Math.min(bounds[0], bottomLeftCommon[0]);
44
- bounds[1] = Math.min(bounds[1], bottomLeftCommon[1]);
45
- bounds[2] = Math.max(bounds[2], topRightCommon[0]);
46
- bounds[3] = Math.max(bounds[3], topRightCommon[1]);
47
- }
48
- }
49
- } catch (err) {
50
- _iterator.e(err);
51
- } finally {
52
- _iterator.f();
53
- }
54
-
55
- if (Number.isFinite(bounds[0])) {
56
- return bounds;
57
- }
58
-
59
- return null;
60
- }
61
-
62
- var MAX_VIEWPORT_SIZE = 2048;
63
-
64
- function makeViewport(opts) {
65
- var bounds = opts.bounds,
66
- viewport = opts.viewport,
67
- _opts$border = opts.border,
68
- border = _opts$border === void 0 ? 0 : _opts$border;
69
- var isGeospatial = viewport.isGeospatial;
70
-
71
- if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {
72
- return null;
73
- }
74
-
75
- var centerWorld = viewport.unprojectPosition([(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2, 0]);
76
- var width = opts.width,
77
- height = opts.height,
78
- zoom = opts.zoom;
79
-
80
- if (zoom === undefined) {
81
- width = width - border * 2;
82
- height = height - border * 2;
83
- var scale = Math.min(width / (bounds[2] - bounds[0]), height / (bounds[3] - bounds[1]));
84
- zoom = Math.min(Math.log2(scale), 20);
85
- } else if (!width || !height) {
86
- var _scale = Math.pow(2, zoom);
87
-
88
- width = Math.round(Math.abs(bounds[2] - bounds[0]) * _scale);
89
- height = Math.round(Math.abs(bounds[3] - bounds[1]) * _scale);
90
- var maxSize = MAX_VIEWPORT_SIZE - border * 2;
91
-
92
- if (width > maxSize || height > maxSize) {
93
- var r = maxSize / Math.max(width, height);
94
- width = Math.round(width * r);
95
- height = Math.round(height * r);
96
- zoom += Math.log2(r);
97
- }
98
- }
99
-
100
- return isGeospatial ? new _core.WebMercatorViewport({
101
- id: viewport.id,
102
- x: border,
103
- y: border,
104
- width: width,
105
- height: height,
106
- longitude: centerWorld[0],
107
- latitude: centerWorld[1],
108
- zoom: zoom,
109
- orthographic: true
110
- }) : new _core.OrthographicViewport({
111
- id: viewport.id,
112
- x: border,
113
- y: border,
114
- width: width,
115
- height: height,
116
- target: centerWorld,
117
- zoom: zoom,
118
- flipY: false
119
- });
120
- }
121
-
122
- function getViewportBounds(viewport, zRange) {
123
- var viewportBoundsWorld;
124
-
125
- if (zRange && zRange.length === 2) {
126
- var _zRange = (0, _slicedToArray2.default)(zRange, 2),
127
- minZ = _zRange[0],
128
- maxZ = _zRange[1];
129
-
130
- var bounds0 = viewport.getBounds({
131
- z: minZ
132
- });
133
- var bounds1 = viewport.getBounds({
134
- z: maxZ
135
- });
136
- viewportBoundsWorld = [Math.min(bounds0[0], bounds1[0]), Math.min(bounds0[1], bounds1[1]), Math.max(bounds0[2], bounds1[2]), Math.max(bounds0[3], bounds1[3])];
137
- } else {
138
- viewportBoundsWorld = viewport.getBounds();
139
- }
140
-
141
- var viewportBottomLeftCommon = viewport.projectPosition(viewportBoundsWorld.slice(0, 2));
142
- var viewportTopRightCommon = viewport.projectPosition(viewportBoundsWorld.slice(2, 4));
143
- return [viewportBottomLeftCommon[0], viewportBottomLeftCommon[1], viewportTopRightCommon[0], viewportTopRightCommon[1]];
144
- }
145
-
146
- function getRenderBounds(layerBounds, viewport, zRange) {
147
- if (!layerBounds) {
148
- return [0, 0, 1, 1];
149
- }
150
-
151
- var viewportBounds = getViewportBounds(viewport, zRange);
152
- var paddedBounds = doubleBounds(viewportBounds);
153
-
154
- if (layerBounds[2] - layerBounds[0] <= paddedBounds[2] - paddedBounds[0] && layerBounds[3] - layerBounds[1] <= paddedBounds[3] - paddedBounds[1]) {
155
- return layerBounds;
156
- }
157
-
158
- return [Math.max(layerBounds[0], paddedBounds[0]), Math.max(layerBounds[1], paddedBounds[1]), Math.min(layerBounds[2], paddedBounds[2]), Math.min(layerBounds[3], paddedBounds[3])];
159
- }
160
-
161
- function doubleBounds(bounds) {
162
- var dx = bounds[2] - bounds[0];
163
- var dy = bounds[3] - bounds[1];
164
- var centerX = (bounds[0] + bounds[2]) / 2;
165
- var centerY = (bounds[1] + bounds[3]) / 2;
166
- return [centerX - dx, centerY - dy, centerX + dx, centerY + dy];
167
- }
168
- //# sourceMappingURL=projection-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/projection-utils.ts"],"names":["joinLayerBounds","layers","viewport","bounds","Infinity","layer","layerBounds","getBounds","bottomLeftCommon","projectPosition","autoOffset","topRightCommon","Math","min","max","Number","isFinite","MAX_VIEWPORT_SIZE","makeViewport","opts","border","isGeospatial","centerWorld","unprojectPosition","width","height","zoom","undefined","scale","log2","round","abs","maxSize","r","WebMercatorViewport","id","x","y","longitude","latitude","orthographic","OrthographicViewport","target","flipY","getViewportBounds","zRange","viewportBoundsWorld","length","minZ","maxZ","bounds0","z","bounds1","viewportBottomLeftCommon","slice","viewportTopRightCommon","getRenderBounds","viewportBounds","paddedBounds","doubleBounds","dx","dy","centerX","centerY"],"mappings":"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","sourcesContent":["import {WebMercatorViewport, OrthographicViewport} from '@deck.gl/core';\nimport type {Layer, Viewport} from '@deck.gl/core';\n\n/** Bounds in CARTESIAN coordinates */\nexport type Bounds = [minX: number, minY: number, maxX: number, maxY: number];\n\n/*\n * Compute the union of bounds from multiple layers\n * Returns bounds in CARTESIAN coordinates\n */\nexport function joinLayerBounds(\n /** The layers to combine */\n layers: Layer[],\n /** A Viewport instance that is used to determine the type of the view */\n viewport: Viewport\n): Bounds | null {\n // Join the bounds of layer data\n const bounds: Bounds = [Infinity, Infinity, -Infinity, -Infinity];\n for (const layer of layers) {\n const layerBounds = layer.getBounds();\n if (layerBounds) {\n const bottomLeftCommon = layer.projectPosition(layerBounds[0], {viewport, autoOffset: false});\n const topRightCommon = layer.projectPosition(layerBounds[1], {viewport, autoOffset: false});\n\n bounds[0] = Math.min(bounds[0], bottomLeftCommon[0]);\n bounds[1] = Math.min(bounds[1], bottomLeftCommon[1]);\n bounds[2] = Math.max(bounds[2], topRightCommon[0]);\n bounds[3] = Math.max(bounds[3], topRightCommon[1]);\n }\n }\n\n if (Number.isFinite(bounds[0])) {\n return bounds;\n }\n return null;\n}\n\nconst MAX_VIEWPORT_SIZE = 2048;\n\n/** Construct a viewport that just covers the target bounds. Used for rendering to common space indexed texture. */\nexport function makeViewport(opts: {\n /** The cartesian bounds of layers that will render into this texture */\n bounds: Bounds;\n /** Target width. If not specified, will be deduced from zoom */\n width?: number;\n /** Target height. If not specified, will be deduced from zoom */\n height?: number;\n /** Target zoom. If not specified, will be deduced from width and height */\n zoom?: number;\n /** Border around the viewport in pixels */\n border?: number;\n /** A viewport used to determine the output type */\n viewport: Viewport;\n}): Viewport | null {\n const {bounds, viewport, border = 0} = opts;\n const {isGeospatial} = viewport;\n\n if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {\n return null;\n }\n\n const centerWorld = viewport.unprojectPosition([\n (bounds[0] + bounds[2]) / 2,\n (bounds[1] + bounds[3]) / 2,\n 0\n ]);\n\n let {width, height, zoom} = opts;\n if (zoom === undefined) {\n // Use width and height to determine zoom\n width = width! - border * 2;\n height = height! - border * 2;\n const scale = Math.min(width / (bounds[2] - bounds[0]), height / (bounds[3] - bounds[1]));\n zoom = Math.min(Math.log2(scale), 20);\n } else if (!width || !height) {\n // Use zoom to determine width and height\n const scale = 2 ** zoom;\n width = Math.round(Math.abs(bounds[2] - bounds[0]) * scale);\n height = Math.round(Math.abs(bounds[3] - bounds[1]) * scale);\n const maxSize = MAX_VIEWPORT_SIZE - border * 2;\n if (width > maxSize || height > maxSize) {\n const r = maxSize / Math.max(width, height);\n width = Math.round(width * r);\n height = Math.round(height * r);\n zoom += Math.log2(r);\n }\n }\n\n // TODO - find a more generic way to construct this viewport\n // Geospatial viewports may not be web-mercator\n return isGeospatial\n ? new WebMercatorViewport({\n id: viewport.id,\n x: border,\n y: border,\n width,\n height,\n longitude: centerWorld[0],\n latitude: centerWorld[1],\n zoom,\n orthographic: true\n })\n : new OrthographicViewport({\n id: viewport.id,\n x: border,\n y: border,\n width,\n height,\n target: centerWorld,\n zoom,\n flipY: false\n });\n}\n\n/** Returns viewport bounds in CARTESIAN coordinates */\nexport function getViewportBounds(viewport: Viewport, zRange?: [number, number]): Bounds {\n // Viewport bounds in world coordinates\n let viewportBoundsWorld: Bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n viewportBoundsWorld = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n viewportBoundsWorld = viewport.getBounds();\n }\n\n // Viewport bounds in cartesian coordinates\n const viewportBottomLeftCommon = viewport.projectPosition(viewportBoundsWorld.slice(0, 2));\n const viewportTopRightCommon = viewport.projectPosition(viewportBoundsWorld.slice(2, 4));\n return [\n viewportBottomLeftCommon[0],\n viewportBottomLeftCommon[1],\n viewportTopRightCommon[0],\n viewportTopRightCommon[1]\n ];\n}\n\n/*\n * Determine the common space bounds that best cover the given data for the given viewport\n * Returns bounds in CARTESIAN coordinates\n */\nexport function getRenderBounds(\n layerBounds: Bounds,\n viewport: Viewport,\n zRange?: [number, number]\n): Bounds {\n if (!layerBounds) {\n return [0, 0, 1, 1];\n }\n\n const viewportBounds = getViewportBounds(viewport, zRange);\n // Expand viewport bounds by 2X. Heurestically chosen to avoid masking\n // errors when mask is partially out of view\n const paddedBounds = doubleBounds(viewportBounds);\n\n // When bounds of the layers are smaller than the viewport bounds simply use\n // mask bounds, so as to maximize resolution & avoid rerenders\n if (\n layerBounds[2] - layerBounds[0] <= paddedBounds[2] - paddedBounds[0] &&\n layerBounds[3] - layerBounds[1] <= paddedBounds[3] - paddedBounds[1]\n ) {\n return layerBounds;\n }\n\n // As viewport shrinks, to avoid pixelation along mask edges\n // we need to reduce the bounds and only render the visible portion\n // of the mask.\n // We pad the viewport bounds to capture the section\n // of the mask just outside the viewport to correctly maskByInstance.\n // Intersect mask & padded viewport bounds\n return [\n Math.max(layerBounds[0], paddedBounds[0]),\n Math.max(layerBounds[1], paddedBounds[1]),\n Math.min(layerBounds[2], paddedBounds[2]),\n Math.min(layerBounds[3], paddedBounds[3])\n ];\n}\n\nfunction doubleBounds(bounds: Bounds): Bounds {\n const dx = bounds[2] - bounds[0];\n const dy = bounds[3] - bounds[1];\n const centerX = (bounds[0] + bounds[2]) / 2;\n const centerY = (bounds[1] + bounds[3]) / 2;\n return [centerX - dx, centerY - dy, centerX + dx, centerY + dy];\n}\n"],"file":"projection-utils.js"}
@@ -1,68 +0,0 @@
1
- import { LayerExtension } from '@deck.gl/core';
2
- import shaderModule from './shader-module';
3
- const defaultProps = {
4
- getBrushingTarget: {
5
- type: 'accessor',
6
- value: [0, 0]
7
- },
8
- brushingTarget: 'source',
9
- brushingEnabled: true,
10
- brushingRadius: 10000
11
- };
12
- export default class BrushingExtension extends LayerExtension {
13
- getShaders() {
14
- return {
15
- modules: [shaderModule]
16
- };
17
- }
18
-
19
- initializeState(context, extension) {
20
- const attributeManager = this.getAttributeManager();
21
-
22
- if (attributeManager) {
23
- attributeManager.add({
24
- brushingTargets: {
25
- size: 2,
26
- accessor: 'getBrushingTarget',
27
- shaderAttributes: {
28
- brushingTargets: {
29
- divisor: 0
30
- },
31
- instanceBrushingTargets: {
32
- divisor: 1
33
- }
34
- }
35
- }
36
- });
37
- }
38
-
39
- const onMouseMove = () => {
40
- var _this$getCurrentLayer;
41
-
42
- (_this$getCurrentLayer = this.getCurrentLayer()) === null || _this$getCurrentLayer === void 0 ? void 0 : _this$getCurrentLayer.setNeedsRedraw();
43
- };
44
-
45
- this.state.onMouseMove = onMouseMove;
46
-
47
- if (context.deck) {
48
- context.deck.eventManager.on({
49
- pointermove: onMouseMove,
50
- pointerleave: onMouseMove
51
- });
52
- }
53
- }
54
-
55
- finalizeState(context, extension) {
56
- if (context.deck) {
57
- const onMouseMove = this.state.onMouseMove;
58
- context.deck.eventManager.off({
59
- pointermove: onMouseMove,
60
- pointerleave: onMouseMove
61
- });
62
- }
63
- }
64
-
65
- }
66
- BrushingExtension.defaultProps = defaultProps;
67
- BrushingExtension.extensionName = 'BrushingExtension';
68
- //# sourceMappingURL=brushing-extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/brushing/brushing-extension.ts"],"names":["LayerExtension","shaderModule","defaultProps","getBrushingTarget","type","value","brushingTarget","brushingEnabled","brushingRadius","BrushingExtension","getShaders","modules","initializeState","context","extension","attributeManager","getAttributeManager","add","brushingTargets","size","accessor","shaderAttributes","divisor","instanceBrushingTargets","onMouseMove","getCurrentLayer","setNeedsRedraw","state","deck","eventManager","on","pointermove","pointerleave","finalizeState","off","extensionName"],"mappings":"AAoBA,SAAQA,cAAR,QAA6B,eAA7B;AACA,OAAOC,YAAP,MAAyB,iBAAzB;AAIA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,iBAAiB,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE,CAAC,CAAD,EAAI,CAAJ;AAA1B,GADA;AAGnBC,EAAAA,cAAc,EAAE,QAHG;AAInBC,EAAAA,eAAe,EAAE,IAJE;AAKnBC,EAAAA,cAAc,EAAE;AALG,CAArB;AA8BA,eAAe,MAAMC,iBAAN,SAAgCT,cAAhC,CAA+C;AAI5DU,EAAAA,UAAU,GAAQ;AAChB,WAAO;AACLC,MAAAA,OAAO,EAAE,CAACV,YAAD;AADJ,KAAP;AAGD;;AAEDW,EAAAA,eAAe,CAAsCC,OAAtC,EAA6DC,SAA7D,EAA8E;AAC3F,UAAMC,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;;AACA,QAAID,gBAAJ,EAAsB;AACpBA,MAAAA,gBAAgB,CAACE,GAAjB,CAAqB;AACnBC,QAAAA,eAAe,EAAE;AACfC,UAAAA,IAAI,EAAE,CADS;AAEfC,UAAAA,QAAQ,EAAE,mBAFK;AAGfC,UAAAA,gBAAgB,EAAE;AAChBH,YAAAA,eAAe,EAAE;AACfI,cAAAA,OAAO,EAAE;AADM,aADD;AAIhBC,YAAAA,uBAAuB,EAAE;AACvBD,cAAAA,OAAO,EAAE;AADc;AAJT;AAHH;AADE,OAArB;AAcD;;AAGD,UAAME,WAAW,GAAG,MAAM;AAAA;;AACxB,oCAAKC,eAAL,kFAAwBC,cAAxB;AACD,KAFD;;AAIA,SAAKC,KAAL,CAAWH,WAAX,GAAyBA,WAAzB;;AACA,QAAIX,OAAO,CAACe,IAAZ,EAAkB;AAEhBf,MAAAA,OAAO,CAACe,IAAR,CAAaC,YAAb,CAA0BC,EAA1B,CAA6B;AAC3BC,QAAAA,WAAW,EAAEP,WADc;AAE3BQ,QAAAA,YAAY,EAAER;AAFa,OAA7B;AAID;AACF;;AAEDS,EAAAA,aAAa,CAAsCpB,OAAtC,EAA6DC,SAA7D,EAA8E;AAEzF,QAAID,OAAO,CAACe,IAAZ,EAAkB;AAChB,YAAMJ,WAAW,GAAG,KAAKG,KAAL,CAAWH,WAA/B;AAEAX,MAAAA,OAAO,CAACe,IAAR,CAAaC,YAAb,CAA0BK,GAA1B,CAA8B;AAC5BH,QAAAA,WAAW,EAAEP,WADe;AAE5BQ,QAAAA,YAAY,EAAER;AAFc,OAA9B;AAID;AACF;;AAtD2D;AAAzCf,iB,CACZP,Y,GAAeA,Y;AADHO,iB,CAEZ0B,a,GAAgB,mB","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 {LayerExtension} from '@deck.gl/core';\nimport shaderModule from './shader-module';\n\nimport type {Layer, LayerContext, Accessor} from '@deck.gl/core';\n\nconst defaultProps = {\n getBrushingTarget: {type: 'accessor', value: [0, 0]},\n\n brushingTarget: 'source',\n brushingEnabled: true,\n brushingRadius: 10000\n};\n\nexport type BrushingExtensionProps<DataT = any> = {\n /**\n * Called to retrieve an arbitrary position for each object that it will be filtered by.\n * Only effective if `brushingTarget` is set to `custom`.\n */\n getBrushingTarget?: Accessor<DataT, [number, number]>;\n /**\n * Enable/disable brushing. If brushing is disabled, all objects are rendered.\n * @default true\n */\n brushingEnabled?: boolean;\n /**\n * The position used to filter each object by.\n */\n brushingTarget?: 'source' | 'target' | 'source_target' | 'custom';\n /** The brushing radius centered at the pointer, in meters. If a data object is within this circle, it is rendered; otherwise it is hidden.\n * @default 10000\n */\n brushingRadius?: number;\n};\n\n/** Adds GPU-based data brushing functionalities to layers. It allows the layer to show/hide objects based on the current pointer position. */\nexport default class BrushingExtension extends LayerExtension {\n static defaultProps = defaultProps;\n static extensionName = 'BrushingExtension';\n\n getShaders(): any {\n return {\n modules: [shaderModule]\n };\n }\n\n initializeState(this: Layer<BrushingExtensionProps>, context: LayerContext, extension: this) {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.add({\n brushingTargets: {\n size: 2,\n accessor: 'getBrushingTarget',\n shaderAttributes: {\n brushingTargets: {\n divisor: 0\n },\n instanceBrushingTargets: {\n divisor: 1\n }\n }\n }\n });\n }\n\n // Trigger redraw when mouse moves\n const onMouseMove = () => {\n this.getCurrentLayer()?.setNeedsRedraw();\n };\n // TODO - expose this in a better way\n this.state.onMouseMove = onMouseMove;\n if (context.deck) {\n // @ts-expect-error (2446) accessing protected property\n context.deck.eventManager.on({\n pointermove: onMouseMove,\n pointerleave: onMouseMove\n });\n }\n }\n\n finalizeState(this: Layer<BrushingExtensionProps>, context: LayerContext, extension: this) {\n // Remove event listeners\n if (context.deck) {\n const onMouseMove = this.state.onMouseMove as () => void;\n // @ts-expect-error (2446) accessing protected property\n context.deck.eventManager.off({\n pointermove: onMouseMove,\n pointerleave: onMouseMove\n });\n }\n }\n}\n"],"file":"brushing-extension.js"}
@@ -1,103 +0,0 @@
1
- import { project } from '@deck.gl/core';
2
- const vs = `
3
- uniform bool brushing_enabled;
4
- uniform int brushing_target;
5
- uniform vec2 brushing_mousePos;
6
- uniform float brushing_radius;
7
-
8
- #ifdef NON_INSTANCED_MODEL
9
- in vec2 brushingTargets;
10
- #else
11
- in vec2 instanceBrushingTargets;
12
- #endif
13
-
14
- out float brushing_isVisible;
15
-
16
- bool brushing_isPointInRange(vec2 position) {
17
- if (!brushing_enabled) {
18
- return true;
19
- }
20
- vec2 source_commonspace = project_position(position);
21
- vec2 target_commonspace = project_position(brushing_mousePos);
22
- float distance = length((target_commonspace - source_commonspace) / project_uCommonUnitsPerMeter.xy);
23
-
24
- return distance <= brushing_radius;
25
- }
26
-
27
- bool brushing_arePointsInRange(vec2 sourcePos, vec2 targetPos) {
28
- return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);
29
- }
30
-
31
- void brushing_setVisible(bool visible) {
32
- brushing_isVisible = float(visible);
33
- }
34
- `;
35
- const fs = `
36
- uniform bool brushing_enabled;
37
- in float brushing_isVisible;
38
- `;
39
- const TARGET = {
40
- source: 0,
41
- target: 1,
42
- custom: 2,
43
- source_target: 3
44
- };
45
- const inject = {
46
- 'vs:DECKGL_FILTER_GL_POSITION': `
47
- vec2 brushingTarget;
48
- vec2 brushingSource;
49
- if (brushing_target == 3) {
50
- brushingTarget = geometry.worldPositionAlt.xy;
51
- brushingSource = geometry.worldPosition.xy;
52
- } else if (brushing_target == 0) {
53
- brushingTarget = geometry.worldPosition.xy;
54
- } else if (brushing_target == 1) {
55
- brushingTarget = geometry.worldPositionAlt.xy;
56
- } else {
57
- #ifdef NON_INSTANCED_MODEL
58
- brushingTarget = brushingTargets;
59
- #else
60
- brushingTarget = instanceBrushingTargets;
61
- #endif
62
- }
63
- bool visible;
64
- if (brushing_target == 3) {
65
- visible = brushing_arePointsInRange(brushingSource, brushingTarget);
66
- } else {
67
- visible = brushing_isPointInRange(brushingTarget);
68
- }
69
- brushing_setVisible(visible);
70
- `,
71
- 'fs:DECKGL_FILTER_COLOR': `
72
- if (brushing_enabled && brushing_isVisible < 0.5) {
73
- discard;
74
- }
75
- `
76
- };
77
- export default {
78
- name: 'brushing',
79
- dependencies: [project],
80
- vs,
81
- fs,
82
- inject,
83
- getUniforms: opts => {
84
- if (!opts || !('viewport' in opts)) {
85
- return {};
86
- }
87
-
88
- const {
89
- brushingEnabled = true,
90
- brushingRadius = 10000,
91
- brushingTarget = 'source',
92
- mousePosition,
93
- viewport
94
- } = opts;
95
- return {
96
- brushing_enabled: Boolean(brushingEnabled && mousePosition && viewport.containsPixel(mousePosition)),
97
- brushing_radius: brushingRadius,
98
- brushing_target: TARGET[brushingTarget] || 0,
99
- brushing_mousePos: mousePosition ? viewport.unproject([mousePosition.x - viewport.x, mousePosition.y - viewport.y]) : [0, 0]
100
- };
101
- }
102
- };
103
- //# sourceMappingURL=shader-module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/brushing/shader-module.ts"],"names":["project","vs","fs","TARGET","source","target","custom","source_target","inject","name","dependencies","getUniforms","opts","brushingEnabled","brushingRadius","brushingTarget","mousePosition","viewport","brushing_enabled","Boolean","containsPixel","brushing_radius","brushing_target","brushing_mousePos","unproject","x","y"],"mappings":"AAqBA,SAAQA,OAAR,QAAsB,eAAtB;AAWA,MAAMC,EAAE,GAAI;AACZ;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,CAhCA;AAkCA,MAAMC,EAAE,GAAI;AACZ;AACA;AACA,CAHA;AAKA,MAAMC,MAAM,GAAG;AACbC,EAAAA,MAAM,EAAE,CADK;AAEbC,EAAAA,MAAM,EAAE,CAFK;AAGbC,EAAAA,MAAM,EAAE,CAHK;AAIbC,EAAAA,aAAa,EAAE;AAJF,CAAf;AAOA,MAAMC,MAAM,GAAG;AACb,kCAAiC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAzBe;AA2Bb,4BAA2B;AAC7B;AACA;AACA;AACA;AA/Be,CAAf;AAkCA,eAAe;AACbC,EAAAA,IAAI,EAAE,UADO;AAEbC,EAAAA,YAAY,EAAE,CAACV,OAAD,CAFD;AAGbC,EAAAA,EAHa;AAIbC,EAAAA,EAJa;AAKbM,EAAAA,MALa;AAMbG,EAAAA,WAAW,EAAGC,IAAD,IAA6D;AACxE,QAAI,CAACA,IAAD,IAAS,EAAE,cAAcA,IAAhB,CAAb,EAAoC;AAClC,aAAO,EAAP;AACD;;AACD,UAAM;AACJC,MAAAA,eAAe,GAAG,IADd;AAEJC,MAAAA,cAAc,GAAG,KAFb;AAGJC,MAAAA,cAAc,GAAG,QAHb;AAIJC,MAAAA,aAJI;AAKJC,MAAAA;AALI,QAMFL,IANJ;AAOA,WAAO;AACLM,MAAAA,gBAAgB,EAAEC,OAAO,CACvBN,eAAe,IAAIG,aAAnB,IAAoCC,QAAQ,CAACG,aAAT,CAAuBJ,aAAvB,CADb,CADpB;AAILK,MAAAA,eAAe,EAAEP,cAJZ;AAKLQ,MAAAA,eAAe,EAAEnB,MAAM,CAACY,cAAD,CAAN,IAA0B,CALtC;AAMLQ,MAAAA,iBAAiB,EAAEP,aAAa,GAC5BC,QAAQ,CAACO,SAAT,CAAmB,CAACR,aAAa,CAACS,CAAd,GAAkBR,QAAQ,CAACQ,CAA5B,EAA+BT,aAAa,CAACU,CAAd,GAAkBT,QAAQ,CAACS,CAA1D,CAAnB,CAD4B,GAE5B,CAAC,CAAD,EAAI,CAAJ;AARC,KAAP;AAUD;AA3BY,CAAf","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/* eslint-disable camelcase */\nimport type {ShaderModule} from '@luma.gl/shadertools';\nimport {project} from '@deck.gl/core';\nimport type {Viewport} from '@deck.gl/core';\n\nimport type {BrushingExtensionProps} from './brushing-extension';\n\ntype BrushingModuleSettings = {\n // From layer context\n viewport: Viewport;\n mousePosition?: {x: number; y: number};\n} & BrushingExtensionProps;\n\nconst vs = `\n uniform bool brushing_enabled;\n uniform int brushing_target;\n uniform vec2 brushing_mousePos;\n uniform float brushing_radius;\n\n #ifdef NON_INSTANCED_MODEL\n in vec2 brushingTargets;\n #else\n in vec2 instanceBrushingTargets;\n #endif\n\n out float brushing_isVisible;\n\n bool brushing_isPointInRange(vec2 position) {\n if (!brushing_enabled) {\n return true;\n }\n vec2 source_commonspace = project_position(position);\n vec2 target_commonspace = project_position(brushing_mousePos);\n float distance = length((target_commonspace - source_commonspace) / project_uCommonUnitsPerMeter.xy);\n\n return distance <= brushing_radius;\n }\n\n bool brushing_arePointsInRange(vec2 sourcePos, vec2 targetPos) {\n return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);\n }\n\n void brushing_setVisible(bool visible) {\n brushing_isVisible = float(visible);\n }\n`;\n\nconst fs = `\n uniform bool brushing_enabled;\n in float brushing_isVisible;\n`;\n\nconst TARGET = {\n source: 0,\n target: 1,\n custom: 2,\n source_target: 3\n};\n\nconst inject = {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n vec2 brushingTarget;\n vec2 brushingSource;\n if (brushing_target == 3) {\n brushingTarget = geometry.worldPositionAlt.xy;\n brushingSource = geometry.worldPosition.xy;\n } else if (brushing_target == 0) {\n brushingTarget = geometry.worldPosition.xy;\n } else if (brushing_target == 1) {\n brushingTarget = geometry.worldPositionAlt.xy;\n } else {\n #ifdef NON_INSTANCED_MODEL\n brushingTarget = brushingTargets;\n #else\n brushingTarget = instanceBrushingTargets;\n #endif\n }\n bool visible;\n if (brushing_target == 3) {\n visible = brushing_arePointsInRange(brushingSource, brushingTarget);\n } else {\n visible = brushing_isPointInRange(brushingTarget);\n }\n brushing_setVisible(visible);\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (brushing_enabled && brushing_isVisible < 0.5) {\n discard;\n }\n `\n};\n\nexport default {\n name: 'brushing',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: (opts?: BrushingModuleSettings | {}): Record<string, any> => {\n if (!opts || !('viewport' in opts)) {\n return {};\n }\n const {\n brushingEnabled = true,\n brushingRadius = 10000,\n brushingTarget = 'source',\n mousePosition,\n viewport\n } = opts;\n return {\n brushing_enabled: Boolean(\n brushingEnabled && mousePosition && viewport.containsPixel(mousePosition)\n ),\n brushing_radius: brushingRadius,\n brushing_target: TARGET[brushingTarget] || 0,\n brushing_mousePos: mousePosition\n ? viewport.unproject([mousePosition.x - viewport.x, mousePosition.y - viewport.y])\n : [0, 0]\n };\n }\n} as ShaderModule<BrushingModuleSettings>;\n"],"file":"shader-module.js"}
@@ -1,86 +0,0 @@
1
- import { LayerExtension } from '@deck.gl/core';
2
- const defaultProps = {
3
- clipBounds: [0, 0, 1, 1],
4
- clipByInstance: undefined
5
- };
6
- const shaderFunction = `
7
- uniform vec4 clip_bounds;
8
-
9
- bool clip_isInBounds(vec2 position) {
10
- return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];
11
- }
12
- `;
13
- const shaderModuleVs = {
14
- name: 'clip-vs',
15
- vs: shaderFunction
16
- };
17
- const injectionVs = {
18
- 'vs:#decl': `
19
- out float clip_isVisible;
20
- `,
21
- 'vs:DECKGL_FILTER_GL_POSITION': `
22
- clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
23
- `,
24
- 'fs:#decl': `
25
- in float clip_isVisible;
26
- `,
27
- 'fs:DECKGL_FILTER_COLOR': `
28
- if (clip_isVisible < 0.5) discard;
29
- `
30
- };
31
- const shaderModuleFs = {
32
- name: 'clip-fs',
33
- fs: shaderFunction
34
- };
35
- const injectionFs = {
36
- 'vs:#decl': `
37
- out vec2 clip_commonPosition;
38
- `,
39
- 'vs:DECKGL_FILTER_GL_POSITION': `
40
- clip_commonPosition = geometry.position.xy;
41
- `,
42
- 'fs:#decl': `
43
- in vec2 clip_commonPosition;
44
- `,
45
- 'fs:DECKGL_FILTER_COLOR': `
46
- if (!clip_isInBounds(clip_commonPosition)) discard;
47
- `
48
- };
49
- export default class ClipExtension extends LayerExtension {
50
- getShaders() {
51
- let clipByInstance = ('instancePositions' in this.getAttributeManager().attributes);
52
-
53
- if (this.props.clipByInstance !== undefined) {
54
- clipByInstance = Boolean(this.props.clipByInstance);
55
- }
56
-
57
- this.state.clipByInstance = clipByInstance;
58
- return clipByInstance ? {
59
- modules: [shaderModuleVs],
60
- inject: injectionVs
61
- } : {
62
- modules: [shaderModuleFs],
63
- inject: injectionFs
64
- };
65
- }
66
-
67
- draw({
68
- uniforms
69
- }) {
70
- const {
71
- clipBounds
72
- } = this.props;
73
-
74
- if (this.state.clipByInstance) {
75
- uniforms.clip_bounds = clipBounds;
76
- } else {
77
- const corner0 = this.projectPosition([clipBounds[0], clipBounds[1], 0]);
78
- const corner1 = this.projectPosition([clipBounds[2], clipBounds[3], 0]);
79
- uniforms.clip_bounds = [Math.min(corner0[0], corner1[0]), Math.min(corner0[1], corner1[1]), Math.max(corner0[0], corner1[0]), Math.max(corner0[1], corner1[1])];
80
- }
81
- }
82
-
83
- }
84
- ClipExtension.defaultProps = defaultProps;
85
- ClipExtension.extensionName = 'ClipExtension';
86
- //# sourceMappingURL=clip-extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/clip/clip-extension.ts"],"names":["LayerExtension","defaultProps","clipBounds","clipByInstance","undefined","shaderFunction","shaderModuleVs","name","vs","injectionVs","shaderModuleFs","fs","injectionFs","ClipExtension","getShaders","getAttributeManager","attributes","props","Boolean","state","modules","inject","draw","uniforms","clip_bounds","corner0","projectPosition","corner1","Math","min","max","extensionName"],"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 type {ShaderModule} from '@luma.gl/shadertools';\nimport {LayerExtension} from '@deck.gl/core';\n\nimport type {Layer} from '@deck.gl/core';\n\nconst defaultProps = {\n clipBounds: [0, 0, 1, 1],\n clipByInstance: undefined\n};\n\nexport type ClipExtensionProps = {\n /** Rectangular bounds to be used for clipping the rendered region, in `[left, bottom, right, top]`.\n * @default [0, 0, 1, 1]\n */\n clipBounds?: [number, number, number, number];\n /**\n * Controls whether an object is clipped by its anchor (e.g. icon, point) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n clipByInstance?: boolean;\n};\n\nconst shaderFunction = `\nuniform vec4 clip_bounds;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n`;\n\n/*\n * The vertex-shader version clips geometries by their anchor position\n * e.g. ScatterplotLayer - show if the center of a circle is within bounds\n */\nconst shaderModuleVs: ShaderModule = {\n name: 'clip-vs',\n vs: shaderFunction\n};\n\nconst injectionVs = {\n 'vs:#decl': `\nout float clip_isVisible;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n`,\n 'fs:#decl': `\nin float clip_isVisible;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (clip_isVisible < 0.5) discard;\n`\n};\n\n/*\n * The fragment-shader version clips pixels at the bounds\n * e.g. PolygonLayer - show the part of the polygon that intersect with the bounds\n */\nconst shaderModuleFs: ShaderModule = {\n name: 'clip-fs',\n fs: shaderFunction\n};\n\nconst injectionFs = {\n 'vs:#decl': `\nout vec2 clip_commonPosition;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_commonPosition = geometry.position.xy;\n`,\n 'fs:#decl': `\nin vec2 clip_commonPosition;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (!clip_isInBounds(clip_commonPosition)) discard;\n`\n};\n\n/** Adds support for clipping rendered layers by rectangular bounds. */\nexport default class ClipExtension extends LayerExtension {\n static defaultProps = defaultProps;\n static extensionName = 'ClipExtension';\n\n getShaders(this: Layer<ClipExtensionProps>) {\n // If `clipByInstance: true`, the entire object is shown/hidden based on its anchor position (done by vertex shader)\n // Otherwise, the object is trimmed by the clip bounds (done by fragment shader)\n\n // Default behavior: consider a layer instanced if it has attribute `instancePositions`\n let clipByInstance = 'instancePositions' in this.getAttributeManager()!.attributes;\n // Users can override by setting the `clipByInstance` prop\n if (this.props.clipByInstance !== undefined) {\n clipByInstance = Boolean(this.props.clipByInstance);\n }\n this.state.clipByInstance = clipByInstance;\n\n return clipByInstance\n ? {\n modules: [shaderModuleVs],\n inject: injectionVs\n }\n : {\n modules: [shaderModuleFs],\n inject: injectionFs\n };\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer<Required<ClipExtensionProps>>, {uniforms}: any): void {\n const {clipBounds} = this.props;\n if (this.state.clipByInstance) {\n uniforms.clip_bounds = clipBounds;\n } else {\n const corner0 = this.projectPosition([clipBounds[0], clipBounds[1], 0]);\n const corner1 = this.projectPosition([clipBounds[2], clipBounds[3], 0]);\n\n uniforms.clip_bounds = [\n Math.min(corner0[0], corner1[0]),\n Math.min(corner0[1], corner1[1]),\n Math.max(corner0[0], corner1[0]),\n Math.max(corner0[1], corner1[1])\n ];\n }\n }\n}\n"],"file":"clip-extension.js"}