@deck.gl/extensions 9.0.0-alpha.7 → 9.0.0-beta.10

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 (265) 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.map +1 -1
  8. package/dist/collision-filter/collision-filter-effect.js +193 -0
  9. package/dist/collision-filter/collision-filter-extension.js +49 -0
  10. package/{typed → dist}/collision-filter/collision-filter-pass.d.ts +4 -2
  11. package/{typed → dist}/collision-filter/collision-filter-pass.d.ts.map +1 -1
  12. package/dist/collision-filter/collision-filter-pass.js +25 -0
  13. package/{typed → dist}/collision-filter/shader-module.d.ts.map +1 -1
  14. package/dist/collision-filter/shader-module.js +87 -0
  15. package/dist/data-filter/aggregator.d.ts.map +1 -0
  16. package/dist/{esm/data-filter → data-filter}/aggregator.js +40 -41
  17. package/{typed → dist}/data-filter/data-filter-extension.d.ts +38 -6
  18. package/dist/data-filter/data-filter-extension.d.ts.map +1 -0
  19. package/dist/data-filter/data-filter-extension.js +249 -0
  20. package/{typed → dist}/data-filter/shader-module.d.ts +1 -1
  21. package/dist/data-filter/shader-module.d.ts.map +1 -0
  22. package/dist/data-filter/shader-module.js +179 -0
  23. package/dist/dist.dev.js +2079 -10477
  24. package/{typed → dist}/fill-style/fill-style-extension.d.ts +2 -30
  25. package/dist/fill-style/fill-style-extension.d.ts.map +1 -0
  26. package/dist/fill-style/fill-style-extension.js +116 -0
  27. package/{typed/fill-style/shaders.glsl.d.ts → dist/fill-style/shader-module.d.ts} +1 -1
  28. package/dist/fill-style/shader-module.d.ts.map +1 -0
  29. package/dist/fill-style/shader-module.js +96 -0
  30. package/dist/fp64/fp64-extension.js +35 -0
  31. package/dist/fp64/project64.glsl.js +81 -0
  32. package/dist/fp64/project64.js +50 -0
  33. package/dist/index.cjs +2756 -0
  34. package/dist/index.cjs.map +7 -0
  35. package/dist/index.d.ts +19 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +11 -0
  38. package/{typed → dist}/mask/mask-effect.d.ts +1 -1
  39. package/dist/mask/mask-effect.d.ts.map +1 -0
  40. package/dist/mask/mask-effect.js +194 -0
  41. package/dist/mask/mask-extension.js +57 -0
  42. package/{typed → dist}/mask/mask-pass.d.ts.map +1 -1
  43. package/dist/mask/mask-pass.js +44 -0
  44. package/{typed → dist}/mask/shader-module.d.ts.map +1 -1
  45. package/dist/mask/shader-module.js +77 -0
  46. package/dist/path-style/path-style-extension.js +111 -0
  47. package/dist/path-style/shaders.glsl.js +86 -0
  48. package/{typed → dist}/terrain/height-map-builder.d.ts +1 -1
  49. package/dist/terrain/height-map-builder.d.ts.map +1 -0
  50. package/dist/terrain/height-map-builder.js +104 -0
  51. package/{typed → dist}/terrain/shader-module.d.ts +5 -3
  52. package/dist/terrain/shader-module.d.ts.map +1 -0
  53. package/dist/terrain/shader-module.js +137 -0
  54. package/{typed → dist}/terrain/terrain-cover.d.ts +1 -1
  55. package/dist/terrain/terrain-cover.d.ts.map +1 -0
  56. package/dist/terrain/terrain-cover.js +187 -0
  57. package/{typed → dist}/terrain/terrain-effect.d.ts +2 -2
  58. package/dist/terrain/terrain-effect.d.ts.map +1 -0
  59. package/dist/terrain/terrain-effect.js +184 -0
  60. package/dist/terrain/terrain-extension.js +44 -0
  61. package/{typed → dist}/terrain/terrain-pass.d.ts +2 -2
  62. package/dist/terrain/terrain-pass.d.ts.map +1 -0
  63. package/dist/terrain/terrain-pass.js +61 -0
  64. package/{typed → dist}/terrain/terrain-picking-pass.d.ts +1 -1
  65. package/dist/terrain/terrain-picking-pass.d.ts.map +1 -0
  66. package/dist/terrain/terrain-picking-pass.js +66 -0
  67. package/dist/terrain/utils.js +21 -0
  68. package/{typed → dist}/utils/debug.d.ts.map +1 -1
  69. package/dist/utils/debug.js +50 -0
  70. package/dist/utils/projection-utils.js +153 -0
  71. package/dist/utils/syntax-tags.d.ts +6 -0
  72. package/dist/utils/syntax-tags.d.ts.map +1 -0
  73. package/dist/utils/syntax-tags.js +5 -0
  74. package/dist.min.js +898 -1257
  75. package/package.json +19 -16
  76. package/src/brushing/shader-module.ts +4 -3
  77. package/src/clip/clip-extension.ts +10 -9
  78. package/src/collision-filter/collision-filter-effect.ts +12 -8
  79. package/src/collision-filter/collision-filter-pass.ts +5 -5
  80. package/src/collision-filter/shader-module.ts +6 -4
  81. package/src/data-filter/aggregator.ts +8 -13
  82. package/src/data-filter/data-filter-extension.ts +147 -30
  83. package/src/data-filter/shader-module.ts +38 -9
  84. package/src/fill-style/fill-style-extension.ts +4 -5
  85. package/src/fill-style/{shaders.glsl.ts → shader-module.ts} +6 -5
  86. package/src/mask/mask-effect.ts +0 -1
  87. package/src/mask/mask-pass.ts +1 -3
  88. package/src/mask/shader-module.ts +7 -6
  89. package/src/terrain/shader-module.ts +16 -15
  90. package/src/terrain/terrain-effect.ts +12 -5
  91. package/src/terrain/terrain-pass.ts +2 -5
  92. package/src/terrain/terrain-picking-pass.ts +1 -3
  93. package/src/terrain/utils.ts +1 -1
  94. package/src/utils/debug.ts +1 -2
  95. package/src/utils/syntax-tags.ts +5 -0
  96. package/dist/es5/brushing/brushing-extension.js +0 -108
  97. package/dist/es5/brushing/brushing-extension.js.map +0 -1
  98. package/dist/es5/brushing/shader-module.js +0 -50
  99. package/dist/es5/brushing/shader-module.js.map +0 -1
  100. package/dist/es5/clip/clip-extension.js +0 -98
  101. package/dist/es5/clip/clip-extension.js.map +0 -1
  102. package/dist/es5/collision-filter/collision-filter-effect.js +0 -294
  103. package/dist/es5/collision-filter/collision-filter-effect.js.map +0 -1
  104. package/dist/es5/collision-filter/collision-filter-extension.js +0 -109
  105. package/dist/es5/collision-filter/collision-filter-extension.js.map +0 -1
  106. package/dist/es5/collision-filter/collision-filter-pass.js +0 -77
  107. package/dist/es5/collision-filter/collision-filter-pass.js.map +0 -1
  108. package/dist/es5/collision-filter/shader-module.js +0 -39
  109. package/dist/es5/collision-filter/shader-module.js.map +0 -1
  110. package/dist/es5/data-filter/aggregator.js +0 -79
  111. package/dist/es5/data-filter/aggregator.js.map +0 -1
  112. package/dist/es5/data-filter/data-filter-extension.js +0 -236
  113. package/dist/es5/data-filter/data-filter-extension.js.map +0 -1
  114. package/dist/es5/data-filter/shader-module.js +0 -122
  115. package/dist/es5/data-filter/shader-module.js.map +0 -1
  116. package/dist/es5/fill-style/fill-style-extension.js +0 -190
  117. package/dist/es5/fill-style/fill-style-extension.js.map +0 -1
  118. package/dist/es5/fill-style/shaders.glsl.js +0 -59
  119. package/dist/es5/fill-style/shaders.glsl.js.map +0 -1
  120. package/dist/es5/fp64/fp64-extension.js +0 -55
  121. package/dist/es5/fp64/fp64-extension.js.map +0 -1
  122. package/dist/es5/fp64/project64.glsl.js +0 -9
  123. package/dist/es5/fp64/project64.glsl.js.map +0 -1
  124. package/dist/es5/fp64/project64.js +0 -52
  125. package/dist/es5/fp64/project64.js.map +0 -1
  126. package/dist/es5/index.js +0 -88
  127. package/dist/es5/index.js.map +0 -1
  128. package/dist/es5/mask/mask-effect.js +0 -279
  129. package/dist/es5/mask/mask-effect.js.map +0 -1
  130. package/dist/es5/mask/mask-extension.js +0 -113
  131. package/dist/es5/mask/mask-extension.js.map +0 -1
  132. package/dist/es5/mask/mask-pass.js +0 -106
  133. package/dist/es5/mask/mask-pass.js.map +0 -1
  134. package/dist/es5/mask/shader-module.js +0 -38
  135. package/dist/es5/mask/shader-module.js.map +0 -1
  136. package/dist/es5/path-style/path-style-extension.js +0 -169
  137. package/dist/es5/path-style/path-style-extension.js.map +0 -1
  138. package/dist/es5/path-style/shaders.glsl.js +0 -25
  139. package/dist/es5/path-style/shaders.glsl.js.map +0 -1
  140. package/dist/es5/terrain/height-map-builder.js +0 -111
  141. package/dist/es5/terrain/height-map-builder.js.map +0 -1
  142. package/dist/es5/terrain/shader-module.js +0 -84
  143. package/dist/es5/terrain/shader-module.js.map +0 -1
  144. package/dist/es5/terrain/terrain-cover.js +0 -256
  145. package/dist/es5/terrain/terrain-cover.js.map +0 -1
  146. package/dist/es5/terrain/terrain-effect.js +0 -326
  147. package/dist/es5/terrain/terrain-effect.js.map +0 -1
  148. package/dist/es5/terrain/terrain-extension.js +0 -94
  149. package/dist/es5/terrain/terrain-extension.js.map +0 -1
  150. package/dist/es5/terrain/terrain-pass.js +0 -121
  151. package/dist/es5/terrain/terrain-pass.js.map +0 -1
  152. package/dist/es5/terrain/terrain-picking-pass.js +0 -124
  153. package/dist/es5/terrain/terrain-picking-pass.js.map +0 -1
  154. package/dist/es5/terrain/utils.js +0 -35
  155. package/dist/es5/terrain/utils.js.map +0 -1
  156. package/dist/es5/utils/debug.js +0 -71
  157. package/dist/es5/utils/debug.js.map +0 -1
  158. package/dist/es5/utils/projection-utils.js +0 -168
  159. package/dist/es5/utils/projection-utils.js.map +0 -1
  160. package/dist/esm/brushing/brushing-extension.js +0 -68
  161. package/dist/esm/brushing/brushing-extension.js.map +0 -1
  162. package/dist/esm/brushing/shader-module.js +0 -103
  163. package/dist/esm/brushing/shader-module.js.map +0 -1
  164. package/dist/esm/clip/clip-extension.js +0 -86
  165. package/dist/esm/clip/clip-extension.js.map +0 -1
  166. package/dist/esm/collision-filter/collision-filter-effect.js +0 -246
  167. package/dist/esm/collision-filter/collision-filter-effect.js.map +0 -1
  168. package/dist/esm/collision-filter/collision-filter-extension.js +0 -75
  169. package/dist/esm/collision-filter/collision-filter-extension.js.map +0 -1
  170. package/dist/esm/collision-filter/collision-filter-pass.js +0 -30
  171. package/dist/esm/collision-filter/collision-filter-pass.js.map +0 -1
  172. package/dist/esm/collision-filter/shader-module.js +0 -104
  173. package/dist/esm/collision-filter/shader-module.js.map +0 -1
  174. package/dist/esm/data-filter/aggregator.js.map +0 -1
  175. package/dist/esm/data-filter/data-filter-extension.js +0 -189
  176. package/dist/esm/data-filter/data-filter-extension.js.map +0 -1
  177. package/dist/esm/data-filter/shader-module.js +0 -164
  178. package/dist/esm/data-filter/shader-module.js.map +0 -1
  179. package/dist/esm/fill-style/fill-style-extension.js +0 -156
  180. package/dist/esm/fill-style/fill-style-extension.js.map +0 -1
  181. package/dist/esm/fill-style/shaders.glsl.js +0 -108
  182. package/dist/esm/fill-style/shaders.glsl.js.map +0 -1
  183. package/dist/esm/fp64/fp64-extension.js +0 -20
  184. package/dist/esm/fp64/fp64-extension.js.map +0 -1
  185. package/dist/esm/fp64/project64.glsl.js +0 -82
  186. package/dist/esm/fp64/project64.glsl.js.map +0 -1
  187. package/dist/esm/fp64/project64.js +0 -43
  188. package/dist/esm/fp64/project64.js.map +0 -1
  189. package/dist/esm/index.js +0 -11
  190. package/dist/esm/index.js.map +0 -1
  191. package/dist/esm/mask/mask-effect.js +0 -228
  192. package/dist/esm/mask/mask-effect.js.map +0 -1
  193. package/dist/esm/mask/mask-extension.js +0 -83
  194. package/dist/esm/mask/mask-extension.js.map +0 -1
  195. package/dist/esm/mask/mask-pass.js +0 -58
  196. package/dist/esm/mask/mask-pass.js.map +0 -1
  197. package/dist/esm/mask/shader-module.js +0 -84
  198. package/dist/esm/mask/shader-module.js.map +0 -1
  199. package/dist/esm/path-style/path-style-extension.js +0 -130
  200. package/dist/esm/path-style/path-style-extension.js.map +0 -1
  201. package/dist/esm/path-style/shaders.glsl.js +0 -84
  202. package/dist/esm/path-style/shaders.glsl.js.map +0 -1
  203. package/dist/esm/terrain/height-map-builder.js +0 -86
  204. package/dist/esm/terrain/height-map-builder.js.map +0 -1
  205. package/dist/esm/terrain/shader-module.js +0 -125
  206. package/dist/esm/terrain/shader-module.js.map +0 -1
  207. package/dist/esm/terrain/terrain-cover.js +0 -212
  208. package/dist/esm/terrain/terrain-cover.js.map +0 -1
  209. package/dist/esm/terrain/terrain-effect.js +0 -219
  210. package/dist/esm/terrain/terrain-effect.js.map +0 -1
  211. package/dist/esm/terrain/terrain-extension.js +0 -59
  212. package/dist/esm/terrain/terrain-extension.js.map +0 -1
  213. package/dist/esm/terrain/terrain-pass.js +0 -71
  214. package/dist/esm/terrain/terrain-pass.js.map +0 -1
  215. package/dist/esm/terrain/terrain-picking-pass.js +0 -73
  216. package/dist/esm/terrain/terrain-picking-pass.js.map +0 -1
  217. package/dist/esm/terrain/utils.js +0 -19
  218. package/dist/esm/terrain/utils.js.map +0 -1
  219. package/dist/esm/utils/debug.js +0 -61
  220. package/dist/esm/utils/debug.js.map +0 -1
  221. package/dist/esm/utils/projection-utils.js +0 -134
  222. package/dist/esm/utils/projection-utils.js.map +0 -1
  223. package/typed/data-filter/aggregator.d.ts.map +0 -1
  224. package/typed/data-filter/data-filter-extension.d.ts.map +0 -1
  225. package/typed/data-filter/shader-module.d.ts.map +0 -1
  226. package/typed/fill-style/fill-style-extension.d.ts.map +0 -1
  227. package/typed/fill-style/shaders.glsl.d.ts.map +0 -1
  228. package/typed/index.d.ts +0 -19
  229. package/typed/index.d.ts.map +0 -1
  230. package/typed/mask/mask-effect.d.ts.map +0 -1
  231. package/typed/terrain/height-map-builder.d.ts.map +0 -1
  232. package/typed/terrain/shader-module.d.ts.map +0 -1
  233. package/typed/terrain/terrain-cover.d.ts.map +0 -1
  234. package/typed/terrain/terrain-effect.d.ts.map +0 -1
  235. package/typed/terrain/terrain-pass.d.ts.map +0 -1
  236. package/typed/terrain/terrain-picking-pass.d.ts.map +0 -1
  237. /package/{typed → dist}/brushing/brushing-extension.d.ts +0 -0
  238. /package/{typed → dist}/brushing/brushing-extension.d.ts.map +0 -0
  239. /package/{typed → dist}/clip/clip-extension.d.ts +0 -0
  240. /package/{typed → dist}/collision-filter/collision-filter-effect.d.ts +0 -0
  241. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts +0 -0
  242. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts.map +0 -0
  243. /package/{typed → dist}/collision-filter/shader-module.d.ts +0 -0
  244. /package/{typed → dist}/data-filter/aggregator.d.ts +0 -0
  245. /package/{typed → dist}/fp64/fp64-extension.d.ts +0 -0
  246. /package/{typed → dist}/fp64/fp64-extension.d.ts.map +0 -0
  247. /package/{typed → dist}/fp64/project64.d.ts +0 -0
  248. /package/{typed → dist}/fp64/project64.d.ts.map +0 -0
  249. /package/{typed → dist}/fp64/project64.glsl.d.ts +0 -0
  250. /package/{typed → dist}/fp64/project64.glsl.d.ts.map +0 -0
  251. /package/{typed → dist}/mask/mask-extension.d.ts +0 -0
  252. /package/{typed → dist}/mask/mask-extension.d.ts.map +0 -0
  253. /package/{typed → dist}/mask/mask-pass.d.ts +0 -0
  254. /package/{typed → dist}/mask/shader-module.d.ts +0 -0
  255. /package/{typed → dist}/path-style/path-style-extension.d.ts +0 -0
  256. /package/{typed → dist}/path-style/path-style-extension.d.ts.map +0 -0
  257. /package/{typed → dist}/path-style/shaders.glsl.d.ts +0 -0
  258. /package/{typed → dist}/path-style/shaders.glsl.d.ts.map +0 -0
  259. /package/{typed → dist}/terrain/terrain-extension.d.ts +0 -0
  260. /package/{typed → dist}/terrain/terrain-extension.d.ts.map +0 -0
  261. /package/{typed → dist}/terrain/utils.d.ts +0 -0
  262. /package/{typed → dist}/terrain/utils.d.ts.map +0 -0
  263. /package/{typed → dist}/utils/debug.d.ts +0 -0
  264. /package/{typed → dist}/utils/projection-utils.d.ts +0 -0
  265. /package/{typed → dist}/utils/projection-utils.d.ts.map +0 -0
