@deck.gl/extensions 8.10.0-alpha.2 → 8.10.0-alpha.5
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/LICENSE +1 -1
- package/dist/dist.dev.js +38 -660
- package/dist/es5/brushing/brushing-extension.js +48 -54
- package/dist/es5/brushing/brushing-extension.js.map +1 -1
- package/dist/es5/clip/clip-extension.js +32 -37
- package/dist/es5/clip/clip-extension.js.map +1 -1
- package/dist/es5/collision-filter/collision-filter-effect.js +217 -225
- package/dist/es5/collision-filter/collision-filter-effect.js.map +1 -1
- package/dist/es5/collision-filter/collision-filter-extension.js +49 -56
- package/dist/es5/collision-filter/collision-filter-extension.js.map +1 -1
- package/dist/es5/collision-filter/collision-filter-pass.js +31 -34
- package/dist/es5/collision-filter/collision-filter-pass.js.map +1 -1
- package/dist/es5/data-filter/data-filter-extension.js +126 -132
- package/dist/es5/data-filter/data-filter-extension.js.map +1 -1
- package/dist/es5/fill-style/fill-style-extension.js +101 -109
- package/dist/es5/fill-style/fill-style-extension.js.map +1 -1
- package/dist/es5/fp64/fp64-extension.js +12 -16
- package/dist/es5/fp64/fp64-extension.js.map +1 -1
- package/dist/es5/mask/mask-effect.js +208 -216
- package/dist/es5/mask/mask-effect.js.map +1 -1
- package/dist/es5/mask/mask-extension.js +57 -63
- package/dist/es5/mask/mask-extension.js.map +1 -1
- package/dist/es5/mask/mask-pass.js +36 -42
- package/dist/es5/mask/mask-pass.js.map +1 -1
- package/dist/es5/path-style/path-style-extension.js +81 -89
- package/dist/es5/path-style/path-style-extension.js.map +1 -1
- package/dist/es5/terrain/height-map-builder.js +73 -80
- package/dist/es5/terrain/height-map-builder.js.map +1 -1
- package/dist/es5/terrain/terrain-cover.js +155 -162
- package/dist/es5/terrain/terrain-cover.js.map +1 -1
- package/dist/es5/terrain/terrain-effect.js +233 -242
- package/dist/es5/terrain/terrain-effect.js.map +1 -1
- package/dist/es5/terrain/terrain-extension.js +44 -51
- package/dist/es5/terrain/terrain-extension.js.map +1 -1
- package/dist/es5/terrain/terrain-pass.js +61 -65
- package/dist/es5/terrain/terrain-pass.js.map +1 -1
- package/dist/es5/terrain/terrain-picking-pass.js +56 -62
- package/dist/es5/terrain/terrain-picking-pass.js.map +1 -1
- package/dist/esm/brushing/brushing-extension.js +2 -5
- package/dist/esm/brushing/brushing-extension.js.map +1 -1
- package/dist/esm/brushing/shader-module.js +67 -4
- package/dist/esm/brushing/shader-module.js.map +1 -1
- package/dist/esm/clip/clip-extension.js +33 -14
- package/dist/esm/clip/clip-extension.js.map +1 -1
- package/dist/esm/collision-filter/collision-filter-effect.js +10 -19
- package/dist/esm/collision-filter/collision-filter-effect.js.map +1 -1
- package/dist/esm/collision-filter/collision-filter-extension.js +2 -5
- package/dist/esm/collision-filter/collision-filter-extension.js.map +1 -1
- package/dist/esm/collision-filter/shader-module.js +76 -4
- package/dist/esm/collision-filter/shader-module.js.map +1 -1
- package/dist/esm/data-filter/aggregator.js +45 -2
- package/dist/esm/data-filter/aggregator.js.map +1 -1
- package/dist/esm/data-filter/data-filter-extension.js +2 -5
- package/dist/esm/data-filter/data-filter-extension.js.map +1 -1
- package/dist/esm/data-filter/shader-module.js +86 -6
- package/dist/esm/data-filter/shader-module.js.map +1 -1
- package/dist/esm/fill-style/fill-style-extension.js +2 -5
- package/dist/esm/fill-style/fill-style-extension.js.map +1 -1
- package/dist/esm/fill-style/shaders.glsl.js +60 -5
- package/dist/esm/fill-style/shaders.glsl.js.map +1 -1
- package/dist/esm/fp64/fp64-extension.js +1 -3
- package/dist/esm/fp64/fp64-extension.js.map +1 -1
- package/dist/esm/fp64/project64.glsl.js +81 -1
- package/dist/esm/fp64/project64.glsl.js.map +1 -1
- package/dist/esm/mask/mask-effect.js +10 -20
- package/dist/esm/mask/mask-effect.js.map +1 -1
- package/dist/esm/mask/mask-extension.js +3 -6
- package/dist/esm/mask/mask-extension.js.map +1 -1
- package/dist/esm/mask/mask-pass.js +2 -6
- package/dist/esm/mask/mask-pass.js.map +1 -1
- package/dist/esm/mask/shader-module.js +61 -6
- package/dist/esm/mask/shader-module.js.map +1 -1
- package/dist/esm/path-style/path-style-extension.js +2 -5
- package/dist/esm/path-style/path-style-extension.js.map +1 -1
- package/dist/esm/path-style/shaders.glsl.js +79 -8
- package/dist/esm/path-style/shaders.glsl.js.map +1 -1
- package/dist/esm/terrain/height-map-builder.js +8 -17
- package/dist/esm/terrain/height-map-builder.js.map +1 -1
- package/dist/esm/terrain/shader-module.js +59 -7
- package/dist/esm/terrain/shader-module.js.map +1 -1
- package/dist/esm/terrain/terrain-cover.js +11 -22
- package/dist/esm/terrain/terrain-cover.js.map +1 -1
- package/dist/esm/terrain/terrain-effect.js +11 -21
- package/dist/esm/terrain/terrain-effect.js.map +1 -1
- package/dist/esm/terrain/terrain-extension.js +2 -5
- package/dist/esm/terrain/terrain-extension.js.map +1 -1
- package/dist/esm/terrain/terrain-pass.js +1 -1
- package/dist/esm/terrain/terrain-pass.js.map +1 -1
- package/dist/esm/terrain/terrain-picking-pass.js +2 -4
- package/dist/esm/terrain/terrain-picking-pass.js.map +1 -1
- package/dist.min.js +36 -35
- package/package.json +2 -2
- package/typed/brushing/brushing.d.ts +0 -39
- package/typed/brushing/brushing.d.ts.map +0 -1
- package/typed/brushing/brushing.js +0 -83
- package/typed/brushing/shader-module.js +0 -116
- package/typed/clip/clip.d.ts +0 -32
- package/typed/clip/clip.d.ts.map +0 -1
- package/typed/clip/clip.js +0 -114
- package/typed/collide/collide-effect.d.ts +0 -28
- package/typed/collide/collide-effect.d.ts.map +0 -1
- package/typed/collide/collide-pass.d.ts +0 -14
- package/typed/collide/collide-pass.d.ts.map +0 -1
- package/typed/collide/collide.d.ts +0 -41
- package/typed/collide/collide.d.ts.map +0 -1
- package/typed/collide/shader-module.d.ts +0 -4
- package/typed/collide/shader-module.d.ts.map +0 -1
- package/typed/collision-filter/collision-filter.d.ts +0 -41
- package/typed/collision-filter/collision-filter.d.ts.map +0 -1
- package/typed/common/projection-utils.d.ts +0 -27
- package/typed/common/projection-utils.d.ts.map +0 -1
- package/typed/data-filter/aggregator.js +0 -98
- package/typed/data-filter/data-filter.d.ts +0 -90
- package/typed/data-filter/data-filter.d.ts.map +0 -1
- package/typed/data-filter/data-filter.js +0 -159
- package/typed/data-filter/shader-module.js +0 -152
- package/typed/fill-style/fill-style.d.ts +0 -86
- package/typed/fill-style/fill-style.d.ts.map +0 -1
- package/typed/fill-style/fill-style.js +0 -152
- package/typed/fill-style/shaders.glsl.js +0 -95
- package/typed/fp64/fp64.d.ts +0 -8
- package/typed/fp64/fp64.d.ts.map +0 -1
- package/typed/fp64/fp64.js +0 -34
- package/typed/fp64/project64.glsl.js +0 -100
- package/typed/fp64/project64.js +0 -50
- package/typed/index.js +0 -9
- package/typed/mask/mask.d.ts +0 -30
- package/typed/mask/mask.d.ts.map +0 -1
- package/typed/mask/mask.js +0 -48
- package/typed/mask/shader-module.js +0 -73
- package/typed/mask/utils.d.ts +0 -13
- package/typed/mask/utils.d.ts.map +0 -1
- package/typed/path-style/path-style.d.ts +0 -66
- package/typed/path-style/path-style.d.ts.map +0 -1
- package/typed/path-style/path-style.js +0 -107
- package/typed/path-style/shaders.glsl.js +0 -93
- package/typed/terrain/height-map.d.ts +0 -27
- package/typed/terrain/height-map.d.ts.map +0 -1
- package/typed/terrain/shader-module-offset.d.ts +0 -4
- package/typed/terrain/shader-module-offset.d.ts.map +0 -1
- package/typed/terrain/shader-module-source.d.ts +0 -4
- package/typed/terrain/shader-module-source.d.ts.map +0 -1
- package/typed/terrain/terrain.d.ts +0 -21
- package/typed/terrain/terrain.d.ts.map +0 -1
|
@@ -9,16 +9,12 @@ exports.default = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
11
|
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
12
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
13
|
|
|
16
14
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
15
|
|
|
18
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
17
|
|
|
20
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
-
|
|
22
18
|
var _core = require("@deck.gl/core");
|
|
23
19
|
|
|
24
20
|
var _shaderModule = _interopRequireDefault(require("./shader-module"));
|
|
@@ -45,75 +41,73 @@ var MaskExtension = function (_LayerExtension) {
|
|
|
45
41
|
return _super.apply(this, arguments);
|
|
46
42
|
}
|
|
47
43
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
+
};
|
|
52
51
|
|
|
53
|
-
|
|
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);
|
|
54
57
|
}
|
|
55
|
-
}, {
|
|
56
|
-
key: "getShaders",
|
|
57
|
-
value: function getShaders() {
|
|
58
|
-
var maskByInstance = ('instancePositions' in this.getAttributeManager().attributes);
|
|
59
58
|
|
|
60
|
-
|
|
61
|
-
|
|
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;
|
|
62
88
|
}
|
|
63
89
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
90
|
+
var opts = {
|
|
91
|
+
modelMatrix: null,
|
|
92
|
+
fromCoordinateOrigin: fromCoordinateOrigin,
|
|
93
|
+
fromCoordinateSystem: fromCoordinateSystem
|
|
67
94
|
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
moduleParameters = _ref.moduleParameters;
|
|
75
|
-
uniforms.mask_maskByInstance = this.state.maskByInstance;
|
|
76
|
-
var _this$props = this.props,
|
|
77
|
-
maskId = _this$props.maskId,
|
|
78
|
-
maskInverted = _this$props.maskInverted;
|
|
79
|
-
var maskChannels = moduleParameters.maskChannels;
|
|
80
|
-
var viewport = context.viewport;
|
|
81
|
-
|
|
82
|
-
if (maskChannels && maskChannels[maskId]) {
|
|
83
|
-
var _maskChannels$maskId = maskChannels[maskId],
|
|
84
|
-
index = _maskChannels$maskId.index,
|
|
85
|
-
bounds = _maskChannels$maskId.bounds,
|
|
86
|
-
fromCoordinateOrigin = _maskChannels$maskId.coordinateOrigin;
|
|
87
|
-
var fromCoordinateSystem = maskChannels[maskId].coordinateSystem;
|
|
88
|
-
uniforms.mask_enabled = true;
|
|
89
|
-
uniforms.mask_channel = index;
|
|
90
|
-
uniforms.mask_inverted = maskInverted;
|
|
91
|
-
|
|
92
|
-
if (fromCoordinateSystem === _core.COORDINATE_SYSTEM.DEFAULT) {
|
|
93
|
-
fromCoordinateSystem = viewport.isGeospatial ? _core.COORDINATE_SYSTEM.LNGLAT : _core.COORDINATE_SYSTEM.CARTESIAN;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
var opts = {
|
|
97
|
-
modelMatrix: null,
|
|
98
|
-
fromCoordinateOrigin: fromCoordinateOrigin,
|
|
99
|
-
fromCoordinateSystem: fromCoordinateSystem
|
|
100
|
-
};
|
|
101
|
-
var bl = this.projectPosition([bounds[0], bounds[1], 0], opts);
|
|
102
|
-
var tr = this.projectPosition([bounds[2], bounds[3], 0], opts);
|
|
103
|
-
uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];
|
|
104
|
-
} else {
|
|
105
|
-
if (maskId) {
|
|
106
|
-
_core.log.warn("Could not find a mask layer with id: ".concat(maskId))();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
uniforms.mask_enabled = false;
|
|
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))();
|
|
110
101
|
}
|
|
102
|
+
|
|
103
|
+
uniforms.mask_enabled = false;
|
|
111
104
|
}
|
|
112
|
-
}
|
|
105
|
+
};
|
|
106
|
+
|
|
113
107
|
return MaskExtension;
|
|
114
108
|
}(_core.LayerExtension);
|
|
115
109
|
|
|
116
110
|
exports.default = MaskExtension;
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
MaskExtension.defaultProps = defaultProps;
|
|
112
|
+
MaskExtension.extensionName = 'MaskExtension';
|
|
119
113
|
//# sourceMappingURL=mask-extension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mask/mask-extension.ts"],"names":["defaultProps","maskId","maskByInstance","undefined","maskInverted","MaskExtension","context","deck","_addDefaultEffect","MaskEffect","getAttributeManager","attributes","props","Boolean","state","modules","mask","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"],"mappings":"
|
|
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"}
|
|
@@ -7,11 +7,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
11
|
|
|
14
|
-
var
|
|
12
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
13
|
|
|
16
14
|
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
17
15
|
|
|
@@ -21,8 +19,6 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
|
|
|
21
19
|
|
|
22
20
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
23
21
|
|
|
24
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
-
|
|
26
22
|
var _core = require("@luma.gl/core");
|
|
27
23
|
|
|
28
24
|
var _core2 = require("@deck.gl/core");
|
|
@@ -47,8 +43,8 @@ var MaskPass = function (_LayersPass) {
|
|
|
47
43
|
|
|
48
44
|
(0, _classCallCheck2.default)(this, MaskPass);
|
|
49
45
|
_this = _super.call(this, gl, props);
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
_this.maskMap = void 0;
|
|
47
|
+
_this.fbo = void 0;
|
|
52
48
|
var _props$mapSize = props.mapSize,
|
|
53
49
|
mapSize = _props$mapSize === void 0 ? 2048 : _props$mapSize;
|
|
54
50
|
_this.maskMap = new _core.Texture2D(gl, {
|
|
@@ -65,40 +61,38 @@ var MaskPass = function (_LayersPass) {
|
|
|
65
61
|
return _this;
|
|
66
62
|
}
|
|
67
63
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
}]);
|
|
64
|
+
var _proto = MaskPass.prototype;
|
|
65
|
+
|
|
66
|
+
_proto.render = function render(options) {
|
|
67
|
+
var _this2 = this;
|
|
68
|
+
|
|
69
|
+
var gl = this.gl;
|
|
70
|
+
var colorMask = [false, false, false, false];
|
|
71
|
+
colorMask[options.channel] = true;
|
|
72
|
+
return (0, _core.withParameters)(gl, {
|
|
73
|
+
clearColor: [255, 255, 255, 255],
|
|
74
|
+
blend: true,
|
|
75
|
+
blendFunc: [0, 1],
|
|
76
|
+
blendEquation: 32778,
|
|
77
|
+
colorMask: colorMask,
|
|
78
|
+
depthTest: false
|
|
79
|
+
}, function () {
|
|
80
|
+
return (0, _get2.default)((0, _getPrototypeOf2.default)(MaskPass.prototype), "render", _this2).call(_this2, _objectSpread(_objectSpread({}, options), {}, {
|
|
81
|
+
target: _this2.fbo,
|
|
82
|
+
pass: 'mask'
|
|
83
|
+
}));
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
_proto.shouldDrawLayer = function shouldDrawLayer(layer) {
|
|
88
|
+
return layer.props.operation.includes('mask');
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
_proto.delete = function _delete() {
|
|
92
|
+
this.fbo.delete();
|
|
93
|
+
this.maskMap.delete();
|
|
94
|
+
};
|
|
95
|
+
|
|
102
96
|
return MaskPass;
|
|
103
97
|
}(_core2._LayersPass);
|
|
104
98
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mask/mask-pass.ts"],"names":["MaskPass","gl","props","
|
|
1
|
+
{"version":3,"sources":["../../../src/mask/mask-pass.ts"],"names":["MaskPass","gl","props","maskMap","fbo","mapSize","Texture2D","width","height","parameters","Framebuffer","id","attachments","render","options","colorMask","channel","clearColor","blend","blendFunc","blendEquation","depthTest","target","pass","shouldDrawLayer","layer","operation","includes","delete","LayersPass"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;;;;;IAOqBA,Q;;;;;AAInB,oBAAYC,EAAZ,EAAgBC,KAAhB,EAAuD;AAAA;;AAAA;;AAAA;AACrD,8BAAMD,EAAN,EAAUC,KAAV;AADqD,UAHvDC,OAGuD;AAAA,UAFvDC,GAEuD;AAGrD,yBAAyBF,KAAzB,CAAOG,OAAP;AAAA,QAAOA,OAAP,+BAAiB,IAAjB;AAEA,UAAKF,OAAL,GAAe,IAAIG,eAAJ,CAAcL,EAAd,EAAkB;AAC/BM,MAAAA,KAAK,EAAEF,OADwB;AAE/BG,MAAAA,MAAM,EAAEH,OAFuB;AAG/BI,MAAAA,UAAU;AAHqB,KAAlB,CAAf;AAWA,UAAKL,GAAL,GAAW,IAAIM,iBAAJ,CAAgBT,EAAhB,EAAoB;AAC7BU,MAAAA,EAAE,EAAE,SADyB;AAE7BJ,MAAAA,KAAK,EAAEF,OAFsB;AAG7BG,MAAAA,MAAM,EAAEH,OAHqB;AAI7BO,MAAAA,WAAW,2CACe,MAAKT,OADpB;AAJkB,KAApB,CAAX;AAhBqD;AAwBtD;;;;SAEDU,M,GAAA,gBAAOC,OAAP,EAAuC;AAAA;;AACrC,QAAMb,EAAE,GAAG,KAAKA,EAAhB;AAEA,QAAMc,SAAS,GAAG,CAAC,KAAD,EAAQ,KAAR,EAAe,KAAf,EAAsB,KAAtB,CAAlB;AACAA,IAAAA,SAAS,CAACD,OAAO,CAACE,OAAT,CAAT,GAA6B,IAA7B;AAEA,WAAO,0BACLf,EADK,EAEL;AACEgB,MAAAA,UAAU,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,CADd;AAEEC,MAAAA,KAAK,EAAE,IAFT;AAGEC,MAAAA,SAAS,EAAE,MAHb;AAIEC,MAAAA,aAAa,OAJf;AAKEL,MAAAA,SAAS,EAATA,SALF;AAMEM,MAAAA,SAAS,EAAE;AANb,KAFK,EAUL;AAAA,kJAAuBP,OAAvB;AAAgCQ,QAAAA,MAAM,EAAE,MAAI,CAAClB,GAA7C;AAAkDmB,QAAAA,IAAI,EAAE;AAAxD;AAAA,KAVK,CAAP;AAYD,G;;SAEDC,e,GAAA,yBAAgBC,KAAhB,EAAuB;AACrB,WAAOA,KAAK,CAACvB,KAAN,CAAYwB,SAAZ,CAAsBC,QAAtB,CAA+B,MAA/B,CAAP;AACD,G;;SAEDC,M,GAAA,mBAAS;AACP,SAAKxB,GAAL,CAASwB,MAAT;AACA,SAAKzB,OAAL,CAAayB,MAAb;AACD,G;;;EAzDmCC,kB","sourcesContent":["import {Framebuffer, Texture2D, withParameters} from '@luma.gl/core';\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: Texture2D;\n fbo: Framebuffer;\n\n constructor(gl, props: {id: string; mapSize?: number}) {\n super(gl, props);\n\n const {mapSize = 2048} = props;\n\n this.maskMap = new Texture2D(gl, {\n width: mapSize,\n height: mapSize,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.LINEAR,\n [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n this.fbo = new Framebuffer(gl, {\n id: 'maskmap',\n width: mapSize,\n height: mapSize,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: this.maskMap\n }\n });\n }\n\n render(options: MaskPassRenderOptions) {\n const gl = this.gl;\n\n const colorMask = [false, false, false, false];\n colorMask[options.channel] = true;\n\n return withParameters(\n gl,\n {\n clearColor: [255, 255, 255, 255],\n blend: true,\n blendFunc: [gl.ZERO, gl.ONE],\n blendEquation: gl.FUNC_SUBTRACT,\n colorMask,\n depthTest: false\n },\n () => super.render({...options, 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"}
|
|
@@ -9,16 +9,12 @@ exports.default = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
11
|
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
12
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
13
|
|
|
16
14
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
15
|
|
|
18
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
17
|
|
|
20
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
-
|
|
22
18
|
var _core = require("@deck.gl/core");
|
|
23
19
|
|
|
24
20
|
var _shaders = require("./shaders.glsl");
|
|
@@ -64,111 +60,107 @@ var PathStyleExtension = function (_LayerExtension) {
|
|
|
64
60
|
});
|
|
65
61
|
}
|
|
66
62
|
|
|
67
|
-
|
|
68
|
-
key: "isEnabled",
|
|
69
|
-
value: function isEnabled(layer) {
|
|
70
|
-
return 'pathTesselator' in layer.state;
|
|
71
|
-
}
|
|
72
|
-
}, {
|
|
73
|
-
key: "getShaders",
|
|
74
|
-
value: function getShaders(extension) {
|
|
75
|
-
if (!extension.isEnabled(this)) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
63
|
+
var _proto = PathStyleExtension.prototype;
|
|
78
64
|
|
|
79
|
-
|
|
65
|
+
_proto.isEnabled = function isEnabled(layer) {
|
|
66
|
+
return 'pathTesselator' in layer.state;
|
|
67
|
+
};
|
|
80
68
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
_proto.getShaders = function getShaders(extension) {
|
|
70
|
+
if (!extension.isEnabled(this)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
84
73
|
|
|
85
|
-
|
|
86
|
-
result = (0, _core._mergeShaders)(result, _shaders.offsetShaders);
|
|
87
|
-
}
|
|
74
|
+
var result = {};
|
|
88
75
|
|
|
89
|
-
|
|
76
|
+
if (extension.opts.dash) {
|
|
77
|
+
result = (0, _core._mergeShaders)(result, _shaders.dashShaders);
|
|
90
78
|
}
|
|
91
|
-
}, {
|
|
92
|
-
key: "initializeState",
|
|
93
|
-
value: function initializeState(context, extension) {
|
|
94
|
-
var attributeManager = this.getAttributeManager();
|
|
95
79
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
80
|
+
if (extension.opts.offset) {
|
|
81
|
+
result = (0, _core._mergeShaders)(result, _shaders.offsetShaders);
|
|
82
|
+
}
|
|
99
83
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
instanceDashArrays: {
|
|
103
|
-
size: 2,
|
|
104
|
-
accessor: 'getDashArray'
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
84
|
+
return result;
|
|
85
|
+
};
|
|
108
86
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
instanceDashOffsets: {
|
|
112
|
-
size: 1,
|
|
113
|
-
accessor: 'getPath',
|
|
114
|
-
transform: extension.getDashOffsets.bind(this)
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
87
|
+
_proto.initializeState = function initializeState(context, extension) {
|
|
88
|
+
var attributeManager = this.getAttributeManager();
|
|
118
89
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
instanceOffsets: {
|
|
122
|
-
size: 1,
|
|
123
|
-
accessor: 'getOffset'
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
90
|
+
if (!attributeManager || !extension.isEnabled(this)) {
|
|
91
|
+
return;
|
|
127
92
|
}
|
|
128
|
-
}, {
|
|
129
|
-
key: "updateState",
|
|
130
|
-
value: function updateState(params, extension) {
|
|
131
|
-
if (!extension.isEnabled(this)) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
var uniforms = {};
|
|
136
93
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
94
|
+
if (extension.opts.dash) {
|
|
95
|
+
attributeManager.addInstanced({
|
|
96
|
+
instanceDashArrays: {
|
|
97
|
+
size: 2,
|
|
98
|
+
accessor: 'getDashArray'
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
141
102
|
|
|
142
|
-
|
|
103
|
+
if (extension.opts.highPrecisionDash) {
|
|
104
|
+
attributeManager.addInstanced({
|
|
105
|
+
instanceDashOffsets: {
|
|
106
|
+
size: 1,
|
|
107
|
+
accessor: 'getPath',
|
|
108
|
+
transform: extension.getDashOffsets.bind(this)
|
|
109
|
+
}
|
|
110
|
+
});
|
|
143
111
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
var geometrySize = isNested ? path.length : path.length / positionSize;
|
|
151
|
-
var p;
|
|
152
|
-
var prevP;
|
|
153
|
-
|
|
154
|
-
for (var i = 0; i < geometrySize - 1; i++) {
|
|
155
|
-
p = isNested ? path[i] : path.slice(i * positionSize, i * positionSize + positionSize);
|
|
156
|
-
p = this.projectPosition(p);
|
|
157
|
-
|
|
158
|
-
if (i > 0) {
|
|
159
|
-
result[i] = result[i - 1] + (0, _vec.dist)(prevP, p);
|
|
112
|
+
|
|
113
|
+
if (extension.opts.offset) {
|
|
114
|
+
attributeManager.addInstanced({
|
|
115
|
+
instanceOffsets: {
|
|
116
|
+
size: 1,
|
|
117
|
+
accessor: 'getOffset'
|
|
160
118
|
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
_proto.updateState = function updateState(params, extension) {
|
|
124
|
+
if (!extension.isEnabled(this)) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
var uniforms = {};
|
|
161
129
|
|
|
162
|
-
|
|
130
|
+
if (extension.opts.dash) {
|
|
131
|
+
uniforms.dashAlignMode = this.props.dashJustified ? 1 : 0;
|
|
132
|
+
uniforms.dashGapPickable = Boolean(this.props.dashGapPickable);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
this.state.model.setUniforms(uniforms);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
_proto.getDashOffsets = function getDashOffsets(path) {
|
|
139
|
+
var result = [0];
|
|
140
|
+
var positionSize = this.props.positionFormat === 'XY' ? 2 : 3;
|
|
141
|
+
var isNested = Array.isArray(path[0]);
|
|
142
|
+
var geometrySize = isNested ? path.length : path.length / positionSize;
|
|
143
|
+
var p;
|
|
144
|
+
var prevP;
|
|
145
|
+
|
|
146
|
+
for (var i = 0; i < geometrySize - 1; i++) {
|
|
147
|
+
p = isNested ? path[i] : path.slice(i * positionSize, i * positionSize + positionSize);
|
|
148
|
+
p = this.projectPosition(p);
|
|
149
|
+
|
|
150
|
+
if (i > 0) {
|
|
151
|
+
result[i] = result[i - 1] + (0, _vec.dist)(prevP, p);
|
|
163
152
|
}
|
|
164
153
|
|
|
165
|
-
|
|
154
|
+
prevP = p;
|
|
166
155
|
}
|
|
167
|
-
|
|
156
|
+
|
|
157
|
+
return result;
|
|
158
|
+
};
|
|
159
|
+
|
|
168
160
|
return PathStyleExtension;
|
|
169
161
|
}(_core.LayerExtension);
|
|
170
162
|
|
|
171
163
|
exports.default = PathStyleExtension;
|
|
172
|
-
|
|
173
|
-
|
|
164
|
+
PathStyleExtension.defaultProps = defaultProps;
|
|
165
|
+
PathStyleExtension.extensionName = 'PathStyleExtension';
|
|
174
166
|
//# sourceMappingURL=path-style-extension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/path-style/path-style-extension.ts"],"names":["defaultProps","getDashArray","type","value","getOffset","dashJustified","dashGapPickable","PathStyleExtension","dash","offset","highPrecisionDash","layer","state","
|
|
1
|
+
{"version":3,"sources":["../../../src/path-style/path-style-extension.ts"],"names":["defaultProps","getDashArray","type","value","getOffset","dashJustified","dashGapPickable","PathStyleExtension","dash","offset","highPrecisionDash","isEnabled","layer","state","getShaders","extension","result","opts","dashShaders","offsetShaders","initializeState","context","attributeManager","getAttributeManager","addInstanced","instanceDashArrays","size","accessor","instanceDashOffsets","transform","getDashOffsets","bind","instanceOffsets","updateState","params","uniforms","dashAlignMode","props","Boolean","model","setUniforms","path","positionSize","positionFormat","isNested","Array","isArray","geometrySize","length","p","prevP","i","slice","projectPosition","LayerExtension","extensionName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension, _mergeShaders as mergeShaders} from '@deck.gl/core';\nimport {dashShaders, offsetShaders} from './shaders.glsl';\nimport {dist} from 'gl-matrix/vec3';\n\nimport type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/core';\n\nconst defaultProps = {\n getDashArray: {type: 'accessor', value: [0, 0]},\n getOffset: {type: 'accessor', value: 0},\n dashJustified: false,\n dashGapPickable: false\n};\n\nexport type PathStyleExtensionProps<DataT = any> = {\n /**\n * Accessor for the dash array to draw each path with: `[dashSize, gapSize]` relative to the width of the path.\n * Requires the `dash` option to be on.\n */\n getDashArray?: Accessor<DataT, [number, number]>;\n /**\n * Accessor for the offset to draw each path with, relative to the width of the path.\n * Negative offset is to the left hand side, and positive offset is to the right hand side.\n * @default 0\n */\n getOffset?: Accessor<DataT, number>;\n /**\n * If `true`, adjust gaps for the dashes to align at both ends.\n * @default false\n */\n dashJustified?: boolean;\n /**\n * If `true`, gaps between solid strokes are pickable. If `false`, only the solid strokes are pickable.\n * @default false\n */\n dashGapPickable?: boolean;\n};\n\ntype PathStyleExtensionOptions = {\n /**\n * Add capability to render dashed lines.\n * @default false\n */\n dash: boolean;\n /**\n * Add capability to offset lines.\n * @default false\n */\n offset: boolean;\n /**\n * Improve dash rendering quality in certain circumstances. Note that this option introduces additional performance overhead.\n * @default false\n */\n highPrecisionDash: boolean;\n};\n\n/** Adds selected features to the `PathLayer` and composite layers that render the `PathLayer`. */\nexport default class PathStyleExtension extends LayerExtension<PathStyleExtensionOptions> {\n static defaultProps = defaultProps;\n static extensionName = 'PathStyleExtension';\n\n constructor({\n dash = false,\n offset = false,\n highPrecisionDash = false\n }: Partial<PathStyleExtensionOptions> = {}) {\n super({dash: dash || highPrecisionDash, offset, highPrecisionDash});\n }\n\n isEnabled(layer: Layer<PathStyleExtensionProps>): boolean {\n return 'pathTesselator' in layer.state;\n }\n\n getShaders(this: Layer<PathStyleExtensionProps>, extension: this): any {\n if (!extension.isEnabled(this)) {\n return null;\n }\n\n // Merge shader injection\n let result = {};\n if (extension.opts.dash) {\n result = mergeShaders(result, dashShaders);\n }\n if (extension.opts.offset) {\n result = mergeShaders(result, offsetShaders);\n }\n\n return result;\n }\n\n initializeState(this: Layer<PathStyleExtensionProps>, context: LayerContext, extension: this) {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager || !extension.isEnabled(this)) {\n // This extension only works with the PathLayer\n return;\n }\n\n if (extension.opts.dash) {\n attributeManager.addInstanced({\n instanceDashArrays: {size: 2, accessor: 'getDashArray'}\n });\n }\n if (extension.opts.highPrecisionDash) {\n attributeManager.addInstanced({\n instanceDashOffsets: {\n size: 1,\n accessor: 'getPath',\n transform: extension.getDashOffsets.bind(this)\n }\n });\n }\n if (extension.opts.offset) {\n attributeManager.addInstanced({\n instanceOffsets: {size: 1, accessor: 'getOffset'}\n });\n }\n }\n\n updateState(\n this: Layer<PathStyleExtensionProps>,\n params: UpdateParameters<Layer<PathStyleExtensionProps>>,\n extension: this\n ) {\n if (!extension.isEnabled(this)) {\n return;\n }\n\n const uniforms: any = {};\n\n if (extension.opts.dash) {\n uniforms.dashAlignMode = this.props.dashJustified ? 1 : 0;\n uniforms.dashGapPickable = Boolean(this.props.dashGapPickable);\n }\n\n this.state.model.setUniforms(uniforms);\n }\n\n getDashOffsets(this: Layer<PathStyleExtensionProps>, path: number[] | number[][]): number[] {\n const result = [0];\n const positionSize = this.props.positionFormat === 'XY' ? 2 : 3;\n const isNested = Array.isArray(path[0]);\n const geometrySize = isNested ? path.length : path.length / positionSize;\n\n let p;\n let prevP;\n for (let i = 0; i < geometrySize - 1; i++) {\n p = isNested ? path[i] : path.slice(i * positionSize, i * positionSize + positionSize);\n p = this.projectPosition(p);\n\n if (i > 0) {\n result[i] = result[i - 1] + dist(prevP, p);\n }\n\n prevP = p;\n }\n return result;\n }\n}\n"],"file":"path-style-extension.js"}
|