@deck.gl/geo-layers 8.10.0-alpha.2 → 8.10.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/dist.dev.js +76 -694
- 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 -233
- 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 +6 -8
- 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 +11 -11
- package/src/index.ts +1 -0
- package/src/tile-layer/tile-layer.ts +3 -2
- package/typed/index.d.ts +1 -0
- package/typed/index.d.ts.map +1 -1
- package/typed/tile-layer/tile-layer.d.ts.map +1 -1
- package/typed/geo-cell-layer/GeoCellLayer.js +0 -49
- package/typed/great-circle-layer/great-circle-layer.js +0 -29
- package/typed/h3-layers/h3-cluster-layer.js +0 -33
- package/typed/h3-layers/h3-hexagon-layer.js +0 -251
- package/typed/imagery-layer/imagery-layer.d.ts +0 -53
- package/typed/imagery-layer/imagery-layer.d.ts.map +0 -1
- package/typed/index.js +0 -33
- package/typed/mesh-layer/mesh-layer-fragment.glsl.js +0 -55
- package/typed/mesh-layer/mesh-layer-vertex.glsl.js +0 -80
- package/typed/mesh-layer/mesh-layer.js +0 -110
- package/typed/mvt-layer/coordinate-transform.js +0 -41
- package/typed/mvt-layer/find-index-binary.js +0 -96
- package/typed/mvt-layer/mvt-layer.js +0 -297
- package/typed/quadkey-layer/quadkey-layer.js +0 -18
- package/typed/quadkey-layer/quadkey-utils.js +0 -26
- package/typed/s2-layer/s2-geometry.js +0 -123
- package/typed/s2-layer/s2-layer.js +0 -37
- package/typed/s2-layer/s2-utils.js +0 -88
- package/typed/terrain-layer/terrain-layer.js +0 -226
- package/typed/tile-3d-layer/tile-3d-layer.js +0 -294
- package/typed/tile-layer/tile-2d-header.d.ts +0 -40
- package/typed/tile-layer/tile-2d-header.d.ts.map +0 -1
- package/typed/tile-layer/tile-2d-header.js +0 -113
- package/typed/tile-layer/tile-2d-traversal.d.ts +0 -4
- package/typed/tile-layer/tile-2d-traversal.d.ts.map +0 -1
- package/typed/tile-layer/tile-2d-traversal.js +0 -181
- package/typed/tile-layer/tile-layer.js +0 -192
- package/typed/tile-layer/tileset-2d.d.ts +0 -96
- package/typed/tile-layer/tileset-2d.d.ts.map +0 -1
- package/typed/tile-layer/tileset-2d.js +0 -399
- package/typed/tile-layer/types.d.ts +0 -30
- package/typed/tile-layer/types.d.ts.map +0 -1
- package/typed/tile-layer/types.js +0 -1
- package/typed/tile-layer/utils.d.ts +0 -51
- package/typed/tile-layer/utils.d.ts.map +0 -1
- package/typed/tile-layer/utils.js +0 -197
- package/typed/trips-layer/trips-layer.js +0 -92
|
@@ -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"}
|