@deck.gl/geo-layers 8.10.0-alpha.4 → 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.
Files changed (84) hide show
  1. package/dist/dist.dev.js +23 -666
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js +66 -69
  3. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
  4. package/dist/es5/geohash-layer/geohash-layer.js +18 -22
  5. package/dist/es5/geohash-layer/geohash-layer.js.map +1 -1
  6. package/dist/es5/great-circle-layer/great-circle-layer.js +2 -4
  7. package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
  8. package/dist/es5/h3-layers/h3-cluster-layer.js +85 -91
  9. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  10. package/dist/es5/h3-layers/h3-hexagon-layer.js +222 -234
  11. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  12. package/dist/es5/index.js.map +1 -1
  13. package/dist/es5/mesh-layer/mesh-layer.js +126 -136
  14. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  15. package/dist/es5/mvt-layer/mvt-layer.js +338 -350
  16. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  17. package/dist/es5/quadkey-layer/quadkey-layer.js +23 -27
  18. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  19. package/dist/es5/s2-layer/s2-layer.js +18 -22
  20. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  21. package/dist/es5/terrain-layer/terrain-layer.js +225 -234
  22. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  23. package/dist/es5/tile-3d-layer/tile-3d-layer.js +338 -354
  24. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  25. package/dist/es5/tile-layer/tile-layer.js +219 -234
  26. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  27. package/dist/es5/tileset-2d/tile-2d-header.js +160 -164
  28. package/dist/es5/tileset-2d/tile-2d-header.js.map +1 -1
  29. package/dist/es5/tileset-2d/tile-2d-traversal.js +118 -122
  30. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -1
  31. package/dist/es5/tileset-2d/tileset-2d.js +397 -411
  32. package/dist/es5/tileset-2d/tileset-2d.js.map +1 -1
  33. package/dist/es5/trips-layer/trips-layer.js +48 -52
  34. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  35. package/dist/es5/wms-layer/wms-layer.js +263 -274
  36. package/dist/es5/wms-layer/wms-layer.js.map +1 -1
  37. package/dist/esm/geo-cell-layer/GeoCellLayer.js +2 -5
  38. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  39. package/dist/esm/geohash-layer/geohash-layer.js +2 -5
  40. package/dist/esm/geohash-layer/geohash-layer.js.map +1 -1
  41. package/dist/esm/great-circle-layer/great-circle-layer.js +2 -5
  42. package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
  43. package/dist/esm/h3-layers/h3-cluster-layer.js +2 -5
  44. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  45. package/dist/esm/h3-layers/h3-hexagon-layer.js +4 -8
  46. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +55 -1
  49. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +1 -1
  50. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +80 -1
  51. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
  52. package/dist/esm/mesh-layer/mesh-layer.js +2 -5
  53. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  54. package/dist/esm/mvt-layer/mvt-layer.js +2 -5
  55. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  56. package/dist/esm/quadkey-layer/quadkey-layer.js +2 -5
  57. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  58. package/dist/esm/s2-layer/s2-geometry.js +1 -1
  59. package/dist/esm/s2-layer/s2-geometry.js.map +1 -1
  60. package/dist/esm/s2-layer/s2-layer.js +2 -5
  61. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  62. package/dist/esm/terrain-layer/terrain-layer.js +3 -7
  63. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  64. package/dist/esm/tile-3d-layer/tile-3d-layer.js +7 -11
  65. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  66. package/dist/esm/tile-layer/tile-layer.js +2 -5
  67. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  68. package/dist/esm/tileset-2d/tile-2d-header.js +19 -39
  69. package/dist/esm/tileset-2d/tile-2d-header.js.map +1 -1
  70. package/dist/esm/tileset-2d/tile-2d-traversal.js +6 -13
  71. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -1
  72. package/dist/esm/tileset-2d/tileset-2d.js +17 -34
  73. package/dist/esm/tileset-2d/tileset-2d.js.map +1 -1
  74. package/dist/esm/tileset-2d/utils.js +1 -1
  75. package/dist/esm/tileset-2d/utils.js.map +1 -1
  76. package/dist/esm/trips-layer/trips-layer.js +27 -10
  77. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  78. package/dist/esm/wms-layer/wms-layer.js +3 -7
  79. package/dist/esm/wms-layer/wms-layer.js.map +1 -1
  80. package/dist.min.js +111 -56
  81. package/package.json +2 -2
  82. package/src/index.ts +1 -0
  83. package/typed/index.d.ts +1 -0
  84. package/typed/index.d.ts.map +1 -1
