@deck.gl/extensions 8.10.0-alpha.4 → 8.10.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/dist.dev.js +38 -660
  2. package/dist/es5/brushing/brushing-extension.js +48 -54
  3. package/dist/es5/brushing/brushing-extension.js.map +1 -1
  4. package/dist/es5/clip/clip-extension.js +32 -37
  5. package/dist/es5/clip/clip-extension.js.map +1 -1
  6. package/dist/es5/collision-filter/collision-filter-effect.js +217 -225
  7. package/dist/es5/collision-filter/collision-filter-effect.js.map +1 -1
  8. package/dist/es5/collision-filter/collision-filter-extension.js +49 -56
  9. package/dist/es5/collision-filter/collision-filter-extension.js.map +1 -1
  10. package/dist/es5/collision-filter/collision-filter-pass.js +31 -34
  11. package/dist/es5/collision-filter/collision-filter-pass.js.map +1 -1
  12. package/dist/es5/data-filter/data-filter-extension.js +126 -132
  13. package/dist/es5/data-filter/data-filter-extension.js.map +1 -1
  14. package/dist/es5/fill-style/fill-style-extension.js +101 -109
  15. package/dist/es5/fill-style/fill-style-extension.js.map +1 -1
  16. package/dist/es5/fp64/fp64-extension.js +12 -16
  17. package/dist/es5/fp64/fp64-extension.js.map +1 -1
  18. package/dist/es5/mask/mask-effect.js +208 -216
  19. package/dist/es5/mask/mask-effect.js.map +1 -1
  20. package/dist/es5/mask/mask-extension.js +57 -63
  21. package/dist/es5/mask/mask-extension.js.map +1 -1
  22. package/dist/es5/mask/mask-pass.js +36 -42
  23. package/dist/es5/mask/mask-pass.js.map +1 -1
  24. package/dist/es5/path-style/path-style-extension.js +81 -89
  25. package/dist/es5/path-style/path-style-extension.js.map +1 -1
  26. package/dist/es5/terrain/height-map-builder.js +73 -80
  27. package/dist/es5/terrain/height-map-builder.js.map +1 -1
  28. package/dist/es5/terrain/terrain-cover.js +155 -162
  29. package/dist/es5/terrain/terrain-cover.js.map +1 -1
  30. package/dist/es5/terrain/terrain-effect.js +233 -242
  31. package/dist/es5/terrain/terrain-effect.js.map +1 -1
  32. package/dist/es5/terrain/terrain-extension.js +44 -51
  33. package/dist/es5/terrain/terrain-extension.js.map +1 -1
  34. package/dist/es5/terrain/terrain-pass.js +61 -65
  35. package/dist/es5/terrain/terrain-pass.js.map +1 -1
  36. package/dist/es5/terrain/terrain-picking-pass.js +56 -62
  37. package/dist/es5/terrain/terrain-picking-pass.js.map +1 -1
  38. package/dist/esm/brushing/brushing-extension.js +2 -5
  39. package/dist/esm/brushing/brushing-extension.js.map +1 -1
  40. package/dist/esm/brushing/shader-module.js +67 -4
  41. package/dist/esm/brushing/shader-module.js.map +1 -1
  42. package/dist/esm/clip/clip-extension.js +33 -14
  43. package/dist/esm/clip/clip-extension.js.map +1 -1
  44. package/dist/esm/collision-filter/collision-filter-effect.js +10 -19
  45. package/dist/esm/collision-filter/collision-filter-effect.js.map +1 -1
  46. package/dist/esm/collision-filter/collision-filter-extension.js +2 -5
  47. package/dist/esm/collision-filter/collision-filter-extension.js.map +1 -1
  48. package/dist/esm/collision-filter/shader-module.js +76 -4
  49. package/dist/esm/collision-filter/shader-module.js.map +1 -1
  50. package/dist/esm/data-filter/aggregator.js +45 -2
  51. package/dist/esm/data-filter/aggregator.js.map +1 -1
  52. package/dist/esm/data-filter/data-filter-extension.js +2 -5
  53. package/dist/esm/data-filter/data-filter-extension.js.map +1 -1
  54. package/dist/esm/data-filter/shader-module.js +86 -6
  55. package/dist/esm/data-filter/shader-module.js.map +1 -1
  56. package/dist/esm/fill-style/fill-style-extension.js +2 -5
  57. package/dist/esm/fill-style/fill-style-extension.js.map +1 -1
  58. package/dist/esm/fill-style/shaders.glsl.js +60 -5
  59. package/dist/esm/fill-style/shaders.glsl.js.map +1 -1
  60. package/dist/esm/fp64/fp64-extension.js +1 -3
  61. package/dist/esm/fp64/fp64-extension.js.map +1 -1
  62. package/dist/esm/fp64/project64.glsl.js +81 -1
  63. package/dist/esm/fp64/project64.glsl.js.map +1 -1
  64. package/dist/esm/mask/mask-effect.js +10 -20
  65. package/dist/esm/mask/mask-effect.js.map +1 -1
  66. package/dist/esm/mask/mask-extension.js +3 -6
  67. package/dist/esm/mask/mask-extension.js.map +1 -1
  68. package/dist/esm/mask/mask-pass.js +2 -6
  69. package/dist/esm/mask/mask-pass.js.map +1 -1
  70. package/dist/esm/mask/shader-module.js +61 -6
  71. package/dist/esm/mask/shader-module.js.map +1 -1
  72. package/dist/esm/path-style/path-style-extension.js +2 -5
  73. package/dist/esm/path-style/path-style-extension.js.map +1 -1
  74. package/dist/esm/path-style/shaders.glsl.js +79 -8
  75. package/dist/esm/path-style/shaders.glsl.js.map +1 -1
  76. package/dist/esm/terrain/height-map-builder.js +8 -17
  77. package/dist/esm/terrain/height-map-builder.js.map +1 -1
  78. package/dist/esm/terrain/shader-module.js +59 -7
  79. package/dist/esm/terrain/shader-module.js.map +1 -1
  80. package/dist/esm/terrain/terrain-cover.js +11 -22
  81. package/dist/esm/terrain/terrain-cover.js.map +1 -1
  82. package/dist/esm/terrain/terrain-effect.js +11 -21
  83. package/dist/esm/terrain/terrain-effect.js.map +1 -1
  84. package/dist/esm/terrain/terrain-extension.js +2 -5
  85. package/dist/esm/terrain/terrain-extension.js.map +1 -1
  86. package/dist/esm/terrain/terrain-pass.js +1 -1
  87. package/dist/esm/terrain/terrain-pass.js.map +1 -1
  88. package/dist/esm/terrain/terrain-picking-pass.js +2 -4
  89. package/dist/esm/terrain/terrain-picking-pass.js.map +1 -1
  90. package/dist.min.js +36 -35
  91. package/package.json +2 -2
