@deck.gl/geo-layers 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.
- package/dist/dist.dev.js +23 -666
- package/dist/es5/geo-cell-layer/GeoCellLayer.js +66 -69
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/es5/geohash-layer/geohash-layer.js +18 -22
- package/dist/es5/geohash-layer/geohash-layer.js.map +1 -1
- package/dist/es5/great-circle-layer/great-circle-layer.js +2 -4
- package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js +85 -91
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js +222 -234
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mesh-layer/mesh-layer.js +126 -136
- package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +338 -350
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-layer.js +23 -27
- package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/es5/s2-layer/s2-layer.js +18 -22
- package/dist/es5/s2-layer/s2-layer.js.map +1 -1
- package/dist/es5/terrain-layer/terrain-layer.js +225 -234
- package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +338 -354
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +219 -234
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tileset-2d/tile-2d-header.js +160 -164
- package/dist/es5/tileset-2d/tile-2d-header.js.map +1 -1
- package/dist/es5/tileset-2d/tile-2d-traversal.js +118 -122
- package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tileset-2d/tileset-2d.js +397 -411
- package/dist/es5/tileset-2d/tileset-2d.js.map +1 -1
- package/dist/es5/trips-layer/trips-layer.js +48 -52
- package/dist/es5/trips-layer/trips-layer.js.map +1 -1
- package/dist/es5/wms-layer/wms-layer.js +263 -274
- package/dist/es5/wms-layer/wms-layer.js.map +1 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js +2 -5
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/esm/geohash-layer/geohash-layer.js +2 -5
- package/dist/esm/geohash-layer/geohash-layer.js.map +1 -1
- package/dist/esm/great-circle-layer/great-circle-layer.js +2 -5
- package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-cluster-layer.js +2 -5
- package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +4 -8
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +55 -1
- package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +80 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer.js +2 -5
- package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +2 -5
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-layer.js +2 -5
- package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/esm/s2-layer/s2-geometry.js +1 -1
- package/dist/esm/s2-layer/s2-geometry.js.map +1 -1
- package/dist/esm/s2-layer/s2-layer.js +2 -5
- package/dist/esm/s2-layer/s2-layer.js.map +1 -1
- package/dist/esm/terrain-layer/terrain-layer.js +3 -7
- package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +7 -11
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +2 -5
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tileset-2d/tile-2d-header.js +19 -39
- package/dist/esm/tileset-2d/tile-2d-header.js.map +1 -1
- package/dist/esm/tileset-2d/tile-2d-traversal.js +6 -13
- package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tileset-2d/tileset-2d.js +17 -34
- package/dist/esm/tileset-2d/tileset-2d.js.map +1 -1
- package/dist/esm/tileset-2d/utils.js +1 -1
- package/dist/esm/tileset-2d/utils.js.map +1 -1
- package/dist/esm/trips-layer/trips-layer.js +27 -10
- package/dist/esm/trips-layer/trips-layer.js.map +1 -1
- package/dist/esm/wms-layer/wms-layer.js +3 -7
- package/dist/esm/wms-layer/wms-layer.js.map +1 -1
- package/dist.min.js +111 -56
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/typed/index.d.ts +1 -0
- 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
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
12
|
-
var
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
221
|
-
|
|
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"}
|