@@ -7,9 +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"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
13
 
14
14
  var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
15
 
@@ -19,8 +19,6 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
19
19
 
20
20
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
21
 
22
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
22
  var _experimental = require("@luma.gl/experimental");
25
23
 
26
24
  var _core = require("@luma.gl/core");
@@ -72,151 +70,143 @@ var MeshLayer = function (_SimpleMeshLayer) {
72
70
  return _super.apply(this, arguments);
73
71
  }
74
72
 
75
- (0, _createClass2.default)(MeshLayer, [{
76
- key: "getShaders",
77
- value: function getShaders() {
78
- var shaders = (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "getShaders", this).call(this);
79
- var modules = shaders.modules;
80
- modules.push(_core.pbr);
81
- return _objectSpread(_objectSpread({}, shaders), {}, {
82
- vs: _meshLayerVertex.default,
83
- fs: _meshLayerFragment.default
73
+ var _proto = MeshLayer.prototype;
74
+
75
+ _proto.getShaders = function getShaders() {
76
+ var shaders = (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "getShaders", this).call(this);
77
+ var modules = shaders.modules;
78
+ modules.push(_core.pbr);
79
+ return _objectSpread(_objectSpread({}, shaders), {}, {
80
+ vs: _meshLayerVertex.default,
81
+ fs: _meshLayerFragment.default
82
+ });
83
+ };
84
+
85
+ _proto.initializeState = function initializeState() {
86
+ var featureIds = this.props.featureIds;
87
+ (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "initializeState", this).call(this);
88
+ var attributeManager = this.getAttributeManager();
89
+
90
+ if (featureIds) {
91
+ attributeManager.add({
92
+ featureIdsPickingColors: {
93
+ type: 5121,
94
+ size: 3,
95
+ noAlloc: true,
96
+ update: this.calculateFeatureIdsPickingColors
97
+ }
84
98
  });
85
99
  }
86
- }, {
87
- key: "initializeState",
88
- value: function initializeState() {
89
- var featureIds = this.props.featureIds;
90
- (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "initializeState", this).call(this);
91
- var attributeManager = this.getAttributeManager();
92
-
93
- if (featureIds) {
94
- attributeManager.add({
95
- featureIdsPickingColors: {
96
- type: 5121,
97
- size: 3,
98
- noAlloc: true,
99
- update: this.calculateFeatureIdsPickingColors
100
- }
101
- });
102
- }
103
- }
104
- }, {
105
- key: "updateState",
106
- value: function updateState(params) {
107
- (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "updateState", this).call(this, params);
108
- var props = params.props,
109
- oldProps = params.oldProps;
110
-
111
- if (props.pbrMaterial !== oldProps.pbrMaterial) {
112
- this.updatePbrMaterialUniforms(props.pbrMaterial);
113
- }
100
+ };
101
+
102
+ _proto.updateState = function updateState(params) {
103
+ (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "updateState", this).call(this, params);
104
+ var props = params.props,
105
+ oldProps = params.oldProps;
106
+
107
+ if (props.pbrMaterial !== oldProps.pbrMaterial) {
108
+ this.updatePbrMaterialUniforms(props.pbrMaterial);
114
109
  }
115
- }, {
116
- key: "draw",
117
- value: function draw(opts) {
118
- var featureIds = this.props.featureIds;
119
-
120
- if (!this.state.model) {
121
- return;
122
- }
123
-
124
- this.state.model.setUniforms({
125
- u_Camera: this.state.model.getUniforms().project_uCameraPosition,
126
- pickFeatureIds: Boolean(featureIds)
127
- });
128
- (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "draw", this).call(this, opts);
110
+ };
111
+
112
+ _proto.draw = function draw(opts) {
113
+ var featureIds = this.props.featureIds;
114
+
115
+ if (!this.state.model) {
116
+ return;
129
117
  }
130
- }, {
131
- key: "getModel",
132
- value: function getModel(mesh) {
133
- var _this$props = this.props,
134
- id = _this$props.id,
135
- pbrMaterial = _this$props.pbrMaterial;
118
+
119
+ this.state.model.setUniforms({
120
+ u_Camera: this.state.model.getUniforms().project_uCameraPosition,
121
+ pickFeatureIds: Boolean(featureIds)
122
+ });
123
+ (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "draw", this).call(this, opts);
124
+ };
125
+
126
+ _proto.getModel = function getModel(mesh) {
127
+ var _this$props = this.props,
128
+ id = _this$props.id,
129
+ pbrMaterial = _this$props.pbrMaterial;
130
+ var materialParser = this.parseMaterial(pbrMaterial, mesh);
131
+ this.setState({
132
+ materialParser: materialParser
133
+ });
134
+ var shaders = this.getShaders();
135
+ validateGeometryAttributes(mesh.attributes);
136
+ var model = new _core.Model(this.context.gl, _objectSpread(_objectSpread({}, this.getShaders()), {}, {
137
+ id: id,
138
+ geometry: mesh,
139
+ defines: _objectSpread(_objectSpread(_objectSpread({}, shaders.defines), materialParser === null || materialParser === void 0 ? void 0 : materialParser.defines), {}, {
140
+ HAS_UV_REGIONS: mesh.attributes.uvRegions
141
+ }),
142
+ parameters: materialParser === null || materialParser === void 0 ? void 0 : materialParser.parameters,
143
+ isInstanced: true
144
+ }));
145
+ return model;
146
+ };
147
+
148
+ _proto.updatePbrMaterialUniforms = function updatePbrMaterialUniforms(pbrMaterial) {
149
+ var model = this.state.model;
150
+
151
+ if (model) {
152
+ var mesh = this.props.mesh;
136
153
  var materialParser = this.parseMaterial(pbrMaterial, mesh);
137
154
  this.setState({
138
155
  materialParser: materialParser
139
156
  });
140
- var shaders = this.getShaders();
141
- validateGeometryAttributes(mesh.attributes);
142
- var model = new _core.Model(this.context.gl, _objectSpread(_objectSpread({}, this.getShaders()), {}, {
143
- id: id,
144
- geometry: mesh,
145
- defines: _objectSpread(_objectSpread(_objectSpread({}, shaders.defines), materialParser === null || materialParser === void 0 ? void 0 : materialParser.defines), {}, {
146
- HAS_UV_REGIONS: mesh.attributes.uvRegions
147
- }),
148
- parameters: materialParser === null || materialParser === void 0 ? void 0 : materialParser.parameters,
149
- isInstanced: true
150
- }));
151
- return model;
152
- }
153
- }, {
154
- key: "updatePbrMaterialUniforms",
155
- value: function updatePbrMaterialUniforms(pbrMaterial) {
156
- var model = this.state.model;
157
-
158
- if (model) {
159
- var mesh = this.props.mesh;
160
- var materialParser = this.parseMaterial(pbrMaterial, mesh);
161
- this.setState({
162
- materialParser: materialParser
163
- });
164
- model.setUniforms(materialParser.uniforms);
165
- }
157
+ model.setUniforms(materialParser.uniforms);
166
158
  }
167
- }, {
168
- key: "parseMaterial",
169
- value: function parseMaterial(pbrMaterial, mesh) {
170
- var _this$state$materialP;
171
-
172
- var unlit = Boolean(pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture);
173
- (_this$state$materialP = this.state.materialParser) === null || _this$state$materialP === void 0 ? void 0 : _this$state$materialP.delete();
174
- return new _experimental.GLTFMaterialParser(this.context.gl, {
175
- attributes: {
176
- NORMAL: mesh.attributes.normals,
177
- TEXCOORD_0: mesh.attributes.texCoords
178
- },
179
- material: _objectSpread({
180
- unlit: unlit
181
- }, pbrMaterial),
182
- pbrDebug: false,
183
- imageBasedLightingEnvironment: null,
184
- lights: true,
185
- useTangents: false
186
- });
159
+ };
160
+
161
+ _proto.parseMaterial = function parseMaterial(pbrMaterial, mesh) {
162
+ var _this$state$materialP;
163
+
164
+ var unlit = Boolean(pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture);
165
+ (_this$state$materialP = this.state.materialParser) === null || _this$state$materialP === void 0 ? void 0 : _this$state$materialP.delete();
166
+ return new _experimental.GLTFMaterialParser(this.context.gl, {
167
+ attributes: {
168
+ NORMAL: mesh.attributes.normals,
169
+ TEXCOORD_0: mesh.attributes.texCoords
170
+ },
171
+ material: _objectSpread({
172
+ unlit: unlit
173
+ }, pbrMaterial),
174
+ pbrDebug: false,
175
+ imageBasedLightingEnvironment: null,
176
+ lights: true,
177
+ useTangents: false
178
+ });
179
+ };
180
+
181
+ _proto.calculateFeatureIdsPickingColors = function calculateFeatureIdsPickingColors(attribute) {
182
+ var featureIds = this.props.featureIds;
183
+ var value = new Uint8ClampedArray(featureIds.length * attribute.size);
184
+ var pickingColor = [];
185
+
186
+ for (var index = 0; index < featureIds.length; index++) {
187
+ this.encodePickingColor(featureIds[index], pickingColor);
188
+ value[index * 3] = pickingColor[0];
189
+ value[index * 3 + 1] = pickingColor[1];
190
+ value[index * 3 + 2] = pickingColor[2];
187
191
  }
188
- }, {
189
- key: "calculateFeatureIdsPickingColors",
190
- value: function calculateFeatureIdsPickingColors(attribute) {
191
- var featureIds = this.props.featureIds;
192
- var value = new Uint8ClampedArray(featureIds.length * attribute.size);
193
- var pickingColor = [];
194
-
195
- for (var index = 0; index < featureIds.length; index++) {
196
- this.encodePickingColor(featureIds[index], pickingColor);
197
- value[index * 3] = pickingColor[0];
198
- value[index * 3 + 1] = pickingColor[1];
199
- value[index * 3 + 2] = pickingColor[2];
200
- }
201
-
202
- attribute.value = value;
203
- }
204
- }, {
205
- key: "finalizeState",
206
- value: function finalizeState(context) {
207
- var _this$state$materialP2;
208
192
 
209
- (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "finalizeState", this).call(this, context);
210
- (_this$state$materialP2 = this.state.materialParser) === null || _this$state$materialP2 === void 0 ? void 0 : _this$state$materialP2.delete();
211
- this.setState({
212
- materialParser: null
213
- });
214
- }
215
- }]);
193
+ attribute.value = value;
194
+ };
195
+
196
+ _proto.finalizeState = function finalizeState(context) {
197
+ var _this$state$materialP2;
198
+
199
+ (0, _get2.default)((0, _getPrototypeOf2.default)(MeshLayer.prototype), "finalizeState", this).call(this, context);
200
+ (_this$state$materialP2 = this.state.materialParser) === null || _this$state$materialP2 === void 0 ? void 0 : _this$state$materialP2.delete();
201
+ this.setState({
202
+ materialParser: null
203
+ });
204
+ };
205
+
216
206
  return MeshLayer;
217
207
  }(_meshLayers.SimpleMeshLayer);
218
208
 
219
209
  exports.default = MeshLayer;
220
- (0, _defineProperty2.default)(MeshLayer, "layerName", 'MeshLayer');
221
- (0, _defineProperty2.default)(MeshLayer, "defaultProps", defaultProps);
210
+ MeshLayer.layerName = 'MeshLayer';
211
+ MeshLayer.defaultProps = defaultProps;
222
212
  //# sourceMappingURL=mesh-layer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mesh-layer/mesh-layer.ts"],"names":["validateGeometryAttributes","attributes","hasColorAttribute","COLOR_0","colors","constant","value","Float32Array","defaultProps","pbrMaterial","type","featureIds","optional","MeshLayer","shaders","modules","push","pbr","vs","fs","props","attributeManager","getAttributeManager","add","featureIdsPickingColors","size","noAlloc","update","calculateFeatureIdsPickingColors","params","oldProps","updatePbrMaterialUniforms","opts","state","model","setUniforms","u_Camera","getUniforms","project_uCameraPosition","pickFeatureIds","Boolean","mesh","id","materialParser","parseMaterial","setState","getShaders","Model","context","gl","geometry","defines","HAS_UV_REGIONS","uvRegions","parameters","isInstanced","uniforms","unlit","pbrMetallicRoughness","baseColorTexture","delete","GLTFMaterialParser","NORMAL","normals","TEXCOORD_0","texCoords","material","pbrDebug","imageBasedLightingEnvironment","lights","useTangents","attribute","Uint8ClampedArray","length","pickingColor","index","encodePickingColor","SimpleMeshLayer"],"mappings":"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","sourcesContent":["import type {NumericArray} from '@math.gl/core';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\nimport {Model, pbr} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes) {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n}\n\nconst defaultProps: DefaultProps<MeshLayerProps> = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps<DataT = any> = _MeshLayerProps & SimpleMeshLayerProps<DataT>;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbr);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n if (!this.state.model) {\n return;\n }\n this.state.model.setUniforms({\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: this.state.model.getUniforms().project_uCameraPosition,\n pickFeatureIds: Boolean(featureIds)\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id, pbrMaterial} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n defines: {\n ...shaders.defines,\n ...materialParser?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions\n },\n parameters: materialParser?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(pbrMaterial) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n model.setUniforms(materialParser.uniforms);\n }\n }\n\n parseMaterial(pbrMaterial, mesh) {\n const unlit = Boolean(\n pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture\n );\n\n this.state.materialParser?.delete();\n\n return new GLTFMaterialParser(this.context.gl, {\n attributes: {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n material: {unlit, ...pbrMaterial},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n });\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.materialParser?.delete();\n this.setState({materialParser: null});\n }\n}\n"],"file":"mesh-layer.js"}
1
+ {"version":3,"sources":["../../../src/mesh-layer/mesh-layer.ts"],"names":["validateGeometryAttributes","attributes","hasColorAttribute","COLOR_0","colors","constant","value","Float32Array","defaultProps","pbrMaterial","type","featureIds","optional","MeshLayer","getShaders","shaders","modules","push","pbr","vs","fs","initializeState","props","attributeManager","getAttributeManager","add","featureIdsPickingColors","size","noAlloc","update","calculateFeatureIdsPickingColors","updateState","params","oldProps","updatePbrMaterialUniforms","draw","opts","state","model","setUniforms","u_Camera","getUniforms","project_uCameraPosition","pickFeatureIds","Boolean","getModel","mesh","id","materialParser","parseMaterial","setState","Model","context","gl","geometry","defines","HAS_UV_REGIONS","uvRegions","parameters","isInstanced","uniforms","unlit","pbrMetallicRoughness","baseColorTexture","delete","GLTFMaterialParser","NORMAL","normals","TEXCOORD_0","texCoords","material","pbrDebug","imageBasedLightingEnvironment","lights","useTangents","attribute","Uint8ClampedArray","length","pickingColor","index","encodePickingColor","finalizeState","SimpleMeshLayer","layerName"],"mappings":"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","sourcesContent":["import type {NumericArray} from '@math.gl/core';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\nimport {Model, pbr} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes) {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n}\n\nconst defaultProps: DefaultProps<MeshLayerProps> = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps<DataT = any> = _MeshLayerProps & SimpleMeshLayerProps<DataT>;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbr);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n if (!this.state.model) {\n return;\n }\n this.state.model.setUniforms({\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: this.state.model.getUniforms().project_uCameraPosition,\n pickFeatureIds: Boolean(featureIds)\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id, pbrMaterial} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n defines: {\n ...shaders.defines,\n ...materialParser?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions\n },\n parameters: materialParser?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(pbrMaterial) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n model.setUniforms(materialParser.uniforms);\n }\n }\n\n parseMaterial(pbrMaterial, mesh) {\n const unlit = Boolean(\n pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture\n );\n\n this.state.materialParser?.delete();\n\n return new GLTFMaterialParser(this.context.gl, {\n attributes: {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n material: {unlit, ...pbrMaterial},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n });\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.materialParser?.delete();\n this.setState({materialParser: null});\n }\n}\n"],"file":"mesh-layer.js"}