@loaders.gl/gltf 4.3.4 → 4.4.0-alpha.10
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 +279 -160
- 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 ||= {};
|
|
@@ -116,16 +119,20 @@ var __exports__ = (() => {
|
|
|
116
119
|
return module || null;
|
|
117
120
|
}
|
|
118
121
|
|
|
122
|
+
// ../worker-utils/src/lib/npm-tag.ts
|
|
123
|
+
var NPM_TAG = "beta";
|
|
124
|
+
|
|
119
125
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
120
|
-
var
|
|
126
|
+
var warningIssued = false;
|
|
121
127
|
function getVersion() {
|
|
122
128
|
if (!globalThis._loadersgl_?.version) {
|
|
123
129
|
globalThis._loadersgl_ = globalThis._loadersgl_ || {};
|
|
124
|
-
if (typeof __VERSION__ === "undefined") {
|
|
130
|
+
if (typeof __VERSION__ === "undefined" && !warningIssued) {
|
|
125
131
|
console.warn(
|
|
126
132
|
"loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN."
|
|
127
133
|
);
|
|
128
134
|
globalThis._loadersgl_.version = NPM_TAG;
|
|
135
|
+
warningIssued = true;
|
|
129
136
|
} else {
|
|
130
137
|
globalThis._loadersgl_.version = __VERSION__;
|
|
131
138
|
}
|
|
@@ -172,6 +179,9 @@ var __exports__ = (() => {
|
|
|
172
179
|
return await loadLibraryPromises[libraryUrl];
|
|
173
180
|
}
|
|
174
181
|
function getLibraryUrl(library, moduleName, options = {}, libraryName = null) {
|
|
182
|
+
if (options?.core) {
|
|
183
|
+
throw new Error("loadLibrary: options.core must be pre-normalized");
|
|
184
|
+
}
|
|
175
185
|
if (!options.useLocalLibraries && library.startsWith("http")) {
|
|
176
186
|
return library;
|
|
177
187
|
}
|
|
@@ -197,10 +207,20 @@ var __exports__ = (() => {
|
|
|
197
207
|
return await loadAsArrayBuffer(libraryUrl);
|
|
198
208
|
}
|
|
199
209
|
if (!isBrowser2) {
|
|
210
|
+
const { requireFromFile } = globalThis.loaders || {};
|
|
200
211
|
try {
|
|
201
|
-
const
|
|
202
|
-
|
|
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/"));
|
|
203
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
|
+
}
|
|
204
224
|
console.error(error);
|
|
205
225
|
return null;
|
|
206
226
|
}
|
|
@@ -236,7 +256,14 @@ var __exports__ = (() => {
|
|
|
236
256
|
const response = await fetch(url);
|
|
237
257
|
return await response.arrayBuffer();
|
|
238
258
|
}
|
|
239
|
-
|
|
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
|
+
}
|
|
240
267
|
}
|
|
241
268
|
async function loadAsText(url) {
|
|
242
269
|
const { readFileAsText } = globalThis.loaders || {};
|
|
@@ -244,7 +271,14 @@ var __exports__ = (() => {
|
|
|
244
271
|
const response = await fetch(url);
|
|
245
272
|
return await response.text();
|
|
246
273
|
}
|
|
247
|
-
|
|
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
|
+
}
|
|
248
282
|
}
|
|
249
283
|
|
|
250
284
|
// ../loader-utils/src/lib/binary-utils/get-first-characters.ts
|
|
@@ -332,6 +366,27 @@ var __exports__ = (() => {
|
|
|
332
366
|
return byteOffset;
|
|
333
367
|
}
|
|
334
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
|
+
|
|
335
390
|
// ../images/src/lib/category-api/image-type.ts
|
|
336
391
|
var parseImageNode = globalThis.loaders?.parseImageNode;
|
|
337
392
|
var IMAGE_SUPPORTED = typeof Image !== "undefined";
|
|
@@ -468,7 +523,6 @@ var __exports__ = (() => {
|
|
|
468
523
|
}
|
|
469
524
|
|
|
470
525
|
// ../images/src/lib/parsers/parse-to-image-bitmap.ts
|
|
471
|
-
var EMPTY_OBJECT = {};
|
|
472
526
|
var imagebitmapOptionsSupported = true;
|
|
473
527
|
async function parseToImageBitmap(arrayBuffer, options, url) {
|
|
474
528
|
let blob;
|
|
@@ -496,8 +550,13 @@ var __exports__ = (() => {
|
|
|
496
550
|
return await createImageBitmap(blob);
|
|
497
551
|
}
|
|
498
552
|
function isEmptyObject(object) {
|
|
499
|
-
|
|
500
|
-
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
|
+
}
|
|
501
560
|
}
|
|
502
561
|
return true;
|
|
503
562
|
}
|
|
@@ -1518,7 +1577,7 @@ var __exports__ = (() => {
|
|
|
1518
1577
|
buffer = bufferArray.slice(offset, offset + byteLength).buffer;
|
|
1519
1578
|
offset = 0;
|
|
1520
1579
|
}
|
|
1521
|
-
return new ArrayType(buffer, offset, length);
|
|
1580
|
+
return new ArrayType(ensureArrayBuffer(buffer), offset, length);
|
|
1522
1581
|
}
|
|
1523
1582
|
function getPrimitiveTextureData(scenegraph, textureInfo, primitive) {
|
|
1524
1583
|
const texCoordAccessorKey = `TEXCOORD_${textureInfo.texCoord || 0}`;
|
|
@@ -2276,7 +2335,7 @@ var __exports__ = (() => {
|
|
|
2276
2335
|
}
|
|
2277
2336
|
function createBufferView(typedArray, scenegraph) {
|
|
2278
2337
|
scenegraph.gltf.buffers.push({
|
|
2279
|
-
arrayBuffer: typedArray.buffer,
|
|
2338
|
+
arrayBuffer: ensureArrayBuffer(typedArray.buffer),
|
|
2280
2339
|
byteOffset: typedArray.byteOffset,
|
|
2281
2340
|
byteLength: typedArray.byteLength
|
|
2282
2341
|
});
|
|
@@ -2799,18 +2858,18 @@ var __exports__ = (() => {
|
|
|
2799
2858
|
bgr565: { basisFormat: 15, compressed: false },
|
|
2800
2859
|
rgba4444: { basisFormat: 16, compressed: false }
|
|
2801
2860
|
};
|
|
2802
|
-
async function parseBasis(data, options) {
|
|
2803
|
-
if (options.basis.containerFormat === "auto") {
|
|
2861
|
+
async function parseBasis(data, options = {}) {
|
|
2862
|
+
if (!options.basis?.containerFormat || options.basis.containerFormat === "auto") {
|
|
2804
2863
|
if (isKTX(data)) {
|
|
2805
|
-
const fileConstructors = await loadBasisEncoderModule(options);
|
|
2864
|
+
const fileConstructors = await loadBasisEncoderModule(options?.core || {});
|
|
2806
2865
|
return parseKTX2File(fileConstructors.KTX2File, data, options);
|
|
2807
2866
|
}
|
|
2808
|
-
const { BasisFile } = await loadBasisTranscoderModule(options);
|
|
2867
|
+
const { BasisFile } = await loadBasisTranscoderModule(options?.core || {});
|
|
2809
2868
|
return parseBasisFile(BasisFile, data, options);
|
|
2810
2869
|
}
|
|
2811
2870
|
switch (options.basis.module) {
|
|
2812
2871
|
case "encoder":
|
|
2813
|
-
const fileConstructors = await loadBasisEncoderModule(options);
|
|
2872
|
+
const fileConstructors = await loadBasisEncoderModule(options?.core || {});
|
|
2814
2873
|
switch (options.basis.containerFormat) {
|
|
2815
2874
|
case "ktx2":
|
|
2816
2875
|
return parseKTX2File(fileConstructors.KTX2File, data, options);
|
|
@@ -2820,7 +2879,7 @@ var __exports__ = (() => {
|
|
|
2820
2879
|
}
|
|
2821
2880
|
case "transcoder":
|
|
2822
2881
|
default:
|
|
2823
|
-
const { BasisFile } = await loadBasisTranscoderModule(options);
|
|
2882
|
+
const { BasisFile } = await loadBasisTranscoderModule(options.core || {});
|
|
2824
2883
|
return parseBasisFile(BasisFile, data, options);
|
|
2825
2884
|
}
|
|
2826
2885
|
}
|
|
@@ -2923,7 +2982,7 @@ var __exports__ = (() => {
|
|
|
2923
2982
|
};
|
|
2924
2983
|
}
|
|
2925
2984
|
function getBasisOptions(options, hasAlpha) {
|
|
2926
|
-
let format = options
|
|
2985
|
+
let format = options.basis?.format;
|
|
2927
2986
|
if (format === "auto") {
|
|
2928
2987
|
format = selectSupportedBasisFormat();
|
|
2929
2988
|
}
|
|
@@ -3098,7 +3157,7 @@ var __exports__ = (() => {
|
|
|
3098
3157
|
if (absolute) {
|
|
3099
3158
|
return url;
|
|
3100
3159
|
}
|
|
3101
|
-
const baseUrl = options.baseUri || options.uri;
|
|
3160
|
+
const baseUrl = options?.core?.baseUri || options.baseUri || options.uri;
|
|
3102
3161
|
if (!baseUrl) {
|
|
3103
3162
|
throw new Error(`'baseUri' must be provided to resolve relative url ${url}`);
|
|
3104
3163
|
}
|
|
@@ -3416,35 +3475,126 @@ var __exports__ = (() => {
|
|
|
3416
3475
|
preprocess: () => preprocess3
|
|
3417
3476
|
});
|
|
3418
3477
|
|
|
3419
|
-
// ../draco/src/lib/
|
|
3420
|
-
var
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
var
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3478
|
+
// ../draco/src/lib/draco-module-loader.ts
|
|
3479
|
+
var DRACO_DECODER_VERSION = "1.5.6";
|
|
3480
|
+
var DRACO_ENCODER_VERSION = "1.4.1";
|
|
3481
|
+
var STATIC_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_DECODER_VERSION}`;
|
|
3482
|
+
var DRACO_EXTERNAL_LIBRARIES = {
|
|
3483
|
+
/** The primary Draco3D encoder, javascript wrapper part */
|
|
3484
|
+
DECODER: "draco_wasm_wrapper.js",
|
|
3485
|
+
/** The primary draco decoder, compiled web assembly part */
|
|
3486
|
+
DECODER_WASM: "draco_decoder.wasm",
|
|
3487
|
+
/** Fallback decoder for non-webassebly environments. Very big bundle, lower performance */
|
|
3488
|
+
FALLBACK_DECODER: "draco_decoder.js",
|
|
3489
|
+
/** Draco encoder */
|
|
3490
|
+
ENCODER: "draco_encoder.js"
|
|
3491
|
+
};
|
|
3492
|
+
var DRACO_EXTERNAL_LIBRARY_URLS = {
|
|
3493
|
+
[DRACO_EXTERNAL_LIBRARIES.DECODER]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.DECODER}`,
|
|
3494
|
+
[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.DECODER_WASM}`,
|
|
3495
|
+
[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER]: `${STATIC_DECODER_URL}/${DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER}`,
|
|
3496
|
+
[DRACO_EXTERNAL_LIBRARIES.ENCODER]: `https://raw.githubusercontent.com/google/draco/${DRACO_ENCODER_VERSION}/javascript/${DRACO_EXTERNAL_LIBRARIES.ENCODER}`
|
|
3497
|
+
};
|
|
3498
|
+
var loadDecoderPromise;
|
|
3499
|
+
async function loadDracoDecoderModule(options = {}, type) {
|
|
3500
|
+
const modules = options.modules || {};
|
|
3501
|
+
if (modules.draco3d) {
|
|
3502
|
+
loadDecoderPromise ||= modules.draco3d.createDecoderModule({}).then((draco) => {
|
|
3503
|
+
return { draco };
|
|
3504
|
+
});
|
|
3505
|
+
} else {
|
|
3506
|
+
loadDecoderPromise ||= loadDracoDecoder(options, type);
|
|
3507
|
+
}
|
|
3508
|
+
return await loadDecoderPromise;
|
|
3509
|
+
}
|
|
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];
|
|
3443
3517
|
}
|
|
3444
3518
|
}
|
|
3445
|
-
|
|
3519
|
+
return library;
|
|
3520
|
+
}
|
|
3521
|
+
async function loadDracoDecoder(options, type) {
|
|
3522
|
+
let DracoDecoderModule;
|
|
3523
|
+
let wasmBinary;
|
|
3524
|
+
switch (type) {
|
|
3525
|
+
case "js":
|
|
3526
|
+
DracoDecoderModule = await loadLibrary(
|
|
3527
|
+
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
|
|
3528
|
+
"draco",
|
|
3529
|
+
options,
|
|
3530
|
+
DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER
|
|
3531
|
+
);
|
|
3532
|
+
break;
|
|
3533
|
+
case "wasm":
|
|
3534
|
+
default:
|
|
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
|
+
}
|
|
3554
|
+
}
|
|
3555
|
+
DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
|
|
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
|
+
}
|
|
3575
|
+
return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
|
|
3576
|
+
}
|
|
3577
|
+
function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
|
|
3578
|
+
if (typeof DracoDecoderModule !== "function") {
|
|
3579
|
+
throw new Error("DracoDecoderModule could not be loaded");
|
|
3580
|
+
}
|
|
3581
|
+
const options = {};
|
|
3582
|
+
if (wasmBinary) {
|
|
3583
|
+
options.wasmBinary = wasmBinary;
|
|
3584
|
+
}
|
|
3585
|
+
return new Promise((resolve) => {
|
|
3586
|
+
DracoDecoderModule({
|
|
3587
|
+
...options,
|
|
3588
|
+
onModuleLoaded: (draco) => resolve({ draco })
|
|
3589
|
+
// Module is Promise-like. Wrap in object to avoid loop.
|
|
3590
|
+
});
|
|
3591
|
+
});
|
|
3592
|
+
}
|
|
3446
3593
|
|
|
3447
|
-
// ../
|
|
3594
|
+
// ../draco/src/lib/utils/version.ts
|
|
3595
|
+
var VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
3596
|
+
|
|
3597
|
+
// ../schema-utils/src/lib/schema/data-type.ts
|
|
3448
3598
|
function getDataTypeFromTypedArray(array) {
|
|
3449
3599
|
switch (array.constructor) {
|
|
3450
3600
|
case Int8Array:
|
|
@@ -3469,7 +3619,7 @@ var __exports__ = (() => {
|
|
|
3469
3619
|
}
|
|
3470
3620
|
}
|
|
3471
3621
|
|
|
3472
|
-
// ../schema/src/lib/mesh/mesh-utils.ts
|
|
3622
|
+
// ../schema-utils/src/lib/mesh/mesh-utils.ts
|
|
3473
3623
|
function getMeshBoundingBox(attributes) {
|
|
3474
3624
|
let minX = Infinity;
|
|
3475
3625
|
let minY = Infinity;
|
|
@@ -3496,7 +3646,7 @@ var __exports__ = (() => {
|
|
|
3496
3646
|
];
|
|
3497
3647
|
}
|
|
3498
3648
|
|
|
3499
|
-
// ../schema/src/lib/mesh/deduce-mesh-schema.ts
|
|
3649
|
+
// ../schema-utils/src/lib/mesh/deduce-mesh-schema.ts
|
|
3500
3650
|
function deduceMeshField(name12, attribute, optionalMetadata) {
|
|
3501
3651
|
const type = getDataTypeFromTypedArray(attribute.value);
|
|
3502
3652
|
const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);
|
|
@@ -3720,6 +3870,7 @@ var __exports__ = (() => {
|
|
|
3720
3870
|
case "triangle-strip":
|
|
3721
3871
|
return {
|
|
3722
3872
|
topology: "triangle-strip",
|
|
3873
|
+
// TODO - mode is wrong?
|
|
3723
3874
|
mode: 4,
|
|
3724
3875
|
// GL.TRIANGLES
|
|
3725
3876
|
attributes,
|
|
@@ -3732,6 +3883,7 @@ var __exports__ = (() => {
|
|
|
3732
3883
|
default:
|
|
3733
3884
|
return {
|
|
3734
3885
|
topology: "triangle-list",
|
|
3886
|
+
// TODO - mode is wrong?
|
|
3735
3887
|
mode: 5,
|
|
3736
3888
|
// GL.TRIANGLE_STRIP
|
|
3737
3889
|
attributes,
|
|
@@ -4016,91 +4168,39 @@ var __exports__ = (() => {
|
|
|
4016
4168
|
return intArray;
|
|
4017
4169
|
}
|
|
4018
4170
|
|
|
4019
|
-
// ../draco/src/
|
|
4020
|
-
var
|
|
4021
|
-
|
|
4022
|
-
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
|
|
4032
|
-
|
|
4033
|
-
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4037
|
-
|
|
4038
|
-
|
|
4039
|
-
|
|
4040
|
-
|
|
4041
|
-
const modules = options.modules || {};
|
|
4042
|
-
if (modules.draco3d) {
|
|
4043
|
-
loadDecoderPromise ||= modules.draco3d.createDecoderModule({}).then((draco) => {
|
|
4044
|
-
return { draco };
|
|
4045
|
-
});
|
|
4046
|
-
} else {
|
|
4047
|
-
loadDecoderPromise ||= loadDracoDecoder(options);
|
|
4048
|
-
}
|
|
4049
|
-
return await loadDecoderPromise;
|
|
4050
|
-
}
|
|
4051
|
-
async function loadDracoDecoder(options) {
|
|
4052
|
-
let DracoDecoderModule;
|
|
4053
|
-
let wasmBinary;
|
|
4054
|
-
switch (options.draco && options.draco.decoderType) {
|
|
4055
|
-
case "js":
|
|
4056
|
-
DracoDecoderModule = await loadLibrary(
|
|
4057
|
-
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
|
|
4058
|
-
"draco",
|
|
4059
|
-
options,
|
|
4060
|
-
DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER
|
|
4061
|
-
);
|
|
4062
|
-
break;
|
|
4063
|
-
case "wasm":
|
|
4064
|
-
default:
|
|
4065
|
-
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
4066
|
-
await loadLibrary(
|
|
4067
|
-
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
|
|
4068
|
-
"draco",
|
|
4069
|
-
options,
|
|
4070
|
-
DRACO_EXTERNAL_LIBRARIES.DECODER
|
|
4071
|
-
),
|
|
4072
|
-
await loadLibrary(
|
|
4073
|
-
DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
|
|
4074
|
-
"draco",
|
|
4075
|
-
options,
|
|
4076
|
-
DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
|
|
4077
|
-
)
|
|
4078
|
-
]);
|
|
4079
|
-
}
|
|
4080
|
-
DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
|
|
4081
|
-
return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
|
|
4082
|
-
}
|
|
4083
|
-
function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
|
|
4084
|
-
const options = {};
|
|
4085
|
-
if (wasmBinary) {
|
|
4086
|
-
options.wasmBinary = wasmBinary;
|
|
4171
|
+
// ../draco/src/draco-loader.ts
|
|
4172
|
+
var DracoWorkerLoader = {
|
|
4173
|
+
dataType: null,
|
|
4174
|
+
batchType: null,
|
|
4175
|
+
name: "Draco",
|
|
4176
|
+
id: "draco",
|
|
4177
|
+
module: "draco",
|
|
4178
|
+
// shapes: ['mesh'],
|
|
4179
|
+
version: VERSION5,
|
|
4180
|
+
worker: true,
|
|
4181
|
+
extensions: ["drc"],
|
|
4182
|
+
mimeTypes: ["application/octet-stream"],
|
|
4183
|
+
binary: true,
|
|
4184
|
+
tests: ["DRACO"],
|
|
4185
|
+
options: {
|
|
4186
|
+
draco: {
|
|
4187
|
+
decoderType: typeof WebAssembly === "object" ? "wasm" : "js",
|
|
4188
|
+
// 'js' for IE11
|
|
4189
|
+
libraryPath: "libs/",
|
|
4190
|
+
extraAttributes: {},
|
|
4191
|
+
attributeNameEntry: void 0
|
|
4192
|
+
}
|
|
4087
4193
|
}
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
onModuleLoaded: (draco) => resolve({ draco })
|
|
4092
|
-
// Module is Promise-like. Wrap in object to avoid loop.
|
|
4093
|
-
});
|
|
4094
|
-
});
|
|
4095
|
-
}
|
|
4096
|
-
|
|
4097
|
-
// ../draco/src/index.ts
|
|
4098
|
-
var DracoLoader2 = {
|
|
4099
|
-
...DracoLoader,
|
|
4194
|
+
};
|
|
4195
|
+
var DracoLoader = {
|
|
4196
|
+
...DracoWorkerLoader,
|
|
4100
4197
|
parse
|
|
4101
4198
|
};
|
|
4102
4199
|
async function parse(arrayBuffer, options) {
|
|
4103
|
-
const { draco } = await loadDracoDecoderModule(
|
|
4200
|
+
const { draco } = await loadDracoDecoderModule(
|
|
4201
|
+
options?.core,
|
|
4202
|
+
options?.draco?.decoderType || "wasm"
|
|
4203
|
+
);
|
|
4104
4204
|
const dracoParser = new DracoParser(draco);
|
|
4105
4205
|
try {
|
|
4106
4206
|
return dracoParser.parseSync(arrayBuffer, options?.draco);
|
|
@@ -4211,7 +4311,7 @@ var __exports__ = (() => {
|
|
|
4211
4311
|
const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset);
|
|
4212
4312
|
const dracoOptions = { ...options };
|
|
4213
4313
|
delete dracoOptions["3d-tiles"];
|
|
4214
|
-
const decodedData = await parseFromContext(bufferCopy,
|
|
4314
|
+
const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);
|
|
4215
4315
|
const decodedAttributes = getGLTFAccessors(decodedData.attributes);
|
|
4216
4316
|
for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
|
|
4217
4317
|
if (attributeName in primitive.attributes) {
|
|
@@ -5564,7 +5664,7 @@ var __exports__ = (() => {
|
|
|
5564
5664
|
const texCoordAccessor = primitive.attributes[`TEXCOORD_${originalTexCoord}`];
|
|
5565
5665
|
if (Number.isFinite(texCoordAccessor)) {
|
|
5566
5666
|
const accessor = gltfData.json.accessors?.[texCoordAccessor];
|
|
5567
|
-
if (accessor && accessor.bufferView) {
|
|
5667
|
+
if (accessor && accessor.bufferView !== void 0) {
|
|
5568
5668
|
const bufferView = gltfData.json.bufferViews?.[accessor.bufferView];
|
|
5569
5669
|
if (bufferView) {
|
|
5570
5670
|
const { arrayBuffer, byteOffset: bufferByteOffset } = gltfData.buffers[bufferView.buffer];
|
|
@@ -5581,7 +5681,7 @@ var __exports__ = (() => {
|
|
|
5581
5681
|
result.set([scratchVector[0], scratchVector[1]], i * components);
|
|
5582
5682
|
}
|
|
5583
5683
|
if (originalTexCoord === texCoord) {
|
|
5584
|
-
updateGltf(accessor,
|
|
5684
|
+
updateGltf(accessor, gltfData, result, accessor.bufferView);
|
|
5585
5685
|
} else {
|
|
5586
5686
|
createAttribute(texCoord, accessor, primitive, gltfData, result);
|
|
5587
5687
|
}
|
|
@@ -5589,28 +5689,49 @@ var __exports__ = (() => {
|
|
|
5589
5689
|
}
|
|
5590
5690
|
}
|
|
5591
5691
|
}
|
|
5592
|
-
function updateGltf(accessor,
|
|
5692
|
+
function updateGltf(accessor, gltfData, newTexCoordArray, originalBufferViewIndex) {
|
|
5593
5693
|
accessor.componentType = 5126;
|
|
5594
|
-
|
|
5595
|
-
|
|
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),
|
|
5596
5702
|
byteOffset: 0,
|
|
5597
5703
|
byteLength: newTexCoordArray.buffer.byteLength
|
|
5598
5704
|
});
|
|
5599
|
-
|
|
5600
|
-
|
|
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;
|
|
5601
5721
|
bufferView.byteOffset = 0;
|
|
5602
|
-
|
|
5722
|
+
bufferView.byteLength = newTexCoordArray.buffer.byteLength;
|
|
5723
|
+
if (bufferView.byteStride !== void 0) {
|
|
5724
|
+
delete bufferView.byteStride;
|
|
5725
|
+
}
|
|
5603
5726
|
}
|
|
5604
5727
|
function createAttribute(newTexCoord, originalAccessor, primitive, gltfData, newTexCoordArray) {
|
|
5605
5728
|
gltfData.buffers.push({
|
|
5606
|
-
arrayBuffer: newTexCoordArray.buffer,
|
|
5729
|
+
arrayBuffer: ensureArrayBuffer(newTexCoordArray.buffer),
|
|
5607
5730
|
byteOffset: 0,
|
|
5608
5731
|
byteLength: newTexCoordArray.buffer.byteLength
|
|
5609
5732
|
});
|
|
5733
|
+
gltfData.json.bufferViews = gltfData.json.bufferViews || [];
|
|
5610
5734
|
const bufferViews = gltfData.json.bufferViews;
|
|
5611
|
-
if (!bufferViews) {
|
|
5612
|
-
return;
|
|
5613
|
-
}
|
|
5614
5735
|
bufferViews.push({
|
|
5615
5736
|
buffer: gltfData.buffers.length - 1,
|
|
5616
5737
|
byteLength: newTexCoordArray.buffer.byteLength,
|
|
@@ -6086,10 +6207,10 @@ var __exports__ = (() => {
|
|
|
6086
6207
|
return gltf;
|
|
6087
6208
|
}
|
|
6088
6209
|
function parseGLTFContainerSync(gltf, data, byteOffset, options) {
|
|
6089
|
-
if (options.
|
|
6090
|
-
gltf.baseUri = options.
|
|
6210
|
+
if (options.core?.baseUri) {
|
|
6211
|
+
gltf.baseUri = options.core?.baseUri;
|
|
6091
6212
|
}
|
|
6092
|
-
if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {
|
|
6213
|
+
if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options.glb)) {
|
|
6093
6214
|
const textDecoder = new TextDecoder();
|
|
6094
6215
|
data = textDecoder.decode(data);
|
|
6095
6216
|
}
|
|
@@ -6177,14 +6298,16 @@ var __exports__ = (() => {
|
|
|
6177
6298
|
arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);
|
|
6178
6299
|
}
|
|
6179
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
|
+
};
|
|
6180
6307
|
let parsedImage = await parseFromContext(
|
|
6181
6308
|
arrayBuffer,
|
|
6182
6309
|
[ImageLoader, BasisLoader],
|
|
6183
|
-
|
|
6184
|
-
...options,
|
|
6185
|
-
mimeType: image.mimeType,
|
|
6186
|
-
basis: options.basis || { format: selectSupportedBasisFormat() }
|
|
6187
|
-
},
|
|
6310
|
+
gltfOptions,
|
|
6188
6311
|
context
|
|
6189
6312
|
);
|
|
6190
6313
|
if (parsedImage && parsedImage[0]) {
|
|
@@ -6225,18 +6348,15 @@ var __exports__ = (() => {
|
|
|
6225
6348
|
// Create image objects
|
|
6226
6349
|
decompressMeshes: true
|
|
6227
6350
|
// Decompress Draco encoded meshes
|
|
6228
|
-
}
|
|
6229
|
-
// common?
|
|
6230
|
-
log: console
|
|
6231
|
-
// eslint-disable-line
|
|
6351
|
+
}
|
|
6232
6352
|
}
|
|
6233
6353
|
};
|
|
6234
6354
|
async function parse2(arrayBuffer, options = {}, context) {
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
const
|
|
6355
|
+
const mergedOptions = { ...GLTFLoader.options, ...options };
|
|
6356
|
+
mergedOptions.gltf = { ...GLTFLoader.options.gltf, ...mergedOptions.gltf };
|
|
6357
|
+
const byteOffset = options?.glb?.byteOffset || 0;
|
|
6238
6358
|
const gltf = {};
|
|
6239
|
-
return await parseGLTF(gltf, arrayBuffer, byteOffset,
|
|
6359
|
+
return await parseGLTF(gltf, arrayBuffer, byteOffset, mergedOptions, context);
|
|
6240
6360
|
}
|
|
6241
6361
|
|
|
6242
6362
|
// src/lib/encoders/encode-glb.ts
|
|
@@ -6350,9 +6470,8 @@ var __exports__ = (() => {
|
|
|
6350
6470
|
return parseSync(arrayBuffer, options);
|
|
6351
6471
|
}
|
|
6352
6472
|
function parseSync(arrayBuffer, options) {
|
|
6353
|
-
const { byteOffset = 0 } = options || {};
|
|
6354
6473
|
const glb = {};
|
|
6355
|
-
parseGLBSync(glb, arrayBuffer, byteOffset, options?.glb);
|
|
6474
|
+
parseGLBSync(glb, arrayBuffer, options?.glb?.byteOffset || 0, options?.glb);
|
|
6356
6475
|
return glb;
|
|
6357
6476
|
}
|
|
6358
6477
|
|
|
@@ -6683,7 +6802,7 @@ var __exports__ = (() => {
|
|
|
6683
6802
|
const buffer = accessor.bufferView.buffer;
|
|
6684
6803
|
const { ArrayType, byteLength } = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);
|
|
6685
6804
|
const byteOffset = (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;
|
|
6686
|
-
let cutBuffer = buffer.arrayBuffer
|
|
6805
|
+
let cutBuffer = copyToArrayBuffer(buffer.arrayBuffer, byteOffset, byteLength);
|
|
6687
6806
|
if (accessor.bufferView.byteStride) {
|
|
6688
6807
|
cutBuffer = this._getValueFromInterleavedBuffer(
|
|
6689
6808
|
buffer,
|