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

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