@@ -1,279 +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.default = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _core = require("@deck.gl/core");
13
-
14
- var _core2 = require("@math.gl/core");
15
-
16
- var _maskPass = _interopRequireDefault(require("./mask-pass"));
17
-
18
- var _projectionUtils = require("../utils/projection-utils");
19
-
20
- 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; } } }; }
21
-
22
- 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); }
23
-
24
- 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; }
25
-
26
- var MaskEffect = function () {
27
- function MaskEffect() {
28
- (0, _classCallCheck2.default)(this, MaskEffect);
29
- this.id = 'mask-effect';
30
- this.props = null;
31
- this.useInPicking = true;
32
- this.order = 0;
33
- this.dummyMaskMap = void 0;
34
- this.channels = [];
35
- this.masks = null;
36
- this.maskPass = void 0;
37
- this.maskMap = void 0;
38
- this.lastViewport = void 0;
39
- }
40
-
41
- var _proto = MaskEffect.prototype;
42
-
43
- _proto.preRender = function preRender(device, _ref) {
44
- var layers = _ref.layers,
45
- layerFilter = _ref.layerFilter,
46
- viewports = _ref.viewports,
47
- onViewportActive = _ref.onViewportActive,
48
- views = _ref.views,
49
- isPicking = _ref.isPicking;
50
- var didRender = false;
51
-
52
- if (!this.dummyMaskMap) {
53
- this.dummyMaskMap = device.createTexture({
54
- width: 1,
55
- height: 1
56
- });
57
- }
58
-
59
- if (isPicking) {
60
- return {
61
- didRender: didRender
62
- };
63
- }
64
-
65
- var maskLayers = layers.filter(function (l) {
66
- return l.props.visible && l.props.operation.includes('mask');
67
- });
68
-
69
- if (maskLayers.length === 0) {
70
- this.masks = null;
71
- this.channels.length = 0;
72
- return {
73
- didRender: didRender
74
- };
75
- }
76
-
77
- this.masks = {};
78
-
79
- if (!this.maskPass) {
80
- this.maskPass = new _maskPass.default(device, {
81
- id: 'default-mask'
82
- });
83
- this.maskMap = this.maskPass.maskMap;
84
- }
85
-
86
- var channelMap = this._sortMaskChannels(maskLayers);
87
-
88
- var viewport = viewports[0];
89
- var viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);
90
-
91
- if (viewport.resolution !== undefined) {
92
- _core.log.warn('MaskExtension is not supported in GlobeView')();
93
-
94
- return {
95
- didRender: didRender
96
- };
97
- }
98
-
99
- for (var maskId in channelMap) {
100
- var result = this._renderChannel(channelMap[maskId], {
101
- layerFilter: layerFilter,
102
- onViewportActive: onViewportActive,
103
- views: views,
104
- viewport: viewport,
105
- viewportChanged: viewportChanged
106
- });
107
-
108
- didRender || (didRender = result);
109
- }
110
-
111
- return {
112
- didRender: didRender
113
- };
114
- };
115
-
116
- _proto._renderChannel = function _renderChannel(channelInfo, _ref2) {
117
- var layerFilter = _ref2.layerFilter,
118
- onViewportActive = _ref2.onViewportActive,
119
- views = _ref2.views,
120
- viewport = _ref2.viewport,
121
- viewportChanged = _ref2.viewportChanged;
122
- var didRender = false;
123
- var oldChannelInfo = this.channels[channelInfo.index];
124
-
125
- if (!oldChannelInfo) {
126
- return didRender;
127
- }
128
-
129
- var maskChanged = channelInfo === oldChannelInfo || channelInfo.layers.length !== oldChannelInfo.layers.length || channelInfo.layers.some(function (layer, i) {
130
- return layer !== oldChannelInfo.layers[i] || layer.props.transitions;
131
- }) || channelInfo.layerBounds.some(function (b, i) {
132
- return b !== oldChannelInfo.layerBounds[i];
133
- });
134
- channelInfo.bounds = oldChannelInfo.bounds;
135
- channelInfo.maskBounds = oldChannelInfo.maskBounds;
136
- this.channels[channelInfo.index] = channelInfo;
137
-
138
- if (maskChanged || viewportChanged) {
139
- this.lastViewport = viewport;
140
- var layerBounds = (0, _projectionUtils.joinLayerBounds)(channelInfo.layers, viewport);
141
- channelInfo.bounds = layerBounds && (0, _projectionUtils.getRenderBounds)(layerBounds, viewport);
142
-
143
- if (maskChanged || !(0, _core2.equals)(channelInfo.bounds, oldChannelInfo.bounds)) {
144
- var maskPass = this.maskPass,
145
- maskMap = this.maskMap;
146
- var maskViewport = layerBounds && (0, _projectionUtils.makeViewport)({
147
- bounds: channelInfo.bounds,
148
- viewport: viewport,
149
- width: maskMap.width,
150
- height: maskMap.height,
151
- border: 1
152
- });
153
- channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];
154
- maskPass.render({
155
- pass: 'mask',
156
- channel: channelInfo.index,
157
- layers: channelInfo.layers,
158
- layerFilter: layerFilter,
159
- viewports: maskViewport ? [maskViewport] : [],
160
- onViewportActive: onViewportActive,
161
- views: views,
162
- moduleParameters: {
163
- devicePixelRatio: 1
164
- }
165
- });
166
- didRender = true;
167
- }
168
- }
169
-
170
- this.masks[channelInfo.id] = {
171
- index: channelInfo.index,
172
- bounds: channelInfo.maskBounds,
173
- coordinateOrigin: channelInfo.coordinateOrigin,
174
- coordinateSystem: channelInfo.coordinateSystem
175
- };
176
- return didRender;
177
- };
178
-
179
- _proto._sortMaskChannels = function _sortMaskChannels(maskLayers) {
180
- var _this = this;
181
-
182
- var channelMap = {};
183
- var channelCount = 0;
184
-
185
- var _iterator = _createForOfIteratorHelper(maskLayers),
186
- _step;
187
-
188
- try {
189
- var _loop = function _loop() {
190
- var layer = _step.value;
191
- var id = layer.root.id;
192
- var channelInfo = channelMap[id];
193
-
194
- if (!channelInfo) {
195
- if (++channelCount > 4) {
196
- _core.log.warn('Too many mask layers. The max supported is 4')();
197
-
198
- return "continue";
199
- }
200
-
201
- channelInfo = {
202
- id: id,
203
- index: _this.channels.findIndex(function (c) {
204
- return (c === null || c === void 0 ? void 0 : c.id) === id;
205
- }),
206
- layers: [],
207
- layerBounds: [],
208
- coordinateOrigin: layer.root.props.coordinateOrigin,
209
- coordinateSystem: layer.root.props.coordinateSystem
210
- };
211
- channelMap[id] = channelInfo;
212
- }
213
-
214
- channelInfo.layers.push(layer);
215
- channelInfo.layerBounds.push(layer.getBounds());
216
- };
217
-
218
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
219
- var _ret = _loop();
220
-
221
- if (_ret === "continue") continue;
222
- }
223
- } catch (err) {
224
- _iterator.e(err);
225
- } finally {
226
- _iterator.f();
227
- }
228
-
229
- for (var i = 0; i < 4; i++) {
230
- var channelInfo = this.channels[i];
231
-
232
- if (!channelInfo || !(channelInfo.id in channelMap)) {
233
- this.channels[i] = null;
234
- }
235
- }
236
-
237
- for (var maskId in channelMap) {
238
- var _channelInfo = channelMap[maskId];
239
-
240
- if (_channelInfo.index < 0) {
241
- _channelInfo.index = this.channels.findIndex(function (c) {
242
- return !c;
243
- });
244
- this.channels[_channelInfo.index] = _channelInfo;
245
- }
246
- }
247
-
248
- return channelMap;
249
- };
250
-
251
- _proto.getModuleParameters = function getModuleParameters() {
252
- return {
253
- maskMap: this.masks ? this.maskMap : this.dummyMaskMap,
254
- maskChannels: this.masks
255
- };
256
- };
257
-
258
- _proto.cleanup = function cleanup() {
259
- if (this.dummyMaskMap) {
260
- this.dummyMaskMap.delete();
261
- this.dummyMaskMap = undefined;
262
- }
263
-
264
- if (this.maskPass) {
265
- this.maskPass.delete();
266
- this.maskPass = undefined;
267
- this.maskMap = undefined;
268
- }
269
-
270
- this.lastViewport = undefined;
271
- this.masks = null;
272
- this.channels.length = 0;
273
- };
274
-
275
- return MaskEffect;
276
- }();
277
-
278
- exports.default = MaskEffect;
279
- //# sourceMappingURL=mask-effect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mask/mask-effect.ts"],"names":["MaskEffect","id","props","useInPicking","order","dummyMaskMap","channels","masks","maskPass","maskMap","lastViewport","preRender","device","layers","layerFilter","viewports","onViewportActive","views","isPicking","didRender","createTexture","width","height","maskLayers","filter","l","visible","operation","includes","length","MaskPass","channelMap","_sortMaskChannels","viewport","viewportChanged","equals","resolution","undefined","log","warn","maskId","result","_renderChannel","channelInfo","oldChannelInfo","index","maskChanged","some","layer","i","transitions","layerBounds","b","bounds","maskBounds","maskViewport","border","getBounds","render","pass","channel","moduleParameters","devicePixelRatio","coordinateOrigin","coordinateSystem","channelCount","root","findIndex","c","push","getModuleParameters","maskChannels","cleanup","delete"],"mappings":"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","sourcesContent":["import {Layer, Viewport, Effect, PreRenderOptions, CoordinateSystem, log} from '@deck.gl/core';\nimport type {Device, Texture} from '@luma.gl/core';\n// import {readPixelsToArray} from '@luma.gl/webgl-legacy';\nimport {equals} from '@math.gl/core';\nimport MaskPass from './mask-pass';\nimport {joinLayerBounds, getRenderBounds, makeViewport, Bounds} from '../utils/projection-utils';\n// import {debugFBO} from '../utils/debug';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: Bounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: Bounds | null;\n maskBounds: Bounds;\n layerBounds: Bounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\nexport type MaskPreRenderStats = {\n didRender: boolean;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n order = 0;\n\n private dummyMaskMap?: Texture;\n private channels: (Channel | null)[] = [];\n private masks: Record<string, Mask> | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture;\n private lastViewport?: Viewport;\n\n preRender(\n device: Device,\n {layers, layerFilter, viewports, onViewportActive, views, isPicking}: PreRenderOptions\n ): MaskPreRenderStats {\n let didRender = false;\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = device.createTexture({\n width: 1,\n height: 1\n });\n }\n\n if (isPicking) {\n // Do not update on picking pass\n return {didRender};\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation.includes('mask'));\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return {didRender};\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(device, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n if (viewport.resolution !== undefined) {\n log.warn('MaskExtension is not supported in GlobeView')();\n return {didRender};\n }\n\n for (const maskId in channelMap) {\n const result = this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n didRender ||= result;\n }\n\n // debugFBO(this.maskMap, {opaque: true});\n return {didRender};\n }\n\n /* eslint-disable-next-line complexity */\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ): boolean {\n let didRender = false;\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return didRender;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n channelInfo.layers.length !== oldChannelInfo.layers.length ||\n channelInfo.layers.some(\n (layer, i) =>\n // Layer instance is updated\n // Layer props might have changed\n // Undetermined props could have an effect on the output geometry of a mask layer,\n // for example getRadius+updateTriggers, radiusScale, modelMatrix\n layer !== oldChannelInfo.layers[i] ||\n // Some prop is in transition\n layer.props.transitions\n ) ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n const layerBounds = joinLayerBounds(channelInfo.layers, viewport);\n channelInfo.bounds = layerBounds && getRenderBounds(layerBounds, viewport);\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport =\n layerBounds &&\n makeViewport({\n bounds: channelInfo.bounds!,\n viewport,\n width: maskMap!.width,\n height: maskMap!.height,\n border: 1\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n\n didRender = true;\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n\n return didRender;\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record<string, Channel> {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture;\n maskChannels: Record<string, Mask> | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap! : this.dummyMaskMap!,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n"],"file":"mask-effect.js"}
@@ -1,113 +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.default = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
-
14
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
-
16
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
-
18
- var _core = require("@deck.gl/core");
19
-
20
- var _shaderModule = _interopRequireDefault(require("./shader-module"));
21
-
22
- var _maskEffect = _interopRequireDefault(require("./mask-effect"));
23
-
24
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
25
-
26
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
27
-
28
- var defaultProps = {
29
- maskId: '',
30
- maskByInstance: undefined,
31
- maskInverted: false
32
- };
33
-
34
- var MaskExtension = function (_LayerExtension) {
35
- (0, _inherits2.default)(MaskExtension, _LayerExtension);
36
-
37
- var _super = _createSuper(MaskExtension);
38
-
39
- function MaskExtension() {
40
- (0, _classCallCheck2.default)(this, MaskExtension);
41
- return _super.apply(this, arguments);
42
- }
43
-
44
- var _proto = MaskExtension.prototype;
45
-
46
- _proto.initializeState = function initializeState() {
47
- var _this$context$deck;
48
-
49
- (_this$context$deck = this.context.deck) === null || _this$context$deck === void 0 ? void 0 : _this$context$deck._addDefaultEffect(new _maskEffect.default());
50
- };
51
-
52
- _proto.getShaders = function getShaders() {
53
- var maskByInstance = ('instancePositions' in this.getAttributeManager().attributes);
54
-
55
- if (this.props.maskByInstance !== undefined) {
56
- maskByInstance = Boolean(this.props.maskByInstance);
57
- }
58
-
59
- this.state.maskByInstance = maskByInstance;
60
- return {
61
- modules: [_shaderModule.default]
62
- };
63
- };
64
-
65
- _proto.draw = function draw(_ref) {
66
- var uniforms = _ref.uniforms,
67
- context = _ref.context,
68
- moduleParameters = _ref.moduleParameters;
69
- uniforms.mask_maskByInstance = this.state.maskByInstance;
70
- var _this$props = this.props,
71
- maskId = _this$props.maskId,
72
- maskInverted = _this$props.maskInverted;
73
- var maskChannels = moduleParameters.maskChannels;
74
- var viewport = context.viewport;
75
-
76
- if (maskChannels && maskChannels[maskId]) {
77
- var _maskChannels$maskId = maskChannels[maskId],
78
- index = _maskChannels$maskId.index,
79
- bounds = _maskChannels$maskId.bounds,
80
- fromCoordinateOrigin = _maskChannels$maskId.coordinateOrigin;
81
- var fromCoordinateSystem = maskChannels[maskId].coordinateSystem;
82
- uniforms.mask_enabled = true;
83
- uniforms.mask_channel = index;
84
- uniforms.mask_inverted = maskInverted;
85
-
86
- if (fromCoordinateSystem === _core.COORDINATE_SYSTEM.DEFAULT) {
87
- fromCoordinateSystem = viewport.isGeospatial ? _core.COORDINATE_SYSTEM.LNGLAT : _core.COORDINATE_SYSTEM.CARTESIAN;
88
- }
89
-
90
- var opts = {
91
- modelMatrix: null,
92
- fromCoordinateOrigin: fromCoordinateOrigin,
93
- fromCoordinateSystem: fromCoordinateSystem
94
- };
95
- var bl = this.projectPosition([bounds[0], bounds[1], 0], opts);
96
- var tr = this.projectPosition([bounds[2], bounds[3], 0], opts);
97
- uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];
98
- } else {
99
- if (maskId) {
100
- _core.log.warn("Could not find a mask layer with id: ".concat(maskId))();
101
- }
102
-
103
- uniforms.mask_enabled = false;
104
- }
105
- };
106
-
107
- return MaskExtension;
108
- }(_core.LayerExtension);
109
-
110
- exports.default = MaskExtension;
111
- MaskExtension.defaultProps = defaultProps;
112
- MaskExtension.extensionName = 'MaskExtension';
113
- //# sourceMappingURL=mask-extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mask/mask-extension.ts"],"names":["defaultProps","maskId","maskByInstance","undefined","maskInverted","MaskExtension","initializeState","context","deck","_addDefaultEffect","MaskEffect","getShaders","getAttributeManager","attributes","props","Boolean","state","modules","mask","draw","uniforms","moduleParameters","mask_maskByInstance","maskChannels","viewport","index","bounds","fromCoordinateOrigin","coordinateOrigin","fromCoordinateSystem","coordinateSystem","mask_enabled","mask_channel","mask_inverted","COORDINATE_SYSTEM","DEFAULT","isGeospatial","LNGLAT","CARTESIAN","opts","modelMatrix","bl","projectPosition","tr","mask_bounds","log","warn","LayerExtension","extensionName"],"mappings":"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","sourcesContent":["import {COORDINATE_SYSTEM, Layer, LayerExtension, log} from '@deck.gl/core';\nimport mask from './shader-module';\nimport MaskEffect from './mask-effect';\n\nconst defaultProps = {\n maskId: '',\n maskByInstance: undefined,\n maskInverted: false\n};\n\nexport type MaskExtensionProps = {\n /**\n * Id of the layer that defines the mask. The mask layer must use the prop `operation: 'mask'`.\n * Masking is disabled if `maskId` is empty or no valid mask layer with the specified id is found.\n */\n maskId?: string;\n /**\n * controls whether an object is clipped by its anchor (usually defined by an accessor called `getPosition`, e.g. icon, scatterplot) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n maskByInstance?: boolean;\n /**\n * Inverts the masking operation\n */\n maskInverted?: boolean;\n};\n\n/** Allows layers to show/hide objects by a geofence. */\nexport default class MaskExtension extends LayerExtension {\n static defaultProps = defaultProps;\n static extensionName = 'MaskExtension';\n\n initializeState(this: Layer<MaskExtensionProps>) {\n this.context.deck?._addDefaultEffect(new MaskEffect());\n }\n\n getShaders(this: Layer<MaskExtensionProps>): any {\n // Infer by geometry if 'maskByInstance' prop isn't explictly set\n let maskByInstance = 'instancePositions' in this.getAttributeManager()!.attributes;\n // Users can override by setting the `maskByInstance` prop\n if (this.props.maskByInstance !== undefined) {\n maskByInstance = Boolean(this.props.maskByInstance);\n }\n this.state.maskByInstance = maskByInstance;\n\n return {\n modules: [mask]\n };\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer<Required<MaskExtensionProps>>, {uniforms, context, moduleParameters}: any) {\n uniforms.mask_maskByInstance = this.state.maskByInstance;\n const {maskId, maskInverted} = this.props;\n const {maskChannels} = moduleParameters;\n const {viewport} = context;\n if (maskChannels && maskChannels[maskId]) {\n const {index, bounds, coordinateOrigin: fromCoordinateOrigin} = maskChannels[maskId];\n let {coordinateSystem: fromCoordinateSystem} = maskChannels[maskId];\n uniforms.mask_enabled = true;\n uniforms.mask_channel = index;\n uniforms.mask_inverted = maskInverted;\n\n if (fromCoordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n fromCoordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n const opts = {modelMatrix: null, fromCoordinateOrigin, fromCoordinateSystem};\n const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);\n const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);\n uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];\n } else {\n if (maskId) {\n log.warn(`Could not find a mask layer with id: ${maskId}`)();\n }\n uniforms.mask_enabled = false;\n }\n }\n}\n"],"file":"mask-extension.js"}
@@ -1,106 +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.default = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _webgl = require("@luma.gl/webgl");
23
-
24
- var _constants = require("@luma.gl/constants");
25
-
26
- var _core = require("@deck.gl/core");
27
-
28
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
29
-
30
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
31
-
32
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
33
-
34
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
35
-
36
- var MaskPass = function (_LayersPass) {
37
- (0, _inherits2.default)(MaskPass, _LayersPass);
38
-
39
- var _super = _createSuper(MaskPass);
40
-
41
- function MaskPass(device, props) {
42
- var _this;
43
-
44
- (0, _classCallCheck2.default)(this, MaskPass);
45
- _this = _super.call(this, device, props);
46
- _this.maskMap = void 0;
47
- _this.fbo = void 0;
48
- var _props$mapSize = props.mapSize,
49
- mapSize = _props$mapSize === void 0 ? 2048 : _props$mapSize;
50
- _this.maskMap = device.createTexture({
51
- format: 'rgba8unorm',
52
- width: mapSize,
53
- height: mapSize,
54
- sampler: {
55
- minFilter: 'linear',
56
- magFilter: 'linear',
57
- addressModeU: 'clamp-to-edge',
58
- addressModeV: 'clamp-to-edge'
59
- }
60
- });
61
- _this.fbo = device.createFramebuffer({
62
- id: 'maskmap',
63
- width: mapSize,
64
- height: mapSize,
65
- colorAttachments: [_this.maskMap]
66
- });
67
- return _this;
68
- }
69
-
70
- var _proto = MaskPass.prototype;
71
-
72
- _proto.render = function render(options) {
73
- var _this2 = this;
74
-
75
- var colorMask = [false, false, false, false];
76
- colorMask[options.channel] = true;
77
- var clearColor = [255, 255, 255, 255];
78
- return (0, _webgl.withGLParameters)(this.device, {
79
- blend: true,
80
- blendFunc: [0, 1],
81
- blendEquation: 32778,
82
- colorMask: colorMask,
83
- depthTest: false
84
- }, function () {
85
- return (0, _get2.default)((0, _getPrototypeOf2.default)(MaskPass.prototype), "render", _this2).call(_this2, _objectSpread(_objectSpread({}, options), {}, {
86
- clearColor: clearColor,
87
- target: _this2.fbo,
88
- pass: 'mask'
89
- }));
90
- });
91
- };
92
-
93
- _proto.shouldDrawLayer = function shouldDrawLayer(layer) {
94
- return layer.props.operation.includes('mask');
95
- };
96
-
97
- _proto.delete = function _delete() {
98
- this.fbo.delete();
99
- this.maskMap.delete();
100
- };
101
-
102
- return MaskPass;
103
- }(_core._LayersPass);
104
-
105
- exports.default = MaskPass;
106
- //# sourceMappingURL=mask-pass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mask/mask-pass.ts"],"names":["MaskPass","device","props","maskMap","fbo","mapSize","createTexture","format","width","height","sampler","minFilter","magFilter","addressModeU","addressModeV","createFramebuffer","id","colorAttachments","render","options","colorMask","channel","clearColor","blend","blendFunc","blendEquation","depthTest","target","pass","shouldDrawLayer","layer","operation","includes","delete","LayersPass"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;;;;;IAOqBA,Q;;;;;AAInB,oBAAYC,MAAZ,EAA4BC,KAA5B,EAAmE;AAAA;;AAAA;AACjE,8BAAMD,MAAN,EAAcC,KAAd;AADiE,UAHnEC,OAGmE;AAAA,UAFnEC,GAEmE;AAGjE,yBAAyBF,KAAzB,CAAOG,OAAP;AAAA,QAAOA,OAAP,+BAAiB,IAAjB;AAEA,UAAKF,OAAL,GAAeF,MAAM,CAACK,aAAP,CAAqB;AAClCC,MAAAA,MAAM,EAAE,YAD0B;AAElCC,MAAAA,KAAK,EAAEH,OAF2B;AAGlCI,MAAAA,MAAM,EAAEJ,OAH0B;AAIlCK,MAAAA,OAAO,EAAE;AACPC,QAAAA,SAAS,EAAE,QADJ;AAEPC,QAAAA,SAAS,EAAE,QAFJ;AAGPC,QAAAA,YAAY,EAAE,eAHP;AAIPC,QAAAA,YAAY,EAAE;AAJP;AAJyB,KAArB,CAAf;AAYA,UAAKV,GAAL,GAAWH,MAAM,CAACc,iBAAP,CAAyB;AAClCC,MAAAA,EAAE,EAAE,SAD8B;AAElCR,MAAAA,KAAK,EAAEH,OAF2B;AAGlCI,MAAAA,MAAM,EAAEJ,OAH0B;AAIlCY,MAAAA,gBAAgB,EAAE,CAAC,MAAKd,OAAN;AAJgB,KAAzB,CAAX;AAjBiE;AAuBlE;;;;SAEDe,M,GAAA,gBAAOC,OAAP,EAAuC;AAAA;;AACrC,QAAMC,SAAS,GAAG,CAAC,KAAD,EAAQ,KAAR,EAAe,KAAf,EAAsB,KAAtB,CAAlB;AACAA,IAAAA,SAAS,CAACD,OAAO,CAACE,OAAT,CAAT,GAA6B,IAA7B;AACA,QAAMC,UAAU,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,CAAnB;AAEA,WAAO,6BACL,KAAKrB,MADA,EAEL;AACEsB,MAAAA,KAAK,EAAE,IADT;AAEEC,MAAAA,SAAS,EAAE,MAFb;AAGEC,MAAAA,aAAa,OAHf;AAIEL,MAAAA,SAAS,EAATA,SAJF;AAKEM,MAAAA,SAAS,EAAE;AALb,KAFK,EASL;AAAA,kJAAuBP,OAAvB;AAAgCG,QAAAA,UAAU,EAAVA,UAAhC;AAA4CK,QAAAA,MAAM,EAAE,MAAI,CAACvB,GAAzD;AAA8DwB,QAAAA,IAAI,EAAE;AAApE;AAAA,KATK,CAAP;AAWD,G;;SAEDC,e,GAAA,yBAAgBC,KAAhB,EAAuB;AACrB,WAAOA,KAAK,CAAC5B,KAAN,CAAY6B,SAAZ,CAAsBC,QAAtB,CAA+B,MAA/B,CAAP;AACD,G;;SAEDC,M,GAAA,mBAAS;AACP,SAAK7B,GAAL,CAAS6B,MAAT;AACA,SAAK9B,OAAL,CAAa8B,MAAb;AACD,G;;;EAtDmCC,iB","sourcesContent":["import type {Device, Framebuffer, Texture} from '@luma.gl/core';\nimport {withGLParameters} from '@luma.gl/webgl';\nimport {GL} from '@luma.gl/constants';\nimport {_LayersPass as LayersPass, LayersPassRenderOptions} from '@deck.gl/core';\n\ntype MaskPassRenderOptions = LayersPassRenderOptions & {\n /** The channel to render into, 0:red, 1:green, 2:blue, 3:alpha */\n channel: number;\n};\n\nexport default class MaskPass extends LayersPass {\n maskMap: Texture;\n fbo: Framebuffer;\n\n constructor(device: Device, props: {id: string; mapSize?: number}) {\n super(device, props);\n\n const {mapSize = 2048} = props;\n\n this.maskMap = device.createTexture({\n format: 'rgba8unorm',\n width: mapSize,\n height: mapSize,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n });\n\n this.fbo = device.createFramebuffer({\n id: 'maskmap',\n width: mapSize,\n height: mapSize,\n colorAttachments: [this.maskMap]\n });\n }\n\n render(options: MaskPassRenderOptions) {\n const colorMask = [false, false, false, false];\n colorMask[options.channel] = true;\n const clearColor = [255, 255, 255, 255];\n\n return withGLParameters(\n this.device,\n {\n blend: true,\n blendFunc: [GL.ZERO, GL.ONE],\n blendEquation: GL.FUNC_SUBTRACT,\n colorMask,\n depthTest: false\n },\n () => super.render({...options, clearColor, target: this.fbo, pass: 'mask'})\n );\n }\n\n shouldDrawLayer(layer) {\n return layer.props.operation.includes('mask');\n }\n\n delete() {\n this.fbo.delete();\n this.maskMap.delete();\n }\n}\n"],"file":"mask-pass.js"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _core = require("@deck.gl/core");
9
-
10
- var vs = "\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n";
11
- var fs = "\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nuniform bool mask_inverted;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n\n if (mask_inverted) {\n return maskValue >= 0.5;\n } else {\n return maskValue < 0.5;\n }\n}\n";
12
- var inject = {
13
- 'vs:#decl': "\nout vec2 mask_texCoords;\n",
14
- 'vs:#main-end': "\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n",
15
- 'fs:#decl': "\nin vec2 mask_texCoords;\n",
16
- 'fs:#main-start': "\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // fragColor = vec4(mask_texCoords, 0.0, 1.0);\n fragColor = texture(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n"
17
- };
18
-
19
- var getMaskUniforms = function getMaskUniforms(opts) {
20
- if (opts && 'maskMap' in opts) {
21
- return {
22
- mask_texture: opts.maskMap
23
- };
24
- }
25
-
26
- return {};
27
- };
28
-
29
- var _default = {
30
- name: 'mask',
31
- dependencies: [_core.project],
32
- vs: vs,
33
- fs: fs,
34
- inject: inject,
35
- getUniforms: getMaskUniforms
36
- };
37
- exports.default = _default;
38
- //# sourceMappingURL=shader-module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mask/shader-module.ts"],"names":["vs","fs","inject","getMaskUniforms","opts","mask_texture","maskMap","name","dependencies","project","getUniforms"],"mappings":";;;;;;;AACA;;AAGA,IAAMA,EAAE,4LAAR;AAQA,IAAMC,EAAE,8oBAAR;AA6BA,IAAMC,MAAM,GAAG;AACb,4CADa;AAIb,oSAJa;AAab,2CAba;AAgBb;AAhBa,CAAf;;AAkCA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,IAAD,EAAyD;AAC/E,MAAIA,IAAI,IAAI,aAAaA,IAAzB,EAA+B;AAC7B,WAAO;AACLC,MAAAA,YAAY,EAAED,IAAI,CAACE;AADd,KAAP;AAGD;;AACD,SAAO,EAAP;AACD,CAPD;;eASe;AACbC,EAAAA,IAAI,EAAE,MADO;AAEbC,EAAAA,YAAY,EAAE,CAACC,aAAD,CAFD;AAGbT,EAAAA,EAAE,EAAFA,EAHa;AAIbC,EAAAA,EAAE,EAAFA,EAJa;AAKbC,EAAAA,MAAM,EAANA,MALa;AAMbQ,EAAAA,WAAW,EAAEP;AANA,C","sourcesContent":["import type {ShaderModule} from '@luma.gl/shadertools';\nimport {project} from '@deck.gl/core';\nimport type {Texture} from '@luma.gl/core';\n\nconst vs = `\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n`;\n\nconst fs = `\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nuniform bool mask_inverted;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n\n if (mask_inverted) {\n return maskValue >= 0.5;\n } else {\n return maskValue < 0.5;\n }\n}\n`;\n\nconst inject = {\n 'vs:#decl': `\nout vec2 mask_texCoords;\n`,\n 'vs:#main-end': `\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n`,\n 'fs:#decl': `\nin vec2 mask_texCoords;\n`,\n 'fs:#main-start': `\n if (mask_enabled) {\n bool mask = mask_isInBounds(mask_texCoords);\n\n // Debug: show extent of render target\n // fragColor = vec4(mask_texCoords, 0.0, 1.0);\n fragColor = texture(mask_texture, mask_texCoords);\n\n if (!mask) discard;\n }\n`\n};\n\ntype MaskModuleSettings = {\n maskMap?: Texture;\n};\n\n/* eslint-disable camelcase */\nconst getMaskUniforms = (opts?: MaskModuleSettings | {}): Record<string, any> => {\n if (opts && 'maskMap' in opts) {\n return {\n mask_texture: opts.maskMap\n };\n }\n return {};\n};\n\nexport default {\n name: 'mask',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: getMaskUniforms\n} as ShaderModule<MaskModuleSettings>;\n"],"file":"shader-module.js"}