@loaders.gl/draco 4.2.0-alpha.4 → 4.2.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 +268 -79
- package/dist/dist.min.js +11 -0
- package/dist/draco-loader.d.ts +2 -2
- package/dist/draco-loader.d.ts.map +1 -1
- package/dist/draco-loader.js +23 -17
- package/dist/draco-worker-node.js +186 -127
- package/dist/draco-worker-node.js.map +3 -3
- package/dist/draco-worker.js +5 -3
- package/dist/draco-worker.js.map +2 -2
- package/dist/draco-writer-worker-node.js +188 -127
- package/dist/draco-writer-worker-node.js.map +3 -3
- package/dist/draco-writer-worker.js +5 -3
- package/dist/draco-writer-worker.js.map +2 -2
- package/dist/draco-writer.d.ts +2 -2
- package/dist/draco-writer.d.ts.map +1 -1
- package/dist/draco-writer.js +30 -23
- package/dist/draco3d/draco3d-types.js +48 -41
- package/dist/index.cjs +34 -71
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -21
- package/dist/lib/draco-builder.d.ts +2 -2
- package/dist/lib/draco-builder.d.ts.map +1 -1
- package/dist/lib/draco-builder.js +314 -243
- package/dist/lib/draco-module-loader.js +78 -62
- package/dist/lib/draco-parser.d.ts +2 -2
- package/dist/lib/draco-parser.d.ts.map +1 -1
- package/dist/lib/draco-parser.js +437 -323
- package/dist/lib/draco-types.js +1 -1
- package/dist/lib/utils/get-draco-schema.d.ts +1 -1
- package/dist/lib/utils/get-draco-schema.d.ts.map +1 -1
- package/dist/lib/utils/get-draco-schema.js +29 -32
- package/dist/lib/utils/version.js +4 -2
- package/dist/workers/draco-worker-node.js +1 -1
- package/dist/workers/draco-worker.js +0 -1
- package/dist/workers/draco-writer-worker-node.js +20 -25
- package/dist/workers/draco-writer-worker.js +19 -25
- package/package.json +10 -10
- package/dist/draco-loader.js.map +0 -1
- package/dist/draco-writer.js.map +0 -1
- package/dist/draco3d/draco3d-types.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/draco-builder.js.map +0 -1
- package/dist/lib/draco-module-loader.js.map +0 -1
- package/dist/lib/draco-parser.js.map +0 -1
- package/dist/lib/draco-types.js.map +0 -1
- package/dist/lib/utils/get-draco-schema.js.map +0 -1
- package/dist/lib/utils/version.js.map +0 -1
- package/dist/libs/libs/draco_decoder.wasm +0 -0
- package/dist/libs/libs/draco_encoder.js +0 -52
- package/dist/libs/libs/draco_wasm_wrapper.js +0 -117
- package/dist/workers/draco-worker-node.js.map +0 -1
- package/dist/workers/draco-worker.js.map +0 -1
- package/dist/workers/draco-writer-worker-node.js.map +0 -1
- package/dist/workers/draco-writer-worker.js.map +0 -1
package/dist/dist.dev.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
if (typeof exports === 'object' && typeof module === 'object')
|
|
3
3
|
module.exports = factory();
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
|
-
else if (typeof exports === 'object') exports['
|
|
6
|
-
else root['
|
|
5
|
+
else if (typeof exports === 'object') exports['loaders'] = factory();
|
|
6
|
+
else root['loaders'] = factory();})(globalThis, function () {
|
|
7
7
|
"use strict";
|
|
8
8
|
var __exports__ = (() => {
|
|
9
9
|
var __create = Object.create;
|
|
@@ -27,6 +27,7 @@ var __exports__ = (() => {
|
|
|
27
27
|
}
|
|
28
28
|
return to;
|
|
29
29
|
};
|
|
30
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
30
31
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
31
32
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
32
33
|
// file that has been converted to a CommonJS file using a Babel-
|
|
@@ -37,6 +38,13 @@ var __exports__ = (() => {
|
|
|
37
38
|
));
|
|
38
39
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
39
40
|
|
|
41
|
+
// external-global-plugin:@loaders.gl/core
|
|
42
|
+
var require_core = __commonJS({
|
|
43
|
+
"external-global-plugin:@loaders.gl/core"(exports, module) {
|
|
44
|
+
module.exports = globalThis.loaders;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
40
48
|
// (disabled):../worker-utils/src/lib/node/require-utils.node
|
|
41
49
|
var require_require_utils = __commonJS({
|
|
42
50
|
"(disabled):../worker-utils/src/lib/node/require-utils.node"() {
|
|
@@ -44,9 +52,9 @@ var __exports__ = (() => {
|
|
|
44
52
|
}
|
|
45
53
|
});
|
|
46
54
|
|
|
47
|
-
//
|
|
48
|
-
var
|
|
49
|
-
__export(
|
|
55
|
+
// bundle.ts
|
|
56
|
+
var bundle_exports = {};
|
|
57
|
+
__export(bundle_exports, {
|
|
50
58
|
DRACO_EXTERNAL_LIBRARIES: () => DRACO_EXTERNAL_LIBRARIES,
|
|
51
59
|
DRACO_EXTERNAL_LIBRARY_URLS: () => DRACO_EXTERNAL_LIBRARY_URLS,
|
|
52
60
|
DracoLoader: () => DracoLoader2,
|
|
@@ -54,15 +62,17 @@ var __exports__ = (() => {
|
|
|
54
62
|
DracoWriter: () => DracoWriter,
|
|
55
63
|
DracoWriterWorker: () => DracoWriterWorker
|
|
56
64
|
});
|
|
65
|
+
__reExport(bundle_exports, __toESM(require_core(), 1));
|
|
57
66
|
|
|
58
67
|
// src/lib/utils/version.ts
|
|
59
|
-
var VERSION =
|
|
68
|
+
var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
60
69
|
|
|
61
70
|
// src/draco-loader.ts
|
|
62
71
|
var DracoLoader = {
|
|
63
72
|
name: "Draco",
|
|
64
73
|
id: "draco",
|
|
65
74
|
module: "draco",
|
|
75
|
+
// shapes: ['mesh'],
|
|
66
76
|
version: VERSION,
|
|
67
77
|
worker: true,
|
|
68
78
|
extensions: ["drc"],
|
|
@@ -72,6 +82,7 @@ var __exports__ = (() => {
|
|
|
72
82
|
options: {
|
|
73
83
|
draco: {
|
|
74
84
|
decoderType: typeof WebAssembly === "object" ? "wasm" : "js",
|
|
85
|
+
// 'js' for IE11
|
|
75
86
|
libraryPath: "libs/",
|
|
76
87
|
extraAttributes: {},
|
|
77
88
|
attributeNameEntry: void 0
|
|
@@ -125,7 +136,10 @@ var __exports__ = (() => {
|
|
|
125
136
|
maxY = y > maxY ? y : maxY;
|
|
126
137
|
maxZ = z > maxZ ? z : maxZ;
|
|
127
138
|
}
|
|
128
|
-
return [
|
|
139
|
+
return [
|
|
140
|
+
[minX, minY, minZ],
|
|
141
|
+
[maxX, maxY, maxZ]
|
|
142
|
+
];
|
|
129
143
|
}
|
|
130
144
|
|
|
131
145
|
// ../schema/src/lib/mesh/deduce-mesh-schema.ts
|
|
@@ -134,14 +148,7 @@ var __exports__ = (() => {
|
|
|
134
148
|
const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);
|
|
135
149
|
return {
|
|
136
150
|
name,
|
|
137
|
-
type: {
|
|
138
|
-
type: "fixed-size-list",
|
|
139
|
-
listSize: attribute.size,
|
|
140
|
-
children: [{
|
|
141
|
-
name: "value",
|
|
142
|
-
type
|
|
143
|
-
}]
|
|
144
|
-
},
|
|
151
|
+
type: { type: "fixed-size-list", listSize: attribute.size, children: [{ name: "value", type }] },
|
|
145
152
|
nullable: false,
|
|
146
153
|
metadata
|
|
147
154
|
};
|
|
@@ -167,17 +174,18 @@ var __exports__ = (() => {
|
|
|
167
174
|
const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);
|
|
168
175
|
for (const attributeName in attributes) {
|
|
169
176
|
const attribute = attributes[attributeName];
|
|
170
|
-
const field = getArrowFieldFromAttribute(
|
|
177
|
+
const field = getArrowFieldFromAttribute(
|
|
178
|
+
attributeName,
|
|
179
|
+
attribute,
|
|
180
|
+
namedLoaderDataAttributes[attributeName]
|
|
181
|
+
);
|
|
171
182
|
fields.push(field);
|
|
172
183
|
}
|
|
173
184
|
if (indices) {
|
|
174
185
|
const indicesField = getArrowFieldFromAttribute("indices", indices);
|
|
175
186
|
fields.push(indicesField);
|
|
176
187
|
}
|
|
177
|
-
return {
|
|
178
|
-
fields,
|
|
179
|
-
metadata
|
|
180
|
-
};
|
|
188
|
+
return { fields, metadata };
|
|
181
189
|
}
|
|
182
190
|
function transformAttributesLoaderData(loaderData) {
|
|
183
191
|
const result = {};
|
|
@@ -219,15 +227,27 @@ var __exports__ = (() => {
|
|
|
219
227
|
};
|
|
220
228
|
var INDEX_ITEM_SIZE = 4;
|
|
221
229
|
var DracoParser = class {
|
|
230
|
+
draco;
|
|
231
|
+
decoder;
|
|
232
|
+
metadataQuerier;
|
|
233
|
+
// draco - the draco decoder, either import `draco3d` or load dynamically
|
|
222
234
|
constructor(draco) {
|
|
223
235
|
this.draco = draco;
|
|
224
236
|
this.decoder = new this.draco.Decoder();
|
|
225
237
|
this.metadataQuerier = new this.draco.MetadataQuerier();
|
|
226
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Destroy draco resources
|
|
241
|
+
*/
|
|
227
242
|
destroy() {
|
|
228
243
|
this.draco.destroy(this.decoder);
|
|
229
244
|
this.draco.destroy(this.metadataQuerier);
|
|
230
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* NOTE: caller must call `destroyGeometry` on the return value after using it
|
|
248
|
+
* @param arrayBuffer
|
|
249
|
+
* @param options
|
|
250
|
+
*/
|
|
231
251
|
parseSync(arrayBuffer, options = {}) {
|
|
232
252
|
const buffer = new this.draco.DecoderBuffer();
|
|
233
253
|
buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);
|
|
@@ -272,6 +292,14 @@ var __exports__ = (() => {
|
|
|
272
292
|
}
|
|
273
293
|
}
|
|
274
294
|
}
|
|
295
|
+
// Draco specific "loader data"
|
|
296
|
+
/**
|
|
297
|
+
* Extract
|
|
298
|
+
* @param dracoGeometry
|
|
299
|
+
* @param geometry_type
|
|
300
|
+
* @param options
|
|
301
|
+
* @returns
|
|
302
|
+
*/
|
|
275
303
|
_getDracoLoaderData(dracoGeometry, geometry_type, options) {
|
|
276
304
|
const metadata = this._getTopLevelMetadata(dracoGeometry);
|
|
277
305
|
const attributes = this._getDracoAttributes(dracoGeometry, options);
|
|
@@ -284,6 +312,12 @@ var __exports__ = (() => {
|
|
|
284
312
|
attributes
|
|
285
313
|
};
|
|
286
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* Extract all draco provided information and metadata for each attribute
|
|
317
|
+
* @param dracoGeometry
|
|
318
|
+
* @param options
|
|
319
|
+
* @returns
|
|
320
|
+
*/
|
|
287
321
|
_getDracoAttributes(dracoGeometry, options) {
|
|
288
322
|
const dracoAttributes = {};
|
|
289
323
|
for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {
|
|
@@ -311,6 +345,12 @@ var __exports__ = (() => {
|
|
|
311
345
|
}
|
|
312
346
|
return dracoAttributes;
|
|
313
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* Get standard loaders.gl mesh category data
|
|
350
|
+
* Extracts the geometry from draco
|
|
351
|
+
* @param dracoGeometry
|
|
352
|
+
* @param options
|
|
353
|
+
*/
|
|
314
354
|
_getMeshData(dracoGeometry, loaderData, options) {
|
|
315
355
|
const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);
|
|
316
356
|
const positionAttribute = attributes.POSITION;
|
|
@@ -323,6 +363,7 @@ var __exports__ = (() => {
|
|
|
323
363
|
return {
|
|
324
364
|
topology: "triangle-strip",
|
|
325
365
|
mode: 4,
|
|
366
|
+
// GL.TRIANGLES
|
|
326
367
|
attributes,
|
|
327
368
|
indices: {
|
|
328
369
|
value: this._getTriangleStripIndices(dracoGeometry),
|
|
@@ -334,6 +375,7 @@ var __exports__ = (() => {
|
|
|
334
375
|
return {
|
|
335
376
|
topology: "triangle-list",
|
|
336
377
|
mode: 5,
|
|
378
|
+
// GL.TRIANGLE_STRIP
|
|
337
379
|
attributes,
|
|
338
380
|
indices: {
|
|
339
381
|
value: this._getTriangleListIndices(dracoGeometry),
|
|
@@ -345,6 +387,7 @@ var __exports__ = (() => {
|
|
|
345
387
|
return {
|
|
346
388
|
topology: "point-list",
|
|
347
389
|
mode: 0,
|
|
390
|
+
// GL.POINTS
|
|
348
391
|
attributes
|
|
349
392
|
};
|
|
350
393
|
}
|
|
@@ -353,10 +396,7 @@ var __exports__ = (() => {
|
|
|
353
396
|
for (const loaderAttribute of Object.values(loaderData.attributes)) {
|
|
354
397
|
const attributeName = this._deduceAttributeName(loaderAttribute, options);
|
|
355
398
|
loaderAttribute.name = attributeName;
|
|
356
|
-
const {
|
|
357
|
-
value,
|
|
358
|
-
size
|
|
359
|
-
} = this._getAttributeValues(dracoGeometry, loaderAttribute);
|
|
399
|
+
const { value, size } = this._getAttributeValues(dracoGeometry, loaderAttribute);
|
|
360
400
|
attributes[attributeName] = {
|
|
361
401
|
value,
|
|
362
402
|
size,
|
|
@@ -367,6 +407,11 @@ var __exports__ = (() => {
|
|
|
367
407
|
}
|
|
368
408
|
return attributes;
|
|
369
409
|
}
|
|
410
|
+
// MESH INDICES EXTRACTION
|
|
411
|
+
/**
|
|
412
|
+
* For meshes, we need indices to define the faces.
|
|
413
|
+
* @param dracoGeometry
|
|
414
|
+
*/
|
|
370
415
|
_getTriangleListIndices(dracoGeometry) {
|
|
371
416
|
const numFaces = dracoGeometry.num_faces();
|
|
372
417
|
const numIndices = numFaces * 3;
|
|
@@ -379,6 +424,10 @@ var __exports__ = (() => {
|
|
|
379
424
|
this.draco._free(ptr);
|
|
380
425
|
}
|
|
381
426
|
}
|
|
427
|
+
/**
|
|
428
|
+
* For meshes, we need indices to define the faces.
|
|
429
|
+
* @param dracoGeometry
|
|
430
|
+
*/
|
|
382
431
|
_getTriangleStripIndices(dracoGeometry) {
|
|
383
432
|
const dracoArray = new this.draco.DracoInt32Array();
|
|
384
433
|
try {
|
|
@@ -388,6 +437,12 @@ var __exports__ = (() => {
|
|
|
388
437
|
this.draco.destroy(dracoArray);
|
|
389
438
|
}
|
|
390
439
|
}
|
|
440
|
+
/**
|
|
441
|
+
*
|
|
442
|
+
* @param dracoGeometry
|
|
443
|
+
* @param dracoAttribute
|
|
444
|
+
* @param attributeName
|
|
445
|
+
*/
|
|
391
446
|
_getAttributeValues(dracoGeometry, attribute) {
|
|
392
447
|
const TypedArrayCtor = DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP[attribute.data_type];
|
|
393
448
|
const numComponents = attribute.num_components;
|
|
@@ -399,19 +454,48 @@ var __exports__ = (() => {
|
|
|
399
454
|
const ptr = this.draco._malloc(byteLength);
|
|
400
455
|
try {
|
|
401
456
|
const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);
|
|
402
|
-
this.decoder.GetAttributeDataArrayForAllPoints(
|
|
457
|
+
this.decoder.GetAttributeDataArrayForAllPoints(
|
|
458
|
+
dracoGeometry,
|
|
459
|
+
dracoAttribute,
|
|
460
|
+
dataType,
|
|
461
|
+
byteLength,
|
|
462
|
+
ptr
|
|
463
|
+
);
|
|
403
464
|
value = new TypedArrayCtor(this.draco.HEAPF32.buffer, ptr, numValues).slice();
|
|
404
465
|
} finally {
|
|
405
466
|
this.draco._free(ptr);
|
|
406
467
|
}
|
|
407
|
-
return {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
468
|
+
return { value, size: numComponents };
|
|
469
|
+
}
|
|
470
|
+
// Attribute names
|
|
471
|
+
/**
|
|
472
|
+
* DRACO does not store attribute names - We need to deduce an attribute name
|
|
473
|
+
* for each attribute
|
|
474
|
+
_getAttributeNames(
|
|
475
|
+
dracoGeometry: Mesh | PointCloud,
|
|
476
|
+
options: DracoParseOptions
|
|
477
|
+
): {[unique_id: number]: string} {
|
|
478
|
+
const attributeNames: {[unique_id: number]: string} = {};
|
|
479
|
+
for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {
|
|
480
|
+
const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);
|
|
481
|
+
const attributeName = this._deduceAttributeName(dracoAttribute, options);
|
|
482
|
+
attributeNames[attributeName] = attributeName;
|
|
483
|
+
}
|
|
484
|
+
return attributeNames;
|
|
485
|
+
}
|
|
486
|
+
*/
|
|
487
|
+
/**
|
|
488
|
+
* Deduce an attribute name.
|
|
489
|
+
* @note DRACO does not save attribute names, just general type (POSITION, COLOR)
|
|
490
|
+
* to help optimize compression. We generate GLTF compatible names for the Draco-recognized
|
|
491
|
+
* types
|
|
492
|
+
* @param attributeData
|
|
493
|
+
*/
|
|
412
494
|
_deduceAttributeName(attribute, options) {
|
|
413
495
|
const uniqueId = attribute.unique_id;
|
|
414
|
-
for (const [attributeName, attributeUniqueId] of Object.entries(
|
|
496
|
+
for (const [attributeName, attributeUniqueId] of Object.entries(
|
|
497
|
+
options.extraAttributes || {}
|
|
498
|
+
)) {
|
|
415
499
|
if (attributeUniqueId === uniqueId) {
|
|
416
500
|
return attributeName;
|
|
417
501
|
}
|
|
@@ -429,14 +513,22 @@ var __exports__ = (() => {
|
|
|
429
513
|
}
|
|
430
514
|
return `CUSTOM_ATTRIBUTE_${uniqueId}`;
|
|
431
515
|
}
|
|
516
|
+
// METADATA EXTRACTION
|
|
517
|
+
/** Get top level metadata */
|
|
432
518
|
_getTopLevelMetadata(dracoGeometry) {
|
|
433
519
|
const dracoMetadata = this.decoder.GetMetadata(dracoGeometry);
|
|
434
520
|
return this._getDracoMetadata(dracoMetadata);
|
|
435
521
|
}
|
|
522
|
+
/** Get per attribute metadata */
|
|
436
523
|
_getAttributeMetadata(dracoGeometry, attributeId) {
|
|
437
524
|
const dracoMetadata = this.decoder.GetAttributeMetadata(dracoGeometry, attributeId);
|
|
438
525
|
return this._getDracoMetadata(dracoMetadata);
|
|
439
526
|
}
|
|
527
|
+
/**
|
|
528
|
+
* Extract metadata field values
|
|
529
|
+
* @param dracoMetadata
|
|
530
|
+
* @returns
|
|
531
|
+
*/
|
|
440
532
|
_getDracoMetadata(dracoMetadata) {
|
|
441
533
|
if (!dracoMetadata || !dracoMetadata.ptr) {
|
|
442
534
|
return {};
|
|
@@ -449,6 +541,11 @@ var __exports__ = (() => {
|
|
|
449
541
|
}
|
|
450
542
|
return result;
|
|
451
543
|
}
|
|
544
|
+
/**
|
|
545
|
+
* Extracts possible values for one metadata entry by name
|
|
546
|
+
* @param dracoMetadata
|
|
547
|
+
* @param entryName
|
|
548
|
+
*/
|
|
452
549
|
_getDracoMetadataField(dracoMetadata, entryName) {
|
|
453
550
|
const dracoArray = new this.draco.DracoInt32Array();
|
|
454
551
|
try {
|
|
@@ -464,20 +561,21 @@ var __exports__ = (() => {
|
|
|
464
561
|
this.draco.destroy(dracoArray);
|
|
465
562
|
}
|
|
466
563
|
}
|
|
564
|
+
// QUANTIZED ATTRIBUTE SUPPORT (NO DECOMPRESSION)
|
|
565
|
+
/** Skip transforms for specific attribute types */
|
|
467
566
|
_disableAttributeTransforms(options) {
|
|
468
|
-
const {
|
|
469
|
-
quantizedAttributes = [],
|
|
470
|
-
octahedronAttributes = []
|
|
471
|
-
} = options;
|
|
567
|
+
const { quantizedAttributes = [], octahedronAttributes = [] } = options;
|
|
472
568
|
const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];
|
|
473
569
|
for (const dracoAttributeName of skipAttributes) {
|
|
474
570
|
this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);
|
|
475
571
|
}
|
|
476
572
|
}
|
|
573
|
+
/**
|
|
574
|
+
* Extract (and apply?) Position Transform
|
|
575
|
+
* @todo not used
|
|
576
|
+
*/
|
|
477
577
|
_getQuantizationTransform(dracoAttribute, options) {
|
|
478
|
-
const {
|
|
479
|
-
quantizedAttributes = []
|
|
480
|
-
} = options;
|
|
578
|
+
const { quantizedAttributes = [] } = options;
|
|
481
579
|
const attribute_type = dracoAttribute.attribute_type();
|
|
482
580
|
const skip = quantizedAttributes.map((type) => this.decoder[type]).includes(attribute_type);
|
|
483
581
|
if (skip) {
|
|
@@ -497,9 +595,7 @@ var __exports__ = (() => {
|
|
|
497
595
|
return null;
|
|
498
596
|
}
|
|
499
597
|
_getOctahedronTransform(dracoAttribute, options) {
|
|
500
|
-
const {
|
|
501
|
-
octahedronAttributes = []
|
|
502
|
-
} = options;
|
|
598
|
+
const { octahedronAttributes = [] } = options;
|
|
503
599
|
const attribute_type = dracoAttribute.attribute_type();
|
|
504
600
|
const octahedron = octahedronAttributes.map((type) => this.decoder[type]).includes(attribute_type);
|
|
505
601
|
if (octahedron) {
|
|
@@ -516,6 +612,7 @@ var __exports__ = (() => {
|
|
|
516
612
|
}
|
|
517
613
|
return null;
|
|
518
614
|
}
|
|
615
|
+
// HELPERS
|
|
519
616
|
};
|
|
520
617
|
function getDracoDataType(draco, attributeType) {
|
|
521
618
|
switch (attributeType) {
|
|
@@ -555,14 +652,17 @@ var __exports__ = (() => {
|
|
|
555
652
|
}
|
|
556
653
|
|
|
557
654
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
655
|
+
var NPM_TAG = "latest";
|
|
558
656
|
function getVersion() {
|
|
559
657
|
if (!globalThis._loadersgl_?.version) {
|
|
560
658
|
globalThis._loadersgl_ = globalThis._loadersgl_ || {};
|
|
561
|
-
if (
|
|
562
|
-
console.warn(
|
|
659
|
+
if (typeof __VERSION__ === "undefined") {
|
|
660
|
+
console.warn(
|
|
661
|
+
"loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN."
|
|
662
|
+
);
|
|
563
663
|
globalThis._loadersgl_.version = NPM_TAG;
|
|
564
664
|
} else {
|
|
565
|
-
globalThis._loadersgl_.version =
|
|
665
|
+
globalThis._loadersgl_.version = __VERSION__;
|
|
566
666
|
}
|
|
567
667
|
}
|
|
568
668
|
return globalThis._loadersgl_.version;
|
|
@@ -587,7 +687,10 @@ var __exports__ = (() => {
|
|
|
587
687
|
var window_ = globals.window || globals.self || globals.global || {};
|
|
588
688
|
var global_ = globals.global || globals.self || globals.window || {};
|
|
589
689
|
var document_ = globals.document || {};
|
|
590
|
-
var isBrowser =
|
|
690
|
+
var isBrowser = (
|
|
691
|
+
// @ts-ignore process.browser
|
|
692
|
+
typeof process !== "object" || String(process) !== "[object process]" || process.browser
|
|
693
|
+
);
|
|
591
694
|
var isWorker = typeof importScripts === "function";
|
|
592
695
|
var isMobile = typeof window !== "undefined" && typeof window.orientation !== "undefined";
|
|
593
696
|
var matches = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
|
|
@@ -600,7 +703,8 @@ var __exports__ = (() => {
|
|
|
600
703
|
if (moduleName) {
|
|
601
704
|
libraryUrl = getLibraryUrl(libraryUrl, moduleName, options, libraryName);
|
|
602
705
|
}
|
|
603
|
-
loadLibraryPromises[libraryUrl] =
|
|
706
|
+
loadLibraryPromises[libraryUrl] = // eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
707
|
+
loadLibraryPromises[libraryUrl] || loadLibraryFromFile(libraryUrl);
|
|
604
708
|
return await loadLibraryPromises[libraryUrl];
|
|
605
709
|
}
|
|
606
710
|
function getLibraryUrl(library, moduleName, options = {}, libraryName = null) {
|
|
@@ -680,9 +784,13 @@ var __exports__ = (() => {
|
|
|
680
784
|
var DRACO_ENCODER_VERSION = "1.4.1";
|
|
681
785
|
var STATIC_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_DECODER_VERSION}`;
|
|
682
786
|
var DRACO_EXTERNAL_LIBRARIES = {
|
|
787
|
+
/** The primary Draco3D encoder, javascript wrapper part */
|
|
683
788
|
DECODER: "draco_wasm_wrapper.js",
|
|
789
|
+
/** The primary draco decoder, compiled web assembly part */
|
|
684
790
|
DECODER_WASM: "draco_decoder.wasm",
|
|
791
|
+
/** Fallback decoder for non-webassebly environments. Very big bundle, lower performance */
|
|
685
792
|
FALLBACK_DECODER: "draco_decoder.js",
|
|
793
|
+
/** Draco encoder */
|
|
686
794
|
ENCODER: "draco_encoder.js"
|
|
687
795
|
};
|
|
688
796
|
var DRACO_EXTERNAL_LIBRARY_URLS = {
|
|
@@ -697,9 +805,7 @@ var __exports__ = (() => {
|
|
|
697
805
|
const modules = options.modules || {};
|
|
698
806
|
if (modules.draco3d) {
|
|
699
807
|
loadDecoderPromise = loadDecoderPromise || modules.draco3d.createDecoderModule({}).then((draco) => {
|
|
700
|
-
return {
|
|
701
|
-
draco
|
|
702
|
-
};
|
|
808
|
+
return { draco };
|
|
703
809
|
});
|
|
704
810
|
} else {
|
|
705
811
|
loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);
|
|
@@ -710,9 +816,7 @@ var __exports__ = (() => {
|
|
|
710
816
|
const modules = options.modules || {};
|
|
711
817
|
if (modules.draco3d) {
|
|
712
818
|
loadEncoderPromise = loadEncoderPromise || modules.draco3d.createEncoderModule({}).then((draco) => {
|
|
713
|
-
return {
|
|
714
|
-
draco
|
|
715
|
-
};
|
|
819
|
+
return { draco };
|
|
716
820
|
});
|
|
717
821
|
} else {
|
|
718
822
|
loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);
|
|
@@ -724,11 +828,29 @@ var __exports__ = (() => {
|
|
|
724
828
|
let wasmBinary;
|
|
725
829
|
switch (options.draco && options.draco.decoderType) {
|
|
726
830
|
case "js":
|
|
727
|
-
DracoDecoderModule = await loadLibrary(
|
|
831
|
+
DracoDecoderModule = await loadLibrary(
|
|
832
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
|
|
833
|
+
"draco",
|
|
834
|
+
options,
|
|
835
|
+
DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER
|
|
836
|
+
);
|
|
728
837
|
break;
|
|
729
838
|
case "wasm":
|
|
730
839
|
default:
|
|
731
|
-
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
840
|
+
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
841
|
+
await loadLibrary(
|
|
842
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
|
|
843
|
+
"draco",
|
|
844
|
+
options,
|
|
845
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER
|
|
846
|
+
),
|
|
847
|
+
await loadLibrary(
|
|
848
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
|
|
849
|
+
"draco",
|
|
850
|
+
options,
|
|
851
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
|
|
852
|
+
)
|
|
853
|
+
]);
|
|
732
854
|
}
|
|
733
855
|
DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
|
|
734
856
|
return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
|
|
@@ -741,20 +863,23 @@ var __exports__ = (() => {
|
|
|
741
863
|
return new Promise((resolve) => {
|
|
742
864
|
DracoDecoderModule({
|
|
743
865
|
...options,
|
|
744
|
-
onModuleLoaded: (draco) => resolve({
|
|
745
|
-
|
|
746
|
-
})
|
|
866
|
+
onModuleLoaded: (draco) => resolve({ draco })
|
|
867
|
+
// Module is Promise-like. Wrap in object to avoid loop.
|
|
747
868
|
});
|
|
748
869
|
});
|
|
749
870
|
}
|
|
750
871
|
async function loadDracoEncoder(options) {
|
|
751
|
-
let DracoEncoderModule = await loadLibrary(
|
|
872
|
+
let DracoEncoderModule = await loadLibrary(
|
|
873
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.ENCODER],
|
|
874
|
+
"draco",
|
|
875
|
+
options,
|
|
876
|
+
DRACO_EXTERNAL_LIBRARIES.ENCODER
|
|
877
|
+
);
|
|
752
878
|
DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;
|
|
753
879
|
return new Promise((resolve) => {
|
|
754
880
|
DracoEncoderModule({
|
|
755
|
-
onModuleLoaded: (draco) => resolve({
|
|
756
|
-
|
|
757
|
-
})
|
|
881
|
+
onModuleLoaded: (draco) => resolve({ draco })
|
|
882
|
+
// Module is Promise-like. Wrap in object to avoid loop.
|
|
758
883
|
});
|
|
759
884
|
});
|
|
760
885
|
}
|
|
@@ -769,6 +894,12 @@ var __exports__ = (() => {
|
|
|
769
894
|
var noop = () => {
|
|
770
895
|
};
|
|
771
896
|
var DracoBuilder = class {
|
|
897
|
+
draco;
|
|
898
|
+
dracoEncoder;
|
|
899
|
+
dracoMeshBuilder;
|
|
900
|
+
dracoMetadataBuilder;
|
|
901
|
+
log;
|
|
902
|
+
// draco - the draco decoder, either import `draco3d` or load dynamically
|
|
772
903
|
constructor(draco) {
|
|
773
904
|
this.draco = draco;
|
|
774
905
|
this.dracoEncoder = new this.draco.Encoder();
|
|
@@ -783,21 +914,25 @@ var __exports__ = (() => {
|
|
|
783
914
|
this.dracoEncoder = null;
|
|
784
915
|
this.draco = null;
|
|
785
916
|
}
|
|
917
|
+
// TBD - when does this need to be called?
|
|
786
918
|
destroyEncodedObject(object) {
|
|
787
919
|
if (object) {
|
|
788
920
|
this.draco.destroy(object);
|
|
789
921
|
}
|
|
790
922
|
}
|
|
923
|
+
/**
|
|
924
|
+
* Encode mesh or point cloud
|
|
925
|
+
* @param mesh =({})
|
|
926
|
+
* @param options
|
|
927
|
+
*/
|
|
791
928
|
encodeSync(mesh, options = {}) {
|
|
792
929
|
this.log = noop;
|
|
793
930
|
this._setOptions(options);
|
|
794
931
|
return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
|
|
795
932
|
}
|
|
933
|
+
// PRIVATE
|
|
796
934
|
_getAttributesFromMesh(mesh) {
|
|
797
|
-
const attributes = {
|
|
798
|
-
...mesh,
|
|
799
|
-
...mesh.attributes
|
|
800
|
-
};
|
|
935
|
+
const attributes = { ...mesh, ...mesh.attributes };
|
|
801
936
|
if (mesh.indices) {
|
|
802
937
|
attributes.indices = mesh.indices;
|
|
803
938
|
}
|
|
@@ -812,7 +947,11 @@ var __exports__ = (() => {
|
|
|
812
947
|
this._createDracoPointCloud(dracoPointCloud, attributes, options);
|
|
813
948
|
const dracoData = new this.draco.DracoInt8Array();
|
|
814
949
|
try {
|
|
815
|
-
const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(
|
|
950
|
+
const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(
|
|
951
|
+
dracoPointCloud,
|
|
952
|
+
false,
|
|
953
|
+
dracoData
|
|
954
|
+
);
|
|
816
955
|
if (!(encodedLen > 0)) {
|
|
817
956
|
throw new Error("Draco encoding failed.");
|
|
818
957
|
}
|
|
@@ -845,6 +984,10 @@ var __exports__ = (() => {
|
|
|
845
984
|
this.destroyEncodedObject(dracoMesh);
|
|
846
985
|
}
|
|
847
986
|
}
|
|
987
|
+
/**
|
|
988
|
+
* Set encoding options.
|
|
989
|
+
* @param {{speed?: any; method?: any; quantization?: any;}} options
|
|
990
|
+
*/
|
|
848
991
|
_setOptions(options) {
|
|
849
992
|
if ("speed" in options) {
|
|
850
993
|
this.dracoEncoder.SetSpeedOptions(...options.speed);
|
|
@@ -861,6 +1004,11 @@ var __exports__ = (() => {
|
|
|
861
1004
|
}
|
|
862
1005
|
}
|
|
863
1006
|
}
|
|
1007
|
+
/**
|
|
1008
|
+
* @param {Mesh} dracoMesh
|
|
1009
|
+
* @param {object} attributes
|
|
1010
|
+
* @returns {Mesh}
|
|
1011
|
+
*/
|
|
864
1012
|
_createDracoMesh(dracoMesh, attributes, options) {
|
|
865
1013
|
const optionalMetadata = options.attributesMetadata || {};
|
|
866
1014
|
try {
|
|
@@ -886,6 +1034,10 @@ var __exports__ = (() => {
|
|
|
886
1034
|
}
|
|
887
1035
|
return dracoMesh;
|
|
888
1036
|
}
|
|
1037
|
+
/**
|
|
1038
|
+
* @param {} dracoPointCloud
|
|
1039
|
+
* @param {object} attributes
|
|
1040
|
+
*/
|
|
889
1041
|
_createDracoPointCloud(dracoPointCloud, attributes, options) {
|
|
890
1042
|
const optionalMetadata = options.attributesMetadata || {};
|
|
891
1043
|
try {
|
|
@@ -897,7 +1049,12 @@ var __exports__ = (() => {
|
|
|
897
1049
|
for (let attributeName in attributes) {
|
|
898
1050
|
const attribute = attributes[attributeName];
|
|
899
1051
|
attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
|
|
900
|
-
const uniqueId = this._addAttributeToMesh(
|
|
1052
|
+
const uniqueId = this._addAttributeToMesh(
|
|
1053
|
+
dracoPointCloud,
|
|
1054
|
+
attributeName,
|
|
1055
|
+
attribute,
|
|
1056
|
+
vertexCount
|
|
1057
|
+
);
|
|
901
1058
|
if (uniqueId !== -1) {
|
|
902
1059
|
this._addAttributeMetadata(dracoPointCloud, uniqueId, {
|
|
903
1060
|
name: attributeName,
|
|
@@ -911,6 +1068,12 @@ var __exports__ = (() => {
|
|
|
911
1068
|
}
|
|
912
1069
|
return dracoPointCloud;
|
|
913
1070
|
}
|
|
1071
|
+
/**
|
|
1072
|
+
* @param mesh
|
|
1073
|
+
* @param attributeName
|
|
1074
|
+
* @param attribute
|
|
1075
|
+
* @param vertexCount
|
|
1076
|
+
*/
|
|
914
1077
|
_addAttributeToMesh(mesh, attributeName, attribute, vertexCount) {
|
|
915
1078
|
if (!ArrayBuffer.isView(attribute)) {
|
|
916
1079
|
return -1;
|
|
@@ -925,9 +1088,7 @@ var __exports__ = (() => {
|
|
|
925
1088
|
}
|
|
926
1089
|
this.log(`Adding attribute ${attributeName}, size ${size}`);
|
|
927
1090
|
const builder = this.dracoMeshBuilder;
|
|
928
|
-
const {
|
|
929
|
-
buffer
|
|
930
|
-
} = attribute;
|
|
1091
|
+
const { buffer } = attribute;
|
|
931
1092
|
switch (attribute.constructor) {
|
|
932
1093
|
case Int8Array:
|
|
933
1094
|
return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
|
|
@@ -947,6 +1108,11 @@ var __exports__ = (() => {
|
|
|
947
1108
|
return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
|
|
948
1109
|
}
|
|
949
1110
|
}
|
|
1111
|
+
/**
|
|
1112
|
+
* DRACO can compress attributes of know type better
|
|
1113
|
+
* TODO - expose an attribute type map?
|
|
1114
|
+
* @param attributeName
|
|
1115
|
+
*/
|
|
950
1116
|
_getDracoAttributeType(attributeName) {
|
|
951
1117
|
switch (attributeName.toLowerCase()) {
|
|
952
1118
|
case "indices":
|
|
@@ -978,16 +1144,36 @@ var __exports__ = (() => {
|
|
|
978
1144
|
}
|
|
979
1145
|
return null;
|
|
980
1146
|
}
|
|
1147
|
+
/**
|
|
1148
|
+
* Add metadata for the geometry.
|
|
1149
|
+
* @param dracoGeometry - WASM Draco Object
|
|
1150
|
+
* @param metadata
|
|
1151
|
+
*/
|
|
981
1152
|
_addGeometryMetadata(dracoGeometry, metadata) {
|
|
982
1153
|
const dracoMetadata = new this.draco.Metadata();
|
|
983
1154
|
this._populateDracoMetadata(dracoMetadata, metadata);
|
|
984
1155
|
this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
|
|
985
1156
|
}
|
|
1157
|
+
/**
|
|
1158
|
+
* Add metadata for an attribute to geometry.
|
|
1159
|
+
* @param dracoGeometry - WASM Draco Object
|
|
1160
|
+
* @param uniqueAttributeId
|
|
1161
|
+
* @param metadata
|
|
1162
|
+
*/
|
|
986
1163
|
_addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
|
|
987
1164
|
const dracoAttributeMetadata = new this.draco.Metadata();
|
|
988
1165
|
this._populateDracoMetadata(dracoAttributeMetadata, metadata);
|
|
989
|
-
this.dracoMeshBuilder.SetMetadataForAttribute(
|
|
990
|
-
|
|
1166
|
+
this.dracoMeshBuilder.SetMetadataForAttribute(
|
|
1167
|
+
dracoGeometry,
|
|
1168
|
+
uniqueAttributeId,
|
|
1169
|
+
dracoAttributeMetadata
|
|
1170
|
+
);
|
|
1171
|
+
}
|
|
1172
|
+
/**
|
|
1173
|
+
* Add contents of object or map to a WASM Draco Metadata Object
|
|
1174
|
+
* @param dracoMetadata - WASM Draco Object
|
|
1175
|
+
* @param metadata
|
|
1176
|
+
*/
|
|
991
1177
|
_populateDracoMetadata(dracoMetadata, metadata) {
|
|
992
1178
|
for (const [key, value] of getEntries(metadata)) {
|
|
993
1179
|
switch (typeof value) {
|
|
@@ -1027,7 +1213,14 @@ var __exports__ = (() => {
|
|
|
1027
1213
|
// src/draco-writer.ts
|
|
1028
1214
|
var DEFAULT_DRACO_WRITER_OPTIONS = {
|
|
1029
1215
|
pointcloud: false,
|
|
1216
|
+
// Set to true if pointcloud (mode: 0, no indices)
|
|
1030
1217
|
attributeNameEntry: "name"
|
|
1218
|
+
// Draco Compression Parameters
|
|
1219
|
+
// method: 'MESH_EDGEBREAKER_ENCODING', // Use draco defaults
|
|
1220
|
+
// speed: [5, 5], // Use draco defaults
|
|
1221
|
+
// quantization: { // Use draco defaults
|
|
1222
|
+
// POSITION: 10
|
|
1223
|
+
// }
|
|
1031
1224
|
};
|
|
1032
1225
|
var DracoWriter = {
|
|
1033
1226
|
name: "DRACO",
|
|
@@ -1041,9 +1234,7 @@ var __exports__ = (() => {
|
|
|
1041
1234
|
encode
|
|
1042
1235
|
};
|
|
1043
1236
|
async function encode(data, options = {}) {
|
|
1044
|
-
const {
|
|
1045
|
-
draco
|
|
1046
|
-
} = await loadDracoEncoderModule(options);
|
|
1237
|
+
const { draco } = await loadDracoEncoderModule(options);
|
|
1047
1238
|
const dracoBuilder = new DracoBuilder(draco);
|
|
1048
1239
|
try {
|
|
1049
1240
|
return dracoBuilder.encodeSync(data, options.draco);
|
|
@@ -1069,9 +1260,7 @@ var __exports__ = (() => {
|
|
|
1069
1260
|
parse
|
|
1070
1261
|
};
|
|
1071
1262
|
async function parse(arrayBuffer, options) {
|
|
1072
|
-
const {
|
|
1073
|
-
draco
|
|
1074
|
-
} = await loadDracoDecoderModule(options);
|
|
1263
|
+
const { draco } = await loadDracoDecoderModule(options);
|
|
1075
1264
|
const dracoParser = new DracoParser(draco);
|
|
1076
1265
|
try {
|
|
1077
1266
|
return dracoParser.parseSync(arrayBuffer, options?.draco);
|
|
@@ -1079,7 +1268,7 @@ var __exports__ = (() => {
|
|
|
1079
1268
|
dracoParser.destroy();
|
|
1080
1269
|
}
|
|
1081
1270
|
}
|
|
1082
|
-
return __toCommonJS(
|
|
1271
|
+
return __toCommonJS(bundle_exports);
|
|
1083
1272
|
})();
|
|
1084
1273
|
return __exports__;
|
|
1085
1274
|
});
|