@galacean/engine 2.0.0-alpha.10 → 2.0.0-alpha.12

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.
@@ -28924,7 +28924,7 @@ PrimitiveChunk.subMeshPool = new ReturnableObjectPool(SubMesh, 10);
28924
28924
  /** Sprite. */ AssetType["Sprite"] = "Sprite";
28925
28925
  /** PrimitiveMesh. */ AssetType["PrimitiveMesh"] = "PrimitiveMesh";
28926
28926
  /** Sprite Atlas. */ AssetType["SpriteAtlas"] = "SpriteAtlas";
28927
- /** Ambient light. */ AssetType["Env"] = "Environment";
28927
+ /** Ambient light. */ AssetType["AmbientLight"] = "AmbientLight";
28928
28928
  /** Scene. */ AssetType["Scene"] = "Scene";
28929
28929
  /** Font. */ AssetType["Font"] = "Font";
28930
28930
  /** Source Font, include ttf, otf and woff. */ AssetType["SourceFont"] = "SourceFont";
@@ -45740,7 +45740,9 @@ var decoderMap = {};
45740
45740
  header.name = name;
45741
45741
  header.type = type;
45742
45742
  header.version = fileVersion;
45743
- header.headerLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
45743
+ // Align to 4 bytes so that data following the header can be accessed via TypedArray views
45744
+ var rawLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
45745
+ header.headerLength = rawLength + 3 & ~3;
45744
45746
  return header;
45745
45747
  };
45746
45748
  _create_class(FileHeader, [
@@ -47129,1965 +47131,1982 @@ BufferLoader = __decorate([
47129
47131
  "bin"
47130
47132
  ])
47131
47133
  ], BufferLoader);
