@deck.gl/extensions 9.0.0-beta.2 → 9.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brushing/brushing-extension.js +80 -0
- package/dist/{esm/brushing → brushing}/shader-module.js +24 -30
- package/dist/clip/clip-extension.js +117 -0
- package/{typed → dist}/collision-filter/collision-filter-effect.d.ts.map +1 -1
- package/dist/collision-filter/collision-filter-effect.js +193 -0
- package/dist/collision-filter/collision-filter-extension.js +49 -0
- package/{typed → dist}/collision-filter/collision-filter-pass.d.ts.map +1 -1
- package/dist/collision-filter/collision-filter-pass.js +25 -0
- package/dist/{esm/collision-filter → collision-filter}/shader-module.js +17 -24
- package/dist/data-filter/aggregator.js +104 -0
- package/{typed → dist}/data-filter/data-filter-extension.d.ts.map +1 -1
- package/dist/data-filter/data-filter-extension.js +162 -0
- package/dist/data-filter/shader-module.js +159 -0
- package/dist/dist.dev.js +1762 -13033
- package/dist/fill-style/fill-style-extension.js +118 -0
- package/dist/{esm/fill-style → fill-style}/shaders.glsl.js +37 -43
- package/dist/fp64/fp64-extension.js +35 -0
- package/dist/{esm/fp64 → fp64}/project64.glsl.js +19 -1
- package/dist/fp64/project64.js +50 -0
- package/dist/index.cjs +2724 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +11 -0
- package/{typed → dist}/mask/mask-effect.d.ts.map +1 -1
- package/dist/mask/mask-effect.js +194 -0
- package/dist/mask/mask-extension.js +57 -0
- package/{typed → dist}/mask/mask-pass.d.ts.map +1 -1
- package/dist/mask/mask-pass.js +44 -0
- package/dist/{esm/mask → mask}/shader-module.js +18 -21
- package/dist/path-style/path-style-extension.js +111 -0
- package/dist/{esm/path-style → path-style}/shaders.glsl.js +20 -13
- package/dist/terrain/height-map-builder.js +104 -0
- package/dist/terrain/shader-module.js +139 -0
- package/dist/terrain/terrain-cover.js +187 -0
- package/{typed → dist}/terrain/terrain-effect.d.ts.map +1 -1
- package/dist/terrain/terrain-effect.js +184 -0
- package/dist/terrain/terrain-extension.js +44 -0
- package/{typed → dist}/terrain/terrain-pass.d.ts.map +1 -1
- package/dist/terrain/terrain-pass.js +61 -0
- package/{typed → dist}/terrain/terrain-picking-pass.d.ts.map +1 -1
- package/dist/terrain/terrain-picking-pass.js +66 -0
- package/dist/terrain/utils.js +21 -0
- package/{typed → dist}/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +50 -0
- package/dist/utils/projection-utils.js +153 -0
- package/dist.min.js +73 -205
- package/package.json +19 -12
- package/src/collision-filter/collision-filter-effect.ts +12 -8
- package/src/collision-filter/collision-filter-pass.ts +1 -3
- package/src/data-filter/data-filter-extension.ts +3 -5
- package/src/mask/mask-effect.ts +0 -1
- package/src/mask/mask-pass.ts +1 -3
- package/src/terrain/terrain-effect.ts +8 -2
- package/src/terrain/terrain-pass.ts +2 -5
- package/src/terrain/terrain-picking-pass.ts +1 -3
- package/src/utils/debug.ts +1 -2
- package/dist/es5/brushing/brushing-extension.js +0 -108
- package/dist/es5/brushing/brushing-extension.js.map +0 -1
- package/dist/es5/brushing/shader-module.js +0 -50
- package/dist/es5/brushing/shader-module.js.map +0 -1
- package/dist/es5/clip/clip-extension.js +0 -98
- package/dist/es5/clip/clip-extension.js.map +0 -1
- package/dist/es5/collision-filter/collision-filter-effect.js +0 -294
- package/dist/es5/collision-filter/collision-filter-effect.js.map +0 -1
- package/dist/es5/collision-filter/collision-filter-extension.js +0 -109
- package/dist/es5/collision-filter/collision-filter-extension.js.map +0 -1
- package/dist/es5/collision-filter/collision-filter-pass.js +0 -79
- package/dist/es5/collision-filter/collision-filter-pass.js.map +0 -1
- package/dist/es5/collision-filter/shader-module.js +0 -39
- package/dist/es5/collision-filter/shader-module.js.map +0 -1
- package/dist/es5/data-filter/aggregator.js +0 -79
- package/dist/es5/data-filter/aggregator.js.map +0 -1
- package/dist/es5/data-filter/data-filter-extension.js +0 -236
- package/dist/es5/data-filter/data-filter-extension.js.map +0 -1
- package/dist/es5/data-filter/shader-module.js +0 -122
- package/dist/es5/data-filter/shader-module.js.map +0 -1
- package/dist/es5/fill-style/fill-style-extension.js +0 -190
- package/dist/es5/fill-style/fill-style-extension.js.map +0 -1
- package/dist/es5/fill-style/shaders.glsl.js +0 -59
- package/dist/es5/fill-style/shaders.glsl.js.map +0 -1
- package/dist/es5/fp64/fp64-extension.js +0 -55
- package/dist/es5/fp64/fp64-extension.js.map +0 -1
- package/dist/es5/fp64/project64.glsl.js +0 -9
- package/dist/es5/fp64/project64.glsl.js.map +0 -1
- package/dist/es5/fp64/project64.js +0 -52
- package/dist/es5/fp64/project64.js.map +0 -1
- package/dist/es5/index.js +0 -88
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/mask/mask-effect.js +0 -279
- package/dist/es5/mask/mask-effect.js.map +0 -1
- package/dist/es5/mask/mask-extension.js +0 -113
- package/dist/es5/mask/mask-extension.js.map +0 -1
- package/dist/es5/mask/mask-pass.js +0 -106
- package/dist/es5/mask/mask-pass.js.map +0 -1
- package/dist/es5/mask/shader-module.js +0 -38
- package/dist/es5/mask/shader-module.js.map +0 -1
- package/dist/es5/path-style/path-style-extension.js +0 -169
- package/dist/es5/path-style/path-style-extension.js.map +0 -1
- package/dist/es5/path-style/shaders.glsl.js +0 -25
- package/dist/es5/path-style/shaders.glsl.js.map +0 -1
- package/dist/es5/terrain/height-map-builder.js +0 -111
- package/dist/es5/terrain/height-map-builder.js.map +0 -1
- package/dist/es5/terrain/shader-module.js +0 -86
- package/dist/es5/terrain/shader-module.js.map +0 -1
- package/dist/es5/terrain/terrain-cover.js +0 -256
- package/dist/es5/terrain/terrain-cover.js.map +0 -1
- package/dist/es5/terrain/terrain-effect.js +0 -326
- package/dist/es5/terrain/terrain-effect.js.map +0 -1
- package/dist/es5/terrain/terrain-extension.js +0 -94
- package/dist/es5/terrain/terrain-extension.js.map +0 -1
- package/dist/es5/terrain/terrain-pass.js +0 -121
- package/dist/es5/terrain/terrain-pass.js.map +0 -1
- package/dist/es5/terrain/terrain-picking-pass.js +0 -124
- package/dist/es5/terrain/terrain-picking-pass.js.map +0 -1
- package/dist/es5/terrain/utils.js +0 -35
- package/dist/es5/terrain/utils.js.map +0 -1
- package/dist/es5/utils/debug.js +0 -71
- package/dist/es5/utils/debug.js.map +0 -1
- package/dist/es5/utils/projection-utils.js +0 -168
- package/dist/es5/utils/projection-utils.js.map +0 -1
- package/dist/esm/brushing/brushing-extension.js +0 -68
- package/dist/esm/brushing/brushing-extension.js.map +0 -1
- package/dist/esm/brushing/shader-module.js.map +0 -1
- package/dist/esm/clip/clip-extension.js +0 -86
- package/dist/esm/clip/clip-extension.js.map +0 -1
- package/dist/esm/collision-filter/collision-filter-effect.js +0 -246
- package/dist/esm/collision-filter/collision-filter-effect.js.map +0 -1
- package/dist/esm/collision-filter/collision-filter-extension.js +0 -75
- package/dist/esm/collision-filter/collision-filter-extension.js.map +0 -1
- package/dist/esm/collision-filter/collision-filter-pass.js +0 -32
- package/dist/esm/collision-filter/collision-filter-pass.js.map +0 -1
- package/dist/esm/collision-filter/shader-module.js.map +0 -1
- package/dist/esm/data-filter/aggregator.js +0 -102
- package/dist/esm/data-filter/aggregator.js.map +0 -1
- package/dist/esm/data-filter/data-filter-extension.js +0 -189
- package/dist/esm/data-filter/data-filter-extension.js.map +0 -1
- package/dist/esm/data-filter/shader-module.js +0 -164
- package/dist/esm/data-filter/shader-module.js.map +0 -1
- package/dist/esm/fill-style/fill-style-extension.js +0 -156
- package/dist/esm/fill-style/fill-style-extension.js.map +0 -1
- package/dist/esm/fill-style/shaders.glsl.js.map +0 -1
- package/dist/esm/fp64/fp64-extension.js +0 -20
- package/dist/esm/fp64/fp64-extension.js.map +0 -1
- package/dist/esm/fp64/project64.glsl.js.map +0 -1
- package/dist/esm/fp64/project64.js +0 -43
- package/dist/esm/fp64/project64.js.map +0 -1
- package/dist/esm/index.js +0 -11
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/mask/mask-effect.js +0 -228
- package/dist/esm/mask/mask-effect.js.map +0 -1
- package/dist/esm/mask/mask-extension.js +0 -83
- package/dist/esm/mask/mask-extension.js.map +0 -1
- package/dist/esm/mask/mask-pass.js +0 -58
- package/dist/esm/mask/mask-pass.js.map +0 -1
- package/dist/esm/mask/shader-module.js.map +0 -1
- package/dist/esm/path-style/path-style-extension.js +0 -130
- package/dist/esm/path-style/path-style-extension.js.map +0 -1
- package/dist/esm/path-style/shaders.glsl.js.map +0 -1
- package/dist/esm/terrain/height-map-builder.js +0 -86
- package/dist/esm/terrain/height-map-builder.js.map +0 -1
- package/dist/esm/terrain/shader-module.js +0 -127
- package/dist/esm/terrain/shader-module.js.map +0 -1
- package/dist/esm/terrain/terrain-cover.js +0 -212
- package/dist/esm/terrain/terrain-cover.js.map +0 -1
- package/dist/esm/terrain/terrain-effect.js +0 -219
- package/dist/esm/terrain/terrain-effect.js.map +0 -1
- package/dist/esm/terrain/terrain-extension.js +0 -59
- package/dist/esm/terrain/terrain-extension.js.map +0 -1
- package/dist/esm/terrain/terrain-pass.js +0 -71
- package/dist/esm/terrain/terrain-pass.js.map +0 -1
- package/dist/esm/terrain/terrain-picking-pass.js +0 -73
- package/dist/esm/terrain/terrain-picking-pass.js.map +0 -1
- package/dist/esm/terrain/utils.js +0 -19
- package/dist/esm/terrain/utils.js.map +0 -1
- package/dist/esm/utils/debug.js +0 -61
- package/dist/esm/utils/debug.js.map +0 -1
- package/dist/esm/utils/projection-utils.js +0 -134
- package/dist/esm/utils/projection-utils.js.map +0 -1
- /package/{typed → dist}/brushing/brushing-extension.d.ts +0 -0
- /package/{typed → dist}/brushing/brushing-extension.d.ts.map +0 -0
- /package/{typed → dist}/brushing/shader-module.d.ts +0 -0
- /package/{typed → dist}/brushing/shader-module.d.ts.map +0 -0
- /package/{typed → dist}/clip/clip-extension.d.ts +0 -0
- /package/{typed → dist}/clip/clip-extension.d.ts.map +0 -0
- /package/{typed → dist}/collision-filter/collision-filter-effect.d.ts +0 -0
- /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts +0 -0
- /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts.map +0 -0
- /package/{typed → dist}/collision-filter/collision-filter-pass.d.ts +0 -0
- /package/{typed → dist}/collision-filter/shader-module.d.ts +0 -0
- /package/{typed → dist}/collision-filter/shader-module.d.ts.map +0 -0
- /package/{typed → dist}/data-filter/aggregator.d.ts +0 -0
- /package/{typed → dist}/data-filter/aggregator.d.ts.map +0 -0
- /package/{typed → dist}/data-filter/data-filter-extension.d.ts +0 -0
- /package/{typed → dist}/data-filter/shader-module.d.ts +0 -0
- /package/{typed → dist}/data-filter/shader-module.d.ts.map +0 -0
- /package/{typed → dist}/fill-style/fill-style-extension.d.ts +0 -0
- /package/{typed → dist}/fill-style/fill-style-extension.d.ts.map +0 -0
- /package/{typed → dist}/fill-style/shaders.glsl.d.ts +0 -0
- /package/{typed → dist}/fill-style/shaders.glsl.d.ts.map +0 -0
- /package/{typed → dist}/fp64/fp64-extension.d.ts +0 -0
- /package/{typed → dist}/fp64/fp64-extension.d.ts.map +0 -0
- /package/{typed → dist}/fp64/project64.d.ts +0 -0
- /package/{typed → dist}/fp64/project64.d.ts.map +0 -0
- /package/{typed → dist}/fp64/project64.glsl.d.ts +0 -0
- /package/{typed → dist}/fp64/project64.glsl.d.ts.map +0 -0
- /package/{typed → dist}/index.d.ts +0 -0
- /package/{typed → dist}/index.d.ts.map +0 -0
- /package/{typed → dist}/mask/mask-effect.d.ts +0 -0
- /package/{typed → dist}/mask/mask-extension.d.ts +0 -0
- /package/{typed → dist}/mask/mask-extension.d.ts.map +0 -0
- /package/{typed → dist}/mask/mask-pass.d.ts +0 -0
- /package/{typed → dist}/mask/shader-module.d.ts +0 -0
- /package/{typed → dist}/mask/shader-module.d.ts.map +0 -0
- /package/{typed → dist}/path-style/path-style-extension.d.ts +0 -0
- /package/{typed → dist}/path-style/path-style-extension.d.ts.map +0 -0
- /package/{typed → dist}/path-style/shaders.glsl.d.ts +0 -0
- /package/{typed → dist}/path-style/shaders.glsl.d.ts.map +0 -0
- /package/{typed → dist}/terrain/height-map-builder.d.ts +0 -0
- /package/{typed → dist}/terrain/height-map-builder.d.ts.map +0 -0
- /package/{typed → dist}/terrain/shader-module.d.ts +0 -0
- /package/{typed → dist}/terrain/shader-module.d.ts.map +0 -0
- /package/{typed → dist}/terrain/terrain-cover.d.ts +0 -0
- /package/{typed → dist}/terrain/terrain-cover.d.ts.map +0 -0
- /package/{typed → dist}/terrain/terrain-effect.d.ts +0 -0
- /package/{typed → dist}/terrain/terrain-extension.d.ts +0 -0
- /package/{typed → dist}/terrain/terrain-extension.d.ts.map +0 -0
- /package/{typed → dist}/terrain/terrain-pass.d.ts +0 -0
- /package/{typed → dist}/terrain/terrain-picking-pass.d.ts +0 -0
- /package/{typed → dist}/terrain/utils.d.ts +0 -0
- /package/{typed → dist}/terrain/utils.d.ts.map +0 -0
- /package/{typed → dist}/utils/debug.d.ts +0 -0
- /package/{typed → dist}/utils/projection-utils.d.ts +0 -0
- /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":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,MAAM,EAAE,EADW;AAEnBC,EAAAA,cAAc,EAAEC,SAFG;AAGnBC,EAAAA,YAAY,EAAE;AAHK,CAArB;;IAwBqBC,a;;;;;;;;;;;;SAInBC,e,GAAA,2BAAiD;AAAA;;AAC/C,+BAAKC,OAAL,CAAaC,IAAb,0EAAmBC,iBAAnB,CAAqC,IAAIC,mBAAJ,EAArC;AACD,G;;SAEDC,U,GAAA,sBAAiD;AAE/C,QAAIT,cAAc,IAAG,uBAAuB,KAAKU,mBAAL,GAA4BC,UAAtD,CAAlB;;AAEA,QAAI,KAAKC,KAAL,CAAWZ,cAAX,KAA8BC,SAAlC,EAA6C;AAC3CD,MAAAA,cAAc,GAAGa,OAAO,CAAC,KAAKD,KAAL,CAAWZ,cAAZ,CAAxB;AACD;;AACD,SAAKc,KAAL,CAAWd,cAAX,GAA4BA,cAA5B;AAEA,WAAO;AACLe,MAAAA,OAAO,EAAE,CAACC,qBAAD;AADJ,KAAP;AAGD,G;;SAGDC,I,GAAA,oBAA4F;AAAA,QAA3CC,QAA2C,QAA3CA,QAA2C;AAAA,QAAjCb,OAAiC,QAAjCA,OAAiC;AAAA,QAAxBc,gBAAwB,QAAxBA,gBAAwB;AAC1FD,IAAAA,QAAQ,CAACE,mBAAT,GAA+B,KAAKN,KAAL,CAAWd,cAA1C;AACA,sBAA+B,KAAKY,KAApC;AAAA,QAAOb,MAAP,eAAOA,MAAP;AAAA,QAAeG,YAAf,eAAeA,YAAf;AACA,QAAOmB,YAAP,GAAuBF,gBAAvB,CAAOE,YAAP;AACA,QAAOC,QAAP,GAAmBjB,OAAnB,CAAOiB,QAAP;;AACA,QAAID,YAAY,IAAIA,YAAY,CAACtB,MAAD,CAAhC,EAA0C;AACxC,iCAAgEsB,YAAY,CAACtB,MAAD,CAA5E;AAAA,UAAOwB,KAAP,wBAAOA,KAAP;AAAA,UAAcC,MAAd,wBAAcA,MAAd;AAAA,UAAwCC,oBAAxC,wBAAsBC,gBAAtB;AACA,UAAuBC,oBAAvB,GAA+CN,YAAY,CAACtB,MAAD,CAA3D,CAAK6B,gBAAL;AACAV,MAAAA,QAAQ,CAACW,YAAT,GAAwB,IAAxB;AACAX,MAAAA,QAAQ,CAACY,YAAT,GAAwBP,KAAxB;AACAL,MAAAA,QAAQ,CAACa,aAAT,GAAyB7B,YAAzB;;AAEA,UAAIyB,oBAAoB,KAAKK,wBAAkBC,OAA/C,EAAwD;AACtDN,QAAAA,oBAAoB,GAAGL,QAAQ,CAACY,YAAT,GACnBF,wBAAkBG,MADC,GAEnBH,wBAAkBI,SAFtB;AAGD;;AACD,UAAMC,IAAI,GAAG;AAACC,QAAAA,WAAW,EAAE,IAAd;AAAoBb,QAAAA,oBAAoB,EAApBA,oBAApB;AAA0CE,QAAAA,oBAAoB,EAApBA;AAA1C,OAAb;AACA,UAAMY,EAAE,GAAG,KAAKC,eAAL,CAAqB,CAAChB,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,EAAuB,CAAvB,CAArB,EAAgDa,IAAhD,CAAX;AACA,UAAMI,EAAE,GAAG,KAAKD,eAAL,CAAqB,CAAChB,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,EAAuB,CAAvB,CAArB,EAAgDa,IAAhD,CAAX;AACAnB,MAAAA,QAAQ,CAACwB,WAAT,GAAuB,CAACH,EAAE,CAAC,CAAD,CAAH,EAAQA,EAAE,CAAC,CAAD,CAAV,EAAeE,EAAE,CAAC,CAAD,CAAjB,EAAsBA,EAAE,CAAC,CAAD,CAAxB,CAAvB;AACD,KAhBD,MAgBO;AACL,UAAI1C,MAAJ,EAAY;AACV4C,kBAAIC,IAAJ,gDAAiD7C,MAAjD;AACD;;AACDmB,MAAAA,QAAQ,CAACW,YAAT,GAAwB,KAAxB;AACD;AACF,G;;;EAlDwCgB,oB;;;AAAtB1C,a,CACZL,Y,GAAeA,Y;AADHK,a,CAEZ2C,a,GAAgB,e","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"}
|