@@ -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
- (0, _createClass2.default)(MaskExtension, [{
49
- key: "initializeState",
50
- value: function initializeState() {
51
- var _this$context$deck;
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
- (_this$context$deck = this.context.deck) === null || _this$context$deck === void 0 ? void 0 : _this$context$deck._addDefaultEffect(new _maskEffect.default());
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
- if (this.props.maskByInstance !== undefined) {
61
- maskByInstance = Boolean(this.props.maskByInstance);
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
- this.state.maskByInstance = maskByInstance;
65
- return {
66
- modules: [_shaderModule.default]
90
+ var opts = {
91
+ modelMatrix: null,
92
+ fromCoordinateOrigin: fromCoordinateOrigin,
93
+ fromCoordinateSystem: fromCoordinateSystem
67
94
  };
68
- }
69
- }, {
70
- key: "draw",
71
- value: function draw(_ref) {
72
- var uniforms = _ref.uniforms,
73
- context = _ref.context,
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
- (0, _defineProperty2.default)(MaskExtension, "defaultProps", defaultProps);
118
- (0, _defineProperty2.default)(MaskExtension, "extensionName", 'MaskExtension');
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":"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","sourcesContent":["import {COORDINATE_SYSTEM, Layer, LayerExtension, log} from '@deck.gl/core';\nimport mask from './shader-module';\nimport MaskEffect from './mask-effect';\n\nconst defaultProps = {\n maskId: '',\n maskByInstance: undefined,\n maskInverted: false\n};\n\nexport type MaskExtensionProps = {\n /**\n * Id of the layer that defines the mask. The mask layer must use the prop `operation: 'mask'`.\n * Masking is disabled if `maskId` is empty or no valid mask layer with the specified id is found.\n */\n maskId?: string;\n /**\n * controls whether an object is clipped by its anchor (usually defined by an accessor called `getPosition`, e.g. icon, scatterplot) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n maskByInstance?: boolean;\n /**\n * Inverts the masking operation\n */\n maskInverted?: boolean;\n};\n\n/** Allows layers to show/hide objects by a geofence. */\nexport default class MaskExtension extends LayerExtension {\n static defaultProps = defaultProps;\n static extensionName = 'MaskExtension';\n\n initializeState(this: Layer<MaskExtensionProps>) {\n this.context.deck?._addDefaultEffect(new MaskEffect());\n }\n\n getShaders(this: Layer<MaskExtensionProps>): any {\n // Infer by geometry if 'maskByInstance' prop isn't explictly set\n let maskByInstance = 'instancePositions' in this.getAttributeManager()!.attributes;\n // Users can override by setting the `maskByInstance` prop\n if (this.props.maskByInstance !== undefined) {\n maskByInstance = Boolean(this.props.maskByInstance);\n }\n this.state.maskByInstance = maskByInstance;\n\n return {\n modules: [mask]\n };\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer<Required<MaskExtensionProps>>, {uniforms, context, moduleParameters}: any) {\n uniforms.mask_maskByInstance = this.state.maskByInstance;\n const {maskId, maskInverted} = this.props;\n const {maskChannels} = moduleParameters;\n const {viewport} = context;\n if (maskChannels && maskChannels[maskId]) {\n const {index, bounds, coordinateOrigin: fromCoordinateOrigin} = maskChannels[maskId];\n let {coordinateSystem: fromCoordinateSystem} = maskChannels[maskId];\n uniforms.mask_enabled = true;\n uniforms.mask_channel = index;\n uniforms.mask_inverted = maskInverted;\n\n if (fromCoordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n fromCoordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n const opts = {modelMatrix: null, fromCoordinateOrigin, fromCoordinateSystem};\n const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);\n const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);\n uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];\n } else {\n if (maskId) {\n log.warn(`Could not find a mask layer with id: ${maskId}`)();\n }\n uniforms.mask_enabled = false;\n }\n }\n}\n"],"file":"mask-extension.js"}
1
+ {"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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
11
 
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
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
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "maskMap", void 0);
51
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fbo", void 0);
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
- (0, _createClass2.default)(MaskPass, [{
69
- key: "render",
70
- value: function render(options) {
71
- var _this2 = this;
72
-
73
- var gl = this.gl;
74
- var colorMask = [false, false, false, false];
75
- colorMask[options.channel] = true;
76
- return (0, _core.withParameters)(gl, {
77
- clearColor: [255, 255, 255, 255],
78
- blend: true,
79
- blendFunc: [0, 1],
80
- blendEquation: 32778,
81
- colorMask: colorMask,
82
- depthTest: false
83
- }, function () {
84
- return (0, _get2.default)((0, _getPrototypeOf2.default)(MaskPass.prototype), "render", _this2).call(_this2, _objectSpread(_objectSpread({}, options), {}, {
85
- target: _this2.fbo,
86
- pass: 'mask'
87
- }));
88
- });
89
- }
90
- }, {
91
- key: "shouldDrawLayer",
92
- value: function shouldDrawLayer(layer) {
93
- return layer.props.operation.includes('mask');
94
- }
95
- }, {
96
- key: "delete",
97
- value: function _delete() {
98
- this.fbo.delete();
99
- this.maskMap.delete();
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","mapSize","maskMap","Texture2D","width","height","parameters","fbo","Framebuffer","id","attachments","options","colorMask","channel","clearColor","blend","blendFunc","blendEquation","depthTest","target","pass","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;AAAA;AAGrD,yBAAyBA,KAAzB,CAAOC,OAAP;AAAA,QAAOA,OAAP,+BAAiB,IAAjB;AAEA,UAAKC,OAAL,GAAe,IAAIC,eAAJ,CAAcJ,EAAd,EAAkB;AAC/BK,MAAAA,KAAK,EAAEH,OADwB;AAE/BI,MAAAA,MAAM,EAAEJ,OAFuB;AAG/BK,MAAAA,UAAU;AAHqB,KAAlB,CAAf;AAWA,UAAKC,GAAL,GAAW,IAAIC,iBAAJ,CAAgBT,EAAhB,EAAoB;AAC7BU,MAAAA,EAAE,EAAE,SADyB;AAE7BL,MAAAA,KAAK,EAAEH,OAFsB;AAG7BI,MAAAA,MAAM,EAAEJ,OAHqB;AAI7BS,MAAAA,WAAW,2CACe,MAAKR,OADpB;AAJkB,KAApB,CAAX;AAhBqD;AAwBtD;;;;WAED,gBAAOS,OAAP,EAAuC;AAAA;;AACrC,UAAMZ,EAAE,GAAG,KAAKA,EAAhB;AAEA,UAAMa,SAAS,GAAG,CAAC,KAAD,EAAQ,KAAR,EAAe,KAAf,EAAsB,KAAtB,CAAlB;AACAA,MAAAA,SAAS,CAACD,OAAO,CAACE,OAAT,CAAT,GAA6B,IAA7B;AAEA,aAAO,0BACLd,EADK,EAEL;AACEe,QAAAA,UAAU,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,CADd;AAEEC,QAAAA,KAAK,EAAE,IAFT;AAGEC,QAAAA,SAAS,EAAE,MAHb;AAIEC,QAAAA,aAAa,OAJf;AAKEL,QAAAA,SAAS,EAATA,SALF;AAMEM,QAAAA,SAAS,EAAE;AANb,OAFK,EAUL;AAAA,oJAAuBP,OAAvB;AAAgCQ,UAAAA,MAAM,EAAE,MAAI,CAACZ,GAA7C;AAAkDa,UAAAA,IAAI,EAAE;AAAxD;AAAA,OAVK,CAAP;AAYD;;;WAED,yBAAgBC,KAAhB,EAAuB;AACrB,aAAOA,KAAK,CAACrB,KAAN,CAAYsB,SAAZ,CAAsBC,QAAtB,CAA+B,MAA/B,CAAP;AACD;;;WAED,mBAAS;AACP,WAAKhB,GAAL,CAASiB,MAAT;AACA,WAAKtB,OAAL,CAAasB,MAAb;AACD;;;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"}
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
- (0, _createClass2.default)(PathStyleExtension, [{
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
- var result = {};
65
+ _proto.isEnabled = function isEnabled(layer) {
66
+ return 'pathTesselator' in layer.state;
67
+ };
80
68
 
81
- if (extension.opts.dash) {
82
- result = (0, _core._mergeShaders)(result, _shaders.dashShaders);
83
- }
69
+ _proto.getShaders = function getShaders(extension) {
70
+ if (!extension.isEnabled(this)) {
71
+ return null;
72
+ }
84
73
 
85
- if (extension.opts.offset) {
86
- result = (0, _core._mergeShaders)(result, _shaders.offsetShaders);
87
- }
74
+ var result = {};
88
75
 
89
- return result;
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
- if (!attributeManager || !extension.isEnabled(this)) {
97
- return;
98
- }
80
+ if (extension.opts.offset) {
81
+ result = (0, _core._mergeShaders)(result, _shaders.offsetShaders);
82
+ }
99
83
 
100
- if (extension.opts.dash) {
101
- attributeManager.addInstanced({
102
- instanceDashArrays: {
103
- size: 2,
104
- accessor: 'getDashArray'
105
- }
106
- });
107
- }
84
+ return result;
85
+ };
108
86
 
109
- if (extension.opts.highPrecisionDash) {
110
- attributeManager.addInstanced({
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
- if (extension.opts.offset) {
120
- attributeManager.addInstanced({
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
- if (extension.opts.dash) {
138
- uniforms.dashAlignMode = this.props.dashJustified ? 1 : 0;
139
- uniforms.dashGapPickable = Boolean(this.props.dashGapPickable);
140
- }
94
+ if (extension.opts.dash) {
95
+ attributeManager.addInstanced({
96
+ instanceDashArrays: {
97
+ size: 2,
98
+ accessor: 'getDashArray'
99
+ }
100
+ });
101
+ }
141
102
 
142
- this.state.model.setUniforms(uniforms);
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
- key: "getDashOffsets",
146
- value: function getDashOffsets(path) {
147
- var result = [0];
148
- var positionSize = this.props.positionFormat === 'XY' ? 2 : 3;
149
- var isNested = Array.isArray(path[0]);
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
- prevP = p;
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
- return result;
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
- (0, _defineProperty2.default)(PathStyleExtension, "defaultProps", defaultProps);
173
- (0, _defineProperty2.default)(PathStyleExtension, "extensionName", 'PathStyleExtension');
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","extension","isEnabled","result","opts","dashShaders","offsetShaders","context","attributeManager","getAttributeManager","addInstanced","instanceDashArrays","size","accessor","instanceDashOffsets","transform","getDashOffsets","bind","instanceOffsets","params","uniforms","dashAlignMode","props","Boolean","model","setUniforms","path","positionSize","positionFormat","isNested","Array","isArray","geometrySize","length","p","prevP","i","slice","projectPosition","LayerExtension"],"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"}
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"}