47132
- var EnvLoader = /*#__PURE__*/ function(Loader) {
47133
- _inherits(EnvLoader, Loader);
47134
- function EnvLoader() {
47135
- return Loader.apply(this, arguments) || this;
47134
+ var DFDTransferFunction = /*#__PURE__*/ function(DFDTransferFunction) {
47135
+ DFDTransferFunction[DFDTransferFunction["linear"] = 1] = "linear";
47136
+ DFDTransferFunction[DFDTransferFunction["sRGB"] = 2] = "sRGB";
47137
+ return DFDTransferFunction;
47138
+ }({});
47139
+ var ColorModel = /*#__PURE__*/ function(ColorModel) {
47140
+ ColorModel[ColorModel["ETC1S"] = 163] = "ETC1S";
47141
+ ColorModel[ColorModel["UASTC_LDR_4X4"] = 166] = "UASTC_LDR_4X4";
47142
+ ColorModel[ColorModel["UASTC_HDR_4X4"] = 167] = "UASTC_HDR_4X4";
47143
+ return ColorModel;
47144
+ }({});
47145
+ /** @internal */ var KTX2Container = /*#__PURE__*/ function() {
47146
+ function KTX2Container(buffer) {
47147
+ this.vkFormat = 0;
47148
+ this.typeSize = 1;
47149
+ this.pixelWidth = 0;
47150
+ this.pixelHeight = 0;
47151
+ this.pixelDepth = 0;
47152
+ this.layerCount = 0;
47153
+ this.faceCount = 1;
47154
+ this.supercompressionScheme = 0;
47155
+ this.levels = [];
47156
+ this.keyValue = {};
47157
+ this.globalData = null;
47158
+ this.parse(buffer);
47136
47159
  }
47137
- var _proto = EnvLoader.prototype;
47138
- _proto.load = function load(item, resourceManager) {
47139
- return new AssetPromise(function(resolve, reject) {
47140
- var requestConfig = _extends({}, item, {
47141
- type: "arraybuffer"
47142
- });
47143
- var engine = resourceManager.engine;
47144
- var url = item.url;
47145
- resourceManager // @ts-ignore
47146
- ._request(url, requestConfig).then(function(arraybuffer) {
47147
- var texture = EnvLoader._setTextureByBuffer(engine, arraybuffer);
47148
- engine.resourceManager.addContentRestorer(new EnvContentRestorer(texture, url, requestConfig));
47149
- var ambientLight = new AmbientLight(engine);
47150
- var sh = new SphericalHarmonics3();
47151
- ambientLight.diffuseMode = DiffuseMode.SphericalHarmonics;
47152
- sh.copyFromArray(new Float32Array(arraybuffer, 0, 27));
47153
- ambientLight.diffuseSphericalHarmonics = sh;
47154
- ambientLight.specularTexture = texture;
47155
- resolve(ambientLight);
47156
- }).catch(function(e) {
47157
- reject(e);
47158
- });
47159
- });
47160
- };
47161
- /**
47162
- * @internal
47163
- */ EnvLoader._setTextureByBuffer = function _setTextureByBuffer(engine, buffer, texture) {
47164
- var _this;
47165
- var shByteLength = 27 * 4;
47166
- var size = (_this = new Uint16Array(buffer, shByteLength, 1)) == null ? void 0 : _this[0];
47167
- texture || (texture = new TextureCube(engine, size, TextureFormat.R16G16B16A16, true, false));
47168
- texture.filterMode = TextureFilterMode.Trilinear;
47169
- var mipmapCount = texture.mipmapCount;
47170
- var offset = shByteLength + 2;
47171
- for(var mipLevel = 0; mipLevel < mipmapCount; mipLevel++){
47172
- var mipSize = size >> mipLevel;
47173
- for(var face = 0; face < 6; face++){
47174
- var dataSize = mipSize * mipSize * 4;
47175
- var data = new Uint16Array(buffer, offset, dataSize);
47176
- offset += dataSize * 2;
47177
- texture.setPixelBuffer(TextureCubeFace.PositiveX + face, data, mipLevel);
47160
+ var _proto = KTX2Container.prototype;
47161
+ _proto.parse = function parse(data) {
47162
+ var buffer = data.buffer;
47163
+ var byteOffset = data.byteOffset;
47164
+ var headerBufferReader = new BufferReader(data, 12);
47165
+ this.vkFormat = headerBufferReader.nextUint32();
47166
+ this.typeSize = headerBufferReader.nextUint32();
47167
+ this.pixelWidth = headerBufferReader.nextUint32();
47168
+ this.pixelHeight = headerBufferReader.nextUint32();
47169
+ this.pixelDepth = headerBufferReader.nextUint32();
47170
+ this.layerCount = headerBufferReader.nextUint32();
47171
+ this.faceCount = headerBufferReader.nextUint32();
47172
+ var levelCount = Math.max(1, headerBufferReader.nextUint32());
47173
+ this.supercompressionScheme = headerBufferReader.nextUint32();
47174
+ var dfdByteOffset = headerBufferReader.nextUint32();
47175
+ var dfdByteLength = headerBufferReader.nextUint32();
47176
+ var kvdByteOffset = headerBufferReader.nextUint32();
47177
+ var kvdByteLength = headerBufferReader.nextUint32();
47178
+ var sgdByteOffset = headerBufferReader.nextUint64();
47179
+ var sgdByteLength = headerBufferReader.nextUint64();
47180
+ // level index
47181
+ var ktxLevels = new Array(levelCount);
47182
+ var levelByteLength = levelCount * 3 * 8;
47183
+ var levelReader = new BufferReader(data, headerBufferReader.offset, levelByteLength);
47184
+ this.levels = ktxLevels;
47185
+ for(var i = 0; i < levelCount; i++){
47186
+ ktxLevels[i] = {
47187
+ levelData: new Uint8Array(buffer, byteOffset + levelReader.nextUint64(), levelReader.nextUint64()),
47188
+ uncompressedByteLength: levelReader.nextUint64()
47189
+ };
47190
+ }
47191
+ // Data Format Descriptor (DFD).
47192
+ var dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength);
47193
+ var dfd = {
47194
+ vendorId: dfdReader.skip(4 /* totalSize */ ).nextUint16(),
47195
+ descriptorType: dfdReader.nextUint16(),
47196
+ versionNumber: dfdReader.nextUint16(),
47197
+ descriptorBlockSize: dfdReader.nextUint16(),
47198
+ colorModel: dfdReader.nextUint8(),
47199
+ colorPrimaries: dfdReader.nextUint8(),
47200
+ transferFunction: dfdReader.nextUint8(),
47201
+ flags: dfdReader.nextUint8(),
47202
+ texelBlockDimension: [
47203
+ dfdReader.nextUint8(),
47204
+ dfdReader.nextUint8(),
47205
+ dfdReader.nextUint8(),
47206
+ dfdReader.nextUint8()
47207
+ ],
47208
+ bytesPlane: [
47209
+ dfdReader.nextUint8(),
47210
+ dfdReader.nextUint8(),
47211
+ dfdReader.nextUint8(),
47212
+ dfdReader.nextUint8(),
47213
+ dfdReader.nextUint8(),
47214
+ dfdReader.nextUint8(),
47215
+ dfdReader.nextUint8(),
47216
+ dfdReader.nextUint8()
47217
+ ],
47218
+ samples: []
47219
+ };
47220
+ this.dataFormatDescriptor = dfd;
47221
+ var sampleStart = 6;
47222
+ var sampleWords = 4;
47223
+ var numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;
47224
+ for(var i1 = 0; i1 < numSamples; i1++){
47225
+ var sample = {
47226
+ bitOffset: dfdReader.nextUint16(),
47227
+ bitLength: dfdReader.nextUint8(),
47228
+ channelType: dfdReader.nextUint8(),
47229
+ samplePosition: [
47230
+ dfdReader.nextUint8(),
47231
+ dfdReader.nextUint8(),
47232
+ dfdReader.nextUint8(),
47233
+ dfdReader.nextUint8()
47234
+ ],
47235
+ sampleLower: -Infinity,
47236
+ sampleUpper: Infinity
47237
+ };
47238
+ if (sample.channelType & 0x40) {
47239
+ sample.sampleLower = dfdReader.nextInt32();
47240
+ sample.sampleUpper = dfdReader.nextInt32();
47241
+ } else {
47242
+ sample.sampleLower = dfdReader.nextUint32();
47243
+ sample.sampleUpper = dfdReader.nextUint32();
47178
47244
  }
47245
+ dfd.samples[i1] = sample;
47179
47246
  }
47180
- return texture;
47247
+ var kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);
47248
+ while(kvdReader.position < kvdByteLength){
47249
+ var keyValueByteLength = kvdReader.nextUint32();
47250
+ var keyData = kvdReader.scan(keyValueByteLength);
47251
+ var key = Utils.decodeText(keyData);
47252
+ // 4-byte alignment.
47253
+ var valueData = kvdReader.nextUint8Array(keyValueByteLength - keyData.byteLength - 1);
47254
+ this.keyValue[key] = key.match(/^ktx/i) ? Utils.decodeText(valueData).replace(/^(.*)\x00$/, "$1") : valueData;
47255
+ var kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; // align(4)
47256
+ // 4-byte alignment.
47257
+ kvdReader.skip(kvPadding);
47258
+ }
47259
+ if (sgdByteLength <= 0) return this;
47260
+ var sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);
47261
+ var endpointCount = sgdReader.nextUint16();
47262
+ var selectorCount = sgdReader.nextUint16();
47263
+ var endpointsByteLength = sgdReader.nextUint32();
47264
+ var selectorsByteLength = sgdReader.nextUint32();
47265
+ var tablesByteLength = sgdReader.nextUint32();
47266
+ var extendedByteLength = sgdReader.nextUint32();
47267
+ var imageDescs = new Array(levelCount);
47268
+ for(var i2 = 0; i2 < levelCount; i2++){
47269
+ imageDescs[i2] = {
47270
+ imageFlags: sgdReader.nextUint32(),
47271
+ rgbSliceByteOffset: sgdReader.nextUint32(),
47272
+ rgbSliceByteLength: sgdReader.nextUint32(),
47273
+ alphaSliceByteOffset: sgdReader.nextUint32(),
47274
+ alphaSliceByteLength: sgdReader.nextUint32()
47275
+ };
47276
+ }
47277
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
47278
+ var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
47279
+ var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
47280
+ var extendedByteOffset = tablesByteOffset + tablesByteLength;
47281
+ var endpointsData = new Uint8Array(buffer, byteOffset + endpointsByteOffset, endpointsByteLength);
47282
+ var selectorsData = new Uint8Array(buffer, byteOffset + selectorsByteOffset, selectorsByteLength);
47283
+ var tablesData = new Uint8Array(buffer, byteOffset + tablesByteOffset, tablesByteLength);
47284
+ var extendedData = new Uint8Array(buffer, byteOffset + extendedByteOffset, extendedByteLength);
47285
+ this.globalData = {
47286
+ endpointCount: endpointCount,
47287
+ selectorCount: selectorCount,
47288
+ imageDescs: imageDescs,
47289
+ endpointsData: endpointsData,
47290
+ selectorsData: selectorsData,
47291
+ tablesData: tablesData,
47292
+ extendedData: extendedData
47293
+ };
47181
47294
  };
47182
- return EnvLoader;
47183
- }(Loader);
47184
- EnvLoader = __decorate([
47185
- resourceLoader(AssetType.Env, [
47186
- "env"
47187
- ])
47188
- ], EnvLoader);
47295
+ KTX2Container.checkMagic = function checkMagic(buffer, offset) {
47296
+ if (offset === void 0) offset = 0;
47297
+ if (buffer.byteLength < offset + 4) return false;
47298
+ var id = new Uint8Array(buffer, offset, 4);
47299
+ return id[0] === 0xab && id[1] === 0x4b && id[2] === 0x54 && id[3] === 0x58;
47300
+ };
47301
+ _create_class(KTX2Container, [
47302
+ {
47303
+ key: "isSRGB",
47304
+ get: function get() {
47305
+ return this.dataFormatDescriptor.transferFunction === 2;
47306
+ }
47307
+ },
47308
+ {
47309
+ key: "colorModel",
47310
+ get: function get() {
47311
+ return this.dataFormatDescriptor.colorModel;
47312
+ }
47313
+ }
47314
+ ]);
47315
+ return KTX2Container;
47316
+ }();
47317
+ /**
47318
+ * KTX2 transcode target format.
47319
+ */ var KTX2TargetFormat = /*#__PURE__*/ function(KTX2TargetFormat) {
47320
+ /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["ASTC"] = 0] = "ASTC";
47321
+ /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["BC7"] = 1] = "BC7";
47322
+ /** RGB(A) compressed format, 4 bits per pixel if no alpha channel, 8 bits per pixel if has alpha channel. */ KTX2TargetFormat[KTX2TargetFormat["BC1_BC3"] = 2] = "BC1_BC3";
47323
+ /** RGB(A) compressed format, 4 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["PVRTC"] = 3] = "PVRTC";
47324
+ /** RGB(A) compressed format, 4 bits per pixel if no alpha channel, 8 bits per pixel if has alpha channel. */ KTX2TargetFormat[KTX2TargetFormat["ETC"] = 4] = "ETC";
47325
+ /** R format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8"] = 5] = "R8";
47326
+ /** RG format, 16 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8"] = 6] = "R8G8";
47327
+ /** RGBA format, 32 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8B8A8"] = 7] = "R8G8B8A8";
47328
+ /** RGB HDR compressed format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["BC6H"] = 8] = "BC6H";
47329
+ /** HDR RGB(A) compressed format, 128 bits per 4x4 pixel block (currently UASTC HDR 4x4 encoders are only RGB). */ KTX2TargetFormat[KTX2TargetFormat["ASTC_HDR_4x4"] = 9] = "ASTC_HDR_4x4";
47330
+ /** RGBA format, 16 bits per channel. */ KTX2TargetFormat[KTX2TargetFormat["R16G16B16A16"] = 10] = "R16G16B16A16";
47331
+ return KTX2TargetFormat;
47332
+ }({});
47189
47333
  /**
47190
47334
  * @internal
47191
- */ var EnvContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
47192
- _inherits(EnvContentRestorer, ContentRestorer);
47193
- function EnvContentRestorer(resource, url, requestConfig) {
47194
- var _this;
47195
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
47196
- return _this;
47335
+ * WorkerPool, T is is post message type, U is return type.
47336
+ */ var WorkerPool = /*#__PURE__*/ function() {
47337
+ function WorkerPool(limitedCount, _workerCreator) {
47338
+ if (limitedCount === void 0) limitedCount = 4;
47339
+ this.limitedCount = limitedCount;
47340
+ this._workerCreator = _workerCreator;
47341
+ this._taskQueue = [];
47342
+ this._workerStatus = 0;
47343
+ this._workerItems = new Array(limitedCount);
47197
47344
  }
47198
- var _proto = EnvContentRestorer.prototype;
47199
- _proto.restoreContent = function restoreContent() {
47200
- var _this = this;
47201
- return new AssetPromise(function(resolve, reject) {
47202
- var resource = _this.resource;
47203
- var engine = resource.engine;
47204
- engine.resourceManager // @ts-ignore
47205
- ._request(_this.url, _this.requestConfig).then(function(buffer) {
47206
- EnvLoader._setTextureByBuffer(engine, buffer, resource);
47207
- resolve(resource);
47208
- }).catch(reject);
47209
- });
47345
+ var _proto = WorkerPool.prototype;
47346
+ _proto.prepareWorker = function prepareWorker() {
47347
+ var count = this.limitedCount;
47348
+ var promises = new Array(count);
47349
+ for(var i = 0; i < count; i++){
47350
+ promises.push(this._initWorker(i));
47351
+ }
47352
+ return Promise.all(promises);
47210
47353
  };
47211
- return EnvContentRestorer;
47212
- }(ContentRestorer);
47213
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
47214
- try {
47215
- var info = gen[key](arg);
47216
- var value = info.value;
47217
- } catch (error) {
47218
- reject(error);
47219
- return;
47220
- }
47221
- if (info.done) resolve(value);
47222
- else Promise.resolve(value).then(_next, _throw);
47223
- }
47224
- function _async_to_generator(fn) {
47225
- return function() {
47226
- var self1 = this, args = arguments;
47354
+ /**
47355
+ * Post message to worker.
47356
+ * @param message - Message which posted to worker
47357
+ * @returns Return a promise of message
47358
+ */ _proto.postMessage = function postMessage(message) {
47359
+ var _this = this;
47227
47360
  return new Promise(function(resolve, reject) {
47228
- var gen = fn.apply(self1, args);
47229
- function _next(value) {
47230
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
47231
- }
47232
- function _throw(err) {
47233
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
47361
+ var workerId = _this._getIdleWorkerId();
47362
+ if (workerId !== -1) {
47363
+ _this._workerStatus |= 1 << workerId;
47364
+ var workerItems = _this._workerItems;
47365
+ var _workerItems_workerId;
47366
+ Promise.resolve((_workerItems_workerId = workerItems[workerId]) != null ? _workerItems_workerId : _this._initWorker(workerId)).then(function() {
47367
+ var workerItem = workerItems[workerId];
47368
+ workerItem.resolve = resolve;
47369
+ workerItem.reject = reject;
47370
+ workerItem.worker.postMessage(message);
47371
+ }).catch(reject);
47372
+ } else {
47373
+ _this._taskQueue.push({
47374
+ resolve: resolve,
47375
+ reject: reject,
47376
+ message: message
47377
+ });
47234
47378
  }
47235
- _next(undefined);
47236
47379
  });
47237
47380
  };
47238
- }
47239
- var FontLoader = /*#__PURE__*/ function(Loader) {
47240
- _inherits(FontLoader, Loader);
47241
- function FontLoader() {
47242
- return Loader.apply(this, arguments) || this;
47243
- }
47244
- var _proto = FontLoader.prototype;
47245
- _proto.load = function load(item, resourceManager) {
47381
+ /**
47382
+ * Destroy the worker pool.
47383
+ */ _proto.destroy = function destroy() {
47384
+ var workerItems = this._workerItems;
47385
+ for(var i = 0, n = workerItems.length; i < n; i++){
47386
+ var workerItem = workerItems[i];
47387
+ workerItem.worker.terminate();
47388
+ workerItem.reject = null;
47389
+ workerItem.resolve = null;
47390
+ }
47391
+ workerItems.length = 0;
47392
+ this._taskQueue.length = 0;
47393
+ this._workerStatus = 0;
47394
+ };
47395
+ _proto._initWorker = function _initWorker(workerId) {
47246
47396
  var _this = this;
47247
- return new AssetPromise(function(resolve, reject) {
47248
- resourceManager // @ts-ignore
47249
- ._request(item.url, _extends({}, item, {
47250
- type: "json"
47251
- })).then(function(data) {
47252
- var fontName = data.fontName, fontUrl = data.fontUrl;
47253
- if (fontUrl) {
47254
- _this._registerFont(fontName, fontUrl).then(function() {
47255
- var font = new Font(resourceManager.engine, fontName);
47256
- resolve(font);
47257
- }).catch(function(e) {
47258
- reject("load font " + fontUrl + " fail");
47259
- });
47260
- } else {
47261
- var font = new Font(resourceManager.engine, fontName);
47262
- resolve(font);
47263
- }
47264
- }).catch(function(e) {
47265
- reject(e);
47266
- });
47397
+ return Promise.resolve(this._workerCreator()).then(function(worker) {
47398
+ worker.addEventListener("message", _this._onMessage.bind(_this, workerId));
47399
+ _this._workerItems[workerId] = {
47400
+ worker: worker,
47401
+ resolve: null,
47402
+ reject: null
47403
+ };
47404
+ return worker;
47267
47405
  });
47268
47406
  };
47269
- _proto._registerFont = function _registerFont(fontName, fontUrl) {
47270
- return _async_to_generator(function() {
47271
- var fontFace;
47272
- return __generator(this, function(_state) {
47273
- switch(_state.label){
47274
- case 0:
47275
- fontFace = new FontFace(fontName, "url(" + fontUrl + ")");
47276
- return [
47277
- 4,
47278
- fontFace.load()
47279
- ];
47280
- case 1:
47281
- _state.sent();
47282
- document.fonts.add(fontFace);
47283
- return [
47284
- 2
47285
- ];
47286
- }
47287
- });
47288
- })();
47407
+ _proto._getIdleWorkerId = function _getIdleWorkerId() {
47408
+ for(var i = 0, count = this.limitedCount; i < count; i++){
47409
+ if (!(this._workerStatus & 1 << i)) return i;
47410
+ }
47411
+ return -1;
47289
47412
  };
47290
- return FontLoader;
47291
- }(Loader);
47292
- FontLoader = __decorate([
47293
- resourceLoader(AssetType.Font, [
47294
- "font"
47295
- ])
47296
- ], FontLoader);
47297
- // Source: https://github.com/zeux/meshoptimizer/blob/master/js/meshopt_decoder.js
47298
- var ready;
47299
- function getMeshoptDecoder() {
47300
- if (ready) return ready;
47301
- var wasm_base = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb";
47302
- var wasm_simd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb";
47303
- var wasmpack = new Uint8Array([
47304
- 32,
47305
- 0,
47306
- 65,
47307
- 2,
47308
- 1,
47309
- 106,
47310
- 34,
47311
- 33,
47312
- 3,
47313
- 128,
47314
- 11,
47315
- 4,
47316
- 13,
47317
- 64,
47318
- 6,
47319
- 253,
47320
- 10,
47321
- 7,
47322
- 15,
47323
- 116,
47324
- 127,
47325
- 5,
47326
- 8,
47327
- 12,
47328
- 40,
47329
- 16,
47330
- 19,
47331
- 54,
47332
- 20,
47333
- 9,
47334
- 27,
47335
- 255,
47336
- 113,
47337
- 17,
47338
- 42,
47339
- 67,
47340
- 24,
47341
- 23,
47342
- 146,
47343
- 148,
47344
- 18,
47345
- 14,
47346
- 22,
47347
- 45,
47348
- 70,
47349
- 69,
47350
- 56,
47351
- 114,
47352
- 101,
47353
- 21,
47354
- 25,
47355
- 63,
47356
- 75,
47357
- 136,
47358
- 108,
47359
- 28,
47360
- 118,
47361
- 29,
47362
- 73,
47363
- 115
47364
- ]);
47365
- // @ts-ignore
47366
- var wasm = SystemInfo._detectSIMDSupported() ? wasm_simd : wasm_base;
47367
- var instance;
47368
- ready = WebAssembly.instantiate(unpack(wasm)).then(function(result) {
47369
- instance = result.instance;
47370
- instance.exports.__wasm_call_ctors();
47371
- }).then(function() {
47372
- return {
47373
- workerCount: 4,
47374
- ready: ready,
47375
- useWorkers: function useWorkers(workerCount) {
47376
- this.workerCount = workerCount != null ? workerCount : this.workerCount;
47377
- initWorkers(this.workerCount);
47378
- },
47379
- decodeGltfBuffer: function decodeGltfBuffer(count, stride, source, mode, filter) {
47380
- if (this.workerCount > 0 && workers.length === 0) this.useWorkers();
47381
- if (workers.length > 0) return decodeWorker(count, stride, source, decoders[mode], filters[filter]);
47382
- return ready.then(function() {
47383
- var target = new Uint8Array(count * stride);
47384
- decode(instance.exports[decoders[mode]], target, count, stride, source, instance.exports[filters[filter]]);
47385
- return target;
47386
- });
47387
- },
47388
- release: function release() {
47389
- for(var i = 0; i < workers.length; i++){
47390
- workers[i].object.terminate();
47391
- }
47392
- }
47393
- };
47394
- });
47395
- function unpack(data) {
47396
- var result = new Uint8Array(data.length);
47397
- for(var i = 0; i < data.length; ++i){
47398
- var ch = data.charCodeAt(i);
47399
- result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
47413
+ _proto._onMessage = function _onMessage(workerId, msg) {
47414
+ // onerror of web worker can't catch error in promise
47415
+ var error = msg.data.error;
47416
+ if (error) {
47417
+ this._workerItems[workerId].reject(error);
47418
+ } else {
47419
+ this._workerItems[workerId].resolve(msg.data);
47400
47420
  }
47401
- var write = 0;
47402
- for(var i1 = 0; i1 < data.length; ++i1){
47403
- result[write++] = result[i1] < 60 ? wasmpack[result[i1]] : (result[i1] - 60) * 64 + result[++i1];
47421
+ this._nextTask(workerId);
47422
+ };
47423
+ _proto._nextTask = function _nextTask(workerId) {
47424
+ if (this._taskQueue.length) {
47425
+ var taskItem = this._taskQueue.shift();
47426
+ var workerItem = this._workerItems[workerId];
47427
+ workerItem.resolve = taskItem.resolve;
47428
+ workerItem.reject = taskItem.reject;
47429
+ workerItem.worker.postMessage(taskItem.message);
47430
+ } else {
47431
+ this._workerStatus ^= 1 << workerId;
47404
47432
  }
47405
- return result.buffer.slice(0, write);
47433
+ };
47434
+ return WorkerPool;
47435
+ }();
47436
+ var AbstractTranscoder = /*#__PURE__*/ function() {
47437
+ function AbstractTranscoder(workerLimitCount) {
47438
+ this.workerLimitCount = workerLimitCount;
47406
47439
  }
47407
- function decode(fun, target, count, size, source, filter) {
47408
- var sbrk = instance.exports.sbrk;
47409
- var count4 = count + 3 & ~3;
47410
- var tp = sbrk(count4 * size);
47411
- var sp = sbrk(source.length);
47412
- var heap = new Uint8Array(instance.exports.memory.buffer);
47413
- heap.set(source, sp);
47414
- var res = fun(tp, count, size, sp, source.length);
47415
- if (res == 0 && filter) {
47416
- filter(tp, count4, size);
47417
- }
47418
- target.set(heap.subarray(tp, tp + count * size));
47419
- sbrk(tp - sbrk(0));
47420
- if (res != 0) {
47421
- throw new Error("Malformed buffer data: " + res);
47440
+ var _proto = AbstractTranscoder.prototype;
47441
+ _proto.init = function init() {
47442
+ if (!this._initPromise) {
47443
+ this._initPromise = this._initTranscodeWorkerPool();
47422
47444
  }
47423
- }
47424
- var filters = {
47425
- NONE: "",
47426
- OCTAHEDRAL: "meshopt_decodeFilterOct",
47427
- QUATERNION: "meshopt_decodeFilterQuat",
47428
- EXPONENTIAL: "meshopt_decodeFilterExp"
47445
+ return this._initPromise;
47429
47446
  };
47430
- var decoders = {
47431
- ATTRIBUTES: "meshopt_decodeVertexBuffer",
47432
- TRIANGLES: "meshopt_decodeIndexBuffer",
47433
- INDICES: "meshopt_decodeIndexSequence"
47447
+ _proto.destroy = function destroy() {
47448
+ this._transcodeWorkerPool.destroy();
47434
47449
  };
47435
- var workers = [];
47436
- var requestId = 0;
47437
- function createWorker(url) {
47438
- var worker = {
47439
- object: new Worker(url),
47440
- pending: 0,
47441
- requests: {}
47442
- };
47443
- worker.object.onmessage = function(event) {
47444
- var data = event.data;
47445
- worker.pending -= data.count;
47446
- worker.requests[data.id][data.action](data.value);
47447
- delete worker.requests[data.id];
47448
- };
47449
- return worker;
47450
- }
47451
- function initWorkers(count) {
47452
- var source = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" + ".then(function(result) {instance = result.instance; instance.exports.__wasm_call_ctors();});\n" + "self.onmessage = workerProcess;\n" + 'function decode(fun, target, count, size, source, filter) {\n const sbrk = instance.exports.sbrk;\n const count4 = (count + 3) & ~3;\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n if (res == 0 && filter) {\n filter(tp, count4, size);\n }\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n if (res != 0) {\n throw new Error("Malformed buffer data: " + res);\n }\n }\n' + 'function workerProcess(event) {\n ready.then(function () {\n const data = event.data;\n try {\n const target = new Uint8Array(data.count * data.size);\n decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);\n self.postMessage({ id: data.id, count: data.count, action: "resolve", value: target }, [target.buffer]);\n } catch (error) {\n self.postMessage({\n id: data.id,\n count: data.count,\n action: "reject",\n value: error\n });\n }\n });\n }';
47453
- var blob = new Blob([
47454
- source
47455
- ], {
47456
- type: "text/javascript"
47450
+ _proto._createTranscodePool = function _createTranscodePool(workerURL, wasmBuffer) {
47451
+ this._transcodeWorkerPool = new WorkerPool(this.workerLimitCount, function() {
47452
+ return new Promise(function(resolve, reject) {
47453
+ var onMessage = function onMessage(e) {
47454
+ if (e.data.error) {
47455
+ reject(e.data.error);
47456
+ } else {
47457
+ resolve(worker);
47458
+ }
47459
+ };
47460
+ var worker = new Worker(workerURL);
47461
+ var msg = {
47462
+ type: "init",
47463
+ transcoderWasm: wasmBuffer
47464
+ };
47465
+ worker.addEventListener("message", onMessage);
47466
+ worker.postMessage(msg);
47467
+ });
47457
47468
  });
47458
- var url = URL.createObjectURL(blob);
47459
- for(var i = 0; i < count; ++i){
47460
- workers[i] = createWorker(url);
47461
- }
47462
- URL.revokeObjectURL(url);
47463
- }
47464
- function decodeWorker(count, size, source, mode, filter) {
47465
- var worker = workers[0];
47466
- for(var i = 1; i < workers.length; ++i){
47467
- if (workers[i].pending < worker.pending) {
47468
- worker = workers[i];
47469
- }
47469
+ return this._transcodeWorkerPool.prepareWorker();
47470
+ };
47471
+ return AbstractTranscoder;
47472
+ }();
47473
+ /** @internal */ function TranscodeWorkerCode() {
47474
+ var initPromise;
47475
+ var init = function init(wasmBinary) {
47476
+ if (!initPromise) {
47477
+ initPromise = new Promise(function(resolve, reject) {
47478
+ var BasisModule = {
47479
+ wasmBinary: wasmBinary,
47480
+ onRuntimeInitialized: function onRuntimeInitialized() {
47481
+ return resolve(BasisModule);
47482
+ },
47483
+ onAbort: reject
47484
+ };
47485
+ self["BASIS"](BasisModule);
47486
+ }).then(function(BasisModule) {
47487
+ BasisModule.initializeBasis();
47488
+ return BasisModule.KTX2File;
47489
+ });
47470
47490
  }
47471
- return new Promise(function(resolve, reject) {
47472
- var data = new Uint8Array(source);
47473
- var id = requestId++;
47474
- worker.pending += count;
47475
- worker.requests[id] = {
47476
- resolve: resolve,
47477
- reject: reject
47478
- };
47479
- worker.object.postMessage({
47480
- id: id,
47481
- count: count,
47482
- size: size,
47483
- source: data,
47484
- mode: mode,
47485
- filter: filter
47486
- }, [
47487
- data.buffer
47488
- ]);
47489
- });
47490
- }
47491
- return ready;
47492
- }
47493
- /**
47494
- * The glTF resource.
47495
- */ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
47496
- _inherits(GLTFResource, ReferResource);
47497
- function GLTFResource(engine, url) {
47498
- var _this;
47499
- _this = ReferResource.call(this, engine) || this;
47500
- _this.url = url;
47501
- return _this;
47502
- }
47503
- var _proto = GLTFResource.prototype;
47504
- /**
47505
- * Instantiate scene root entity.
47506
- * @param sceneIndex - Scene index
47507
- * @returns Root entity
47508
- */ _proto.instantiateSceneRoot = function instantiateSceneRoot(sceneIndex) {
47509
- var sceneRoot = sceneIndex === undefined ? this._defaultSceneRoot : this._sceneRoots[sceneIndex];
47510
- return sceneRoot.clone();
47491
+ return initPromise;
47511
47492
  };
47512
- _proto._onDestroy = function _onDestroy() {
47513
- ReferResource.prototype._onDestroy.call(this);
47514
- var _this = this, textures = _this.textures, materials = _this.materials, meshes = _this.meshes;
47515
- textures && this._disassociationSuperResource(textures);
47516
- materials && this._disassociationSuperResource(materials);
47517
- if (meshes) {
47518
- for(var i = 0, n = meshes.length; i < n; i++){
47519
- var meshArr = meshes[i];
47520
- meshArr && this._disassociationSuperResource(meshArr);
47521
- }
47493
+ self.onmessage = function onmessage(event) {
47494
+ var message = event.data;
47495
+ switch(message.type){
47496
+ case "init":
47497
+ init(message.transcoderWasm).then(function() {
47498
+ self.postMessage("init-completed");
47499
+ }).catch(function(e) {
47500
+ return self.postMessage({
47501
+ error: e
47502
+ });
47503
+ });
47504
+ break;
47505
+ case "transcode":
47506
+ init().then(function(KTX2File) {
47507
+ var result = transcode(message.buffer, message.format, KTX2File);
47508
+ // @ts-ignore
47509
+ result.type = "transcoded";
47510
+ self.postMessage(result);
47511
+ }).catch(function(e) {
47512
+ return self.postMessage({
47513
+ error: e
47514
+ });
47515
+ });
47516
+ break;
47522
47517
  }
47523
47518
  };
47524
- _proto._disassociationSuperResource = function _disassociationSuperResource(resources) {
47525
- for(var i = 0, n = resources.length; i < n; i++){
47526
- var _resources_i;
47527
- (_resources_i = resources[i]) == null ? void 0 : _resources_i._disassociationSuperResource(this);
47519
+ }
47520
+ var _init = function init() {
47521
+ var initPromise;
47522
+ return function init(wasmBinary) {
47523
+ if (!initPromise) {
47524
+ initPromise = new Promise(function(resolve, reject) {
47525
+ var BasisModule = {
47526
+ wasmBinary: wasmBinary,
47527
+ onRuntimeInitialized: function onRuntimeInitialized() {
47528
+ return resolve(BasisModule);
47529
+ },
47530
+ onAbort: reject
47531
+ };
47532
+ self["BASIS"](BasisModule);
47533
+ }).then(function(BasisModule) {
47534
+ BasisModule.initializeBasis();
47535
+ return BasisModule.KTX2File;
47536
+ });
47528
47537
  }
47538
+ return initPromise;
47529
47539
  };
47530
- _create_class(GLTFResource, [
47531
- {
47532
- key: "extensionsData",
47533
- get: /**
47534
- * Extensions data.
47535
- */ function get() {
47536
- return this._extensionsData;
47537
- }
47538
- },
47539
- {
47540
- key: "sceneRoots",
47541
- get: /**
47542
- * @deprecated Please use `instantiateSceneRoot` instead.
47543
- * RootEntities after SceneParser.
47544
- */ function get() {
47545
- return this._sceneRoots;
47546
- }
47547
- },
47548
- {
47549
- key: "defaultSceneRoot",
47550
- get: /**
47551
- * @deprecated Please use `instantiateSceneRoot` instead.
47552
- * RootEntity after SceneParser.
47553
- */ function get() {
47554
- return this._defaultSceneRoot;
47555
- }
47540
+ };
47541
+ var init = _init();
47542
+ function transcode(buffer, targetFormat, KTX2File) {
47543
+ function getTranscodeFormatFromTarget(target, hasAlpha) {
47544
+ switch(target){
47545
+ case 2:
47546
+ return hasAlpha ? 3 : 2;
47547
+ case 4:
47548
+ return hasAlpha ? 1 : 0;
47549
+ case 3:
47550
+ return hasAlpha ? 9 : 8;
47551
+ case 7:
47552
+ return 13;
47553
+ case 0:
47554
+ return 10;
47555
+ case 1:
47556
+ return 7;
47557
+ case 8:
47558
+ return 22;
47559
+ case 9:
47560
+ return 23;
47561
+ case 10:
47562
+ return 25;
47556
47563
  }
47557
- ]);
47558
- return GLTFResource;
47559
- }(ReferResource);
47560
- /**
47561
- * Module for glTF 2.0 Interface
47562
- */ /**
47563
- * The datatype of the components in the attribute
47564
- */ var AccessorComponentType = /*#__PURE__*/ function(AccessorComponentType) {
47565
- /**
47566
- * Byte
47567
- */ AccessorComponentType[AccessorComponentType["BYTE"] = 5120] = "BYTE";
47568
- /**
47569
- * Unsigned Byte
47570
- */ AccessorComponentType[AccessorComponentType["UNSIGNED_BYTE"] = 5121] = "UNSIGNED_BYTE";
47571
- /**
47572
- * Short
47573
- */ AccessorComponentType[AccessorComponentType["SHORT"] = 5122] = "SHORT";
47574
- /**
47575
- * Unsigned Short
47576
- */ AccessorComponentType[AccessorComponentType["UNSIGNED_SHORT"] = 5123] = "UNSIGNED_SHORT";
47577
- /**
47578
- * Unsigned Int
47579
- */ AccessorComponentType[AccessorComponentType["UNSIGNED_INT"] = 5125] = "UNSIGNED_INT";
47580
- /**
47581
- * Float
47582
- */ AccessorComponentType[AccessorComponentType["FLOAT"] = 5126] = "FLOAT";
47583
- return AccessorComponentType;
47584
- }({});
47585
- /**
47586
- * Specifies if the attirbute is a scalar, vector, or matrix
47587
- */ var AccessorType = /*#__PURE__*/ function(AccessorType) {
47588
- /**
47589
- * Scalar
47590
- */ AccessorType["SCALAR"] = "SCALAR";
47591
- /**
47592
- * Vector2
47593
- */ AccessorType["VEC2"] = "VEC2";
47594
- /**
47595
- * Vector3
47596
- */ AccessorType["VEC3"] = "VEC3";
47597
- /**
47598
- * Vector4
47599
- */ AccessorType["VEC4"] = "VEC4";
47600
- /**
47601
- * Matrix2x2
47602
- */ AccessorType["MAT2"] = "MAT2";
47603
- /**
47604
- * Matrix3x3
47605
- */ AccessorType["MAT3"] = "MAT3";
47606
- /**
47607
- * Matrix4x4
47608
- */ AccessorType["MAT4"] = "MAT4";
47609
- return AccessorType;
47610
- }({});
47611
- /**
47612
- * The name of the node's TRS property to modify, or the weights of the Morph Targets it instantiates
47613
- */ var AnimationChannelTargetPath = /*#__PURE__*/ function(AnimationChannelTargetPath) {
47614
- /**
47615
- * Translation
47616
- */ AnimationChannelTargetPath["TRANSLATION"] = "translation";
47617
- /**
47618
- * Rotation
47619
- */ AnimationChannelTargetPath["ROTATION"] = "rotation";
47620
- /**
47621
- * Scale
47622
- */ AnimationChannelTargetPath["SCALE"] = "scale";
47623
- /**
47624
- * Weights
47625
- */ AnimationChannelTargetPath["WEIGHTS"] = "weights";
47626
- return AnimationChannelTargetPath;
47627
- }({});
47628
- /**
47629
- * Interpolation algorithm
47630
- */ var AnimationSamplerInterpolation = /*#__PURE__*/ function(AnimationSamplerInterpolation) {
47631
- /**
47632
- * The animated values are linearly interpolated between keyframes
47633
- */ AnimationSamplerInterpolation["Linear"] = "LINEAR";
47634
- /**
47635
- * The animated values remain constant to the output of the first keyframe, until the next keyframe
47636
- */ AnimationSamplerInterpolation["Step"] = "STEP";
47637
- /**
47638
- * The animation's interpolation is computed using a cubic spline with specified tangents
47639
- */ AnimationSamplerInterpolation["CubicSpine"] = "CUBICSPLINE";
47640
- return AnimationSamplerInterpolation;
47641
- }({});
47642
- /**
47643
- * A camera's projection. A node can reference a camera to apply a transform to place the camera in the scene
47644
- */ var CameraType = /*#__PURE__*/ function(CameraType) {
47645
- /**
47646
- * A perspective camera containing properties to create a perspective projection matrix
47647
- */ CameraType["PERSPECTIVE"] = "perspective";
47648
- /**
47649
- * An orthographic camera containing properties to create an orthographic projection matrix
47650
- */ CameraType["ORTHOGRAPHIC"] = "orthographic";
47651
- return CameraType;
47652
- }({});
47653
- /**
47654
- * The alpha rendering mode of the material
47655
- */ var MaterialAlphaMode = /*#__PURE__*/ function(MaterialAlphaMode) {
47656
- /**
47657
- * The alpha value is ignored and the rendered output is fully opaque
47658
- */ MaterialAlphaMode["OPAQUE"] = "OPAQUE";
47659
- /**
47660
- * The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value
47661
- */ MaterialAlphaMode["MASK"] = "MASK";
47662
- /**
47663
- * The alpha value is used to composite the source and destination areas. The rendered output is combined with the background using the normal painting operation (i.e. the Porter and Duff over operator)
47664
- */ MaterialAlphaMode["BLEND"] = "BLEND";
47665
- return MaterialAlphaMode;
47666
- }({});
47667
- /**
47668
- * Magnification filter. Valid values correspond to WebGL enums: 9728 (NEAREST) and 9729 (LINEAR)
47669
- */ var TextureMagFilter = /*#__PURE__*/ function(TextureMagFilter) {
47670
- /**
47671
- * Nearest
47672
- */ TextureMagFilter[TextureMagFilter["NEAREST"] = 9728] = "NEAREST";
47673
- /**
47674
- * Linear
47675
- */ TextureMagFilter[TextureMagFilter["LINEAR"] = 9729] = "LINEAR";
47676
- return TextureMagFilter;
47677
- }({});
47678
- /**
47679
- * Minification filter. All valid values correspond to WebGL enums
47680
- */ var TextureMinFilter = /*#__PURE__*/ function(TextureMinFilter) {
47681
- /**
47682
- * Nearest
47683
- */ TextureMinFilter[TextureMinFilter["NEAREST"] = 9728] = "NEAREST";
47684
- /**
47685
- * Linear
47686
- */ TextureMinFilter[TextureMinFilter["LINEAR"] = 9729] = "LINEAR";
47687
- /**
47688
- * Nearest Mip-Map Nearest
47689
- */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_NEAREST"] = 9984] = "NEAREST_MIPMAP_NEAREST";
47690
- /**
47691
- * Linear Mipmap Nearest
47692
- */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_NEAREST"] = 9985] = "LINEAR_MIPMAP_NEAREST";
47693
- /**
47694
- * Nearest Mipmap Linear
47695
- */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_LINEAR"] = 9986] = "NEAREST_MIPMAP_LINEAR";
47696
- /**
47697
- * Linear Mipmap Linear
47698
- */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_LINEAR"] = 9987] = "LINEAR_MIPMAP_LINEAR";
47699
- return TextureMinFilter;
47700
- }({});
47701
- /**
47702
- * S (U) wrapping mode. All valid values correspond to WebGL enums
47703
- */ var TextureWrapMode = /*#__PURE__*/ function(TextureWrapMode) {
47704
- /**
47705
- * Clamp to Edge
47706
- */ TextureWrapMode[TextureWrapMode["CLAMP_TO_EDGE"] = 33071] = "CLAMP_TO_EDGE";
47707
- /**
47708
- * Mirrored Repeat
47709
- */ TextureWrapMode[TextureWrapMode["MIRRORED_REPEAT"] = 33648] = "MIRRORED_REPEAT";
47710
- /**
47711
- * Repeat
47712
- */ TextureWrapMode[TextureWrapMode["REPEAT"] = 10497] = "REPEAT";
47713
- return TextureWrapMode;
47714
- }({});
47715
- /**
47716
- * @internal
47717
- */ var GLTFParserContext = /*#__PURE__*/ function() {
47718
- function GLTFParserContext(glTFResource, resourceManager, params) {
47719
- var _this = this;
47720
- this.glTFResource = glTFResource;
47721
- this.resourceManager = resourceManager;
47722
- this.params = params;
47723
- this.accessorBufferCache = {};
47724
- this.needAnimatorController = false;
47725
- this./** @internal */ _getPromises = [];
47726
- this._resourceCache = new Map();
47727
- this._progress = {
47728
- taskDetail: {},
47729
- taskComplete: {
47730
- loaded: 0,
47731
- total: 0
47732
- }
47733
- };
47734
- this./**
47735
- * @internal
47736
- */ _onTaskDetail = function(url, loaded, total) {
47737
- var _this__progress_taskDetail, _url;
47738
- var detail = (_this__progress_taskDetail = _this._progress.taskDetail)[_url = url] || (_this__progress_taskDetail[_url] = {});
47739
- detail.loaded = loaded;
47740
- detail.total = total;
47741
- _this._setTaskDetailProgress(url, loaded, total);
47742
- };
47743
- this.contentRestorer = new GLTFContentRestorer(glTFResource);
47744
47564
  }
47745
- var _proto = GLTFParserContext.prototype;
47746
- _proto.get = function get(type, index) {
47747
- var _this = this;
47748
- var parser = GLTFParserContext._parsers[type];
47749
- if (!parser) {
47750
- return AssetPromise.resolve(null);
47565
+ function concat(arrays) {
47566
+ if (arrays.length === 1) return arrays[0];
47567
+ var totalByteLength = 0;
47568
+ for(var i = 0; i < arrays.length; i++){
47569
+ totalByteLength += arrays[i].byteLength;
47751
47570
  }
47752
- var cache = this._resourceCache;
47753
- var cacheKey = index === undefined ? "" + type : type + ":" + index;
47754
- var resource = cache.get(cacheKey);
47755
- if (resource) {
47756
- return resource;
47571
+ var result = new Uint8Array(totalByteLength);
47572
+ var byteOffset = 0;
47573
+ for(var i1 = 0; i1 < arrays.length; i1++){
47574
+ result.set(arrays[i1], byteOffset);
47575
+ byteOffset += arrays[i1].byteLength;
47757
47576
  }
47758
- var glTFSchemaKey = glTFSchemaMap[type];
47759
- var isSubAsset = !!glTFResourceMap[type];
47760
- if (glTFSchemaKey) {
47761
- var glTFItems = this.glTF[glTFSchemaKey];
47762
- if (glTFItems && (index === undefined || glTFItems[index])) {
47763
- if (index === undefined) {
47764
- resource = type === 8 ? glTFItems.map(function(_, index) {
47765
- return _this.get(type, index);
47766
- }) : AssetPromise.all(glTFItems.map(function(_, index) {
47767
- return _this.get(type, index);
47768
- }));
47577
+ return result;
47578
+ }
47579
+ var ktx2File = new KTX2File(new Uint8Array(buffer));
47580
+ function cleanup() {
47581
+ ktx2File.close();
47582
+ ktx2File.delete();
47583
+ }
47584
+ if (!ktx2File.isValid()) {
47585
+ cleanup();
47586
+ throw new Error("Invalid or unsupported .ktx2 file");
47587
+ }
47588
+ if (!ktx2File.startTranscoding()) {
47589
+ cleanup();
47590
+ throw new Error("KTX2 startTranscoding failed");
47591
+ }
47592
+ var width = ktx2File.getWidth();
47593
+ var height = ktx2File.getHeight();
47594
+ var layerCount = ktx2File.getLayers() || 1;
47595
+ var levelCount = ktx2File.getLevels();
47596
+ var hasAlpha = ktx2File.getHasAlpha();
47597
+ var faceCount = ktx2File.getFaces();
47598
+ var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
47599
+ var faces = new Array(faceCount);
47600
+ var isBC = format === 2 || format === 3 || format === 7;
47601
+ for(var face = 0; face < faceCount; face++){
47602
+ var mipmaps = new Array(levelCount);
47603
+ for(var mip = 0; mip < levelCount; mip++){
47604
+ var layerMips = new Array(layerCount);
47605
+ var mipWidth = void 0, mipHeight = void 0;
47606
+ for(var layer = 0; layer < layerCount; layer++){
47607
+ var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
47608
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
47609
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
47610
+ width = mipWidth = levelInfo.width;
47611
+ height = mipHeight = levelInfo.height;
47612
+ console.warn("KTX2 transcode to BC will resize to width: " + width + ", height: " + height + ". You'd better use an image whose size if multiple of 4.");
47769
47613
  } else {
47770
- resource = parser.parse(this, index);
47771
- isSubAsset && this._handleSubAsset(resource, type, index);
47614
+ mipWidth = levelInfo.origWidth;
47615
+ mipHeight = levelInfo.origHeight;
47772
47616
  }
47773
- } else {
47774
- resource = AssetPromise.resolve(null);
47617
+ var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
47618
+ var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
47619
+ if (targetFormat === 10) {
47620
+ dst = new Uint16Array(dst.buffer, dst.byteOffset, dst.byteLength / Uint16Array.BYTES_PER_ELEMENT);
47621
+ }
47622
+ if (!status) {
47623
+ cleanup();
47624
+ throw new Error("transcodeImage failed.");
47625
+ }
47626
+ layerMips[layer] = dst;
47775
47627
  }
47776
- } else {
47777
- resource = parser.parse(this, index);
47778
- isSubAsset && this._handleSubAsset(resource, type, index);
47779
- }
47780
- if (_instanceof1(resource, AssetPromise)) {
47781
- this._getPromises.push(resource);
47628
+ mipmaps[mip] = {
47629
+ data: concat(layerMips),
47630
+ width: mipWidth,
47631
+ height: mipHeight
47632
+ };
47782
47633
  }
47783
- cache.set(cacheKey, resource);
47784
- return resource;
47785
- };
47786
- _proto.parse = function parse() {
47787
- var _this = this;
47788
- var promise = this.get(0).then(function(json) {
47789
- _this.glTF = json;
47790
- _this.needAnimatorController = !!(json.skins || json.animations);
47791
- return AssetPromise.all([
47792
- _this.get(1),
47793
- _this.get(5),
47794
- _this.get(6),
47795
- _this.get(7),
47796
- _this.get(9),
47797
- _this.get(10),
47798
- _this.get(11),
47799
- _this.get(2)
47800
- ]).then(function() {
47801
- var glTFResource = _this.glTFResource;
47802
- var animatorController = glTFResource.animatorController;
47803
- if (animatorController) {
47804
- var animator = glTFResource._defaultSceneRoot.addComponent(Animator);
47805
- animator.animatorController = animatorController;
47806
- }
47807
- _this.resourceManager.addContentRestorer(_this.contentRestorer);
47808
- return glTFResource;
47809
- });
47810
- });
47811
- this._addTaskCompletePromise(promise);
47812
- return promise;
47634
+ faces[face] = mipmaps;
47635
+ }
47636
+ cleanup();
47637
+ return {
47638
+ faces: faces,
47639
+ width: width,
47640
+ height: height,
47641
+ hasAlpha: hasAlpha,
47642
+ faceCount: faceCount,
47643
+ format: format
47813
47644
  };
47814
- /**
47815
- * @internal
47816
- */ _proto._addTaskCompletePromise = function _addTaskCompletePromise(taskPromise) {
47645
+ }
47646
+ /** @internal */ var BinomialLLCTranscoder = /*#__PURE__*/ function(AbstractTranscoder) {
47647
+ _inherits(BinomialLLCTranscoder, AbstractTranscoder);
47648
+ function BinomialLLCTranscoder(workerLimitCount) {
47649
+ return AbstractTranscoder.call(this, workerLimitCount) || this;
47650
+ }
47651
+ var _proto = BinomialLLCTranscoder.prototype;
47652
+ _proto._initTranscodeWorkerPool = function _initTranscodeWorkerPool() {
47817
47653
  var _this = this;
47818
- var task = this._progress.taskComplete;
47819
- task.total += 1;
47820
- taskPromise.finally(function() {
47821
- _this._setTaskCompleteProgress(++task.loaded, task.total);
47822
- }).catch(function(e) {
47823
- // Need catch to avoid unhandled rejection
47654
+ return Promise.all([
47655
+ fetch("https://mdn.alipayobjects.com/rms/afts/file/A*J8IrSL8WE8EAAAAAQ6AAAAgAehQnAQ/basis_transcoder.js").then(function(res) {
47656
+ return res.text();
47657
+ }),
47658
+ fetch("https://mdn.alipayobjects.com/rms/afts/file/A*F3duSLqOP2sAAAAAXjAAAAgAehQnAQ/basis_transcoder.wasm").then(function(res) {
47659
+ return res.arrayBuffer();
47660
+ })
47661
+ ]).then(function(param) {
47662
+ var jsCode = param[0], wasmBuffer = param[1];
47663
+ if (_this.workerLimitCount === 0) {
47664
+ return new Promise(function(resolve, reject) {
47665
+ var scriptDom = document.createElement("script");
47666
+ scriptDom.src = URL.createObjectURL(new Blob([
47667
+ jsCode
47668
+ ], {
47669
+ type: "application/javascript"
47670
+ }));
47671
+ document.body.appendChild(scriptDom);
47672
+ scriptDom.onload = function() {
47673
+ init(wasmBuffer).then(function() {
47674
+ resolve(null);
47675
+ });
47676
+ };
47677
+ scriptDom.onerror = function() {
47678
+ reject();
47679
+ };
47680
+ });
47681
+ } else {
47682
+ var funcCode = TranscodeWorkerCode.toString();
47683
+ var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
47684
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
47685
+ var workerURL = URL.createObjectURL(new Blob([
47686
+ workerCode
47687
+ ], {
47688
+ type: "application/javascript"
47689
+ }));
47690
+ return _this._createTranscodePool(workerURL, wasmBuffer);
47691
+ }
47824
47692
  });
47825
47693
  };
47826
- _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
47827
- var _this = this;
47828
- var glTFResourceKey = glTFResourceMap[type];
47829
- if (type === 8) {
47830
- var _this_glTFResource, _glTFResourceKey;
47831
- ((_this_glTFResource = this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = resource;
47694
+ _proto.transcode = function transcode1(buffer, format) {
47695
+ if (this.workerLimitCount === 0) {
47696
+ return init().then(function(KTX2File) {
47697
+ return transcode(buffer, format, KTX2File);
47698
+ });
47832
47699
  } else {
47833
- var url = this.glTFResource.url;
47834
- resource.then(function(item) {
47835
- if (index == undefined) {
47836
- _this.glTFResource[glTFResourceKey] = item;
47837
- } else {
47838
- var _this_glTFResource, _glTFResourceKey;
47839
- ((_this_glTFResource = _this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = item;
47840
- }
47841
- if (type === 7) {
47842
- for(var i = 0, length = item.length; i < length; i++){
47843
- var mesh = item[i];
47844
- // @ts-ignore
47845
- _this.resourceManager._onSubAssetSuccess(url, glTFResourceKey + "[" + index + "][" + i + "]", mesh);
47846
- }
47847
- } else {
47848
- // @ts-ignore
47849
- _this.resourceManager._onSubAssetSuccess(url, "" + glTFResourceKey + (index === undefined ? "" : "[" + index + "]"), item);
47850
- var _this_glTF_scene;
47851
- if (type === 2 && ((_this_glTF_scene = _this.glTF.scene) != null ? _this_glTF_scene : 0) === index) {
47852
- // @ts-ignore
47853
- _this.resourceManager._onSubAssetSuccess(url, "defaultSceneRoot", item);
47854
- }
47855
- }
47856
- }).catch(function(e) {
47857
- Logger.error("GLTFParserContext", "Failed to load " + glTFResourceKey + " " + index + ": " + e);
47700
+ return this._transcodeWorkerPool.postMessage({
47701
+ buffer: buffer,
47702
+ format: format,
47703
+ type: "transcode"
47858
47704
  });
47859
47705
  }
47860
47706
  };
47861
- GLTFParserContext.addParser = function addParser(parserType, parser) {
47862
- this._parsers[parserType] = parser;
47863
- };
47864
- return GLTFParserContext;
47865
- }();
47866
- GLTFParserContext._parsers = {};
47867
- /**
47868
- * @internal
47869
- */ var BufferInfo = function BufferInfo(data, interleaved, stride) {
47870
- this.data = data;
47871
- this.interleaved = interleaved;
47872
- this.stride = stride;
47873
- this.vertexBindingInfos = {};
47874
- };
47875
- var GLTFParserType = /*#__PURE__*/ function(GLTFParserType) {
47876
- GLTFParserType[GLTFParserType["Schema"] = 0] = "Schema";
47877
- GLTFParserType[GLTFParserType["Validator"] = 1] = "Validator";
47878
- GLTFParserType[GLTFParserType["Scene"] = 2] = "Scene";
47879
- GLTFParserType[GLTFParserType["Buffer"] = 3] = "Buffer";
47880
- GLTFParserType[GLTFParserType["BufferView"] = 4] = "BufferView";
47881
- GLTFParserType[GLTFParserType["Texture"] = 5] = "Texture";
47882
- GLTFParserType[GLTFParserType["Material"] = 6] = "Material";
47883
- GLTFParserType[GLTFParserType["Mesh"] = 7] = "Mesh";
47884
- GLTFParserType[GLTFParserType["Entity"] = 8] = "Entity";
47885
- GLTFParserType[GLTFParserType["Skin"] = 9] = "Skin";
47886
- GLTFParserType[GLTFParserType["Animation"] = 10] = "Animation";
47887
- GLTFParserType[GLTFParserType["AnimatorController"] = 11] = "AnimatorController";
47888
- return GLTFParserType;
47889
- }({});
47890
- var _obj$2;
47891
- var glTFSchemaMap = (_obj$2 = {}, _obj$2[2] = "scenes", _obj$2[3] = "buffers", _obj$2[5] = "textures", _obj$2[6] = "materials", _obj$2[7] = "meshes", _obj$2[8] = "nodes", _obj$2[9] = "skins", _obj$2[10] = "animations", _obj$2[4] = "bufferViews", _obj$2);
47892
- var _obj1$1;
47893
- var glTFResourceMap = (_obj1$1 = {}, _obj1$1[2] = "_sceneRoots", _obj1$1[5] = "textures", _obj1$1[6] = "materials", _obj1$1[7] = "meshes", _obj1$1[8] = "entities", _obj1$1[9] = "skins", _obj1$1[10] = "animations", _obj1$1[11] = "animatorController", _obj1$1);
47894
- function registerGLTFParser(pipeline) {
47895
- return function(Parser) {
47896
- var parser = new Parser();
47897
- GLTFParserContext.addParser(pipeline, parser);
47898
- };
47899
- }
47900
- /**
47901
- * @internal
47902
- */ var GLTFUtils = /*#__PURE__*/ function() {
47903
- function GLTFUtils() {}
47904
- GLTFUtils.floatBufferToVector2Array = function floatBufferToVector2Array(buffer) {
47905
- var bufferLen = buffer.length;
47906
- var array = new Array(bufferLen / 2);
47907
- for(var i = 0; i < bufferLen; i += 2){
47908
- array[i / 2] = new Vector2(buffer[i], buffer[i + 1]);
47707
+ return BinomialLLCTranscoder;
47708
+ }(AbstractTranscoder);
47709
+ var KTX2Loader = /*#__PURE__*/ function(Loader) {
47710
+ _inherits(KTX2Loader, Loader);
47711
+ function KTX2Loader() {
47712
+ return Loader.apply(this, arguments) || this;
47713
+ }
47714
+ var _proto = KTX2Loader.prototype;
47715
+ _proto.initialize = function initialize(_, configuration) {
47716
+ if (configuration.ktx2Loader) {
47717
+ var options = configuration.ktx2Loader;
47718
+ if (options.priorityFormats) {
47719
+ KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
47720
+ KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
47721
+ }
47722
+ return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
47909
47723
  }
47910
- return array;
47911
47724
  };
47912
- GLTFUtils.floatBufferToVector3Array = function floatBufferToVector3Array(buffer) {
47913
- var bufferLen = buffer.length;
47914
- var array = new Array(bufferLen / 3);
47915
- for(var i = 0; i < bufferLen; i += 3){
47916
- array[i / 3] = new Vector3(buffer[i], buffer[i + 1], buffer[i + 2]);
47917
- }
47918
- return array;
47725
+ /**
47726
+ * @internal
47727
+ */ _proto.load = function load(item, resourceManager) {
47728
+ return new AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
47729
+ var requestConfig = _extends({}, item, {
47730
+ type: "arraybuffer"
47731
+ });
47732
+ var url = item.url;
47733
+ resourceManager // @ts-ignore
47734
+ ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
47735
+ return KTX2Loader._parseBuffer(new Uint8Array(buffer), resourceManager.engine, item.params).then(function(param) {
47736
+ var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
47737
+ return KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params);
47738
+ }).then(function(texture) {
47739
+ resourceManager.addContentRestorer(new KTX2ContentRestorer(texture, url, requestConfig));
47740
+ resolve(texture);
47741
+ });
47742
+ }).catch(reject);
47743
+ });
47744
+ };
47745
+ /**
47746
+ * Release ktx2 transcoder worker.
47747
+ * @remarks If use loader after releasing, we should release again.
47748
+ */ KTX2Loader.release = function release() {
47749
+ if (this._binomialLLCTranscoder) this._binomialLLCTranscoder.destroy();
47750
+ this._binomialLLCTranscoder = null;
47919
47751
  };
47920
- GLTFUtils.floatBufferToVector4Array = function floatBufferToVector4Array(buffer) {
47921
- var bufferLen = buffer.length;
47922
- var array = new Array(bufferLen / 4);
47923
- for(var i = 0; i < bufferLen; i += 4){
47924
- array[i / 4] = new Vector4(buffer[i], buffer[i + 1], buffer[i + 2], buffer[i + 3]);
47925
- }
47926
- return array;
47752
+ /** @internal */ KTX2Loader._parseBuffer = function _parseBuffer(buffer, engine, params) {
47753
+ var ktx2Container = new KTX2Container(buffer);
47754
+ var _params_priorityFormats;
47755
+ var formatPriorities = (_params_priorityFormats = params == null ? void 0 : params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.colorModel];
47756
+ var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
47757
+ var binomialLLCWorker = KTX2Loader._getBinomialLLCTranscoder();
47758
+ return binomialLLCWorker.init().then(function() {
47759
+ return binomialLLCWorker.transcode(buffer, targetFormat);
47760
+ }).then(function(result) {
47761
+ return {
47762
+ ktx2Container: ktx2Container,
47763
+ engine: engine,
47764
+ result: result,
47765
+ targetFormat: targetFormat,
47766
+ params: ktx2Container.keyValue["GalaceanTextureParams"]
47767
+ };
47768
+ });
47927
47769
  };
47928
- GLTFUtils.floatBufferToColorArray = function floatBufferToColorArray(buffer, isColor3) {
47929
- var bufferLen = buffer.length;
47930
- var colors = new Array(bufferLen / (isColor3 ? 3 : 4));
47931
- if (isColor3) {
47932
- for(var i = 0; i < bufferLen; i += 3){
47933
- colors[i / 3] = new Color(buffer[i], buffer[i + 1], buffer[i + 2], 1.0);
47770
+ /** @internal */ KTX2Loader._createTextureByBuffer = function _createTextureByBuffer(engine, isSRGB, transcodeResult, targetFormat, params, restoredTexture) {
47771
+ var width = transcodeResult.width, height = transcodeResult.height, faces = transcodeResult.faces;
47772
+ var faceCount = faces.length;
47773
+ var mipmaps = faces[0];
47774
+ var mipmap = mipmaps.length > 1;
47775
+ var engineFormat = this._getEngineTextureFormat(targetFormat, transcodeResult);
47776
+ var texture;
47777
+ if (faceCount !== 6) {
47778
+ texture = restoredTexture || new Texture2D(engine, width, height, engineFormat, mipmap, isSRGB);
47779
+ for(var mipLevel = 0; mipLevel < mipmaps.length; mipLevel++){
47780
+ var data = mipmaps[mipLevel].data;
47781
+ texture.setPixelBuffer(data, mipLevel);
47934
47782
  }
47935
47783
  } else {
47936
- for(var i1 = 0; i1 < bufferLen; i1 += 4){
47937
- colors[i1 / 4] = new Color(buffer[i1], buffer[i1 + 1], buffer[i1 + 2], buffer[i1 + 3]);
47784
+ texture = restoredTexture || new TextureCube(engine, height, engineFormat, mipmap, isSRGB);
47785
+ for(var i = 0; i < faces.length; i++){
47786
+ var faceData = faces[i];
47787
+ for(var mipLevel1 = 0; mipLevel1 < mipmaps.length; mipLevel1++){
47788
+ texture.setPixelBuffer(TextureCubeFace.PositiveX + i, faceData[mipLevel1].data, mipLevel1);
47789
+ }
47938
47790
  }
47939
47791
  }
47940
- return colors;
47941
- };
47942
- /**
47943
- * Get the number of bytes occupied by accessor type.
47944
- */ GLTFUtils.getAccessorTypeSize = function getAccessorTypeSize(accessorType) {
47945
- switch(accessorType){
47946
- case AccessorType.SCALAR:
47947
- return 1;
47948
- case AccessorType.VEC2:
47949
- return 2;
47950
- case AccessorType.VEC3:
47951
- return 3;
47952
- case AccessorType.VEC4:
47953
- return 4;
47954
- case AccessorType.MAT2:
47955
- return 4;
47956
- case AccessorType.MAT3:
47957
- return 9;
47958
- case AccessorType.MAT4:
47959
- return 16;
47792
+ if (params) {
47793
+ texture.wrapModeU = params[0];
47794
+ texture.wrapModeV = params[1];
47795
+ texture.filterMode = params[2];
47796
+ texture.anisoLevel = params[3];
47960
47797
  }
47798
+ return texture;
47961
47799
  };
47962
- /**
47963
- * Get the TypedArray corresponding to the component type.
47964
- */ GLTFUtils.getComponentType = function getComponentType(componentType) {
47965
- switch(componentType){
47966
- case AccessorComponentType.BYTE:
47967
- return Int8Array;
47968
- case AccessorComponentType.UNSIGNED_BYTE:
47969
- return Uint8Array;
47970
- case AccessorComponentType.SHORT:
47971
- return Int16Array;
47972
- case AccessorComponentType.UNSIGNED_SHORT:
47973
- return Uint16Array;
47974
- case AccessorComponentType.UNSIGNED_INT:
47975
- return Uint32Array;
47976
- case AccessorComponentType.FLOAT:
47977
- return Float32Array;
47800
+ KTX2Loader._decideTargetFormat = function _decideTargetFormat(engine, ktx2Container, priorityFormats) {
47801
+ var renderer = engine._hardwareRenderer;
47802
+ var isSRGB = ktx2Container.isSRGB, pixelWidth = ktx2Container.pixelWidth, pixelHeight = ktx2Container.pixelHeight;
47803
+ var targetFormat = this._detectSupportedFormat(renderer, priorityFormats, isSRGB);
47804
+ if (targetFormat === KTX2TargetFormat.PVRTC && (!MathUtil.isPowerOf2(pixelWidth) || !MathUtil.isPowerOf2(pixelHeight) || pixelWidth !== pixelHeight)) {
47805
+ Logger.warn("PVRTC image need power of 2 and width===height, downgrade to RGBA8");
47806
+ return KTX2TargetFormat.R8G8B8A8;
47978
47807
  }
47979
- };
47980
- GLTFUtils.getNormalizedComponentScale = function getNormalizedComponentScale(componentType) {
47981
- // Reference: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
47982
- switch(componentType){
47983
- case AccessorComponentType.BYTE:
47984
- return 1 / 127;
47985
- case AccessorComponentType.UNSIGNED_BYTE:
47986
- return 1 / 255;
47987
- case AccessorComponentType.SHORT:
47988
- return 1 / 32767;
47989
- case AccessorComponentType.UNSIGNED_SHORT:
47990
- return 1 / 65535;
47991
- default:
47992
- throw new Error("Galacean.GLTFLoader: Unsupported normalized accessor component type.");
47808
+ if (targetFormat === null) {
47809
+ Logger.warn("Can't support any compressed texture, downgrade to RGBA8");
47810
+ return KTX2TargetFormat.R8G8B8A8;
47993
47811
  }
47812
+ return targetFormat;
47994
47813
  };
47995
- GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
47996
- var componentType = accessor.componentType;
47997
- var TypedArray = GLTFUtils.getComponentType(componentType);
47998
- var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
47999
- var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
48000
- var elementStride = dataElementSize * dataElementBytes;
48001
- var accessorCount = accessor.count;
48002
- var promise;
48003
- if (accessor.bufferView !== undefined) {
48004
- var bufferViewIndex = accessor.bufferView;
48005
- var bufferView = bufferViews[bufferViewIndex];
48006
- promise = context.get(GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
48007
- var bufferIndex = bufferView.buffer;
48008
- var _bufferViewData_byteOffset;
48009
- var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
48010
- var _accessor_byteOffset;
48011
- var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
48012
- var bufferStride = bufferView.byteStride;
48013
- var bufferInfo;
48014
- // According to the glTF official documentation only byteStride not undefined is allowed
48015
- if (bufferStride !== undefined && bufferStride !== elementStride) {
48016
- var bufferSlice = Math.floor(byteOffset / bufferStride);
48017
- var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
48018
- var accessorBufferCache = context.accessorBufferCache;
48019
- bufferInfo = accessorBufferCache[bufferCacheKey];
48020
- if (!bufferInfo) {
48021
- var offset = bufferByteOffset + bufferSlice * bufferStride;
48022
- var count = accessorCount * (bufferStride / dataElementBytes);
48023
- var data = new TypedArray(bufferViewData.buffer, offset, count);
48024
- accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
48025
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
47814
+ KTX2Loader._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats, isSRGB) {
47815
+ for(var i = 0; i < priorityFormats.length; i++){
47816
+ var _this__capabilityMap_format;
47817
+ var format = priorityFormats[i];
47818
+ var capabilities = (_this__capabilityMap_format = this._capabilityMap[format]) == null ? void 0 : _this__capabilityMap_format[isSRGB ? DFDTransferFunction.sRGB : DFDTransferFunction.linear];
47819
+ if (capabilities) {
47820
+ for(var j = 0; j < capabilities.length; j++){
47821
+ if (renderer.canIUse(capabilities[j])) {
47822
+ return format;
48026
47823
  }
48027
- } else {
48028
- var offset1 = bufferByteOffset + byteOffset;
48029
- var count1 = accessorCount * dataElementSize;
48030
- var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
48031
- bufferInfo = new BufferInfo(data1, false, elementStride);
48032
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
48033
47824
  }
48034
- return bufferInfo;
48035
- }).catch(function(e) {
48036
- Logger.error("GLTFUtil getAccessorBuffer error", e);
48037
- });
48038
- } else {
48039
- var count = accessorCount * dataElementSize;
48040
- var data = new TypedArray(count);
48041
- var bufferInfo = new BufferInfo(data, false, elementStride);
48042
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(undefined, TypedArray, undefined, count));
48043
- promise = AssetPromise.resolve(bufferInfo);
48044
- }
48045
- return accessor.sparse ? promise.then(function(bufferInfo) {
48046
- return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
48047
- return bufferInfo;
48048
- });
48049
- }) : promise;
48050
- };
48051
- GLTFUtils.bufferToVector3Array = function bufferToVector3Array(buffer, byteOffset, count, normalized, componentType) {
48052
- var baseOffset = byteOffset / buffer.BYTES_PER_ELEMENT;
48053
- var stride = buffer.length / count;
48054
- var vertices = new Array(count);
48055
- var factor = normalized ? GLTFUtils.getNormalizedComponentScale(componentType) : 1;
48056
- for(var i = 0; i < count; i++){
48057
- var index = baseOffset + i * stride;
48058
- vertices[i] = new Vector3(buffer[index] * factor, buffer[index + 1] * factor, buffer[index + 2] * factor);
48059
- }
48060
- return vertices;
48061
- };
48062
- GLTFUtils.getBufferViewData = function getBufferViewData(bufferView, buffers) {
48063
- var _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset;
48064
- var arrayBuffer = buffers[bufferView.buffer];
48065
- return arrayBuffer.slice(byteOffset, byteOffset + bufferView.byteLength);
48066
- };
48067
- /**
48068
- * Get accessor data.
48069
- */ GLTFUtils.processingSparseData = function processingSparseData(context, accessor, bufferInfo) {
48070
- var restoreInfo = bufferInfo.restoreInfo;
48071
- var bufferViews = context.glTF.bufferViews;
48072
- var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
48073
- var TypedArray = GLTFUtils.getComponentType(accessor.componentType);
48074
- var data = bufferInfo.data.slice();
48075
- var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
48076
- var indicesBufferView = bufferViews[indices.bufferView];
48077
- var valuesBufferView = bufferViews[values.bufferView];
48078
- return AssetPromise.all([
48079
- context.get(GLTFParserType.BufferView, indices.bufferView),
48080
- context.get(GLTFParserType.BufferView, values.bufferView)
48081
- ]).then(function(param) {
48082
- var indicesUint8Array = param[0], valuesUin8Array = param[1];
48083
- var _indices_byteOffset, _indicesUint8Array_byteOffset;
48084
- var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesUint8Array_byteOffset = indicesUint8Array.byteOffset) != null ? _indicesUint8Array_byteOffset : 0);
48085
- var indicesByteLength = indicesUint8Array.byteLength;
48086
- var _values_byteOffset, _valuesUin8Array_byteOffset;
48087
- var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesUin8Array_byteOffset = valuesUin8Array.byteOffset) != null ? _valuesUin8Array_byteOffset : 0);
48088
- var valuesByteLength = valuesUin8Array.byteLength;
48089
- restoreInfo.typeSize = accessorTypeSize;
48090
- restoreInfo.sparseCount = count;
48091
- var IndexTypeArray = GLTFUtils.getComponentType(indices.componentType);
48092
- var indexLength = indicesByteLength / IndexTypeArray.BYTES_PER_ELEMENT;
48093
- var indicesArray = new IndexTypeArray(indicesUint8Array.buffer, indicesByteOffset, indexLength);
48094
- restoreInfo.sparseIndices = new RestoreDataAccessor(indicesBufferView.buffer, IndexTypeArray, indicesByteOffset, indexLength);
48095
- var valueLength = valuesByteLength / TypedArray.BYTES_PER_ELEMENT;
48096
- var valuesArray = new TypedArray(valuesUin8Array.buffer, valuesByteOffset, valueLength);
48097
- restoreInfo.sparseValues = new RestoreDataAccessor(valuesBufferView.buffer, TypedArray, valuesByteOffset, valueLength);
48098
- for(var i = 0; i < count; i++){
48099
- var replaceIndex = indicesArray[i];
48100
- for(var j = 0; j < accessorTypeSize; j++){
48101
- data[replaceIndex * accessorTypeSize + j] = valuesArray[i * accessorTypeSize + j];
47825
+ } else {
47826
+ switch(priorityFormats[i]){
47827
+ case KTX2TargetFormat.R8G8B8A8:
47828
+ return format;
47829
+ case KTX2TargetFormat.R8:
47830
+ case KTX2TargetFormat.R8G8:
47831
+ if (renderer.isWebGL2) return format;
48102
47832
  }
48103
47833
  }
48104
- bufferInfo.data = data;
48105
- }).catch(function(e) {
48106
- Logger.error("GLTFUtil processingSparseData error", e);
48107
- });
48108
- };
48109
- GLTFUtils.getIndexFormat = function getIndexFormat(type) {
48110
- switch(type){
48111
- case AccessorComponentType.UNSIGNED_BYTE:
48112
- return IndexFormat.UInt8;
48113
- case AccessorComponentType.UNSIGNED_SHORT:
48114
- return IndexFormat.UInt16;
48115
- case AccessorComponentType.UNSIGNED_INT:
48116
- return IndexFormat.UInt32;
48117
47834
  }
47835
+ return null;
48118
47836
  };
48119
- GLTFUtils.getElementFormat = function getElementFormat(type, size, normalized) {
48120
- if (normalized === void 0) normalized = false;
48121
- if (type == AccessorComponentType.FLOAT) {
48122
- switch(size){
48123
- case 1:
48124
- return VertexElementFormat.Float;
48125
- case 2:
48126
- return VertexElementFormat.Vector2;
48127
- case 3:
48128
- return VertexElementFormat.Vector3;
48129
- case 4:
48130
- return VertexElementFormat.Vector4;
48131
- }
48132
- }
48133
- if (type == AccessorComponentType.SHORT) {
48134
- switch(size){
48135
- case 2:
48136
- return normalized ? VertexElementFormat.NormalizedShort2 : VertexElementFormat.Short2;
48137
- case 3:
48138
- case 4:
48139
- return normalized ? VertexElementFormat.NormalizedShort4 : VertexElementFormat.Short4;
48140
- }
47837
+ KTX2Loader._getBinomialLLCTranscoder = function _getBinomialLLCTranscoder(workerCount) {
47838
+ if (workerCount === void 0) workerCount = 4;
47839
+ var _this__binomialLLCTranscoder;
47840
+ return (_this__binomialLLCTranscoder = this._binomialLLCTranscoder) != null ? _this__binomialLLCTranscoder : this._binomialLLCTranscoder = new BinomialLLCTranscoder(workerCount);
47841
+ };
47842
+ KTX2Loader._getEngineTextureFormat = function _getEngineTextureFormat(basisFormat, transcodeResult) {
47843
+ var hasAlpha = transcodeResult.hasAlpha;
47844
+ switch(basisFormat){
47845
+ case KTX2TargetFormat.ASTC:
47846
+ return TextureFormat.ASTC_4x4;
47847
+ case KTX2TargetFormat.ETC:
47848
+ return hasAlpha ? TextureFormat.ETC2_RGBA8 : TextureFormat.ETC2_RGB;
47849
+ case KTX2TargetFormat.BC7:
47850
+ return TextureFormat.BC7;
47851
+ case KTX2TargetFormat.BC1_BC3:
47852
+ return hasAlpha ? TextureFormat.BC3 : TextureFormat.BC1;
47853
+ case KTX2TargetFormat.PVRTC:
47854
+ return hasAlpha ? TextureFormat.PVRTC_RGBA4 : TextureFormat.PVRTC_RGB4;
47855
+ case KTX2TargetFormat.R8G8B8A8:
47856
+ return TextureFormat.R8G8B8A8;
47857
+ case KTX2TargetFormat.BC6H:
47858
+ return TextureFormat.BC6H;
47859
+ case KTX2TargetFormat.ASTC_HDR_4x4:
47860
+ return TextureFormat.ASTC_4x4;
47861
+ case KTX2TargetFormat.R16G16B16A16:
47862
+ return TextureFormat.R16G16B16A16;
48141
47863
  }
48142
- if (type == AccessorComponentType.UNSIGNED_SHORT) {
48143
- switch(size){
48144
- case 2:
48145
- return normalized ? VertexElementFormat.NormalizedUShort2 : VertexElementFormat.UShort2;
48146
- case 3:
48147
- case 4:
48148
- return normalized ? VertexElementFormat.NormalizedUShort4 : VertexElementFormat.UShort4;
47864
+ };
47865
+ return KTX2Loader;
47866
+ }(Loader);
47867
+ var _obj$2;
47868
+ KTX2Loader._priorityFormats = (_obj$2 = {}, _obj$2[ColorModel.ETC1S] = [
47869
+ KTX2TargetFormat.ETC,
47870
+ KTX2TargetFormat.BC7,
47871
+ KTX2TargetFormat.ASTC,
47872
+ KTX2TargetFormat.BC1_BC3,
47873
+ KTX2TargetFormat.PVRTC
47874
+ ], _obj$2[ColorModel.UASTC_LDR_4X4] = [
47875
+ KTX2TargetFormat.ASTC,
47876
+ KTX2TargetFormat.BC7,
47877
+ KTX2TargetFormat.ETC,
47878
+ KTX2TargetFormat.BC1_BC3,
47879
+ KTX2TargetFormat.PVRTC
47880
+ ], _obj$2[ColorModel.UASTC_HDR_4X4] = [
47881
+ KTX2TargetFormat.ASTC_HDR_4x4,
47882
+ KTX2TargetFormat.BC6H,
47883
+ KTX2TargetFormat.R16G16B16A16
47884
+ ], _obj$2);
47885
+ var _obj1$1, _obj2, _obj3, _obj4, _obj5, _obj6, _obj7, _obj8, _obj9;
47886
+ KTX2Loader._capabilityMap = (_obj9 = {}, _obj9[KTX2TargetFormat.ASTC] = (_obj1$1 = {}, _obj1$1[DFDTransferFunction.linear] = [
47887
+ GLCapabilityType.astc,
47888
+ GLCapabilityType.astc_webkit
47889
+ ], _obj1$1[DFDTransferFunction.sRGB] = [
47890
+ GLCapabilityType.astc,
47891
+ GLCapabilityType.astc_webkit
47892
+ ], _obj1$1), _obj9[KTX2TargetFormat.ETC] = (_obj2 = {}, _obj2[DFDTransferFunction.linear] = [
47893
+ GLCapabilityType.etc,
47894
+ GLCapabilityType.etc_webkit
47895
+ ], _obj2[DFDTransferFunction.sRGB] = [
47896
+ GLCapabilityType.etc,
47897
+ GLCapabilityType.etc_webkit
47898
+ ], _obj2), _obj9[KTX2TargetFormat.BC7] = (_obj3 = {}, _obj3[DFDTransferFunction.linear] = [
47899
+ GLCapabilityType.bptc
47900
+ ], _obj3[DFDTransferFunction.sRGB] = [
47901
+ GLCapabilityType.bptc
47902
+ ], _obj3), _obj9[KTX2TargetFormat.BC1_BC3] = (_obj4 = {}, _obj4[DFDTransferFunction.linear] = [
47903
+ GLCapabilityType.s3tc
47904
+ ], _obj4[DFDTransferFunction.sRGB] = [
47905
+ GLCapabilityType.s3tc_srgb
47906
+ ], _obj4), _obj9[KTX2TargetFormat.BC6H] = (_obj5 = {}, _obj5[DFDTransferFunction.linear] = [
47907
+ GLCapabilityType.bptc
47908
+ ], _obj5), _obj9[KTX2TargetFormat.ASTC_HDR_4x4] = (_obj6 = {}, _obj6[DFDTransferFunction.linear] = [
47909
+ GLCapabilityType.astc_hdr
47910
+ ], _obj6), _obj9[KTX2TargetFormat.R16G16B16A16] = (_obj7 = {}, _obj7[DFDTransferFunction.linear] = [
47911
+ GLCapabilityType.textureHalfFloat
47912
+ ], _obj7), _obj9[KTX2TargetFormat.PVRTC] = (_obj8 = {}, _obj8[DFDTransferFunction.linear] = [
47913
+ GLCapabilityType.pvrtc,
47914
+ GLCapabilityType.pvrtc_webkit
47915
+ ], _obj8), _obj9);
47916
+ KTX2Loader = __decorate([
47917
+ resourceLoader(AssetType.KTX2, [
47918
+ "ktx2"
47919
+ ])
47920
+ ], KTX2Loader);
47921
+ var KTX2ContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
47922
+ _inherits(KTX2ContentRestorer, ContentRestorer);
47923
+ function KTX2ContentRestorer(resource, url, requestConfig) {
47924
+ var _this;
47925
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
47926
+ return _this;
47927
+ }
47928
+ var _proto = KTX2ContentRestorer.prototype;
47929
+ _proto.restoreContent = function restoreContent() {
47930
+ var _this = this;
47931
+ var _this1 = this, resource = _this1.resource, requestConfig = _this1.requestConfig;
47932
+ var engine = resource.engine;
47933
+ return new AssetPromise(function(resolve, reject) {
47934
+ engine.resourceManager // @ts-ignore
47935
+ ._request(_this.url, requestConfig).then(function(buffer) {
47936
+ return KTX2Loader._parseBuffer(new Uint8Array(buffer), engine, requestConfig.params).then(function(param) {
47937
+ var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
47938
+ return KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params, resource);
47939
+ });
47940
+ }).then(resolve).catch(reject);
47941
+ });
47942
+ };
47943
+ return KTX2ContentRestorer;
47944
+ }(ContentRestorer);
47945
+ var AmbientLightLoader = /*#__PURE__*/ function(Loader) {
47946
+ _inherits(AmbientLightLoader, Loader);
47947
+ function AmbientLightLoader() {
47948
+ return Loader.apply(this, arguments) || this;
47949
+ }
47950
+ var _proto = AmbientLightLoader.prototype;
47951
+ _proto.load = function load(item, resourceManager) {
47952
+ return new AssetPromise(function(resolve, reject) {
47953
+ var requestConfig = _extends({}, item, {
47954
+ type: "arraybuffer"
47955
+ });
47956
+ var engine = resourceManager.engine;
47957
+ var url = item.url;
47958
+ resourceManager // @ts-ignore
47959
+ ._request(url, requestConfig).then(function(buffer) {
47960
+ var header = FileHeader.decode(buffer);
47961
+ var dataOffset = header.headerLength;
47962
+ var sh = new SphericalHarmonics3();
47963
+ sh.copyFromArray(new Float32Array(buffer, dataOffset, 27));
47964
+ var textureOffset = dataOffset + AmbientLightLoader._shByteLength;
47965
+ return AmbientLightLoader._parseTexture(engine, buffer, textureOffset, header.dataLength - AmbientLightLoader._shByteLength).then(function(specularTexture) {
47966
+ engine.resourceManager.addContentRestorer(new AmbientLightContentRestorer(specularTexture, url, requestConfig));
47967
+ var ambientLight = new AmbientLight(engine);
47968
+ ambientLight.diffuseMode = DiffuseMode.SphericalHarmonics;
47969
+ ambientLight.diffuseSphericalHarmonics = sh;
47970
+ ambientLight.specularTexture = specularTexture;
47971
+ resolve(ambientLight);
47972
+ });
47973
+ }).catch(reject);
47974
+ });
47975
+ };
47976
+ /** @internal */ AmbientLightLoader._parseTexture = function _parseTexture(engine, buffer, textureOffset, textureLength, texture) {
47977
+ if (KTX2Container.checkMagic(buffer, textureOffset)) {
47978
+ var ktx2Data = new Uint8Array(buffer, textureOffset, textureLength);
47979
+ return KTX2Loader._parseBuffer(ktx2Data, engine).then(function(param) {
47980
+ var ktx2Container = param.ktx2Container, _$engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
47981
+ var tex = KTX2Loader._createTextureByBuffer(_$engine, ktx2Container.isSRGB, result, targetFormat, params, texture);
47982
+ tex.filterMode = TextureFilterMode.Trilinear;
47983
+ return tex;
47984
+ });
47985
+ } else {
47986
+ var size = new Uint16Array(buffer, textureOffset, 1)[0];
47987
+ texture || (texture = new TextureCube(engine, size, TextureFormat.R16G16B16A16, true, false));
47988
+ texture.filterMode = TextureFilterMode.Trilinear;
47989
+ var mipmapCount = texture.mipmapCount;
47990
+ var offset = textureOffset + 2;
47991
+ for(var mipLevel = 0; mipLevel < mipmapCount; mipLevel++){
47992
+ var mipSize = size >> mipLevel;
47993
+ for(var face = 0; face < 6; face++){
47994
+ var dataSize = mipSize * mipSize * 4;
47995
+ var data = new Uint16Array(buffer, offset, dataSize);
47996
+ offset += dataSize * 2;
47997
+ texture.setPixelBuffer(TextureCubeFace.PositiveX + face, data, mipLevel);
47998
+ }
48149
47999
  }
48000
+ return Promise.resolve(texture);
48150
48001
  }
48151
- if (type == AccessorComponentType.BYTE) {
48152
- switch(size){
48153
- case 2:
48154
- case 3:
48155
- case 4:
48156
- return normalized ? VertexElementFormat.NormalizedByte4 : VertexElementFormat.Byte4;
48002
+ };
48003
+ return AmbientLightLoader;
48004
+ }(Loader);
48005
+ AmbientLightLoader._shByteLength = 27 * 4;
48006
+ AmbientLightLoader = __decorate([
48007
+ resourceLoader(AssetType.AmbientLight, [
48008
+ "ambLight"
48009
+ ])
48010
+ ], AmbientLightLoader);
48011
+ /**
48012
+ * @internal
48013
+ */ var AmbientLightContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
48014
+ _inherits(AmbientLightContentRestorer, ContentRestorer);
48015
+ function AmbientLightContentRestorer(resource, url, requestConfig) {
48016
+ var _this;
48017
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
48018
+ return _this;
48019
+ }
48020
+ var _proto = AmbientLightContentRestorer.prototype;
48021
+ _proto.restoreContent = function restoreContent() {
48022
+ var _this = this;
48023
+ return new AssetPromise(function(resolve, reject) {
48024
+ var resource = _this.resource;
48025
+ var engine = resource.engine;
48026
+ engine.resourceManager // @ts-ignore
48027
+ ._request(_this.url, _this.requestConfig).then(function(buffer) {
48028
+ var header = FileHeader.decode(buffer);
48029
+ var dataOffset = header.headerLength;
48030
+ var textureOffset = dataOffset + AmbientLightLoader._shByteLength;
48031
+ return AmbientLightLoader._parseTexture(engine, buffer, textureOffset, header.dataLength - AmbientLightLoader._shByteLength, resource);
48032
+ }).then(resolve).catch(reject);
48033
+ });
48034
+ };
48035
+ return AmbientLightContentRestorer;
48036
+ }(ContentRestorer);
48037
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
48038
+ try {
48039
+ var info = gen[key](arg);
48040
+ var value = info.value;
48041
+ } catch (error) {
48042
+ reject(error);
48043
+ return;
48044
+ }
48045
+ if (info.done) resolve(value);
48046
+ else Promise.resolve(value).then(_next, _throw);
48047
+ }
48048
+ function _async_to_generator(fn) {
48049
+ return function() {
48050
+ var self1 = this, args = arguments;
48051
+ return new Promise(function(resolve, reject) {
48052
+ var gen = fn.apply(self1, args);
48053
+ function _next(value) {
48054
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
48157
48055
  }
48158
- }
48159
- if (type == AccessorComponentType.UNSIGNED_BYTE) {
48160
- switch(size){
48161
- case 2:
48162
- case 3:
48163
- case 4:
48164
- return normalized ? VertexElementFormat.NormalizedUByte4 : VertexElementFormat.UByte4;
48056
+ function _throw(err) {
48057
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
48165
48058
  }
48166
- }
48059
+ _next(undefined);
48060
+ });
48167
48061
  };
48168
- /**
48169
- * Load image buffer
48170
- */ GLTFUtils.loadImageBuffer = function loadImageBuffer(imageBuffer, type) {
48171
- return new Promise(function(resolve, reject) {
48172
- var blob = new window.Blob([
48173
- imageBuffer
48174
- ], {
48175
- type: type
48062
+ }
48063
+ var FontLoader = /*#__PURE__*/ function(Loader) {
48064
+ _inherits(FontLoader, Loader);
48065
+ function FontLoader() {
48066
+ return Loader.apply(this, arguments) || this;
48067
+ }
48068
+ var _proto = FontLoader.prototype;
48069
+ _proto.load = function load(item, resourceManager) {
48070
+ var _this = this;
48071
+ return new AssetPromise(function(resolve, reject) {
48072
+ resourceManager // @ts-ignore
48073
+ ._request(item.url, _extends({}, item, {
48074
+ type: "json"
48075
+ })).then(function(data) {
48076
+ var fontName = data.fontName, fontUrl = data.fontUrl;
48077
+ if (fontUrl) {
48078
+ _this._registerFont(fontName, fontUrl).then(function() {
48079
+ var font = new Font(resourceManager.engine, fontName);
48080
+ resolve(font);
48081
+ }).catch(function(e) {
48082
+ reject("load font " + fontUrl + " fail");
48083
+ });
48084
+ } else {
48085
+ var font = new Font(resourceManager.engine, fontName);
48086
+ resolve(font);
48087
+ }
48088
+ }).catch(function(e) {
48089
+ reject(e);
48176
48090
  });
48177
- var img = new Image();
48178
- img.onerror = function() {
48179
- reject(new Error("Failed to load image buffer"));
48180
- };
48181
- img.onload = function() {
48182
- // Call requestAnimationFrame to avoid iOS's bug.
48183
- requestAnimationFrame(function() {
48184
- resolve(img);
48185
- img.onload = null;
48186
- img.onerror = null;
48187
- img.onabort = null;
48188
- });
48189
- };
48190
- img.crossOrigin = "anonymous";
48191
- img.src = URL.createObjectURL(blob);
48192
48091
  });
48193
48092
  };
48194
- /**
48195
- * Parse the glb format.
48196
- */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
48197
- var UINT32_LENGTH = 4;
48198
- var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
48199
- var GLB_HEADER_LENGTH = 12;
48200
- var GLB_CHUNK_TYPES = {
48201
- JSON: 0x4e4f534a,
48202
- BIN: 0x004e4942
48203
- };
48204
- var dataView = new DataView(originBuffer);
48205
- // Read header
48206
- var header = {
48207
- magic: dataView.getUint32(0, true),
48208
- version: dataView.getUint32(UINT32_LENGTH, true),
48209
- length: dataView.getUint32(2 * UINT32_LENGTH, true)
48210
- };
48211
- // Return the original buffer if it is not a glb
48212
- if (header.magic !== GLB_HEADER_MAGIC) {
48213
- return {
48214
- originBuffer: originBuffer
48215
- };
48216
- }
48217
- // Read main data
48218
- var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
48219
- var chunkType = dataView.getUint32(GLB_HEADER_LENGTH + UINT32_LENGTH, true);
48220
- // Read glTF json
48221
- if (chunkType !== GLB_CHUNK_TYPES.JSON) {
48222
- console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
48223
- return null;
48224
- }
48225
- var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
48226
- var glTF = JSON.parse(Utils.decodeText(glTFData));
48227
- // Read all buffers
48228
- var buffers = [];
48229
- var byteOffset = GLB_HEADER_LENGTH + 2 * UINT32_LENGTH + chunkLength;
48230
- var restoreGLBBufferSlice = context.contentRestorer.glbBufferSlices;
48231
- while(byteOffset < header.length){
48232
- chunkLength = dataView.getUint32(byteOffset, true);
48233
- chunkType = dataView.getUint32(byteOffset + UINT32_LENGTH, true);
48234
- if (chunkType !== GLB_CHUNK_TYPES.BIN) {
48235
- console.error("Invalid glb chunk type. Expected 0x004E4942, found 0x" + chunkType.toString(16));
48236
- return null;
48237
- }
48238
- var currentOffset = byteOffset + 2 * UINT32_LENGTH;
48239
- var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
48240
- buffers.push(buffer);
48241
- restoreGLBBufferSlice.push(new Vector2(currentOffset, chunkLength));
48242
- byteOffset += chunkLength + 2 * UINT32_LENGTH;
48243
- }
48244
- return {
48245
- glTF: glTF,
48246
- buffers: buffers
48247
- };
48248
- };
48249
- GLTFUtils.parseSampler = function parseSampler(texture, samplerInfo) {
48250
- var filterMode = samplerInfo.filterMode, wrapModeU = samplerInfo.wrapModeU, wrapModeV = samplerInfo.wrapModeV;
48251
- if (filterMode !== undefined) {
48252
- texture.filterMode = filterMode;
48253
- }
48254
- if (wrapModeU !== undefined) {
48255
- texture.wrapModeU = wrapModeU;
48256
- }
48257
- if (wrapModeV !== undefined) {
48258
- texture.wrapModeV = wrapModeV;
48259
- }
48093
+ _proto._registerFont = function _registerFont(fontName, fontUrl) {
48094
+ return _async_to_generator(function() {
48095
+ var fontFace;
48096
+ return __generator(this, function(_state) {
48097
+ switch(_state.label){
48098
+ case 0:
48099
+ fontFace = new FontFace(fontName, "url(" + fontUrl + ")");
48100
+ return [
48101
+ 4,
48102
+ fontFace.load()
48103
+ ];
48104
+ case 1:
48105
+ _state.sent();
48106
+ document.fonts.add(fontFace);
48107
+ return [
48108
+ 2
48109
+ ];
48110
+ }
48111
+ });
48112
+ })();
48260
48113
  };
48261
- GLTFUtils.getSamplerInfo = function getSamplerInfo(sampler) {
48262
- var minFilter = sampler.minFilter, magFilter = sampler.magFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
48263
- var info = {};
48264
- if (minFilter || magFilter) {
48265
- info.mipmap = minFilter >= TextureMinFilter.NEAREST_MIPMAP_NEAREST;
48266
- if (magFilter === TextureMagFilter.NEAREST) {
48267
- info.filterMode = TextureFilterMode.Point;
48268
- } else {
48269
- if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
48270
- info.filterMode = TextureFilterMode.Bilinear;
48271
- } else {
48272
- info.filterMode = TextureFilterMode.Trilinear;
48114
+ return FontLoader;
48115
+ }(Loader);
48116
+ FontLoader = __decorate([
48117
+ resourceLoader(AssetType.Font, [
48118
+ "font"
48119
+ ])
48120
+ ], FontLoader);
48121
+ // Source: https://github.com/zeux/meshoptimizer/blob/master/js/meshopt_decoder.js
48122
+ var ready;
48123
+ function getMeshoptDecoder() {
48124
+ if (ready) return ready;
48125
+ var wasm_base = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb";
48126
+ var wasm_simd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb";
48127
+ var wasmpack = new Uint8Array([
48128
+ 32,
48129
+ 0,
48130
+ 65,
48131
+ 2,
48132
+ 1,
48133
+ 106,
48134
+ 34,
48135
+ 33,
48136
+ 3,
48137
+ 128,
48138
+ 11,
48139
+ 4,
48140
+ 13,
48141
+ 64,
48142
+ 6,
48143
+ 253,
48144
+ 10,
48145
+ 7,
48146
+ 15,
48147
+ 116,
48148
+ 127,
48149
+ 5,
48150
+ 8,
48151
+ 12,
48152
+ 40,
48153
+ 16,
48154
+ 19,
48155
+ 54,
48156
+ 20,
48157
+ 9,
48158
+ 27,
48159
+ 255,
48160
+ 113,
48161
+ 17,
48162
+ 42,
48163
+ 67,
48164
+ 24,
48165
+ 23,
48166
+ 146,
48167
+ 148,
48168
+ 18,
48169
+ 14,
48170
+ 22,
48171
+ 45,
48172
+ 70,
48173
+ 69,
48174
+ 56,
48175
+ 114,
48176
+ 101,
48177
+ 21,
48178
+ 25,
48179
+ 63,
48180
+ 75,
48181
+ 136,
48182
+ 108,
48183
+ 28,
48184
+ 118,
48185
+ 29,
48186
+ 73,
48187
+ 115
48188
+ ]);
48189
+ // @ts-ignore
48190
+ var wasm = SystemInfo._detectSIMDSupported() ? wasm_simd : wasm_base;
48191
+ var instance;
48192
+ ready = WebAssembly.instantiate(unpack(wasm)).then(function(result) {
48193
+ instance = result.instance;
48194
+ instance.exports.__wasm_call_ctors();
48195
+ }).then(function() {
48196
+ return {
48197
+ workerCount: 4,
48198
+ ready: ready,
48199
+ useWorkers: function useWorkers(workerCount) {
48200
+ this.workerCount = workerCount != null ? workerCount : this.workerCount;
48201
+ initWorkers(this.workerCount);
48202
+ },
48203
+ decodeGltfBuffer: function decodeGltfBuffer(count, stride, source, mode, filter) {
48204
+ if (this.workerCount > 0 && workers.length === 0) this.useWorkers();
48205
+ if (workers.length > 0) return decodeWorker(count, stride, source, decoders[mode], filters[filter]);
48206
+ return ready.then(function() {
48207
+ var target = new Uint8Array(count * stride);
48208
+ decode(instance.exports[decoders[mode]], target, count, stride, source, instance.exports[filters[filter]]);
48209
+ return target;
48210
+ });
48211
+ },
48212
+ release: function release() {
48213
+ for(var i = 0; i < workers.length; i++){
48214
+ workers[i].object.terminate();
48273
48215
  }
48274
48216
  }
48275
- }
48276
- if (wrapS) {
48277
- info.wrapModeU = GLTFTextureParser._wrapMap[wrapS];
48278
- }
48279
- if (wrapT) {
48280
- info.wrapModeV = GLTFTextureParser._wrapMap[wrapT];
48281
- }
48282
- return info;
48283
- };
48284
- return GLTFUtils;
48285
- }();
48286
- var DFDTransferFunction = /*#__PURE__*/ function(DFDTransferFunction) {
48287
- DFDTransferFunction[DFDTransferFunction["linear"] = 1] = "linear";
48288
- DFDTransferFunction[DFDTransferFunction["sRGB"] = 2] = "sRGB";
48289
- return DFDTransferFunction;
48290
- }({});
48291
- var ColorModel = /*#__PURE__*/ function(ColorModel) {
48292
- ColorModel[ColorModel["ETC1S"] = 163] = "ETC1S";
48293
- ColorModel[ColorModel["UASTC_LDR_4X4"] = 166] = "UASTC_LDR_4X4";
48294
- ColorModel[ColorModel["UASTC_HDR_4X4"] = 167] = "UASTC_HDR_4X4";
48295
- return ColorModel;
48296
- }({});
48297
- /** @internal */ var KTX2Container = /*#__PURE__*/ function() {
48298
- function KTX2Container(buffer) {
48299
- this.vkFormat = 0;
48300
- this.typeSize = 1;
48301
- this.pixelWidth = 0;
48302
- this.pixelHeight = 0;
48303
- this.pixelDepth = 0;
48304
- this.layerCount = 0;
48305
- this.faceCount = 1;
48306
- this.supercompressionScheme = 0;
48307
- this.levels = [];
48308
- this.keyValue = {};
48309
- this.globalData = null;
48310
- this.parse(buffer);
48217
+ };
48218
+ });
48219
+ function unpack(data) {
48220
+ var result = new Uint8Array(data.length);
48221
+ for(var i = 0; i < data.length; ++i){
48222
+ var ch = data.charCodeAt(i);
48223
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
48224
+ }
48225
+ var write = 0;
48226
+ for(var i1 = 0; i1 < data.length; ++i1){
48227
+ result[write++] = result[i1] < 60 ? wasmpack[result[i1]] : (result[i1] - 60) * 64 + result[++i1];
48228
+ }
48229
+ return result.buffer.slice(0, write);
48311
48230
  }
48312
- var _proto = KTX2Container.prototype;
48313
- _proto.parse = function parse(data) {
48314
- var buffer = data.buffer;
48315
- var byteOffset = data.byteOffset;
48316
- var headerBufferReader = new BufferReader(data, 12);
48317
- this.vkFormat = headerBufferReader.nextUint32();
48318
- this.typeSize = headerBufferReader.nextUint32();
48319
- this.pixelWidth = headerBufferReader.nextUint32();
48320
- this.pixelHeight = headerBufferReader.nextUint32();
48321
- this.pixelDepth = headerBufferReader.nextUint32();
48322
- this.layerCount = headerBufferReader.nextUint32();
48323
- this.faceCount = headerBufferReader.nextUint32();
48324
- var levelCount = Math.max(1, headerBufferReader.nextUint32());
48325
- this.supercompressionScheme = headerBufferReader.nextUint32();
48326
- var dfdByteOffset = headerBufferReader.nextUint32();
48327
- var dfdByteLength = headerBufferReader.nextUint32();
48328
- var kvdByteOffset = headerBufferReader.nextUint32();
48329
- var kvdByteLength = headerBufferReader.nextUint32();
48330
- var sgdByteOffset = headerBufferReader.nextUint64();
48331
- var sgdByteLength = headerBufferReader.nextUint64();
48332
- // level index
48333
- var ktxLevels = new Array(levelCount);
48334
- var levelByteLength = levelCount * 3 * 8;
48335
- var levelReader = new BufferReader(data, headerBufferReader.offset, levelByteLength);
48336
- this.levels = ktxLevels;
48337
- for(var i = 0; i < levelCount; i++){
48338
- ktxLevels[i] = {
48339
- levelData: new Uint8Array(buffer, byteOffset + levelReader.nextUint64(), levelReader.nextUint64()),
48340
- uncompressedByteLength: levelReader.nextUint64()
48341
- };
48231
+ function decode(fun, target, count, size, source, filter) {
48232
+ var sbrk = instance.exports.sbrk;
48233
+ var count4 = count + 3 & ~3;
48234
+ var tp = sbrk(count4 * size);
48235
+ var sp = sbrk(source.length);
48236
+ var heap = new Uint8Array(instance.exports.memory.buffer);
48237
+ heap.set(source, sp);
48238
+ var res = fun(tp, count, size, sp, source.length);
48239
+ if (res == 0 && filter) {
48240
+ filter(tp, count4, size);
48342
48241
  }
48343
- // Data Format Descriptor (DFD).
48344
- var dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength);
48345
- var dfd = {
48346
- vendorId: dfdReader.skip(4 /* totalSize */ ).nextUint16(),
48347
- descriptorType: dfdReader.nextUint16(),
48348
- versionNumber: dfdReader.nextUint16(),
48349
- descriptorBlockSize: dfdReader.nextUint16(),
48350
- colorModel: dfdReader.nextUint8(),
48351
- colorPrimaries: dfdReader.nextUint8(),
48352
- transferFunction: dfdReader.nextUint8(),
48353
- flags: dfdReader.nextUint8(),
48354
- texelBlockDimension: [
48355
- dfdReader.nextUint8(),
48356
- dfdReader.nextUint8(),
48357
- dfdReader.nextUint8(),
48358
- dfdReader.nextUint8()
48359
- ],
48360
- bytesPlane: [
48361
- dfdReader.nextUint8(),
48362
- dfdReader.nextUint8(),
48363
- dfdReader.nextUint8(),
48364
- dfdReader.nextUint8(),
48365
- dfdReader.nextUint8(),
48366
- dfdReader.nextUint8(),
48367
- dfdReader.nextUint8(),
48368
- dfdReader.nextUint8()
48369
- ],
48370
- samples: []
48242
+ target.set(heap.subarray(tp, tp + count * size));
48243
+ sbrk(tp - sbrk(0));
48244
+ if (res != 0) {
48245
+ throw new Error("Malformed buffer data: " + res);
48246
+ }
48247
+ }
48248
+ var filters = {
48249
+ NONE: "",
48250
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
48251
+ QUATERNION: "meshopt_decodeFilterQuat",
48252
+ EXPONENTIAL: "meshopt_decodeFilterExp"
48253
+ };
48254
+ var decoders = {
48255
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
48256
+ TRIANGLES: "meshopt_decodeIndexBuffer",
48257
+ INDICES: "meshopt_decodeIndexSequence"
48258
+ };
48259
+ var workers = [];
48260
+ var requestId = 0;
48261
+ function createWorker(url) {
48262
+ var worker = {
48263
+ object: new Worker(url),
48264
+ pending: 0,
48265
+ requests: {}
48371
48266
  };
48372
- this.dataFormatDescriptor = dfd;
48373
- var sampleStart = 6;
48374
- var sampleWords = 4;
48375
- var numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;
48376
- for(var i1 = 0; i1 < numSamples; i1++){
48377
- var sample = {
48378
- bitOffset: dfdReader.nextUint16(),
48379
- bitLength: dfdReader.nextUint8(),
48380
- channelType: dfdReader.nextUint8(),
48381
- samplePosition: [
48382
- dfdReader.nextUint8(),
48383
- dfdReader.nextUint8(),
48384
- dfdReader.nextUint8(),
48385
- dfdReader.nextUint8()
48386
- ],
48387
- sampleLower: -Infinity,
48388
- sampleUpper: Infinity
48389
- };
48390
- if (sample.channelType & 0x40) {
48391
- sample.sampleLower = dfdReader.nextInt32();
48392
- sample.sampleUpper = dfdReader.nextInt32();
48393
- } else {
48394
- sample.sampleLower = dfdReader.nextUint32();
48395
- sample.sampleUpper = dfdReader.nextUint32();
48396
- }
48397
- dfd.samples[i1] = sample;
48267
+ worker.object.onmessage = function(event) {
48268
+ var data = event.data;
48269
+ worker.pending -= data.count;
48270
+ worker.requests[data.id][data.action](data.value);
48271
+ delete worker.requests[data.id];
48272
+ };
48273
+ return worker;
48274
+ }
48275
+ function initWorkers(count) {
48276
+ var source = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" + ".then(function(result) {instance = result.instance; instance.exports.__wasm_call_ctors();});\n" + "self.onmessage = workerProcess;\n" + 'function decode(fun, target, count, size, source, filter) {\n const sbrk = instance.exports.sbrk;\n const count4 = (count + 3) & ~3;\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n if (res == 0 && filter) {\n filter(tp, count4, size);\n }\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n if (res != 0) {\n throw new Error("Malformed buffer data: " + res);\n }\n }\n' + 'function workerProcess(event) {\n ready.then(function () {\n const data = event.data;\n try {\n const target = new Uint8Array(data.count * data.size);\n decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);\n self.postMessage({ id: data.id, count: data.count, action: "resolve", value: target }, [target.buffer]);\n } catch (error) {\n self.postMessage({\n id: data.id,\n count: data.count,\n action: "reject",\n value: error\n });\n }\n });\n }';
48277
+ var blob = new Blob([
48278
+ source
48279
+ ], {
48280
+ type: "text/javascript"
48281
+ });
48282
+ var url = URL.createObjectURL(blob);
48283
+ for(var i = 0; i < count; ++i){
48284
+ workers[i] = createWorker(url);
48398
48285
  }
48399
- var kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);
48400
- while(kvdReader.position < kvdByteLength){
48401
- var keyValueByteLength = kvdReader.nextUint32();
48402
- var keyData = kvdReader.scan(keyValueByteLength);
48403
- var key = Utils.decodeText(keyData);
48404
- // 4-byte alignment.
48405
- var valueData = kvdReader.nextUint8Array(keyValueByteLength - keyData.byteLength - 1);
48406
- this.keyValue[key] = key.match(/^ktx/i) ? Utils.decodeText(valueData).replace(/^(.*)\x00$/, "$1") : valueData;
48407
- var kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; // align(4)
48408
- // 4-byte alignment.
48409
- kvdReader.skip(kvPadding);
48286
+ URL.revokeObjectURL(url);
48287
+ }
48288
+ function decodeWorker(count, size, source, mode, filter) {
48289
+ var worker = workers[0];
48290
+ for(var i = 1; i < workers.length; ++i){
48291
+ if (workers[i].pending < worker.pending) {
48292
+ worker = workers[i];
48293
+ }
48410
48294
  }
48411
- if (sgdByteLength <= 0) return this;
48412
- var sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);
48413
- var endpointCount = sgdReader.nextUint16();
48414
- var selectorCount = sgdReader.nextUint16();
48415
- var endpointsByteLength = sgdReader.nextUint32();
48416
- var selectorsByteLength = sgdReader.nextUint32();
48417
- var tablesByteLength = sgdReader.nextUint32();
48418
- var extendedByteLength = sgdReader.nextUint32();
48419
- var imageDescs = new Array(levelCount);
48420
- for(var i2 = 0; i2 < levelCount; i2++){
48421
- imageDescs[i2] = {
48422
- imageFlags: sgdReader.nextUint32(),
48423
- rgbSliceByteOffset: sgdReader.nextUint32(),
48424
- rgbSliceByteLength: sgdReader.nextUint32(),
48425
- alphaSliceByteOffset: sgdReader.nextUint32(),
48426
- alphaSliceByteLength: sgdReader.nextUint32()
48295
+ return new Promise(function(resolve, reject) {
48296
+ var data = new Uint8Array(source);
48297
+ var id = requestId++;
48298
+ worker.pending += count;
48299
+ worker.requests[id] = {
48300
+ resolve: resolve,
48301
+ reject: reject
48427
48302
  };
48303
+ worker.object.postMessage({
48304
+ id: id,
48305
+ count: count,
48306
+ size: size,
48307
+ source: data,
48308
+ mode: mode,
48309
+ filter: filter
48310
+ }, [
48311
+ data.buffer
48312
+ ]);
48313
+ });
48314
+ }
48315
+ return ready;
48316
+ }
48317
+ /**
48318
+ * The glTF resource.
48319
+ */ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
48320
+ _inherits(GLTFResource, ReferResource);
48321
+ function GLTFResource(engine, url) {
48322
+ var _this;
48323
+ _this = ReferResource.call(this, engine) || this;
48324
+ _this.url = url;
48325
+ return _this;
48326
+ }
48327
+ var _proto = GLTFResource.prototype;
48328
+ /**
48329
+ * Instantiate scene root entity.
48330
+ * @param sceneIndex - Scene index
48331
+ * @returns Root entity
48332
+ */ _proto.instantiateSceneRoot = function instantiateSceneRoot(sceneIndex) {
48333
+ var sceneRoot = sceneIndex === undefined ? this._defaultSceneRoot : this._sceneRoots[sceneIndex];
48334
+ return sceneRoot.clone();
48335
+ };
48336
+ _proto._onDestroy = function _onDestroy() {
48337
+ ReferResource.prototype._onDestroy.call(this);
48338
+ var _this = this, textures = _this.textures, materials = _this.materials, meshes = _this.meshes;
48339
+ textures && this._disassociationSuperResource(textures);
48340
+ materials && this._disassociationSuperResource(materials);
48341
+ if (meshes) {
48342
+ for(var i = 0, n = meshes.length; i < n; i++){
48343
+ var meshArr = meshes[i];
48344
+ meshArr && this._disassociationSuperResource(meshArr);
48345
+ }
48428
48346
  }
48429
- var endpointsByteOffset = sgdByteOffset + sgdReader.position;
48430
- var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
48431
- var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
48432
- var extendedByteOffset = tablesByteOffset + tablesByteLength;
48433
- var endpointsData = new Uint8Array(buffer, byteOffset + endpointsByteOffset, endpointsByteLength);
48434
- var selectorsData = new Uint8Array(buffer, byteOffset + selectorsByteOffset, selectorsByteLength);
48435
- var tablesData = new Uint8Array(buffer, byteOffset + tablesByteOffset, tablesByteLength);
48436
- var extendedData = new Uint8Array(buffer, byteOffset + extendedByteOffset, extendedByteLength);
48437
- this.globalData = {
48438
- endpointCount: endpointCount,
48439
- selectorCount: selectorCount,
48440
- imageDescs: imageDescs,
48441
- endpointsData: endpointsData,
48442
- selectorsData: selectorsData,
48443
- tablesData: tablesData,
48444
- extendedData: extendedData
48445
- };
48446
48347
  };
48447
- _create_class(KTX2Container, [
48348
+ _proto._disassociationSuperResource = function _disassociationSuperResource(resources) {
48349
+ for(var i = 0, n = resources.length; i < n; i++){
48350
+ var _resources_i;
48351
+ (_resources_i = resources[i]) == null ? void 0 : _resources_i._disassociationSuperResource(this);
48352
+ }
48353
+ };
48354
+ _create_class(GLTFResource, [
48355
+ {
48356
+ key: "extensionsData",
48357
+ get: /**
48358
+ * Extensions data.
48359
+ */ function get() {
48360
+ return this._extensionsData;
48361
+ }
48362
+ },
48448
48363
  {
48449
- key: "isSRGB",
48450
- get: function get() {
48451
- return this.dataFormatDescriptor.transferFunction === 2;
48364
+ key: "sceneRoots",
48365
+ get: /**
48366
+ * @deprecated Please use `instantiateSceneRoot` instead.
48367
+ * RootEntities after SceneParser.
48368
+ */ function get() {
48369
+ return this._sceneRoots;
48452
48370
  }
48453
48371
  },
48454
48372
  {
48455
- key: "colorModel",
48456
- get: function get() {
48457
- return this.dataFormatDescriptor.colorModel;
48373
+ key: "defaultSceneRoot",
48374
+ get: /**
48375
+ * @deprecated Please use `instantiateSceneRoot` instead.
48376
+ * RootEntity after SceneParser.
48377
+ */ function get() {
48378
+ return this._defaultSceneRoot;
48458
48379
  }
48459
48380
  }
48460
48381
  ]);
48461
- return KTX2Container;
48462
- }();
48382
+ return GLTFResource;
48383
+ }(ReferResource);
48463
48384
  /**
48464
- * KTX2 transcode target format.
48465
- */ var KTX2TargetFormat = /*#__PURE__*/ function(KTX2TargetFormat) {
48466
- /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["ASTC"] = 0] = "ASTC";
48467
- /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["BC7"] = 1] = "BC7";
48468
- /** RGB(A) compressed format, 4 bits per pixel if no alpha channel, 8 bits per pixel if has alpha channel. */ KTX2TargetFormat[KTX2TargetFormat["BC1_BC3"] = 2] = "BC1_BC3";
48469
- /** RGB(A) compressed format, 4 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["PVRTC"] = 3] = "PVRTC";
48470
- /** RGB(A) compressed format, 4 bits per pixel if no alpha channel, 8 bits per pixel if has alpha channel. */ KTX2TargetFormat[KTX2TargetFormat["ETC"] = 4] = "ETC";
48471
- /** R format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8"] = 5] = "R8";
48472
- /** RG format, 16 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8"] = 6] = "R8G8";
48473
- /** RGBA format, 32 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8B8A8"] = 7] = "R8G8B8A8";
48474
- /** RGB HDR compressed format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["BC6H"] = 8] = "BC6H";
48475
- /** HDR RGB(A) compressed format, 128 bits per 4x4 pixel block (currently UASTC HDR 4x4 encoders are only RGB). */ KTX2TargetFormat[KTX2TargetFormat["ASTC_HDR_4x4"] = 9] = "ASTC_HDR_4x4";
48476
- /** RGBA format, 16 bits per channel. */ KTX2TargetFormat[KTX2TargetFormat["R16G16B16A16"] = 10] = "R16G16B16A16";
48477
- return KTX2TargetFormat;
48385
+ * Module for glTF 2.0 Interface
48386
+ */ /**
48387
+ * The datatype of the components in the attribute
48388
+ */ var AccessorComponentType = /*#__PURE__*/ function(AccessorComponentType) {
48389
+ /**
48390
+ * Byte
48391
+ */ AccessorComponentType[AccessorComponentType["BYTE"] = 5120] = "BYTE";
48392
+ /**
48393
+ * Unsigned Byte
48394
+ */ AccessorComponentType[AccessorComponentType["UNSIGNED_BYTE"] = 5121] = "UNSIGNED_BYTE";
48395
+ /**
48396
+ * Short
48397
+ */ AccessorComponentType[AccessorComponentType["SHORT"] = 5122] = "SHORT";
48398
+ /**
48399
+ * Unsigned Short
48400
+ */ AccessorComponentType[AccessorComponentType["UNSIGNED_SHORT"] = 5123] = "UNSIGNED_SHORT";
48401
+ /**
48402
+ * Unsigned Int
48403
+ */ AccessorComponentType[AccessorComponentType["UNSIGNED_INT"] = 5125] = "UNSIGNED_INT";
48404
+ /**
48405
+ * Float
48406
+ */ AccessorComponentType[AccessorComponentType["FLOAT"] = 5126] = "FLOAT";
48407
+ return AccessorComponentType;
48408
+ }({});
48409
+ /**
48410
+ * Specifies if the attirbute is a scalar, vector, or matrix
48411
+ */ var AccessorType = /*#__PURE__*/ function(AccessorType) {
48412
+ /**
48413
+ * Scalar
48414
+ */ AccessorType["SCALAR"] = "SCALAR";
48415
+ /**
48416
+ * Vector2
48417
+ */ AccessorType["VEC2"] = "VEC2";
48418
+ /**
48419
+ * Vector3
48420
+ */ AccessorType["VEC3"] = "VEC3";
48421
+ /**
48422
+ * Vector4
48423
+ */ AccessorType["VEC4"] = "VEC4";
48424
+ /**
48425
+ * Matrix2x2
48426
+ */ AccessorType["MAT2"] = "MAT2";
48427
+ /**
48428
+ * Matrix3x3
48429
+ */ AccessorType["MAT3"] = "MAT3";
48430
+ /**
48431
+ * Matrix4x4
48432
+ */ AccessorType["MAT4"] = "MAT4";
48433
+ return AccessorType;
48434
+ }({});
48435
+ /**
48436
+ * The name of the node's TRS property to modify, or the weights of the Morph Targets it instantiates
48437
+ */ var AnimationChannelTargetPath = /*#__PURE__*/ function(AnimationChannelTargetPath) {
48438
+ /**
48439
+ * Translation
48440
+ */ AnimationChannelTargetPath["TRANSLATION"] = "translation";
48441
+ /**
48442
+ * Rotation
48443
+ */ AnimationChannelTargetPath["ROTATION"] = "rotation";
48444
+ /**
48445
+ * Scale
48446
+ */ AnimationChannelTargetPath["SCALE"] = "scale";
48447
+ /**
48448
+ * Weights
48449
+ */ AnimationChannelTargetPath["WEIGHTS"] = "weights";
48450
+ return AnimationChannelTargetPath;
48451
+ }({});
48452
+ /**
48453
+ * Interpolation algorithm
48454
+ */ var AnimationSamplerInterpolation = /*#__PURE__*/ function(AnimationSamplerInterpolation) {
48455
+ /**
48456
+ * The animated values are linearly interpolated between keyframes
48457
+ */ AnimationSamplerInterpolation["Linear"] = "LINEAR";
48458
+ /**
48459
+ * The animated values remain constant to the output of the first keyframe, until the next keyframe
48460
+ */ AnimationSamplerInterpolation["Step"] = "STEP";
48461
+ /**
48462
+ * The animation's interpolation is computed using a cubic spline with specified tangents
48463
+ */ AnimationSamplerInterpolation["CubicSpine"] = "CUBICSPLINE";
48464
+ return AnimationSamplerInterpolation;
48465
+ }({});
48466
+ /**
48467
+ * A camera's projection. A node can reference a camera to apply a transform to place the camera in the scene
48468
+ */ var CameraType = /*#__PURE__*/ function(CameraType) {
48469
+ /**
48470
+ * A perspective camera containing properties to create a perspective projection matrix
48471
+ */ CameraType["PERSPECTIVE"] = "perspective";
48472
+ /**
48473
+ * An orthographic camera containing properties to create an orthographic projection matrix
48474
+ */ CameraType["ORTHOGRAPHIC"] = "orthographic";
48475
+ return CameraType;
48476
+ }({});
48477
+ /**
48478
+ * The alpha rendering mode of the material
48479
+ */ var MaterialAlphaMode = /*#__PURE__*/ function(MaterialAlphaMode) {
48480
+ /**
48481
+ * The alpha value is ignored and the rendered output is fully opaque
48482
+ */ MaterialAlphaMode["OPAQUE"] = "OPAQUE";
48483
+ /**
48484
+ * The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value
48485
+ */ MaterialAlphaMode["MASK"] = "MASK";
48486
+ /**
48487
+ * The alpha value is used to composite the source and destination areas. The rendered output is combined with the background using the normal painting operation (i.e. the Porter and Duff over operator)
48488
+ */ MaterialAlphaMode["BLEND"] = "BLEND";
48489
+ return MaterialAlphaMode;
48490
+ }({});
48491
+ /**
48492
+ * Magnification filter. Valid values correspond to WebGL enums: 9728 (NEAREST) and 9729 (LINEAR)
48493
+ */ var TextureMagFilter = /*#__PURE__*/ function(TextureMagFilter) {
48494
+ /**
48495
+ * Nearest
48496
+ */ TextureMagFilter[TextureMagFilter["NEAREST"] = 9728] = "NEAREST";
48497
+ /**
48498
+ * Linear
48499
+ */ TextureMagFilter[TextureMagFilter["LINEAR"] = 9729] = "LINEAR";
48500
+ return TextureMagFilter;
48501
+ }({});
48502
+ /**
48503
+ * Minification filter. All valid values correspond to WebGL enums
48504
+ */ var TextureMinFilter = /*#__PURE__*/ function(TextureMinFilter) {
48505
+ /**
48506
+ * Nearest
48507
+ */ TextureMinFilter[TextureMinFilter["NEAREST"] = 9728] = "NEAREST";
48508
+ /**
48509
+ * Linear
48510
+ */ TextureMinFilter[TextureMinFilter["LINEAR"] = 9729] = "LINEAR";
48511
+ /**
48512
+ * Nearest Mip-Map Nearest
48513
+ */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_NEAREST"] = 9984] = "NEAREST_MIPMAP_NEAREST";
48514
+ /**
48515
+ * Linear Mipmap Nearest
48516
+ */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_NEAREST"] = 9985] = "LINEAR_MIPMAP_NEAREST";
48517
+ /**
48518
+ * Nearest Mipmap Linear
48519
+ */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_LINEAR"] = 9986] = "NEAREST_MIPMAP_LINEAR";
48520
+ /**
48521
+ * Linear Mipmap Linear
48522
+ */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_LINEAR"] = 9987] = "LINEAR_MIPMAP_LINEAR";
48523
+ return TextureMinFilter;
48524
+ }({});
48525
+ /**
48526
+ * S (U) wrapping mode. All valid values correspond to WebGL enums
48527
+ */ var TextureWrapMode = /*#__PURE__*/ function(TextureWrapMode) {
48528
+ /**
48529
+ * Clamp to Edge
48530
+ */ TextureWrapMode[TextureWrapMode["CLAMP_TO_EDGE"] = 33071] = "CLAMP_TO_EDGE";
48531
+ /**
48532
+ * Mirrored Repeat
48533
+ */ TextureWrapMode[TextureWrapMode["MIRRORED_REPEAT"] = 33648] = "MIRRORED_REPEAT";
48534
+ /**
48535
+ * Repeat
48536
+ */ TextureWrapMode[TextureWrapMode["REPEAT"] = 10497] = "REPEAT";
48537
+ return TextureWrapMode;
48478
48538
  }({});
48479
48539
  /**
48480
48540
  * @internal
48481
- * WorkerPool, T is is post message type, U is return type.
48482
- */ var WorkerPool = /*#__PURE__*/ function() {
48483
- function WorkerPool(limitedCount, _workerCreator) {
48484
- if (limitedCount === void 0) limitedCount = 4;
48485
- this.limitedCount = limitedCount;
48486
- this._workerCreator = _workerCreator;
48487
- this._taskQueue = [];
48488
- this._workerStatus = 0;
48489
- this._workerItems = new Array(limitedCount);
48541
+ */ var GLTFParserContext = /*#__PURE__*/ function() {
48542
+ function GLTFParserContext(glTFResource, resourceManager, params) {
48543
+ var _this = this;
48544
+ this.glTFResource = glTFResource;
48545
+ this.resourceManager = resourceManager;
48546
+ this.params = params;
48547
+ this.accessorBufferCache = {};
48548
+ this.needAnimatorController = false;
48549
+ this./** @internal */ _getPromises = [];
48550
+ this._resourceCache = new Map();
48551
+ this._progress = {
48552
+ taskDetail: {},
48553
+ taskComplete: {
48554
+ loaded: 0,
48555
+ total: 0
48556
+ }
48557
+ };
48558
+ this./**
48559
+ * @internal
48560
+ */ _onTaskDetail = function(url, loaded, total) {
48561
+ var _this__progress_taskDetail, _url;
48562
+ var detail = (_this__progress_taskDetail = _this._progress.taskDetail)[_url = url] || (_this__progress_taskDetail[_url] = {});
48563
+ detail.loaded = loaded;
48564
+ detail.total = total;
48565
+ _this._setTaskDetailProgress(url, loaded, total);
48566
+ };
48567
+ this.contentRestorer = new GLTFContentRestorer(glTFResource);
48490
48568
  }
48491
- var _proto = WorkerPool.prototype;
48492
- _proto.prepareWorker = function prepareWorker() {
48493
- var count = this.limitedCount;
48494
- var promises = new Array(count);
48495
- for(var i = 0; i < count; i++){
48496
- promises.push(this._initWorker(i));
48569
+ var _proto = GLTFParserContext.prototype;
48570
+ _proto.get = function get(type, index) {
48571
+ var _this = this;
48572
+ var parser = GLTFParserContext._parsers[type];
48573
+ if (!parser) {
48574
+ return AssetPromise.resolve(null);
48575
+ }
48576
+ var cache = this._resourceCache;
48577
+ var cacheKey = index === undefined ? "" + type : type + ":" + index;
48578
+ var resource = cache.get(cacheKey);
48579
+ if (resource) {
48580
+ return resource;
48581
+ }
48582
+ var glTFSchemaKey = glTFSchemaMap[type];
48583
+ var isSubAsset = !!glTFResourceMap[type];
48584
+ if (glTFSchemaKey) {
48585
+ var glTFItems = this.glTF[glTFSchemaKey];
48586
+ if (glTFItems && (index === undefined || glTFItems[index])) {
48587
+ if (index === undefined) {
48588
+ resource = type === 8 ? glTFItems.map(function(_, index) {
48589
+ return _this.get(type, index);
48590
+ }) : AssetPromise.all(glTFItems.map(function(_, index) {
48591
+ return _this.get(type, index);
48592
+ }));
48593
+ } else {
48594
+ resource = parser.parse(this, index);
48595
+ isSubAsset && this._handleSubAsset(resource, type, index);
48596
+ }
48597
+ } else {
48598
+ resource = AssetPromise.resolve(null);
48599
+ }
48600
+ } else {
48601
+ resource = parser.parse(this, index);
48602
+ isSubAsset && this._handleSubAsset(resource, type, index);
48497
48603
  }
48498
- return Promise.all(promises);
48604
+ if (_instanceof1(resource, AssetPromise)) {
48605
+ this._getPromises.push(resource);
48606
+ }
48607
+ cache.set(cacheKey, resource);
48608
+ return resource;
48499
48609
  };
48500
- /**
48501
- * Post message to worker.
48502
- * @param message - Message which posted to worker
48503
- * @returns Return a promise of message
48504
- */ _proto.postMessage = function postMessage(message) {
48610
+ _proto.parse = function parse() {
48505
48611
  var _this = this;
48506
- return new Promise(function(resolve, reject) {
48507
- var workerId = _this._getIdleWorkerId();
48508
- if (workerId !== -1) {
48509
- _this._workerStatus |= 1 << workerId;
48510
- var workerItems = _this._workerItems;
48511
- var _workerItems_workerId;
48512
- Promise.resolve((_workerItems_workerId = workerItems[workerId]) != null ? _workerItems_workerId : _this._initWorker(workerId)).then(function() {
48513
- var workerItem = workerItems[workerId];
48514
- workerItem.resolve = resolve;
48515
- workerItem.reject = reject;
48516
- workerItem.worker.postMessage(message);
48517
- }).catch(reject);
48518
- } else {
48519
- _this._taskQueue.push({
48520
- resolve: resolve,
48521
- reject: reject,
48522
- message: message
48523
- });
48524
- }
48612
+ var promise = this.get(0).then(function(json) {
48613
+ _this.glTF = json;
48614
+ _this.needAnimatorController = !!(json.skins || json.animations);
48615
+ return AssetPromise.all([
48616
+ _this.get(1),
48617
+ _this.get(5),
48618
+ _this.get(6),
48619
+ _this.get(7),
48620
+ _this.get(9),
48621
+ _this.get(10),
48622
+ _this.get(11),
48623
+ _this.get(2)
48624
+ ]).then(function() {
48625
+ var glTFResource = _this.glTFResource;
48626
+ var animatorController = glTFResource.animatorController;
48627
+ if (animatorController) {
48628
+ var animator = glTFResource._defaultSceneRoot.addComponent(Animator);
48629
+ animator.animatorController = animatorController;
48630
+ }
48631
+ _this.resourceManager.addContentRestorer(_this.contentRestorer);
48632
+ return glTFResource;
48633
+ });
48525
48634
  });
48635
+ this._addTaskCompletePromise(promise);
48636
+ return promise;
48526
48637
  };
48527
48638
  /**
48528
- * Destroy the worker pool.
48529
- */ _proto.destroy = function destroy() {
48530
- var workerItems = this._workerItems;
48531
- for(var i = 0, n = workerItems.length; i < n; i++){
48532
- var workerItem = workerItems[i];
48533
- workerItem.worker.terminate();
48534
- workerItem.reject = null;
48535
- workerItem.resolve = null;
48536
- }
48537
- workerItems.length = 0;
48538
- this._taskQueue.length = 0;
48539
- this._workerStatus = 0;
48540
- };
48541
- _proto._initWorker = function _initWorker(workerId) {
48639
+ * @internal
48640
+ */ _proto._addTaskCompletePromise = function _addTaskCompletePromise(taskPromise) {
48542
48641
  var _this = this;
48543
- return Promise.resolve(this._workerCreator()).then(function(worker) {
48544
- worker.addEventListener("message", _this._onMessage.bind(_this, workerId));
48545
- _this._workerItems[workerId] = {
48546
- worker: worker,
48547
- resolve: null,
48548
- reject: null
48549
- };
48550
- return worker;
48642
+ var task = this._progress.taskComplete;
48643
+ task.total += 1;
48644
+ taskPromise.finally(function() {
48645
+ _this._setTaskCompleteProgress(++task.loaded, task.total);
48646
+ }).catch(function(e) {
48647
+ // Need catch to avoid unhandled rejection
48551
48648
  });
48552
48649
  };
48553
- _proto._getIdleWorkerId = function _getIdleWorkerId() {
48554
- for(var i = 0, count = this.limitedCount; i < count; i++){
48555
- if (!(this._workerStatus & 1 << i)) return i;
48556
- }
48557
- return -1;
48558
- };
48559
- _proto._onMessage = function _onMessage(workerId, msg) {
48560
- // onerror of web worker can't catch error in promise
48561
- var error = msg.data.error;
48562
- if (error) {
48563
- this._workerItems[workerId].reject(error);
48650
+ _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
48651
+ var _this = this;
48652
+ var glTFResourceKey = glTFResourceMap[type];
48653
+ if (type === 8) {
48654
+ var _this_glTFResource, _glTFResourceKey;
48655
+ ((_this_glTFResource = this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = resource;
48564
48656
  } else {
48565
- this._workerItems[workerId].resolve(msg.data);
48657
+ var url = this.glTFResource.url;
48658
+ resource.then(function(item) {
48659
+ if (index == undefined) {
48660
+ _this.glTFResource[glTFResourceKey] = item;
48661
+ } else {
48662
+ var _this_glTFResource, _glTFResourceKey;
48663
+ ((_this_glTFResource = _this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = item;
48664
+ }
48665
+ if (type === 7) {
48666
+ for(var i = 0, length = item.length; i < length; i++){
48667
+ var mesh = item[i];
48668
+ // @ts-ignore
48669
+ _this.resourceManager._onSubAssetSuccess(url, glTFResourceKey + "[" + index + "][" + i + "]", mesh);
48670
+ }
48671
+ } else {
48672
+ // @ts-ignore
48673
+ _this.resourceManager._onSubAssetSuccess(url, "" + glTFResourceKey + (index === undefined ? "" : "[" + index + "]"), item);
48674
+ var _this_glTF_scene;
48675
+ if (type === 2 && ((_this_glTF_scene = _this.glTF.scene) != null ? _this_glTF_scene : 0) === index) {
48676
+ // @ts-ignore
48677
+ _this.resourceManager._onSubAssetSuccess(url, "defaultSceneRoot", item);
48678
+ }
48679
+ }
48680
+ }).catch(function(e) {
48681
+ Logger.error("GLTFParserContext", "Failed to load " + glTFResourceKey + " " + index + ": " + e);
48682
+ });
48566
48683
  }
48567
- this._nextTask(workerId);
48568
48684
  };
48569
- _proto._nextTask = function _nextTask(workerId) {
48570
- if (this._taskQueue.length) {
48571
- var taskItem = this._taskQueue.shift();
48572
- var workerItem = this._workerItems[workerId];
48573
- workerItem.resolve = taskItem.resolve;
48574
- workerItem.reject = taskItem.reject;
48575
- workerItem.worker.postMessage(taskItem.message);
48576
- } else {
48577
- this._workerStatus ^= 1 << workerId;
48578
- }
48685
+ GLTFParserContext.addParser = function addParser(parserType, parser) {
48686
+ this._parsers[parserType] = parser;
48579
48687
  };
48580
- return WorkerPool;
48688
+ return GLTFParserContext;
48581
48689
  }();
48582
- var AbstractTranscoder = /*#__PURE__*/ function() {
48583
- function AbstractTranscoder(workerLimitCount) {
48584
- this.workerLimitCount = workerLimitCount;
48585
- }
48586
- var _proto = AbstractTranscoder.prototype;
48587
- _proto.init = function init() {
48588
- if (!this._initPromise) {
48589
- this._initPromise = this._initTranscodeWorkerPool();
48590
- }
48591
- return this._initPromise;
48592
- };
48593
- _proto.destroy = function destroy() {
48594
- this._transcodeWorkerPool.destroy();
48690
+ GLTFParserContext._parsers = {};
48691
+ /**
48692
+ * @internal
48693
+ */ var BufferInfo = function BufferInfo(data, interleaved, stride) {
48694
+ this.data = data;
48695
+ this.interleaved = interleaved;
48696
+ this.stride = stride;
48697
+ this.vertexBindingInfos = {};
48698
+ };
48699
+ var GLTFParserType = /*#__PURE__*/ function(GLTFParserType) {
48700
+ GLTFParserType[GLTFParserType["Schema"] = 0] = "Schema";
48701
+ GLTFParserType[GLTFParserType["Validator"] = 1] = "Validator";
48702
+ GLTFParserType[GLTFParserType["Scene"] = 2] = "Scene";
48703
+ GLTFParserType[GLTFParserType["Buffer"] = 3] = "Buffer";
48704
+ GLTFParserType[GLTFParserType["BufferView"] = 4] = "BufferView";
48705
+ GLTFParserType[GLTFParserType["Texture"] = 5] = "Texture";
48706
+ GLTFParserType[GLTFParserType["Material"] = 6] = "Material";
48707
+ GLTFParserType[GLTFParserType["Mesh"] = 7] = "Mesh";
48708
+ GLTFParserType[GLTFParserType["Entity"] = 8] = "Entity";
48709
+ GLTFParserType[GLTFParserType["Skin"] = 9] = "Skin";
48710
+ GLTFParserType[GLTFParserType["Animation"] = 10] = "Animation";
48711
+ GLTFParserType[GLTFParserType["AnimatorController"] = 11] = "AnimatorController";
48712
+ return GLTFParserType;
48713
+ }({});
48714
+ var _obj$1;
48715
+ var glTFSchemaMap = (_obj$1 = {}, _obj$1[2] = "scenes", _obj$1[3] = "buffers", _obj$1[5] = "textures", _obj$1[6] = "materials", _obj$1[7] = "meshes", _obj$1[8] = "nodes", _obj$1[9] = "skins", _obj$1[10] = "animations", _obj$1[4] = "bufferViews", _obj$1);
48716
+ var _obj1;
48717
+ var glTFResourceMap = (_obj1 = {}, _obj1[2] = "_sceneRoots", _obj1[5] = "textures", _obj1[6] = "materials", _obj1[7] = "meshes", _obj1[8] = "entities", _obj1[9] = "skins", _obj1[10] = "animations", _obj1[11] = "animatorController", _obj1);
48718
+ function registerGLTFParser(pipeline) {
48719
+ return function(Parser) {
48720
+ var parser = new Parser();
48721
+ GLTFParserContext.addParser(pipeline, parser);
48595
48722
  };
48596
- _proto._createTranscodePool = function _createTranscodePool(workerURL, wasmBuffer) {
48597
- this._transcodeWorkerPool = new WorkerPool(this.workerLimitCount, function() {
48598
- return new Promise(function(resolve, reject) {
48599
- var onMessage = function onMessage(e) {
48600
- if (e.data.error) {
48601
- reject(e.data.error);
48602
- } else {
48603
- resolve(worker);
48604
- }
48605
- };
48606
- var worker = new Worker(workerURL);
48607
- var msg = {
48608
- type: "init",
48609
- transcoderWasm: wasmBuffer
48610
- };
48611
- worker.addEventListener("message", onMessage);
48612
- worker.postMessage(msg);
48613
- });
48614
- });
48615
- return this._transcodeWorkerPool.prepareWorker();
48723
+ }
48724
+ /**
48725
+ * @internal
48726
+ */ var GLTFUtils = /*#__PURE__*/ function() {
48727
+ function GLTFUtils() {}
48728
+ GLTFUtils.floatBufferToVector2Array = function floatBufferToVector2Array(buffer) {
48729
+ var bufferLen = buffer.length;
48730
+ var array = new Array(bufferLen / 2);
48731
+ for(var i = 0; i < bufferLen; i += 2){
48732
+ array[i / 2] = new Vector2(buffer[i], buffer[i + 1]);
48733
+ }
48734
+ return array;
48616
48735
  };
48617
- return AbstractTranscoder;
48618
- }();
48619
- /** @internal */ function TranscodeWorkerCode() {
48620
- var initPromise;
48621
- var init = function init(wasmBinary) {
48622
- if (!initPromise) {
48623
- initPromise = new Promise(function(resolve, reject) {
48624
- var BasisModule = {
48625
- wasmBinary: wasmBinary,
48626
- onRuntimeInitialized: function onRuntimeInitialized() {
48627
- return resolve(BasisModule);
48628
- },
48629
- onAbort: reject
48630
- };
48631
- self["BASIS"](BasisModule);
48632
- }).then(function(BasisModule) {
48633
- BasisModule.initializeBasis();
48634
- return BasisModule.KTX2File;
48635
- });
48736
+ GLTFUtils.floatBufferToVector3Array = function floatBufferToVector3Array(buffer) {
48737
+ var bufferLen = buffer.length;
48738
+ var array = new Array(bufferLen / 3);
48739
+ for(var i = 0; i < bufferLen; i += 3){
48740
+ array[i / 3] = new Vector3(buffer[i], buffer[i + 1], buffer[i + 2]);
48636
48741
  }
48637
- return initPromise;
48742
+ return array;
48638
48743
  };
48639
- self.onmessage = function onmessage(event) {
48640
- var message = event.data;
48641
- switch(message.type){
48642
- case "init":
48643
- init(message.transcoderWasm).then(function() {
48644
- self.postMessage("init-completed");
48645
- }).catch(function(e) {
48646
- return self.postMessage({
48647
- error: e
48648
- });
48649
- });
48650
- break;
48651
- case "transcode":
48652
- init().then(function(KTX2File) {
48653
- var result = transcode(message.buffer, message.format, KTX2File);
48654
- // @ts-ignore
48655
- result.type = "transcoded";
48656
- self.postMessage(result);
48657
- }).catch(function(e) {
48658
- return self.postMessage({
48659
- error: e
48660
- });
48661
- });
48662
- break;
48744
+ GLTFUtils.floatBufferToVector4Array = function floatBufferToVector4Array(buffer) {
48745
+ var bufferLen = buffer.length;
48746
+ var array = new Array(bufferLen / 4);
48747
+ for(var i = 0; i < bufferLen; i += 4){
48748
+ array[i / 4] = new Vector4(buffer[i], buffer[i + 1], buffer[i + 2], buffer[i + 3]);
48663
48749
  }
48750
+ return array;
48664
48751
  };
48665
- }
48666
- var _init = function init() {
48667
- var initPromise;
48668
- return function init(wasmBinary) {
48669
- if (!initPromise) {
48670
- initPromise = new Promise(function(resolve, reject) {
48671
- var BasisModule = {
48672
- wasmBinary: wasmBinary,
48673
- onRuntimeInitialized: function onRuntimeInitialized() {
48674
- return resolve(BasisModule);
48675
- },
48676
- onAbort: reject
48677
- };
48678
- self["BASIS"](BasisModule);
48679
- }).then(function(BasisModule) {
48680
- BasisModule.initializeBasis();
48681
- return BasisModule.KTX2File;
48682
- });
48752
+ GLTFUtils.floatBufferToColorArray = function floatBufferToColorArray(buffer, isColor3) {
48753
+ var bufferLen = buffer.length;
48754
+ var colors = new Array(bufferLen / (isColor3 ? 3 : 4));
48755
+ if (isColor3) {
48756
+ for(var i = 0; i < bufferLen; i += 3){
48757
+ colors[i / 3] = new Color(buffer[i], buffer[i + 1], buffer[i + 2], 1.0);
48758
+ }
48759
+ } else {
48760
+ for(var i1 = 0; i1 < bufferLen; i1 += 4){
48761
+ colors[i1 / 4] = new Color(buffer[i1], buffer[i1 + 1], buffer[i1 + 2], buffer[i1 + 3]);
48762
+ }
48683
48763
  }
48684
- return initPromise;
48764
+ return colors;
48685
48765
  };
48686
- };
48687
- var init = _init();
48688
- function transcode(buffer, targetFormat, KTX2File) {
48689
- function getTranscodeFormatFromTarget(target, hasAlpha) {
48690
- switch(target){
48691
- case 2:
48692
- return hasAlpha ? 3 : 2;
48693
- case 4:
48694
- return hasAlpha ? 1 : 0;
48695
- case 3:
48696
- return hasAlpha ? 9 : 8;
48697
- case 7:
48698
- return 13;
48699
- case 0:
48700
- return 10;
48701
- case 1:
48702
- return 7;
48703
- case 8:
48704
- return 22;
48705
- case 9:
48706
- return 23;
48707
- case 10:
48708
- return 25;
48766
+ /**
48767
+ * Get the number of bytes occupied by accessor type.
48768
+ */ GLTFUtils.getAccessorTypeSize = function getAccessorTypeSize(accessorType) {
48769
+ switch(accessorType){
48770
+ case AccessorType.SCALAR:
48771
+ return 1;
48772
+ case AccessorType.VEC2:
48773
+ return 2;
48774
+ case AccessorType.VEC3:
48775
+ return 3;
48776
+ case AccessorType.VEC4:
48777
+ return 4;
48778
+ case AccessorType.MAT2:
48779
+ return 4;
48780
+ case AccessorType.MAT3:
48781
+ return 9;
48782
+ case AccessorType.MAT4:
48783
+ return 16;
48709
48784
  }
48710
- }
48711
- function concat(arrays) {
48712
- if (arrays.length === 1) return arrays[0];
48713
- var totalByteLength = 0;
48714
- for(var i = 0; i < arrays.length; i++){
48715
- totalByteLength += arrays[i].byteLength;
48785
+ };
48786
+ /**
48787
+ * Get the TypedArray corresponding to the component type.
48788
+ */ GLTFUtils.getComponentType = function getComponentType(componentType) {
48789
+ switch(componentType){
48790
+ case AccessorComponentType.BYTE:
48791
+ return Int8Array;
48792
+ case AccessorComponentType.UNSIGNED_BYTE:
48793
+ return Uint8Array;
48794
+ case AccessorComponentType.SHORT:
48795
+ return Int16Array;
48796
+ case AccessorComponentType.UNSIGNED_SHORT:
48797
+ return Uint16Array;
48798
+ case AccessorComponentType.UNSIGNED_INT:
48799
+ return Uint32Array;
48800
+ case AccessorComponentType.FLOAT:
48801
+ return Float32Array;
48716
48802
  }
48717
- var result = new Uint8Array(totalByteLength);
48718
- var byteOffset = 0;
48719
- for(var i1 = 0; i1 < arrays.length; i1++){
48720
- result.set(arrays[i1], byteOffset);
48721
- byteOffset += arrays[i1].byteLength;
48803
+ };
48804
+ GLTFUtils.getNormalizedComponentScale = function getNormalizedComponentScale(componentType) {
48805
+ // Reference: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
48806
+ switch(componentType){
48807
+ case AccessorComponentType.BYTE:
48808
+ return 1 / 127;
48809
+ case AccessorComponentType.UNSIGNED_BYTE:
48810
+ return 1 / 255;
48811
+ case AccessorComponentType.SHORT:
48812
+ return 1 / 32767;
48813
+ case AccessorComponentType.UNSIGNED_SHORT:
48814
+ return 1 / 65535;
48815
+ default:
48816
+ throw new Error("Galacean.GLTFLoader: Unsupported normalized accessor component type.");
48722
48817
  }
48723
- return result;
48724
- }
48725
- var ktx2File = new KTX2File(new Uint8Array(buffer));
48726
- function cleanup() {
48727
- ktx2File.close();
48728
- ktx2File.delete();
48729
- }
48730
- if (!ktx2File.isValid()) {
48731
- cleanup();
48732
- throw new Error("Invalid or unsupported .ktx2 file");
48733
- }
48734
- if (!ktx2File.startTranscoding()) {
48735
- cleanup();
48736
- throw new Error("KTX2 startTranscoding failed");
48737
- }
48738
- var width = ktx2File.getWidth();
48739
- var height = ktx2File.getHeight();
48740
- var layerCount = ktx2File.getLayers() || 1;
48741
- var levelCount = ktx2File.getLevels();
48742
- var hasAlpha = ktx2File.getHasAlpha();
48743
- var faceCount = ktx2File.getFaces();
48744
- var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
48745
- var faces = new Array(faceCount);
48746
- var isBC = format === 2 || format === 3 || format === 7;
48747
- for(var face = 0; face < faceCount; face++){
48748
- var mipmaps = new Array(levelCount);
48749
- for(var mip = 0; mip < levelCount; mip++){
48750
- var layerMips = new Array(layerCount);
48751
- var mipWidth = void 0, mipHeight = void 0;
48752
- for(var layer = 0; layer < layerCount; layer++){
48753
- var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
48754
- // see: https://github.com/KhronosGroup/KTX-Software/issues/254
48755
- if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
48756
- width = mipWidth = levelInfo.width;
48757
- height = mipHeight = levelInfo.height;
48758
- console.warn("KTX2 transcode to BC will resize to width: " + width + ", height: " + height + ". You'd better use an image whose size if multiple of 4.");
48818
+ };
48819
+ GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
48820
+ var componentType = accessor.componentType;
48821
+ var TypedArray = GLTFUtils.getComponentType(componentType);
48822
+ var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
48823
+ var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
48824
+ var elementStride = dataElementSize * dataElementBytes;
48825
+ var accessorCount = accessor.count;
48826
+ var promise;
48827
+ if (accessor.bufferView !== undefined) {
48828
+ var bufferViewIndex = accessor.bufferView;
48829
+ var bufferView = bufferViews[bufferViewIndex];
48830
+ promise = context.get(GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
48831
+ var bufferIndex = bufferView.buffer;
48832
+ var _bufferViewData_byteOffset;
48833
+ var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
48834
+ var _accessor_byteOffset;
48835
+ var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
48836
+ var bufferStride = bufferView.byteStride;
48837
+ var bufferInfo;
48838
+ // According to the glTF official documentation only byteStride not undefined is allowed
48839
+ if (bufferStride !== undefined && bufferStride !== elementStride) {
48840
+ var bufferSlice = Math.floor(byteOffset / bufferStride);
48841
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
48842
+ var accessorBufferCache = context.accessorBufferCache;
48843
+ bufferInfo = accessorBufferCache[bufferCacheKey];
48844
+ if (!bufferInfo) {
48845
+ var offset = bufferByteOffset + bufferSlice * bufferStride;
48846
+ var count = accessorCount * (bufferStride / dataElementBytes);
48847
+ var data = new TypedArray(bufferViewData.buffer, offset, count);
48848
+ accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
48849
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
48850
+ }
48759
48851
  } else {
48760
- mipWidth = levelInfo.origWidth;
48761
- mipHeight = levelInfo.origHeight;
48762
- }
48763
- var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
48764
- var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
48765
- if (targetFormat === 10) {
48766
- dst = new Uint16Array(dst.buffer, dst.byteOffset, dst.byteLength / Uint16Array.BYTES_PER_ELEMENT);
48767
- }
48768
- if (!status) {
48769
- cleanup();
48770
- throw new Error("transcodeImage failed.");
48852
+ var offset1 = bufferByteOffset + byteOffset;
48853
+ var count1 = accessorCount * dataElementSize;
48854
+ var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
48855
+ bufferInfo = new BufferInfo(data1, false, elementStride);
48856
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
48771
48857
  }
48772
- layerMips[layer] = dst;
48773
- }
48774
- mipmaps[mip] = {
48775
- data: concat(layerMips),
48776
- width: mipWidth,
48777
- height: mipHeight
48778
- };
48858
+ return bufferInfo;
48859
+ }).catch(function(e) {
48860
+ Logger.error("GLTFUtil getAccessorBuffer error", e);
48861
+ });
48862
+ } else {
48863
+ var count = accessorCount * dataElementSize;
48864
+ var data = new TypedArray(count);
48865
+ var bufferInfo = new BufferInfo(data, false, elementStride);
48866
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(undefined, TypedArray, undefined, count));
48867
+ promise = AssetPromise.resolve(bufferInfo);
48868
+ }
48869
+ return accessor.sparse ? promise.then(function(bufferInfo) {
48870
+ return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
48871
+ return bufferInfo;
48872
+ });
48873
+ }) : promise;
48874
+ };
48875
+ GLTFUtils.bufferToVector3Array = function bufferToVector3Array(buffer, byteOffset, count, normalized, componentType) {
48876
+ var baseOffset = byteOffset / buffer.BYTES_PER_ELEMENT;
48877
+ var stride = buffer.length / count;
48878
+ var vertices = new Array(count);
48879
+ var factor = normalized ? GLTFUtils.getNormalizedComponentScale(componentType) : 1;
48880
+ for(var i = 0; i < count; i++){
48881
+ var index = baseOffset + i * stride;
48882
+ vertices[i] = new Vector3(buffer[index] * factor, buffer[index + 1] * factor, buffer[index + 2] * factor);
48779
48883
  }
48780
- faces[face] = mipmaps;
48781
- }
48782
- cleanup();
48783
- return {
48784
- faces: faces,
48785
- width: width,
48786
- height: height,
48787
- hasAlpha: hasAlpha,
48788
- faceCount: faceCount,
48789
- format: format
48884
+ return vertices;
48790
48885
  };
48791
- }
48792
- /** @internal */ var BinomialLLCTranscoder = /*#__PURE__*/ function(AbstractTranscoder) {
48793
- _inherits(BinomialLLCTranscoder, AbstractTranscoder);
48794
- function BinomialLLCTranscoder(workerLimitCount) {
48795
- return AbstractTranscoder.call(this, workerLimitCount) || this;
48796
- }
48797
- var _proto = BinomialLLCTranscoder.prototype;
48798
- _proto._initTranscodeWorkerPool = function _initTranscodeWorkerPool() {
48799
- var _this = this;
48800
- return Promise.all([
48801
- fetch("https://mdn.alipayobjects.com/rms/afts/file/A*J8IrSL8WE8EAAAAAQ6AAAAgAehQnAQ/basis_transcoder.js").then(function(res) {
48802
- return res.text();
48803
- }),
48804
- fetch("https://mdn.alipayobjects.com/rms/afts/file/A*F3duSLqOP2sAAAAAXjAAAAgAehQnAQ/basis_transcoder.wasm").then(function(res) {
48805
- return res.arrayBuffer();
48806
- })
48886
+ GLTFUtils.getBufferViewData = function getBufferViewData(bufferView, buffers) {
48887
+ var _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset;
48888
+ var arrayBuffer = buffers[bufferView.buffer];
48889
+ return arrayBuffer.slice(byteOffset, byteOffset + bufferView.byteLength);
48890
+ };
48891
+ /**
48892
+ * Get accessor data.
48893
+ */ GLTFUtils.processingSparseData = function processingSparseData(context, accessor, bufferInfo) {
48894
+ var restoreInfo = bufferInfo.restoreInfo;
48895
+ var bufferViews = context.glTF.bufferViews;
48896
+ var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
48897
+ var TypedArray = GLTFUtils.getComponentType(accessor.componentType);
48898
+ var data = bufferInfo.data.slice();
48899
+ var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
48900
+ var indicesBufferView = bufferViews[indices.bufferView];
48901
+ var valuesBufferView = bufferViews[values.bufferView];
48902
+ return AssetPromise.all([
48903
+ context.get(GLTFParserType.BufferView, indices.bufferView),
48904
+ context.get(GLTFParserType.BufferView, values.bufferView)
48807
48905
  ]).then(function(param) {
48808
- var jsCode = param[0], wasmBuffer = param[1];
48809
- if (_this.workerLimitCount === 0) {
48810
- return new Promise(function(resolve, reject) {
48811
- var scriptDom = document.createElement("script");
48812
- scriptDom.src = URL.createObjectURL(new Blob([
48813
- jsCode
48814
- ], {
48815
- type: "application/javascript"
48816
- }));
48817
- document.body.appendChild(scriptDom);
48818
- scriptDom.onload = function() {
48819
- init(wasmBuffer).then(function() {
48820
- resolve(null);
48821
- });
48822
- };
48823
- scriptDom.onerror = function() {
48824
- reject();
48825
- };
48826
- });
48827
- } else {
48828
- var funcCode = TranscodeWorkerCode.toString();
48829
- var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
48830
- var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
48831
- var workerURL = URL.createObjectURL(new Blob([
48832
- workerCode
48833
- ], {
48834
- type: "application/javascript"
48835
- }));
48836
- return _this._createTranscodePool(workerURL, wasmBuffer);
48906
+ var indicesUint8Array = param[0], valuesUin8Array = param[1];
48907
+ var _indices_byteOffset, _indicesUint8Array_byteOffset;
48908
+ var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesUint8Array_byteOffset = indicesUint8Array.byteOffset) != null ? _indicesUint8Array_byteOffset : 0);
48909
+ var indicesByteLength = indicesUint8Array.byteLength;
48910
+ var _values_byteOffset, _valuesUin8Array_byteOffset;
48911
+ var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesUin8Array_byteOffset = valuesUin8Array.byteOffset) != null ? _valuesUin8Array_byteOffset : 0);
48912
+ var valuesByteLength = valuesUin8Array.byteLength;
48913
+ restoreInfo.typeSize = accessorTypeSize;
48914
+ restoreInfo.sparseCount = count;
48915
+ var IndexTypeArray = GLTFUtils.getComponentType(indices.componentType);
48916
+ var indexLength = indicesByteLength / IndexTypeArray.BYTES_PER_ELEMENT;
48917
+ var indicesArray = new IndexTypeArray(indicesUint8Array.buffer, indicesByteOffset, indexLength);
48918
+ restoreInfo.sparseIndices = new RestoreDataAccessor(indicesBufferView.buffer, IndexTypeArray, indicesByteOffset, indexLength);
48919
+ var valueLength = valuesByteLength / TypedArray.BYTES_PER_ELEMENT;
48920
+ var valuesArray = new TypedArray(valuesUin8Array.buffer, valuesByteOffset, valueLength);
48921
+ restoreInfo.sparseValues = new RestoreDataAccessor(valuesBufferView.buffer, TypedArray, valuesByteOffset, valueLength);
48922
+ for(var i = 0; i < count; i++){
48923
+ var replaceIndex = indicesArray[i];
48924
+ for(var j = 0; j < accessorTypeSize; j++){
48925
+ data[replaceIndex * accessorTypeSize + j] = valuesArray[i * accessorTypeSize + j];
48926
+ }
48837
48927
  }
48928
+ bufferInfo.data = data;
48929
+ }).catch(function(e) {
48930
+ Logger.error("GLTFUtil processingSparseData error", e);
48838
48931
  });
48839
48932
  };
48840
- _proto.transcode = function transcode1(buffer, format) {
48841
- if (this.workerLimitCount === 0) {
48842
- return init().then(function(KTX2File) {
48843
- return transcode(buffer, format, KTX2File);
48844
- });
48845
- } else {
48846
- return this._transcodeWorkerPool.postMessage({
48847
- buffer: buffer,
48848
- format: format,
48849
- type: "transcode"
48850
- });
48933
+ GLTFUtils.getIndexFormat = function getIndexFormat(type) {
48934
+ switch(type){
48935
+ case AccessorComponentType.UNSIGNED_BYTE:
48936
+ return IndexFormat.UInt8;
48937
+ case AccessorComponentType.UNSIGNED_SHORT:
48938
+ return IndexFormat.UInt16;
48939
+ case AccessorComponentType.UNSIGNED_INT:
48940
+ return IndexFormat.UInt32;
48851
48941
  }
48852
48942
  };
48853
- return BinomialLLCTranscoder;
48854
- }(AbstractTranscoder);
48855
- var KTX2Loader = /*#__PURE__*/ function(Loader) {
48856
- _inherits(KTX2Loader, Loader);
48857
- function KTX2Loader() {
48858
- return Loader.apply(this, arguments) || this;
48859
- }
48860
- var _proto = KTX2Loader.prototype;
48861
- _proto.initialize = function initialize(_, configuration) {
48862
- if (configuration.ktx2Loader) {
48863
- var options = configuration.ktx2Loader;
48864
- if (options.priorityFormats) {
48865
- KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
48866
- KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
48943
+ GLTFUtils.getElementFormat = function getElementFormat(type, size, normalized) {
48944
+ if (normalized === void 0) normalized = false;
48945
+ if (type == AccessorComponentType.FLOAT) {
48946
+ switch(size){
48947
+ case 1:
48948
+ return VertexElementFormat.Float;
48949
+ case 2:
48950
+ return VertexElementFormat.Vector2;
48951
+ case 3:
48952
+ return VertexElementFormat.Vector3;
48953
+ case 4:
48954
+ return VertexElementFormat.Vector4;
48955
+ }
48956
+ }
48957
+ if (type == AccessorComponentType.SHORT) {
48958
+ switch(size){
48959
+ case 2:
48960
+ return normalized ? VertexElementFormat.NormalizedShort2 : VertexElementFormat.Short2;
48961
+ case 3:
48962
+ case 4:
48963
+ return normalized ? VertexElementFormat.NormalizedShort4 : VertexElementFormat.Short4;
48964
+ }
48965
+ }
48966
+ if (type == AccessorComponentType.UNSIGNED_SHORT) {
48967
+ switch(size){
48968
+ case 2:
48969
+ return normalized ? VertexElementFormat.NormalizedUShort2 : VertexElementFormat.UShort2;
48970
+ case 3:
48971
+ case 4:
48972
+ return normalized ? VertexElementFormat.NormalizedUShort4 : VertexElementFormat.UShort4;
48973
+ }
48974
+ }
48975
+ if (type == AccessorComponentType.BYTE) {
48976
+ switch(size){
48977
+ case 2:
48978
+ case 3:
48979
+ case 4:
48980
+ return normalized ? VertexElementFormat.NormalizedByte4 : VertexElementFormat.Byte4;
48981
+ }
48982
+ }
48983
+ if (type == AccessorComponentType.UNSIGNED_BYTE) {
48984
+ switch(size){
48985
+ case 2:
48986
+ case 3:
48987
+ case 4:
48988
+ return normalized ? VertexElementFormat.NormalizedUByte4 : VertexElementFormat.UByte4;
48867
48989
  }
48868
- return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
48869
48990
  }
48870
48991
  };
48871
48992
  /**
48872
- * @internal
48873
- */ _proto.load = function load(item, resourceManager) {
48874
- return new AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
48875
- var requestConfig = _extends({}, item, {
48876
- type: "arraybuffer"
48993
+ * Load image buffer
48994
+ */ GLTFUtils.loadImageBuffer = function loadImageBuffer(imageBuffer, type) {
48995
+ return new Promise(function(resolve, reject) {
48996
+ var blob = new window.Blob([
48997
+ imageBuffer
48998
+ ], {
48999
+ type: type
48877
49000
  });
48878
- var url = item.url;
48879
- resourceManager // @ts-ignore
48880
- ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
48881
- return KTX2Loader._parseBuffer(new Uint8Array(buffer), resourceManager.engine, item.params).then(function(param) {
48882
- var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
48883
- return KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params);
48884
- }).then(function(texture) {
48885
- resourceManager.addContentRestorer(new KTX2ContentRestorer(texture, url, requestConfig));
48886
- resolve(texture);
49001
+ var img = new Image();
49002
+ img.onerror = function() {
49003
+ reject(new Error("Failed to load image buffer"));
49004
+ };
49005
+ img.onload = function() {
49006
+ // Call requestAnimationFrame to avoid iOS's bug.
49007
+ requestAnimationFrame(function() {
49008
+ resolve(img);
49009
+ img.onload = null;
49010
+ img.onerror = null;
49011
+ img.onabort = null;
48887
49012
  });
48888
- }).catch(reject);
49013
+ };
49014
+ img.crossOrigin = "anonymous";
49015
+ img.src = URL.createObjectURL(blob);
48889
49016
  });
48890
49017
  };
48891
49018
  /**
48892
- * Release ktx2 transcoder worker.
48893
- * @remarks If use loader after releasing, we should release again.
48894
- */ KTX2Loader.release = function release() {
48895
- if (this._binomialLLCTranscoder) this._binomialLLCTranscoder.destroy();
48896
- this._binomialLLCTranscoder = null;
48897
- };
48898
- /** @internal */ KTX2Loader._parseBuffer = function _parseBuffer(buffer, engine, params) {
48899
- var ktx2Container = new KTX2Container(buffer);
48900
- var _params_priorityFormats;
48901
- var formatPriorities = (_params_priorityFormats = params == null ? void 0 : params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.colorModel];
48902
- var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
48903
- var binomialLLCWorker = KTX2Loader._getBinomialLLCTranscoder();
48904
- return binomialLLCWorker.init().then(function() {
48905
- return binomialLLCWorker.transcode(buffer, targetFormat);
48906
- }).then(function(result) {
49019
+ * Parse the glb format.
49020
+ */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
49021
+ var UINT32_LENGTH = 4;
49022
+ var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
49023
+ var GLB_HEADER_LENGTH = 12;
49024
+ var GLB_CHUNK_TYPES = {
49025
+ JSON: 0x4e4f534a,
49026
+ BIN: 0x004e4942
49027
+ };
49028
+ var dataView = new DataView(originBuffer);
49029
+ // Read header
49030
+ var header = {
49031
+ magic: dataView.getUint32(0, true),
49032
+ version: dataView.getUint32(UINT32_LENGTH, true),
49033
+ length: dataView.getUint32(2 * UINT32_LENGTH, true)
49034
+ };
49035
+ // Return the original buffer if it is not a glb
49036
+ if (header.magic !== GLB_HEADER_MAGIC) {
48907
49037
  return {
48908
- ktx2Container: ktx2Container,
48909
- engine: engine,
48910
- result: result,
48911
- targetFormat: targetFormat,
48912
- params: ktx2Container.keyValue["GalaceanTextureParams"]
49038
+ originBuffer: originBuffer
48913
49039
  };
48914
- });
48915
- };
48916
- /** @internal */ KTX2Loader._createTextureByBuffer = function _createTextureByBuffer(engine, isSRGB, transcodeResult, targetFormat, params, restoredTexture) {
48917
- var width = transcodeResult.width, height = transcodeResult.height, faces = transcodeResult.faces;
48918
- var faceCount = faces.length;
48919
- var mipmaps = faces[0];
48920
- var mipmap = mipmaps.length > 1;
48921
- var engineFormat = this._getEngineTextureFormat(targetFormat, transcodeResult);
48922
- var texture;
48923
- if (faceCount !== 6) {
48924
- texture = restoredTexture || new Texture2D(engine, width, height, engineFormat, mipmap, isSRGB);
48925
- for(var mipLevel = 0; mipLevel < mipmaps.length; mipLevel++){
48926
- var data = mipmaps[mipLevel].data;
48927
- texture.setPixelBuffer(data, mipLevel);
48928
- }
48929
- } else {
48930
- texture = restoredTexture || new TextureCube(engine, height, engineFormat, mipmap, isSRGB);
48931
- for(var i = 0; i < faces.length; i++){
48932
- var faceData = faces[i];
48933
- for(var mipLevel1 = 0; mipLevel1 < mipmaps.length; mipLevel1++){
48934
- texture.setPixelBuffer(TextureCubeFace.PositiveX + i, faceData[mipLevel1].data, mipLevel1);
48935
- }
48936
- }
48937
49040
  }
48938
- if (params) {
48939
- texture.wrapModeU = params[0];
48940
- texture.wrapModeV = params[1];
48941
- texture.filterMode = params[2];
48942
- texture.anisoLevel = params[3];
49041
+ // Read main data
49042
+ var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
49043
+ var chunkType = dataView.getUint32(GLB_HEADER_LENGTH + UINT32_LENGTH, true);
49044
+ // Read glTF json
49045
+ if (chunkType !== GLB_CHUNK_TYPES.JSON) {
49046
+ console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
49047
+ return null;
48943
49048
  }
48944
- return texture;
49049
+ var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
49050
+ var glTF = JSON.parse(Utils.decodeText(glTFData));
49051
+ // Read all buffers
49052
+ var buffers = [];
49053
+ var byteOffset = GLB_HEADER_LENGTH + 2 * UINT32_LENGTH + chunkLength;
49054
+ var restoreGLBBufferSlice = context.contentRestorer.glbBufferSlices;
49055
+ while(byteOffset < header.length){
49056
+ chunkLength = dataView.getUint32(byteOffset, true);
49057
+ chunkType = dataView.getUint32(byteOffset + UINT32_LENGTH, true);
49058
+ if (chunkType !== GLB_CHUNK_TYPES.BIN) {
49059
+ console.error("Invalid glb chunk type. Expected 0x004E4942, found 0x" + chunkType.toString(16));
49060
+ return null;
49061
+ }
49062
+ var currentOffset = byteOffset + 2 * UINT32_LENGTH;
49063
+ var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
49064
+ buffers.push(buffer);
49065
+ restoreGLBBufferSlice.push(new Vector2(currentOffset, chunkLength));
49066
+ byteOffset += chunkLength + 2 * UINT32_LENGTH;
49067
+ }
49068
+ return {
49069
+ glTF: glTF,
49070
+ buffers: buffers
49071
+ };
48945
49072
  };
48946
- KTX2Loader._decideTargetFormat = function _decideTargetFormat(engine, ktx2Container, priorityFormats) {
48947
- var renderer = engine._hardwareRenderer;
48948
- var isSRGB = ktx2Container.isSRGB, pixelWidth = ktx2Container.pixelWidth, pixelHeight = ktx2Container.pixelHeight;
48949
- var targetFormat = this._detectSupportedFormat(renderer, priorityFormats, isSRGB);
48950
- if (targetFormat === KTX2TargetFormat.PVRTC && (!MathUtil.isPowerOf2(pixelWidth) || !MathUtil.isPowerOf2(pixelHeight) || pixelWidth !== pixelHeight)) {
48951
- Logger.warn("PVRTC image need power of 2 and width===height, downgrade to RGBA8");
48952
- return KTX2TargetFormat.R8G8B8A8;
49073
+ GLTFUtils.parseSampler = function parseSampler(texture, samplerInfo) {
49074
+ var filterMode = samplerInfo.filterMode, wrapModeU = samplerInfo.wrapModeU, wrapModeV = samplerInfo.wrapModeV;
49075
+ if (filterMode !== undefined) {
49076
+ texture.filterMode = filterMode;
48953
49077
  }
48954
- if (targetFormat === null) {
48955
- Logger.warn("Can't support any compressed texture, downgrade to RGBA8");
48956
- return KTX2TargetFormat.R8G8B8A8;
49078
+ if (wrapModeU !== undefined) {
49079
+ texture.wrapModeU = wrapModeU;
49080
+ }
49081
+ if (wrapModeV !== undefined) {
49082
+ texture.wrapModeV = wrapModeV;
48957
49083
  }
48958
- return targetFormat;
48959
49084
  };
48960
- KTX2Loader._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats, isSRGB) {
48961
- for(var i = 0; i < priorityFormats.length; i++){
48962
- var _this__capabilityMap_format;
48963
- var format = priorityFormats[i];
48964
- var capabilities = (_this__capabilityMap_format = this._capabilityMap[format]) == null ? void 0 : _this__capabilityMap_format[isSRGB ? DFDTransferFunction.sRGB : DFDTransferFunction.linear];
48965
- if (capabilities) {
48966
- for(var j = 0; j < capabilities.length; j++){
48967
- if (renderer.canIUse(capabilities[j])) {
48968
- return format;
48969
- }
48970
- }
49085
+ GLTFUtils.getSamplerInfo = function getSamplerInfo(sampler) {
49086
+ var minFilter = sampler.minFilter, magFilter = sampler.magFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
49087
+ var info = {};
49088
+ if (minFilter || magFilter) {
49089
+ info.mipmap = minFilter >= TextureMinFilter.NEAREST_MIPMAP_NEAREST;
49090
+ if (magFilter === TextureMagFilter.NEAREST) {
49091
+ info.filterMode = TextureFilterMode.Point;
48971
49092
  } else {
48972
- switch(priorityFormats[i]){
48973
- case KTX2TargetFormat.R8G8B8A8:
48974
- return format;
48975
- case KTX2TargetFormat.R8:
48976
- case KTX2TargetFormat.R8G8:
48977
- if (renderer.isWebGL2) return format;
49093
+ if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
49094
+ info.filterMode = TextureFilterMode.Bilinear;
49095
+ } else {
49096
+ info.filterMode = TextureFilterMode.Trilinear;
48978
49097
  }
48979
49098
  }
48980
49099
  }
48981
- return null;
48982
- };
48983
- KTX2Loader._getBinomialLLCTranscoder = function _getBinomialLLCTranscoder(workerCount) {
48984
- if (workerCount === void 0) workerCount = 4;
48985
- var _this__binomialLLCTranscoder;
48986
- return (_this__binomialLLCTranscoder = this._binomialLLCTranscoder) != null ? _this__binomialLLCTranscoder : this._binomialLLCTranscoder = new BinomialLLCTranscoder(workerCount);
48987
- };
48988
- KTX2Loader._getEngineTextureFormat = function _getEngineTextureFormat(basisFormat, transcodeResult) {
48989
- var hasAlpha = transcodeResult.hasAlpha;
48990
- switch(basisFormat){
48991
- case KTX2TargetFormat.ASTC:
48992
- return TextureFormat.ASTC_4x4;
48993
- case KTX2TargetFormat.ETC:
48994
- return hasAlpha ? TextureFormat.ETC2_RGBA8 : TextureFormat.ETC2_RGB;
48995
- case KTX2TargetFormat.BC7:
48996
- return TextureFormat.BC7;
48997
- case KTX2TargetFormat.BC1_BC3:
48998
- return hasAlpha ? TextureFormat.BC3 : TextureFormat.BC1;
48999
- case KTX2TargetFormat.PVRTC:
49000
- return hasAlpha ? TextureFormat.PVRTC_RGBA4 : TextureFormat.PVRTC_RGB4;
49001
- case KTX2TargetFormat.R8G8B8A8:
49002
- return TextureFormat.R8G8B8A8;
49003
- case KTX2TargetFormat.BC6H:
49004
- return TextureFormat.BC6H;
49005
- case KTX2TargetFormat.ASTC_HDR_4x4:
49006
- return TextureFormat.ASTC_4x4;
49007
- case KTX2TargetFormat.R16G16B16A16:
49008
- return TextureFormat.R16G16B16A16;
49100
+ if (wrapS) {
49101
+ info.wrapModeU = GLTFTextureParser._wrapMap[wrapS];
49009
49102
  }
49103
+ if (wrapT) {
49104
+ info.wrapModeV = GLTFTextureParser._wrapMap[wrapT];
49105
+ }
49106
+ return info;
49010
49107
  };
49011
- return KTX2Loader;
49012
- }(Loader);
49013
- var _obj$1;
49014
- KTX2Loader._priorityFormats = (_obj$1 = {}, _obj$1[ColorModel.ETC1S] = [
49015
- KTX2TargetFormat.ETC,
49016
- KTX2TargetFormat.BC7,
49017
- KTX2TargetFormat.ASTC,
49018
- KTX2TargetFormat.BC1_BC3,
49019
- KTX2TargetFormat.PVRTC
49020
- ], _obj$1[ColorModel.UASTC_LDR_4X4] = [
49021
- KTX2TargetFormat.ASTC,
49022
- KTX2TargetFormat.BC7,
49023
- KTX2TargetFormat.ETC,
49024
- KTX2TargetFormat.BC1_BC3,
49025
- KTX2TargetFormat.PVRTC
49026
- ], _obj$1[ColorModel.UASTC_HDR_4X4] = [
49027
- KTX2TargetFormat.ASTC_HDR_4x4,
49028
- KTX2TargetFormat.BC6H,
49029
- KTX2TargetFormat.R16G16B16A16
49030
- ], _obj$1);
49031
- var _obj1, _obj2, _obj3, _obj4, _obj5, _obj6, _obj7, _obj8, _obj9;
49032
- KTX2Loader._capabilityMap = (_obj9 = {}, _obj9[KTX2TargetFormat.ASTC] = (_obj1 = {}, _obj1[DFDTransferFunction.linear] = [
49033
- GLCapabilityType.astc,
49034
- GLCapabilityType.astc_webkit
49035
- ], _obj1[DFDTransferFunction.sRGB] = [
49036
- GLCapabilityType.astc,
49037
- GLCapabilityType.astc_webkit
49038
- ], _obj1), _obj9[KTX2TargetFormat.ETC] = (_obj2 = {}, _obj2[DFDTransferFunction.linear] = [
49039
- GLCapabilityType.etc,
49040
- GLCapabilityType.etc_webkit
49041
- ], _obj2[DFDTransferFunction.sRGB] = [
49042
- GLCapabilityType.etc,
49043
- GLCapabilityType.etc_webkit
49044
- ], _obj2), _obj9[KTX2TargetFormat.BC7] = (_obj3 = {}, _obj3[DFDTransferFunction.linear] = [
49045
- GLCapabilityType.bptc
49046
- ], _obj3[DFDTransferFunction.sRGB] = [
49047
- GLCapabilityType.bptc
49048
- ], _obj3), _obj9[KTX2TargetFormat.BC1_BC3] = (_obj4 = {}, _obj4[DFDTransferFunction.linear] = [
49049
- GLCapabilityType.s3tc
49050
- ], _obj4[DFDTransferFunction.sRGB] = [
49051
- GLCapabilityType.s3tc_srgb
49052
- ], _obj4), _obj9[KTX2TargetFormat.BC6H] = (_obj5 = {}, _obj5[DFDTransferFunction.linear] = [
49053
- GLCapabilityType.bptc
49054
- ], _obj5), _obj9[KTX2TargetFormat.ASTC_HDR_4x4] = (_obj6 = {}, _obj6[DFDTransferFunction.linear] = [
49055
- GLCapabilityType.astc_hdr
49056
- ], _obj6), _obj9[KTX2TargetFormat.R16G16B16A16] = (_obj7 = {}, _obj7[DFDTransferFunction.linear] = [
49057
- GLCapabilityType.textureHalfFloat
49058
- ], _obj7), _obj9[KTX2TargetFormat.PVRTC] = (_obj8 = {}, _obj8[DFDTransferFunction.linear] = [
49059
- GLCapabilityType.pvrtc,
49060
- GLCapabilityType.pvrtc_webkit
49061
- ], _obj8), _obj9);
49062
- KTX2Loader = __decorate([
49063
- resourceLoader(AssetType.KTX2, [
49064
- "ktx2"
49065
- ])
49066
- ], KTX2Loader);
49067
- var KTX2ContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
49068
- _inherits(KTX2ContentRestorer, ContentRestorer);
49069
- function KTX2ContentRestorer(resource, url, requestConfig) {
49070
- var _this;
49071
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
49072
- return _this;
49073
- }
49074
- var _proto = KTX2ContentRestorer.prototype;
49075
- _proto.restoreContent = function restoreContent() {
49076
- var _this = this;
49077
- var _this1 = this, resource = _this1.resource, requestConfig = _this1.requestConfig;
49078
- var engine = resource.engine;
49079
- return new AssetPromise(function(resolve, reject) {
49080
- engine.resourceManager // @ts-ignore
49081
- ._request(_this.url, requestConfig).then(function(buffer) {
49082
- return KTX2Loader._parseBuffer(new Uint8Array(buffer), engine, requestConfig.params).then(function(param) {
49083
- var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
49084
- return KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params, resource);
49085
- });
49086
- }).then(resolve).catch(reject);
49087
- });
49088
- };
49089
- return KTX2ContentRestorer;
49090
- }(ContentRestorer);
49108
+ return GLTFUtils;
49109
+ }();
49091
49110
  /**
49092
49111
  * @internal
49093
49112
  */ var GLTFContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
@@ -51783,13 +51802,6 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
51783
51802
  }
51784
51803
  var _proto = TextureCubeLoader.prototype;
51785
51804
  _proto.load = function load(item, resourceManager) {
51786
- if (item.urls) {
51787
- return this._loadCubeFaces(item, resourceManager);
51788
- } else {
51789
- return this._loadHDR(item, resourceManager);
51790
- }
51791
- };
51792
- _proto._loadHDR = function _loadHDR(item, resourceManager) {
51793
51805
  return new AssetPromise(function(resolve, reject) {
51794
51806
  var engine = resourceManager.engine;
51795
51807
  var url = item.url;
@@ -51820,39 +51832,6 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
51820
51832
  }).catch(reject);
51821
51833
  });
51822
51834
  };
51823
- _proto._loadCubeFaces = function _loadCubeFaces(item, resourceManager) {
51824
- return new AssetPromise(function(resolve, reject) {
51825
- var urls = item.urls;
51826
- var requestConfig = _extends({}, item, {
51827
- type: "image"
51828
- });
51829
- // @ts-ignore
51830
- Promise.all(urls.map(function(url) {
51831
- return resourceManager._request(url, requestConfig);
51832
- })).then(function(images) {
51833
- var _item_params;
51834
- var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_format = _ref.format, format = _ref_format === void 0 ? TextureFormat.R8G8B8A8 : _ref_format, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode, _ref_isSRGBColorSpace = _ref.isSRGBColorSpace, isSRGBColorSpace = _ref_isSRGBColorSpace === void 0 ? true : _ref_isSRGBColorSpace, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap;
51835
- var _images_ = images[0], width = _images_.width, height = _images_.height;
51836
- if (width !== height) {
51837
- reject(new Error("The cube texture must have the same width and height"));
51838
- return;
51839
- }
51840
- var engine = resourceManager.engine;
51841
- var generateMipmap = TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
51842
- var texture = new TextureCube(engine, width, format, generateMipmap, isSRGBColorSpace);
51843
- texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
51844
- texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
51845
- texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
51846
- texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
51847
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
51848
- texture.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
51849
- }
51850
- texture.generateMipmaps();
51851
- resourceManager.addContentRestorer(new CubeFaceContentRestorer(texture, urls, requestConfig));
51852
- resolve(texture);
51853
- }).catch(reject);
51854
- });
51855
- };
51856
51835
  return TextureCubeLoader;
51857
51836
  }(Loader);
51858
51837
  TextureCubeLoader = __decorate([
@@ -51886,31 +51865,6 @@ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51886
51865
  };
51887
51866
  return HDRContentRestorer;
51888
51867
  }(ContentRestorer);
51889
- var CubeFaceContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51890
- _inherits(CubeFaceContentRestorer, ContentRestorer);
51891
- function CubeFaceContentRestorer(resource, urls, requestConfig) {
51892
- var _this;
51893
- _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
51894
- return _this;
51895
- }
51896
- var _proto = CubeFaceContentRestorer.prototype;
51897
- _proto.restoreContent = function restoreContent() {
51898
- var _this = this;
51899
- return new AssetPromise(function(resolve, reject) {
51900
- Promise.all(_this.urls.map(function(url) {
51901
- return request(url, _this.requestConfig);
51902
- })).then(function(images) {
51903
- var resource = _this.resource;
51904
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
51905
- resource.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
51906
- }
51907
- resource.generateMipmaps();
51908
- resolve(resource);
51909
- }).catch(reject);
51910
- });
51911
- };
51912
- return CubeFaceContentRestorer;
51913
- }(ContentRestorer);
51914
51868
  var AudioLoader = /*#__PURE__*/ function(Loader) {
51915
51869
  _inherits(AudioLoader, Loader);
51916
51870
  function AudioLoader() {
@@ -52707,7 +52661,7 @@ EXT_texture_webp = __decorate([
52707
52661
  ], EXT_texture_webp);
52708
52662
 
52709
52663
  //@ts-ignore
52710
- var version = "2.0.0-alpha.10";
52664
+ var version = "2.0.0-alpha.12";
52711
52665
  console.log("Galacean Engine Version: " + version);
52712
52666
  for(var key in CoreObjects){
52713
52667
  Loader.registerClass(key, CoreObjects[key]);