@loaders.gl/gltf 4.4.0-alpha.1 → 4.4.0-alpha.11
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 +185 -68
- package/dist/dist.min.js +1 -1
- package/dist/glb-loader.d.ts +9 -6
- package/dist/glb-loader.d.ts.map +1 -1
- package/dist/glb-loader.js +2 -2
- package/dist/glb-loader.js.map +1 -0
- package/dist/glb-writer.js +1 -0
- package/dist/glb-writer.js.map +1 -0
- package/dist/gltf-loader.d.ts +2 -3
- package/dist/gltf-loader.d.ts.map +1 -1
- package/dist/gltf-loader.js +6 -8
- package/dist/gltf-loader.js.map +1 -0
- package/dist/gltf-writer.js +1 -0
- package/dist/gltf-writer.js.map +1 -0
- package/dist/index.cjs +78 -51
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api/gltf-extensions.js +1 -0
- package/dist/lib/api/gltf-extensions.js.map +1 -0
- package/dist/lib/api/gltf-scenegraph.js +1 -0
- package/dist/lib/api/gltf-scenegraph.js.map +1 -0
- package/dist/lib/api/normalize-gltf-v1.js +1 -0
- package/dist/lib/api/normalize-gltf-v1.js.map +1 -0
- package/dist/lib/api/post-process-gltf.d.ts.map +1 -1
- package/dist/lib/api/post-process-gltf.js +3 -1
- package/dist/lib/api/post-process-gltf.js.map +1 -0
- package/dist/lib/encoders/encode-glb.js +1 -0
- package/dist/lib/encoders/encode-glb.js.map +1 -0
- package/dist/lib/encoders/encode-gltf.js +1 -0
- package/dist/lib/encoders/encode-gltf.js.map +1 -0
- package/dist/lib/extensions/EXT_mesh_features.js +1 -0
- package/dist/lib/extensions/EXT_mesh_features.js.map +1 -0
- package/dist/lib/extensions/EXT_meshopt_compression.js +1 -0
- package/dist/lib/extensions/EXT_meshopt_compression.js.map +1 -0
- package/dist/lib/extensions/EXT_structural_metadata.d.ts.map +1 -1
- package/dist/lib/extensions/EXT_structural_metadata.js +3 -1
- package/dist/lib/extensions/EXT_structural_metadata.js.map +1 -0
- package/dist/lib/extensions/EXT_texture_webp.js +1 -0
- package/dist/lib/extensions/EXT_texture_webp.js.map +1 -0
- package/dist/lib/extensions/KHR_binary_gltf.js +1 -0
- package/dist/lib/extensions/KHR_binary_gltf.js.map +1 -0
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +1 -0
- package/dist/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
- package/dist/lib/extensions/KHR_texture_basisu.js +1 -0
- package/dist/lib/extensions/KHR_texture_basisu.js.map +1 -0
- package/dist/lib/extensions/KHR_texture_transform.d.ts.map +1 -1
- package/dist/lib/extensions/KHR_texture_transform.js +36 -14
- package/dist/lib/extensions/KHR_texture_transform.js.map +1 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +1 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +1 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +1 -0
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +1 -0
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
- package/dist/lib/extensions/utils/3d-tiles-utils.d.ts.map +1 -1
- package/dist/lib/extensions/utils/3d-tiles-utils.js +3 -1
- package/dist/lib/extensions/utils/3d-tiles-utils.js.map +1 -0
- package/dist/lib/gltf-utils/get-typed-array.js +1 -0
- package/dist/lib/gltf-utils/get-typed-array.js.map +1 -0
- package/dist/lib/gltf-utils/gltf-attribute-utils.js +1 -0
- package/dist/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
- package/dist/lib/gltf-utils/gltf-constants.js +1 -0
- package/dist/lib/gltf-utils/gltf-constants.js.map +1 -0
- package/dist/lib/gltf-utils/gltf-utils.js +1 -0
- package/dist/lib/gltf-utils/gltf-utils.js.map +1 -0
- package/dist/lib/gltf-utils/resolve-url.js +2 -1
- package/dist/lib/gltf-utils/resolve-url.js.map +1 -0
- package/dist/lib/parsers/parse-glb.js +1 -0
- package/dist/lib/parsers/parse-glb.js.map +1 -0
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/lib/parsers/parse-gltf.js +11 -8
- package/dist/lib/parsers/parse-gltf.js.map +1 -0
- package/dist/lib/types/glb-types.js +1 -0
- package/dist/lib/types/glb-types.js.map +1 -0
- package/dist/lib/types/gltf-ext-feature-metadata-schema.js +1 -0
- package/dist/lib/types/gltf-ext-feature-metadata-schema.js.map +1 -0
- package/dist/lib/types/gltf-ext-mesh-features-schema.js +1 -0
- package/dist/lib/types/gltf-ext-mesh-features-schema.js.map +1 -0
- package/dist/lib/types/gltf-ext-structural-metadata-schema.js +1 -0
- package/dist/lib/types/gltf-ext-structural-metadata-schema.js.map +1 -0
- package/dist/lib/types/gltf-json-schema.js +1 -0
- package/dist/lib/types/gltf-json-schema.js.map +1 -0
- package/dist/lib/types/gltf-postprocessed-schema.js +1 -0
- package/dist/lib/types/gltf-postprocessed-schema.js.map +1 -0
- package/dist/lib/types/gltf-types.js +1 -0
- package/dist/lib/types/gltf-types.js.map +1 -0
- package/dist/lib/utils/assert.js +1 -0
- package/dist/lib/utils/assert.js.map +1 -0
- package/dist/lib/utils/version.js +2 -1
- package/dist/lib/utils/version.js.map +1 -0
- package/dist/meshopt/meshopt-decoder.js +1 -0
- package/dist/meshopt/meshopt-decoder.js.map +1 -0
- package/dist/webp/webp.js +1 -0
- package/dist/webp/webp.js.map +1 -0
- package/package.json +8 -8
- package/src/glb-loader.ts +10 -8
- package/src/gltf-loader.ts +8 -12
- package/src/lib/api/post-process-gltf.ts +3 -2
- package/src/lib/extensions/EXT_structural_metadata.ts +2 -1
- package/src/lib/extensions/KHR_texture_transform.ts +41 -17
- package/src/lib/extensions/utils/3d-tiles-utils.ts +2 -1
- package/src/lib/gltf-utils/resolve-url.ts +1 -1
- package/src/lib/parsers/parse-gltf.ts +14 -10
package/dist/dist.dev.js
CHANGED
|
@@ -105,6 +105,9 @@ var __exports__ = (() => {
|
|
|
105
105
|
var matches = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
|
|
106
106
|
var nodeVersion = matches && parseFloat(matches[1]) || 0;
|
|
107
107
|
|
|
108
|
+
// ../loader-utils/src/lib/javascript-utils/is-type.ts
|
|
109
|
+
var isSharedArrayBuffer = (value) => typeof SharedArrayBuffer !== "undefined" && value instanceof SharedArrayBuffer;
|
|
110
|
+
|
|
108
111
|
// ../loader-utils/src/lib/module-utils/js-module-utils.ts
|
|
109
112
|
function registerJSModules(modules) {
|
|
110
113
|
globalThis.loaders ||= {};
|
|
@@ -120,14 +123,16 @@ var __exports__ = (() => {
|
|
|
120
123
|
var NPM_TAG = "beta";
|
|
121
124
|
|
|
122
125
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
126
|
+
var warningIssued = false;
|
|
123
127
|
function getVersion() {
|
|
124
128
|
if (!globalThis._loadersgl_?.version) {
|
|
125
129
|
globalThis._loadersgl_ = globalThis._loadersgl_ || {};
|
|
126
|
-
if (typeof __VERSION__ === "undefined") {
|
|
130
|
+
if (typeof __VERSION__ === "undefined" && !warningIssued) {
|
|
127
131
|
console.warn(
|
|
128
132
|
"loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN."
|
|
129
133
|
);
|
|
130
134
|
globalThis._loadersgl_.version = NPM_TAG;
|
|
135
|
+
warningIssued = true;
|
|
131
136
|
} else {
|
|
132
137
|
globalThis._loadersgl_.version = __VERSION__;
|
|
133
138
|
}
|
|
@@ -174,6 +179,9 @@ var __exports__ = (() => {
|
|
|
174
179
|
return await loadLibraryPromises[libraryUrl];
|
|
175
180
|
}
|
|
176
181
|
function getLibraryUrl(library, moduleName, options = {}, libraryName = null) {
|
|
182
|
+
if (options?.core) {
|
|
183
|
+
throw new Error("loadLibrary: options.core must be pre-normalized");
|
|
184
|
+
}
|
|
177
185
|
if (!options.useLocalLibraries && library.startsWith("http")) {
|
|
178
186
|
return library;
|
|
179
187
|
}
|
|
@@ -199,10 +207,20 @@ var __exports__ = (() => {
|
|
|
199
207
|
return await loadAsArrayBuffer(libraryUrl);
|
|
200
208
|
}
|
|
201
209
|
if (!isBrowser2) {
|
|
210
|
+
const { requireFromFile } = globalThis.loaders || {};
|
|
202
211
|
try {
|
|
203
|
-
const
|
|
204
|
-
|
|
212
|
+
const result = await requireFromFile?.(libraryUrl);
|
|
213
|
+
if (result || !libraryUrl.includes("/dist/libs/")) {
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
|
|
205
217
|
} catch (error) {
|
|
218
|
+
if (libraryUrl.includes("/dist/libs/")) {
|
|
219
|
+
try {
|
|
220
|
+
return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
|
|
221
|
+
} catch {
|
|
222
|
+
}
|
|
223
|
+
}
|
|
206
224
|
console.error(error);
|
|
207
225
|
return null;
|
|
208
226
|
}
|
|
@@ -238,7 +256,14 @@ var __exports__ = (() => {
|
|
|
238
256
|
const response = await fetch(url);
|
|
239
257
|
return await response.arrayBuffer();
|
|
240
258
|
}
|
|
241
|
-
|
|
259
|
+
try {
|
|
260
|
+
return await readFileAsArrayBuffer(url);
|
|
261
|
+
} catch {
|
|
262
|
+
if (url.includes("/dist/libs/")) {
|
|
263
|
+
return await readFileAsArrayBuffer(url.replace("/dist/libs/", "/src/libs/"));
|
|
264
|
+
}
|
|
265
|
+
throw new Error(`Failed to load ArrayBuffer from ${url}`);
|
|
266
|
+
}
|
|
242
267
|
}
|
|
243
268
|
async function loadAsText(url) {
|
|
244
269
|
const { readFileAsText } = globalThis.loaders || {};
|
|
@@ -246,7 +271,14 @@ var __exports__ = (() => {
|
|
|
246
271
|
const response = await fetch(url);
|
|
247
272
|
return await response.text();
|
|
248
273
|
}
|
|
249
|
-
|
|
274
|
+
try {
|
|
275
|
+
return await readFileAsText(url);
|
|
276
|
+
} catch {
|
|
277
|
+
if (url.includes("/dist/libs/")) {
|
|
278
|
+
return await readFileAsText(url.replace("/dist/libs/", "/src/libs/"));
|
|
279
|
+
}
|
|
280
|
+
throw new Error(`Failed to load text from ${url}`);
|
|
281
|
+
}
|
|
250
282
|
}
|
|
251
283
|
|
|
252
284
|
// ../loader-utils/src/lib/binary-utils/get-first-characters.ts
|
|
@@ -334,6 +366,27 @@ var __exports__ = (() => {
|
|
|
334
366
|
return byteOffset;
|
|
335
367
|
}
|
|
336
368
|
|
|
369
|
+
// ../loader-utils/src/lib/binary-utils/memory-conversion-utils.ts
|
|
370
|
+
function ensureArrayBuffer(bufferSource) {
|
|
371
|
+
if (bufferSource instanceof ArrayBuffer) {
|
|
372
|
+
return bufferSource;
|
|
373
|
+
}
|
|
374
|
+
if (isSharedArrayBuffer(bufferSource)) {
|
|
375
|
+
return copyToArrayBuffer(bufferSource);
|
|
376
|
+
}
|
|
377
|
+
const { buffer, byteOffset, byteLength } = bufferSource;
|
|
378
|
+
if (buffer instanceof ArrayBuffer && byteOffset === 0 && byteLength === buffer.byteLength) {
|
|
379
|
+
return buffer;
|
|
380
|
+
}
|
|
381
|
+
return copyToArrayBuffer(buffer, byteOffset, byteLength);
|
|
382
|
+
}
|
|
383
|
+
function copyToArrayBuffer(buffer, byteOffset = 0, byteLength = buffer.byteLength - byteOffset) {
|
|
384
|
+
const view = new Uint8Array(buffer, byteOffset, byteLength);
|
|
385
|
+
const copy = new Uint8Array(view.length);
|
|
386
|
+
copy.set(view);
|
|
387
|
+
return copy.buffer;
|
|
388
|
+
}
|
|
389
|
+
|
|
337
390
|
// ../images/src/lib/category-api/image-type.ts
|
|
338
391
|
var parseImageNode = globalThis.loaders?.parseImageNode;
|
|
339
392
|
var IMAGE_SUPPORTED = typeof Image !== "undefined";
|
|
@@ -470,7 +523,6 @@ var __exports__ = (() => {
|
|
|
470
523
|
}
|
|
471
524
|
|
|
472
525
|
// ../images/src/lib/parsers/parse-to-image-bitmap.ts
|
|
473
|
-
var EMPTY_OBJECT = {};
|
|
474
526
|
var imagebitmapOptionsSupported = true;
|
|
475
527
|
async function parseToImageBitmap(arrayBuffer, options, url) {
|
|
476
528
|
let blob;
|
|
@@ -498,8 +550,13 @@ var __exports__ = (() => {
|
|
|
498
550
|
return await createImageBitmap(blob);
|
|
499
551
|
}
|
|
500
552
|
function isEmptyObject(object) {
|
|
501
|
-
|
|
502
|
-
return
|
|
553
|
+
if (!object) {
|
|
554
|
+
return true;
|
|
555
|
+
}
|
|
556
|
+
for (const key in object) {
|
|
557
|
+
if (Object.prototype.hasOwnProperty.call(object, key)) {
|
|
558
|
+
return false;
|
|
559
|
+
}
|
|
503
560
|
}
|
|
504
561
|
return true;
|
|
505
562
|
}
|
|
@@ -1520,7 +1577,7 @@ var __exports__ = (() => {
|
|
|
1520
1577
|
buffer = bufferArray.slice(offset, offset + byteLength).buffer;
|
|
1521
1578
|
offset = 0;
|
|
1522
1579
|
}
|
|
1523
|
-
return new ArrayType(buffer, offset, length);
|
|
1580
|
+
return new ArrayType(ensureArrayBuffer(buffer), offset, length);
|
|
1524
1581
|
}
|
|
1525
1582
|
function getPrimitiveTextureData(scenegraph, textureInfo, primitive) {
|
|
1526
1583
|
const texCoordAccessorKey = `TEXCOORD_${textureInfo.texCoord || 0}`;
|
|
@@ -2278,7 +2335,7 @@ var __exports__ = (() => {
|
|
|
2278
2335
|
}
|
|
2279
2336
|
function createBufferView(typedArray, scenegraph) {
|
|
2280
2337
|
scenegraph.gltf.buffers.push({
|
|
2281
|
-
arrayBuffer: typedArray.buffer,
|
|
2338
|
+
arrayBuffer: ensureArrayBuffer(typedArray.buffer),
|
|
2282
2339
|
byteOffset: typedArray.byteOffset,
|
|
2283
2340
|
byteLength: typedArray.byteLength
|
|
2284
2341
|
});
|
|
@@ -2801,18 +2858,18 @@ var __exports__ = (() => {
|
|
|
2801
2858
|
bgr565: { basisFormat: 15, compressed: false },
|
|
2802
2859
|
rgba4444: { basisFormat: 16, compressed: false }
|
|
2803
2860
|
};
|
|
2804
|
-
async function parseBasis(data, options) {
|
|
2805
|
-
if (options.basis.containerFormat === "auto") {
|
|
2861
|
+
async function parseBasis(data, options = {}) {
|
|
2862
|
+
if (!options.basis?.containerFormat || options.basis.containerFormat === "auto") {
|
|
2806
2863
|
if (isKTX(data)) {
|
|
2807
|
-
const fileConstructors = await loadBasisEncoderModule(options);
|
|
2864
|
+
const fileConstructors = await loadBasisEncoderModule(options?.core || {});
|
|
2808
2865
|
return parseKTX2File(fileConstructors.KTX2File, data, options);
|
|
2809
2866
|
}
|
|
2810
|
-
const { BasisFile } = await loadBasisTranscoderModule(options);
|
|
2867
|
+
const { BasisFile } = await loadBasisTranscoderModule(options?.core || {});
|
|
2811
2868
|
return parseBasisFile(BasisFile, data, options);
|
|
2812
2869
|
}
|
|
2813
2870
|
switch (options.basis.module) {
|
|
2814
2871
|
case "encoder":
|
|
2815
|
-
const fileConstructors = await loadBasisEncoderModule(options);
|
|
2872
|
+
const fileConstructors = await loadBasisEncoderModule(options?.core || {});
|
|
2816
2873
|
switch (options.basis.containerFormat) {
|
|
2817
2874
|
case "ktx2":
|
|
2818
2875
|
return parseKTX2File(fileConstructors.KTX2File, data, options);
|
|
@@ -2822,7 +2879,7 @@ var __exports__ = (() => {
|
|
|
2822
2879
|
}
|
|
2823
2880
|
case "transcoder":
|
|
2824
2881
|
default:
|
|
2825
|
-
const { BasisFile } = await loadBasisTranscoderModule(options);
|
|
2882
|
+
const { BasisFile } = await loadBasisTranscoderModule(options.core || {});
|
|
2826
2883
|
return parseBasisFile(BasisFile, data, options);
|
|
2827
2884
|
}
|
|
2828
2885
|
}
|
|
@@ -2925,7 +2982,7 @@ var __exports__ = (() => {
|
|
|
2925
2982
|
};
|
|
2926
2983
|
}
|
|
2927
2984
|
function getBasisOptions(options, hasAlpha) {
|
|
2928
|
-
let format = options
|
|
2985
|
+
let format = options.basis?.format;
|
|
2929
2986
|
if (format === "auto") {
|
|
2930
2987
|
format = selectSupportedBasisFormat();
|
|
2931
2988
|
}
|
|
@@ -3100,7 +3157,7 @@ var __exports__ = (() => {
|
|
|
3100
3157
|
if (absolute) {
|
|
3101
3158
|
return url;
|
|
3102
3159
|
}
|
|
3103
|
-
const baseUrl = options.baseUri || options.uri;
|
|
3160
|
+
const baseUrl = options?.core?.baseUri || options.baseUri || options.uri;
|
|
3104
3161
|
if (!baseUrl) {
|
|
3105
3162
|
throw new Error(`'baseUri' must be provided to resolve relative url ${url}`);
|
|
3106
3163
|
}
|
|
@@ -3439,21 +3496,32 @@ var __exports__ = (() => {
|
|
|
3439
3496
|
[DRACO_EXTERNAL_LIBRARIES.ENCODER]: `https://raw.githubusercontent.com/google/draco/${DRACO_ENCODER_VERSION}/javascript/${DRACO_EXTERNAL_LIBRARIES.ENCODER}`
|
|
3440
3497
|
};
|
|
3441
3498
|
var loadDecoderPromise;
|
|
3442
|
-
async function loadDracoDecoderModule(options) {
|
|
3499
|
+
async function loadDracoDecoderModule(options = {}, type) {
|
|
3443
3500
|
const modules = options.modules || {};
|
|
3444
3501
|
if (modules.draco3d) {
|
|
3445
3502
|
loadDecoderPromise ||= modules.draco3d.createDecoderModule({}).then((draco) => {
|
|
3446
3503
|
return { draco };
|
|
3447
3504
|
});
|
|
3448
3505
|
} else {
|
|
3449
|
-
loadDecoderPromise ||= loadDracoDecoder(options);
|
|
3506
|
+
loadDecoderPromise ||= loadDracoDecoder(options, type);
|
|
3450
3507
|
}
|
|
3451
3508
|
return await loadDecoderPromise;
|
|
3452
3509
|
}
|
|
3453
|
-
|
|
3510
|
+
function getLibraryExport(library, exportName) {
|
|
3511
|
+
if (library && typeof library === "object") {
|
|
3512
|
+
if (library.default) {
|
|
3513
|
+
return library.default;
|
|
3514
|
+
}
|
|
3515
|
+
if (library[exportName]) {
|
|
3516
|
+
return library[exportName];
|
|
3517
|
+
}
|
|
3518
|
+
}
|
|
3519
|
+
return library;
|
|
3520
|
+
}
|
|
3521
|
+
async function loadDracoDecoder(options, type) {
|
|
3454
3522
|
let DracoDecoderModule;
|
|
3455
3523
|
let wasmBinary;
|
|
3456
|
-
switch (
|
|
3524
|
+
switch (type) {
|
|
3457
3525
|
case "js":
|
|
3458
3526
|
DracoDecoderModule = await loadLibrary(
|
|
3459
3527
|
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
|
|
@@ -3464,25 +3532,52 @@ var __exports__ = (() => {
|
|
|
3464
3532
|
break;
|
|
3465
3533
|
case "wasm":
|
|
3466
3534
|
default:
|
|
3467
|
-
|
|
3468
|
-
await
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3535
|
+
try {
|
|
3536
|
+
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
3537
|
+
await loadLibrary(
|
|
3538
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
|
|
3539
|
+
"draco",
|
|
3540
|
+
options,
|
|
3541
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER
|
|
3542
|
+
),
|
|
3543
|
+
await loadLibrary(
|
|
3544
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
|
|
3545
|
+
"draco",
|
|
3546
|
+
options,
|
|
3547
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
|
|
3548
|
+
)
|
|
3549
|
+
]);
|
|
3550
|
+
} catch {
|
|
3551
|
+
DracoDecoderModule = null;
|
|
3552
|
+
wasmBinary = null;
|
|
3553
|
+
}
|
|
3481
3554
|
}
|
|
3555
|
+
DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
|
|
3482
3556
|
DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
|
|
3557
|
+
if (!DracoDecoderModule && !isBrowser2) {
|
|
3558
|
+
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
3559
|
+
await loadLibrary(
|
|
3560
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
|
|
3561
|
+
"draco",
|
|
3562
|
+
{ ...options, useLocalLibraries: true },
|
|
3563
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER
|
|
3564
|
+
),
|
|
3565
|
+
await loadLibrary(
|
|
3566
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
|
|
3567
|
+
"draco",
|
|
3568
|
+
{ ...options, useLocalLibraries: true },
|
|
3569
|
+
DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
|
|
3570
|
+
)
|
|
3571
|
+
]);
|
|
3572
|
+
DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
|
|
3573
|
+
DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
|
|
3574
|
+
}
|
|
3483
3575
|
return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
|
|
3484
3576
|
}
|
|
3485
3577
|
function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
|
|
3578
|
+
if (typeof DracoDecoderModule !== "function") {
|
|
3579
|
+
throw new Error("DracoDecoderModule could not be loaded");
|
|
3580
|
+
}
|
|
3486
3581
|
const options = {};
|
|
3487
3582
|
if (wasmBinary) {
|
|
3488
3583
|
options.wasmBinary = wasmBinary;
|
|
@@ -4102,7 +4197,10 @@ var __exports__ = (() => {
|
|
|
4102
4197
|
parse
|
|
4103
4198
|
};
|
|
4104
4199
|
async function parse(arrayBuffer, options) {
|
|
4105
|
-
const { draco } = await loadDracoDecoderModule(
|
|
4200
|
+
const { draco } = await loadDracoDecoderModule(
|
|
4201
|
+
options?.core,
|
|
4202
|
+
options?.draco?.decoderType || "wasm"
|
|
4203
|
+
);
|
|
4106
4204
|
const dracoParser = new DracoParser(draco);
|
|
4107
4205
|
try {
|
|
4108
4206
|
return dracoParser.parseSync(arrayBuffer, options?.draco);
|
|
@@ -5566,7 +5664,7 @@ var __exports__ = (() => {
|
|
|
5566
5664
|
const texCoordAccessor = primitive.attributes[`TEXCOORD_${originalTexCoord}`];
|
|
5567
5665
|
if (Number.isFinite(texCoordAccessor)) {
|
|
5568
5666
|
const accessor = gltfData.json.accessors?.[texCoordAccessor];
|
|
5569
|
-
if (accessor && accessor.bufferView) {
|
|
5667
|
+
if (accessor && accessor.bufferView !== void 0) {
|
|
5570
5668
|
const bufferView = gltfData.json.bufferViews?.[accessor.bufferView];
|
|
5571
5669
|
if (bufferView) {
|
|
5572
5670
|
const { arrayBuffer, byteOffset: bufferByteOffset } = gltfData.buffers[bufferView.buffer];
|
|
@@ -5583,7 +5681,7 @@ var __exports__ = (() => {
|
|
|
5583
5681
|
result.set([scratchVector[0], scratchVector[1]], i * components);
|
|
5584
5682
|
}
|
|
5585
5683
|
if (originalTexCoord === texCoord) {
|
|
5586
|
-
updateGltf(accessor,
|
|
5684
|
+
updateGltf(accessor, gltfData, result, accessor.bufferView);
|
|
5587
5685
|
} else {
|
|
5588
5686
|
createAttribute(texCoord, accessor, primitive, gltfData, result);
|
|
5589
5687
|
}
|
|
@@ -5591,28 +5689,49 @@ var __exports__ = (() => {
|
|
|
5591
5689
|
}
|
|
5592
5690
|
}
|
|
5593
5691
|
}
|
|
5594
|
-
function updateGltf(accessor,
|
|
5692
|
+
function updateGltf(accessor, gltfData, newTexCoordArray, originalBufferViewIndex) {
|
|
5595
5693
|
accessor.componentType = 5126;
|
|
5596
|
-
|
|
5597
|
-
|
|
5694
|
+
accessor.byteOffset = 0;
|
|
5695
|
+
const accessors = gltfData.json.accessors || [];
|
|
5696
|
+
const bufferViewReferenceCount = accessors.reduce((count, currentAccessor) => {
|
|
5697
|
+
return currentAccessor.bufferView === originalBufferViewIndex ? count + 1 : count;
|
|
5698
|
+
}, 0);
|
|
5699
|
+
const shouldCreateNewBufferView = bufferViewReferenceCount > 1;
|
|
5700
|
+
gltfData.buffers.push({
|
|
5701
|
+
arrayBuffer: ensureArrayBuffer(newTexCoordArray.buffer),
|
|
5598
5702
|
byteOffset: 0,
|
|
5599
5703
|
byteLength: newTexCoordArray.buffer.byteLength
|
|
5600
5704
|
});
|
|
5601
|
-
|
|
5602
|
-
|
|
5705
|
+
const newBufferIndex = gltfData.buffers.length - 1;
|
|
5706
|
+
gltfData.json.bufferViews = gltfData.json.bufferViews || [];
|
|
5707
|
+
if (shouldCreateNewBufferView) {
|
|
5708
|
+
gltfData.json.bufferViews.push({
|
|
5709
|
+
buffer: newBufferIndex,
|
|
5710
|
+
byteLength: newTexCoordArray.buffer.byteLength,
|
|
5711
|
+
byteOffset: 0
|
|
5712
|
+
});
|
|
5713
|
+
accessor.bufferView = gltfData.json.bufferViews.length - 1;
|
|
5714
|
+
return;
|
|
5715
|
+
}
|
|
5716
|
+
const bufferView = gltfData.json.bufferViews[originalBufferViewIndex];
|
|
5717
|
+
if (!bufferView) {
|
|
5718
|
+
return;
|
|
5719
|
+
}
|
|
5720
|
+
bufferView.buffer = newBufferIndex;
|
|
5603
5721
|
bufferView.byteOffset = 0;
|
|
5604
|
-
|
|
5722
|
+
bufferView.byteLength = newTexCoordArray.buffer.byteLength;
|
|
5723
|
+
if (bufferView.byteStride !== void 0) {
|
|
5724
|
+
delete bufferView.byteStride;
|
|
5725
|
+
}
|
|
5605
5726
|
}
|
|
5606
5727
|
function createAttribute(newTexCoord, originalAccessor, primitive, gltfData, newTexCoordArray) {
|
|
5607
5728
|
gltfData.buffers.push({
|
|
5608
|
-
arrayBuffer: newTexCoordArray.buffer,
|
|
5729
|
+
arrayBuffer: ensureArrayBuffer(newTexCoordArray.buffer),
|
|
5609
5730
|
byteOffset: 0,
|
|
5610
5731
|
byteLength: newTexCoordArray.buffer.byteLength
|
|
5611
5732
|
});
|
|
5733
|
+
gltfData.json.bufferViews = gltfData.json.bufferViews || [];
|
|
5612
5734
|
const bufferViews = gltfData.json.bufferViews;
|
|
5613
|
-
if (!bufferViews) {
|
|
5614
|
-
return;
|
|
5615
|
-
}
|
|
5616
5735
|
bufferViews.push({
|
|
5617
5736
|
buffer: gltfData.buffers.length - 1,
|
|
5618
5737
|
byteLength: newTexCoordArray.buffer.byteLength,
|
|
@@ -6088,10 +6207,10 @@ var __exports__ = (() => {
|
|
|
6088
6207
|
return gltf;
|
|
6089
6208
|
}
|
|
6090
6209
|
function parseGLTFContainerSync(gltf, data, byteOffset, options) {
|
|
6091
|
-
if (options.
|
|
6092
|
-
gltf.baseUri = options.
|
|
6210
|
+
if (options.core?.baseUri) {
|
|
6211
|
+
gltf.baseUri = options.core?.baseUri;
|
|
6093
6212
|
}
|
|
6094
|
-
if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {
|
|
6213
|
+
if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options.glb)) {
|
|
6095
6214
|
const textDecoder = new TextDecoder();
|
|
6096
6215
|
data = textDecoder.decode(data);
|
|
6097
6216
|
}
|
|
@@ -6179,14 +6298,16 @@ var __exports__ = (() => {
|
|
|
6179
6298
|
arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);
|
|
6180
6299
|
}
|
|
6181
6300
|
assert3(arrayBuffer, "glTF image has no data");
|
|
6301
|
+
const strictOptions = options;
|
|
6302
|
+
const gltfOptions = {
|
|
6303
|
+
...strictOptions,
|
|
6304
|
+
core: { ...strictOptions?.core, mimeType: image.mimeType },
|
|
6305
|
+
basis: strictOptions.basis || { format: selectSupportedBasisFormat() }
|
|
6306
|
+
};
|
|
6182
6307
|
let parsedImage = await parseFromContext(
|
|
6183
6308
|
arrayBuffer,
|
|
6184
6309
|
[ImageLoader, BasisLoader],
|
|
6185
|
-
|
|
6186
|
-
...options,
|
|
6187
|
-
mimeType: image.mimeType,
|
|
6188
|
-
basis: options.basis || { format: selectSupportedBasisFormat() }
|
|
6189
|
-
},
|
|
6310
|
+
gltfOptions,
|
|
6190
6311
|
context
|
|
6191
6312
|
);
|
|
6192
6313
|
if (parsedImage && parsedImage[0]) {
|
|
@@ -6227,18 +6348,15 @@ var __exports__ = (() => {
|
|
|
6227
6348
|
// Create image objects
|
|
6228
6349
|
decompressMeshes: true
|
|
6229
6350
|
// Decompress Draco encoded meshes
|
|
6230
|
-
}
|
|
6231
|
-
// common?
|
|
6232
|
-
log: console
|
|
6233
|
-
// eslint-disable-line
|
|
6351
|
+
}
|
|
6234
6352
|
}
|
|
6235
6353
|
};
|
|
6236
6354
|
async function parse2(arrayBuffer, options = {}, context) {
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
const
|
|
6355
|
+
const mergedOptions = { ...GLTFLoader.options, ...options };
|
|
6356
|
+
mergedOptions.gltf = { ...GLTFLoader.options.gltf, ...mergedOptions.gltf };
|
|
6357
|
+
const byteOffset = options?.glb?.byteOffset || 0;
|
|
6240
6358
|
const gltf = {};
|
|
6241
|
-
return await parseGLTF(gltf, arrayBuffer, byteOffset,
|
|
6359
|
+
return await parseGLTF(gltf, arrayBuffer, byteOffset, mergedOptions, context);
|
|
6242
6360
|
}
|
|
6243
6361
|
|
|
6244
6362
|
// src/lib/encoders/encode-glb.ts
|
|
@@ -6352,9 +6470,8 @@ var __exports__ = (() => {
|
|
|
6352
6470
|
return parseSync(arrayBuffer, options);
|
|
6353
6471
|
}
|
|
6354
6472
|
function parseSync(arrayBuffer, options) {
|
|
6355
|
-
const { byteOffset = 0 } = options || {};
|
|
6356
6473
|
const glb = {};
|
|
6357
|
-
parseGLBSync(glb, arrayBuffer, byteOffset, options?.glb);
|
|
6474
|
+
parseGLBSync(glb, arrayBuffer, options?.glb?.byteOffset || 0, options?.glb);
|
|
6358
6475
|
return glb;
|
|
6359
6476
|
}
|
|
6360
6477
|
|
|
@@ -6685,7 +6802,7 @@ var __exports__ = (() => {
|
|
|
6685
6802
|
const buffer = accessor.bufferView.buffer;
|
|
6686
6803
|
const { ArrayType, byteLength } = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);
|
|
6687
6804
|
const byteOffset = (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;
|
|
6688
|
-
let cutBuffer = buffer.arrayBuffer
|
|
6805
|
+
let cutBuffer = copyToArrayBuffer(buffer.arrayBuffer, byteOffset, byteLength);
|
|
6689
6806
|
if (accessor.bufferView.byteStride) {
|
|
6690
6807
|
cutBuffer = this._getValueFromInterleavedBuffer(
|
|
6691
6808
|
buffer,
|