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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -286,7 +286,9 @@ var decoderMap = {};
286
286
  header.name = name;
287
287
  header.type = type;
288
288
  header.version = fileVersion;
289
- header.headerLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
289
+ // Align to 4 bytes so that data following the header can be accessed via TypedArray views
290
+ var rawLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
291
+ header.headerLength = rawLength + 3 & ~3;
290
292
  return header;
291
293
  };
292
294
  _create_class(FileHeader, [
@@ -1701,1984 +1703,2001 @@ BufferLoader = __decorate([
1701
1703
  ])
1702
1704
  ], BufferLoader);
1703
1705
 
1704
- var EnvLoader = /*#__PURE__*/ function(Loader) {
1705
- _inherits(EnvLoader, Loader);
1706
- function EnvLoader() {
1707
- return Loader.apply(this, arguments) || this;
1706
+ var DFDTransferFunction = /*#__PURE__*/ function(DFDTransferFunction) {
1707
+ DFDTransferFunction[DFDTransferFunction["linear"] = 1] = "linear";
1708
+ DFDTransferFunction[DFDTransferFunction["sRGB"] = 2] = "sRGB";
1709
+ return DFDTransferFunction;
1710
+ }({});
1711
+ var ColorModel = /*#__PURE__*/ function(ColorModel) {
1712
+ ColorModel[ColorModel["ETC1S"] = 163] = "ETC1S";
1713
+ ColorModel[ColorModel["UASTC_LDR_4X4"] = 166] = "UASTC_LDR_4X4";
1714
+ ColorModel[ColorModel["UASTC_HDR_4X4"] = 167] = "UASTC_HDR_4X4";
1715
+ return ColorModel;
1716
+ }({});
1717
+ /** @internal */ var KTX2Container = /*#__PURE__*/ function() {
1718
+ function KTX2Container(buffer) {
1719
+ this.vkFormat = 0;
1720
+ this.typeSize = 1;
1721
+ this.pixelWidth = 0;
1722
+ this.pixelHeight = 0;
1723
+ this.pixelDepth = 0;
1724
+ this.layerCount = 0;
1725
+ this.faceCount = 1;
1726
+ this.supercompressionScheme = 0;
1727
+ this.levels = [];
1728
+ this.keyValue = {};
1729
+ this.globalData = null;
1730
+ this.parse(buffer);
1708
1731
  }
1709
- var _proto = EnvLoader.prototype;
1710
- _proto.load = function load(item, resourceManager) {
1711
- return new engineCore.AssetPromise(function(resolve, reject) {
1712
- var requestConfig = _extends({}, item, {
1713
- type: "arraybuffer"
1714
- });
1715
- var engine = resourceManager.engine;
1716
- var url = item.url;
1717
- resourceManager// @ts-ignore
1718
- ._request(url, requestConfig).then(function(arraybuffer) {
1719
- var texture = EnvLoader._setTextureByBuffer(engine, arraybuffer);
1720
- engine.resourceManager.addContentRestorer(new EnvContentRestorer(texture, url, requestConfig));
1721
- var ambientLight = new engineCore.AmbientLight(engine);
1722
- var sh = new engineMath.SphericalHarmonics3();
1723
- ambientLight.diffuseMode = engineCore.DiffuseMode.SphericalHarmonics;
1724
- sh.copyFromArray(new Float32Array(arraybuffer, 0, 27));
1725
- ambientLight.diffuseSphericalHarmonics = sh;
1726
- ambientLight.specularTexture = texture;
1727
- resolve(ambientLight);
1728
- }).catch(function(e) {
1729
- reject(e);
1730
- });
1731
- });
1732
- };
1733
- /**
1734
- * @internal
1735
- */ EnvLoader._setTextureByBuffer = function _setTextureByBuffer(engine, buffer, texture) {
1736
- var _this;
1737
- var shByteLength = 27 * 4;
1738
- var size = (_this = new Uint16Array(buffer, shByteLength, 1)) == null ? void 0 : _this[0];
1739
- texture || (texture = new engineCore.TextureCube(engine, size, engineCore.TextureFormat.R16G16B16A16, true, false));
1740
- texture.filterMode = engineCore.TextureFilterMode.Trilinear;
1741
- var mipmapCount = texture.mipmapCount;
1742
- var offset = shByteLength + 2;
1743
- for(var mipLevel = 0; mipLevel < mipmapCount; mipLevel++){
1744
- var mipSize = size >> mipLevel;
1745
- for(var face = 0; face < 6; face++){
1746
- var dataSize = mipSize * mipSize * 4;
1747
- var data = new Uint16Array(buffer, offset, dataSize);
1748
- offset += dataSize * 2;
1749
- texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + face, data, mipLevel);
1732
+ var _proto = KTX2Container.prototype;
1733
+ _proto.parse = function parse(data) {
1734
+ var buffer = data.buffer;
1735
+ var byteOffset = data.byteOffset;
1736
+ var headerBufferReader = new BufferReader(data, 12);
1737
+ this.vkFormat = headerBufferReader.nextUint32();
1738
+ this.typeSize = headerBufferReader.nextUint32();
1739
+ this.pixelWidth = headerBufferReader.nextUint32();
1740
+ this.pixelHeight = headerBufferReader.nextUint32();
1741
+ this.pixelDepth = headerBufferReader.nextUint32();
1742
+ this.layerCount = headerBufferReader.nextUint32();
1743
+ this.faceCount = headerBufferReader.nextUint32();
1744
+ var levelCount = Math.max(1, headerBufferReader.nextUint32());
1745
+ this.supercompressionScheme = headerBufferReader.nextUint32();
1746
+ var dfdByteOffset = headerBufferReader.nextUint32();
1747
+ var dfdByteLength = headerBufferReader.nextUint32();
1748
+ var kvdByteOffset = headerBufferReader.nextUint32();
1749
+ var kvdByteLength = headerBufferReader.nextUint32();
1750
+ var sgdByteOffset = headerBufferReader.nextUint64();
1751
+ var sgdByteLength = headerBufferReader.nextUint64();
1752
+ // level index
1753
+ var ktxLevels = new Array(levelCount);
1754
+ var levelByteLength = levelCount * 3 * 8;
1755
+ var levelReader = new BufferReader(data, headerBufferReader.offset, levelByteLength);
1756
+ this.levels = ktxLevels;
1757
+ for(var i = 0; i < levelCount; i++){
1758
+ ktxLevels[i] = {
1759
+ levelData: new Uint8Array(buffer, byteOffset + levelReader.nextUint64(), levelReader.nextUint64()),
1760
+ uncompressedByteLength: levelReader.nextUint64()
1761
+ };
1762
+ }
1763
+ // Data Format Descriptor (DFD).
1764
+ var dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength);
1765
+ var dfd = {
1766
+ vendorId: dfdReader.skip(4 /* totalSize */ ).nextUint16(),
1767
+ descriptorType: dfdReader.nextUint16(),
1768
+ versionNumber: dfdReader.nextUint16(),
1769
+ descriptorBlockSize: dfdReader.nextUint16(),
1770
+ colorModel: dfdReader.nextUint8(),
1771
+ colorPrimaries: dfdReader.nextUint8(),
1772
+ transferFunction: dfdReader.nextUint8(),
1773
+ flags: dfdReader.nextUint8(),
1774
+ texelBlockDimension: [
1775
+ dfdReader.nextUint8(),
1776
+ dfdReader.nextUint8(),
1777
+ dfdReader.nextUint8(),
1778
+ dfdReader.nextUint8()
1779
+ ],
1780
+ bytesPlane: [
1781
+ dfdReader.nextUint8(),
1782
+ dfdReader.nextUint8(),
1783
+ dfdReader.nextUint8(),
1784
+ dfdReader.nextUint8(),
1785
+ dfdReader.nextUint8(),
1786
+ dfdReader.nextUint8(),
1787
+ dfdReader.nextUint8(),
1788
+ dfdReader.nextUint8()
1789
+ ],
1790
+ samples: []
1791
+ };
1792
+ this.dataFormatDescriptor = dfd;
1793
+ var sampleStart = 6;
1794
+ var sampleWords = 4;
1795
+ var numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;
1796
+ for(var i1 = 0; i1 < numSamples; i1++){
1797
+ var sample = {
1798
+ bitOffset: dfdReader.nextUint16(),
1799
+ bitLength: dfdReader.nextUint8(),
1800
+ channelType: dfdReader.nextUint8(),
1801
+ samplePosition: [
1802
+ dfdReader.nextUint8(),
1803
+ dfdReader.nextUint8(),
1804
+ dfdReader.nextUint8(),
1805
+ dfdReader.nextUint8()
1806
+ ],
1807
+ sampleLower: -Infinity,
1808
+ sampleUpper: Infinity
1809
+ };
1810
+ if (sample.channelType & 0x40) {
1811
+ sample.sampleLower = dfdReader.nextInt32();
1812
+ sample.sampleUpper = dfdReader.nextInt32();
1813
+ } else {
1814
+ sample.sampleLower = dfdReader.nextUint32();
1815
+ sample.sampleUpper = dfdReader.nextUint32();
1750
1816
  }
1817
+ dfd.samples[i1] = sample;
1751
1818
  }
1752
- return texture;
1819
+ var kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);
1820
+ while(kvdReader.position < kvdByteLength){
1821
+ var keyValueByteLength = kvdReader.nextUint32();
1822
+ var keyData = kvdReader.scan(keyValueByteLength);
1823
+ var key = engineCore.Utils.decodeText(keyData);
1824
+ // 4-byte alignment.
1825
+ var valueData = kvdReader.nextUint8Array(keyValueByteLength - keyData.byteLength - 1);
1826
+ this.keyValue[key] = key.match(/^ktx/i) ? engineCore.Utils.decodeText(valueData).replace(/^(.*)\x00$/, "$1") : valueData;
1827
+ var kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; // align(4)
1828
+ // 4-byte alignment.
1829
+ kvdReader.skip(kvPadding);
1830
+ }
1831
+ if (sgdByteLength <= 0) return this;
1832
+ var sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);
1833
+ var endpointCount = sgdReader.nextUint16();
1834
+ var selectorCount = sgdReader.nextUint16();
1835
+ var endpointsByteLength = sgdReader.nextUint32();
1836
+ var selectorsByteLength = sgdReader.nextUint32();
1837
+ var tablesByteLength = sgdReader.nextUint32();
1838
+ var extendedByteLength = sgdReader.nextUint32();
1839
+ var imageDescs = new Array(levelCount);
1840
+ for(var i2 = 0; i2 < levelCount; i2++){
1841
+ imageDescs[i2] = {
1842
+ imageFlags: sgdReader.nextUint32(),
1843
+ rgbSliceByteOffset: sgdReader.nextUint32(),
1844
+ rgbSliceByteLength: sgdReader.nextUint32(),
1845
+ alphaSliceByteOffset: sgdReader.nextUint32(),
1846
+ alphaSliceByteLength: sgdReader.nextUint32()
1847
+ };
1848
+ }
1849
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
1850
+ var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
1851
+ var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
1852
+ var extendedByteOffset = tablesByteOffset + tablesByteLength;
1853
+ var endpointsData = new Uint8Array(buffer, byteOffset + endpointsByteOffset, endpointsByteLength);
1854
+ var selectorsData = new Uint8Array(buffer, byteOffset + selectorsByteOffset, selectorsByteLength);
1855
+ var tablesData = new Uint8Array(buffer, byteOffset + tablesByteOffset, tablesByteLength);
1856
+ var extendedData = new Uint8Array(buffer, byteOffset + extendedByteOffset, extendedByteLength);
1857
+ this.globalData = {
1858
+ endpointCount: endpointCount,
1859
+ selectorCount: selectorCount,
1860
+ imageDescs: imageDescs,
1861
+ endpointsData: endpointsData,
1862
+ selectorsData: selectorsData,
1863
+ tablesData: tablesData,
1864
+ extendedData: extendedData
1865
+ };
1753
1866
  };
1754
- return EnvLoader;
1755
- }(engineCore.Loader);
1756
- EnvLoader = __decorate([
1757
- engineCore.resourceLoader(engineCore.AssetType.Env, [
1758
- "env"
1759
- ])
1760
- ], EnvLoader);
1761
- /**
1762
- * @internal
1763
- */ var EnvContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
1764
- _inherits(EnvContentRestorer, ContentRestorer);
1765
- function EnvContentRestorer(resource, url, requestConfig) {
1766
- var _this;
1767
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
1768
- return _this;
1769
- }
1770
- var _proto = EnvContentRestorer.prototype;
1771
- _proto.restoreContent = function restoreContent() {
1772
- var _this = this;
1773
- return new engineCore.AssetPromise(function(resolve, reject) {
1774
- var resource = _this.resource;
1775
- var engine = resource.engine;
1776
- engine.resourceManager// @ts-ignore
1777
- ._request(_this.url, _this.requestConfig).then(function(buffer) {
1778
- EnvLoader._setTextureByBuffer(engine, buffer, resource);
1779
- resolve(resource);
1780
- }).catch(reject);
1781
- });
1867
+ KTX2Container.checkMagic = function checkMagic(buffer, offset) {
1868
+ if (offset === void 0) offset = 0;
1869
+ if (buffer.byteLength < offset + 4) return false;
1870
+ var id = new Uint8Array(buffer, offset, 4);
1871
+ return id[0] === 0xab && id[1] === 0x4b && id[2] === 0x54 && id[3] === 0x58;
1782
1872
  };
1783
- return EnvContentRestorer;
1784
- }(engineCore.ContentRestorer);
1785
-
1786
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
1787
- try {
1788
- var info = gen[key](arg);
1789
- var value = info.value;
1790
- } catch (error) {
1791
- reject(error);
1792
- return;
1793
- }
1794
- if (info.done) resolve(value);
1795
- else Promise.resolve(value).then(_next, _throw);
1796
- }
1797
- function _async_to_generator(fn) {
1798
- return function() {
1799
- var self = this, args = arguments;
1800
-
1801
- return new Promise(function(resolve, reject) {
1802
- var gen = fn.apply(self, args);
1803
-
1804
- function _next(value) {
1805
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
1873
+ _create_class(KTX2Container, [
1874
+ {
1875
+ key: "isSRGB",
1876
+ get: function get() {
1877
+ return this.dataFormatDescriptor.transferFunction === 2;
1806
1878
  }
1807
-
1808
- function _throw(err) {
1809
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
1879
+ },
1880
+ {
1881
+ key: "colorModel",
1882
+ get: function get() {
1883
+ return this.dataFormatDescriptor.colorModel;
1810
1884
  }
1885
+ }
1886
+ ]);
1887
+ return KTX2Container;
1888
+ }();
1811
1889
 
1812
- _next(undefined);
1813
- });
1814
- };
1815
- }
1890
+ /**
1891
+ * KTX2 transcode target format.
1892
+ */ var KTX2TargetFormat = /*#__PURE__*/ function(KTX2TargetFormat) {
1893
+ /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["ASTC"] = 0] = "ASTC";
1894
+ /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["BC7"] = 1] = "BC7";
1895
+ /** 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";
1896
+ /** RGB(A) compressed format, 4 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["PVRTC"] = 3] = "PVRTC";
1897
+ /** 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";
1898
+ /** R format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8"] = 5] = "R8";
1899
+ /** RG format, 16 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8"] = 6] = "R8G8";
1900
+ /** RGBA format, 32 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8B8A8"] = 7] = "R8G8B8A8";
1901
+ /** RGB HDR compressed format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["BC6H"] = 8] = "BC6H";
1902
+ /** 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";
1903
+ /** RGBA format, 16 bits per channel. */ KTX2TargetFormat[KTX2TargetFormat["R16G16B16A16"] = 10] = "R16G16B16A16";
1904
+ return KTX2TargetFormat;
1905
+ }({});
1816
1906
 
1817
- var FontLoader = /*#__PURE__*/ function(Loader) {
1818
- _inherits(FontLoader, Loader);
1819
- function FontLoader() {
1820
- return Loader.apply(this, arguments) || this;
1907
+ /**
1908
+ * @internal
1909
+ * WorkerPool, T is is post message type, U is return type.
1910
+ */ var WorkerPool = /*#__PURE__*/ function() {
1911
+ function WorkerPool(limitedCount, _workerCreator) {
1912
+ if (limitedCount === void 0) limitedCount = 4;
1913
+ this.limitedCount = limitedCount;
1914
+ this._workerCreator = _workerCreator;
1915
+ this._taskQueue = [];
1916
+ this._workerStatus = 0;
1917
+ this._workerItems = new Array(limitedCount);
1821
1918
  }
1822
- var _proto = FontLoader.prototype;
1823
- _proto.load = function load(item, resourceManager) {
1824
- var _this = this;
1825
- return new engineCore.AssetPromise(function(resolve, reject) {
1826
- resourceManager// @ts-ignore
1827
- ._request(item.url, _extends({}, item, {
1828
- type: "json"
1829
- })).then(function(data) {
1830
- var fontName = data.fontName, fontUrl = data.fontUrl;
1831
- if (fontUrl) {
1832
- _this._registerFont(fontName, fontUrl).then(function() {
1833
- var font = new engineCore.Font(resourceManager.engine, fontName);
1834
- resolve(font);
1835
- }).catch(function(e) {
1836
- reject("load font " + fontUrl + " fail");
1837
- });
1838
- } else {
1839
- var font = new engineCore.Font(resourceManager.engine, fontName);
1840
- resolve(font);
1841
- }
1842
- }).catch(function(e) {
1843
- reject(e);
1844
- });
1845
- });
1846
- };
1847
- _proto._registerFont = function _registerFont(fontName, fontUrl) {
1848
- return _async_to_generator(function() {
1849
- var fontFace;
1850
- return __generator(this, function(_state) {
1851
- switch(_state.label){
1852
- case 0:
1853
- fontFace = new FontFace(fontName, "url(" + fontUrl + ")");
1854
- return [
1855
- 4,
1856
- fontFace.load()
1857
- ];
1858
- case 1:
1859
- _state.sent();
1860
- document.fonts.add(fontFace);
1861
- return [
1862
- 2
1863
- ];
1864
- }
1865
- });
1866
- })();
1919
+ var _proto = WorkerPool.prototype;
1920
+ _proto.prepareWorker = function prepareWorker() {
1921
+ var count = this.limitedCount;
1922
+ var promises = new Array(count);
1923
+ for(var i = 0; i < count; i++){
1924
+ promises.push(this._initWorker(i));
1925
+ }
1926
+ return Promise.all(promises);
1867
1927
  };
1868
- return FontLoader;
1869
- }(engineCore.Loader);
1870
- FontLoader = __decorate([
1871
- engineCore.resourceLoader(engineCore.AssetType.Font, [
1872
- "font"
1873
- ])
1874
- ], FontLoader);
1875
-
1876
- // Source: https://github.com/zeux/meshoptimizer/blob/master/js/meshopt_decoder.js
1877
- var ready;
1878
- function getMeshoptDecoder() {
1879
- if (ready) return ready;
1880
- 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";
1881
- 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";
1882
- var wasmpack = new Uint8Array([
1883
- 32,
1884
- 0,
1885
- 65,
1886
- 2,
1887
- 1,
1888
- 106,
1889
- 34,
1890
- 33,
1891
- 3,
1892
- 128,
1893
- 11,
1894
- 4,
1895
- 13,
1896
- 64,
1897
- 6,
1898
- 253,
1899
- 10,
1900
- 7,
1901
- 15,
1902
- 116,
1903
- 127,
1904
- 5,
1905
- 8,
1906
- 12,
1907
- 40,
1908
- 16,
1909
- 19,
1910
- 54,
1911
- 20,
1912
- 9,
1913
- 27,
1914
- 255,
1915
- 113,
1916
- 17,
1917
- 42,
1918
- 67,
1919
- 24,
1920
- 23,
1921
- 146,
1922
- 148,
1923
- 18,
1924
- 14,
1925
- 22,
1926
- 45,
1927
- 70,
1928
- 69,
1929
- 56,
1930
- 114,
1931
- 101,
1932
- 21,
1933
- 25,
1934
- 63,
1935
- 75,
1936
- 136,
1937
- 108,
1938
- 28,
1939
- 118,
1940
- 29,
1941
- 73,
1942
- 115
1943
- ]);
1944
- // @ts-ignore
1945
- var wasm = engineCore.SystemInfo._detectSIMDSupported() ? wasm_simd : wasm_base;
1946
- var instance;
1947
- ready = WebAssembly.instantiate(unpack(wasm)).then(function(result) {
1948
- instance = result.instance;
1949
- instance.exports.__wasm_call_ctors();
1950
- }).then(function() {
1951
- return {
1952
- workerCount: 4,
1953
- ready: ready,
1954
- useWorkers: function useWorkers(workerCount) {
1955
- this.workerCount = workerCount != null ? workerCount : this.workerCount;
1956
- initWorkers(this.workerCount);
1957
- },
1958
- decodeGltfBuffer: function decodeGltfBuffer(count, stride, source, mode, filter) {
1959
- if (this.workerCount > 0 && workers.length === 0) this.useWorkers();
1960
- if (workers.length > 0) return decodeWorker(count, stride, source, decoders[mode], filters[filter]);
1961
- return ready.then(function() {
1962
- var target = new Uint8Array(count * stride);
1963
- decode(instance.exports[decoders[mode]], target, count, stride, source, instance.exports[filters[filter]]);
1964
- return target;
1928
+ /**
1929
+ * Post message to worker.
1930
+ * @param message - Message which posted to worker
1931
+ * @returns Return a promise of message
1932
+ */ _proto.postMessage = function postMessage(message) {
1933
+ var _this = this;
1934
+ return new Promise(function(resolve, reject) {
1935
+ var workerId = _this._getIdleWorkerId();
1936
+ if (workerId !== -1) {
1937
+ _this._workerStatus |= 1 << workerId;
1938
+ var workerItems = _this._workerItems;
1939
+ var _workerItems_workerId;
1940
+ Promise.resolve((_workerItems_workerId = workerItems[workerId]) != null ? _workerItems_workerId : _this._initWorker(workerId)).then(function() {
1941
+ var workerItem = workerItems[workerId];
1942
+ workerItem.resolve = resolve;
1943
+ workerItem.reject = reject;
1944
+ workerItem.worker.postMessage(message);
1945
+ }).catch(reject);
1946
+ } else {
1947
+ _this._taskQueue.push({
1948
+ resolve: resolve,
1949
+ reject: reject,
1950
+ message: message
1965
1951
  });
1966
- },
1967
- release: function release() {
1968
- for(var i = 0; i < workers.length; i++){
1969
- workers[i].object.terminate();
1970
- }
1971
1952
  }
1972
- };
1973
- });
1974
- function unpack(data) {
1975
- var result = new Uint8Array(data.length);
1976
- for(var i = 0; i < data.length; ++i){
1977
- var ch = data.charCodeAt(i);
1978
- result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
1979
- }
1980
- var write = 0;
1981
- for(var i1 = 0; i1 < data.length; ++i1){
1982
- result[write++] = result[i1] < 60 ? wasmpack[result[i1]] : (result[i1] - 60) * 64 + result[++i1];
1983
- }
1984
- return result.buffer.slice(0, write);
1985
- }
1986
- function decode(fun, target, count, size, source, filter) {
1987
- var sbrk = instance.exports.sbrk;
1988
- var count4 = count + 3 & ~3;
1989
- var tp = sbrk(count4 * size);
1990
- var sp = sbrk(source.length);
1991
- var heap = new Uint8Array(instance.exports.memory.buffer);
1992
- heap.set(source, sp);
1993
- var res = fun(tp, count, size, sp, source.length);
1994
- if (res == 0 && filter) {
1995
- filter(tp, count4, size);
1996
- }
1997
- target.set(heap.subarray(tp, tp + count * size));
1998
- sbrk(tp - sbrk(0));
1999
- if (res != 0) {
2000
- throw new Error("Malformed buffer data: " + res);
1953
+ });
1954
+ };
1955
+ /**
1956
+ * Destroy the worker pool.
1957
+ */ _proto.destroy = function destroy() {
1958
+ var workerItems = this._workerItems;
1959
+ for(var i = 0, n = workerItems.length; i < n; i++){
1960
+ var workerItem = workerItems[i];
1961
+ workerItem.worker.terminate();
1962
+ workerItem.reject = null;
1963
+ workerItem.resolve = null;
2001
1964
  }
2002
- }
2003
- var filters = {
2004
- NONE: "",
2005
- OCTAHEDRAL: "meshopt_decodeFilterOct",
2006
- QUATERNION: "meshopt_decodeFilterQuat",
2007
- EXPONENTIAL: "meshopt_decodeFilterExp"
1965
+ workerItems.length = 0;
1966
+ this._taskQueue.length = 0;
1967
+ this._workerStatus = 0;
2008
1968
  };
2009
- var decoders = {
2010
- ATTRIBUTES: "meshopt_decodeVertexBuffer",
2011
- TRIANGLES: "meshopt_decodeIndexBuffer",
2012
- INDICES: "meshopt_decodeIndexSequence"
1969
+ _proto._initWorker = function _initWorker(workerId) {
1970
+ var _this = this;
1971
+ return Promise.resolve(this._workerCreator()).then(function(worker) {
1972
+ worker.addEventListener("message", _this._onMessage.bind(_this, workerId));
1973
+ _this._workerItems[workerId] = {
1974
+ worker: worker,
1975
+ resolve: null,
1976
+ reject: null
1977
+ };
1978
+ return worker;
1979
+ });
2013
1980
  };
2014
- var workers = [];
2015
- var requestId = 0;
2016
- function createWorker(url) {
2017
- var worker = {
2018
- object: new Worker(url),
2019
- pending: 0,
2020
- requests: {}
2021
- };
2022
- worker.object.onmessage = function(event) {
2023
- var data = event.data;
2024
- worker.pending -= data.count;
2025
- worker.requests[data.id][data.action](data.value);
2026
- delete worker.requests[data.id];
2027
- };
2028
- return worker;
2029
- }
2030
- function initWorkers(count) {
2031
- 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 }';
2032
- var blob = new Blob([
2033
- source
2034
- ], {
2035
- type: "text/javascript"
2036
- });
2037
- var url = URL.createObjectURL(blob);
2038
- for(var i = 0; i < count; ++i){
2039
- workers[i] = createWorker(url);
1981
+ _proto._getIdleWorkerId = function _getIdleWorkerId() {
1982
+ for(var i = 0, count = this.limitedCount; i < count; i++){
1983
+ if (!(this._workerStatus & 1 << i)) return i;
2040
1984
  }
2041
- URL.revokeObjectURL(url);
1985
+ return -1;
1986
+ };
1987
+ _proto._onMessage = function _onMessage(workerId, msg) {
1988
+ // onerror of web worker can't catch error in promise
1989
+ var error = msg.data.error;
1990
+ if (error) {
1991
+ this._workerItems[workerId].reject(error);
1992
+ } else {
1993
+ this._workerItems[workerId].resolve(msg.data);
1994
+ }
1995
+ this._nextTask(workerId);
1996
+ };
1997
+ _proto._nextTask = function _nextTask(workerId) {
1998
+ if (this._taskQueue.length) {
1999
+ var taskItem = this._taskQueue.shift();
2000
+ var workerItem = this._workerItems[workerId];
2001
+ workerItem.resolve = taskItem.resolve;
2002
+ workerItem.reject = taskItem.reject;
2003
+ workerItem.worker.postMessage(taskItem.message);
2004
+ } else {
2005
+ this._workerStatus ^= 1 << workerId;
2006
+ }
2007
+ };
2008
+ return WorkerPool;
2009
+ }();
2010
+
2011
+ var AbstractTranscoder = /*#__PURE__*/ function() {
2012
+ function AbstractTranscoder(workerLimitCount) {
2013
+ this.workerLimitCount = workerLimitCount;
2042
2014
  }
2043
- function decodeWorker(count, size, source, mode, filter) {
2044
- var worker = workers[0];
2045
- for(var i = 1; i < workers.length; ++i){
2046
- if (workers[i].pending < worker.pending) {
2047
- worker = workers[i];
2048
- }
2015
+ var _proto = AbstractTranscoder.prototype;
2016
+ _proto.init = function init() {
2017
+ if (!this._initPromise) {
2018
+ this._initPromise = this._initTranscodeWorkerPool();
2049
2019
  }
2050
- return new Promise(function(resolve, reject) {
2051
- var data = new Uint8Array(source);
2052
- var id = requestId++;
2053
- worker.pending += count;
2054
- worker.requests[id] = {
2055
- resolve: resolve,
2056
- reject: reject
2057
- };
2058
- worker.object.postMessage({
2059
- id: id,
2060
- count: count,
2061
- size: size,
2062
- source: data,
2063
- mode: mode,
2064
- filter: filter
2065
- }, [
2066
- data.buffer
2067
- ]);
2020
+ return this._initPromise;
2021
+ };
2022
+ _proto.destroy = function destroy() {
2023
+ this._transcodeWorkerPool.destroy();
2024
+ };
2025
+ _proto._createTranscodePool = function _createTranscodePool(workerURL, wasmBuffer) {
2026
+ this._transcodeWorkerPool = new WorkerPool(this.workerLimitCount, function() {
2027
+ return new Promise(function(resolve, reject) {
2028
+ var onMessage = function onMessage(e) {
2029
+ if (e.data.error) {
2030
+ reject(e.data.error);
2031
+ } else {
2032
+ resolve(worker);
2033
+ }
2034
+ };
2035
+ var worker = new Worker(workerURL);
2036
+ var msg = {
2037
+ type: "init",
2038
+ transcoderWasm: wasmBuffer
2039
+ };
2040
+ worker.addEventListener("message", onMessage);
2041
+ worker.postMessage(msg);
2042
+ });
2068
2043
  });
2069
- }
2070
- return ready;
2071
- }
2044
+ return this._transcodeWorkerPool.prepareWorker();
2045
+ };
2046
+ return AbstractTranscoder;
2047
+ }();
2072
2048
 
2073
- /**
2074
- * The glTF resource.
2075
- */ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
2076
- _inherits(GLTFResource, ReferResource);
2077
- function GLTFResource(engine, url) {
2078
- var _this;
2079
- _this = ReferResource.call(this, engine) || this;
2080
- _this.url = url;
2081
- return _this;
2082
- }
2083
- var _proto = GLTFResource.prototype;
2084
- /**
2085
- * Instantiate scene root entity.
2086
- * @param sceneIndex - Scene index
2087
- * @returns Root entity
2088
- */ _proto.instantiateSceneRoot = function instantiateSceneRoot(sceneIndex) {
2089
- var sceneRoot = sceneIndex === undefined ? this._defaultSceneRoot : this._sceneRoots[sceneIndex];
2090
- return sceneRoot.clone();
2049
+ /** @internal */ function TranscodeWorkerCode() {
2050
+ var initPromise;
2051
+ var init = function init(wasmBinary) {
2052
+ if (!initPromise) {
2053
+ initPromise = new Promise(function(resolve, reject) {
2054
+ var BasisModule = {
2055
+ wasmBinary: wasmBinary,
2056
+ onRuntimeInitialized: function() {
2057
+ return resolve(BasisModule);
2058
+ },
2059
+ onAbort: reject
2060
+ };
2061
+ self["BASIS"](BasisModule);
2062
+ }).then(function(BasisModule) {
2063
+ BasisModule.initializeBasis();
2064
+ return BasisModule.KTX2File;
2065
+ });
2066
+ }
2067
+ return initPromise;
2091
2068
  };
2092
- _proto._onDestroy = function _onDestroy() {
2093
- ReferResource.prototype._onDestroy.call(this);
2094
- var _this = this, textures = _this.textures, materials = _this.materials, meshes = _this.meshes;
2095
- textures && this._disassociationSuperResource(textures);
2096
- materials && this._disassociationSuperResource(materials);
2097
- if (meshes) {
2098
- for(var i = 0, n = meshes.length; i < n; i++){
2099
- var meshArr = meshes[i];
2100
- meshArr && this._disassociationSuperResource(meshArr);
2101
- }
2069
+ self.onmessage = function onmessage(event) {
2070
+ var message = event.data;
2071
+ switch(message.type){
2072
+ case "init":
2073
+ init(message.transcoderWasm).then(function() {
2074
+ self.postMessage("init-completed");
2075
+ }).catch(function(e) {
2076
+ return self.postMessage({
2077
+ error: e
2078
+ });
2079
+ });
2080
+ break;
2081
+ case "transcode":
2082
+ init().then(function(KTX2File) {
2083
+ var result = transcode(message.buffer, message.format, KTX2File);
2084
+ // @ts-ignore
2085
+ result.type = "transcoded";
2086
+ self.postMessage(result);
2087
+ }).catch(function(e) {
2088
+ return self.postMessage({
2089
+ error: e
2090
+ });
2091
+ });
2092
+ break;
2102
2093
  }
2103
2094
  };
2104
- _proto._disassociationSuperResource = function _disassociationSuperResource(resources) {
2105
- for(var i = 0, n = resources.length; i < n; i++){
2106
- var // @ts-ignore
2107
- _resources_i;
2108
- (_resources_i = resources[i]) == null ? void 0 : _resources_i._disassociationSuperResource(this);
2095
+ }
2096
+ var _init = function init() {
2097
+ var initPromise;
2098
+ return function init(wasmBinary) {
2099
+ if (!initPromise) {
2100
+ initPromise = new Promise(function(resolve, reject) {
2101
+ var BasisModule = {
2102
+ wasmBinary: wasmBinary,
2103
+ onRuntimeInitialized: function() {
2104
+ return resolve(BasisModule);
2105
+ },
2106
+ onAbort: reject
2107
+ };
2108
+ self["BASIS"](BasisModule);
2109
+ }).then(function(BasisModule) {
2110
+ BasisModule.initializeBasis();
2111
+ return BasisModule.KTX2File;
2112
+ });
2109
2113
  }
2114
+ return initPromise;
2110
2115
  };
2111
- _create_class(GLTFResource, [
2112
- {
2113
- key: "extensionsData",
2114
- get: /**
2115
- * Extensions data.
2116
- */ function get() {
2117
- return this._extensionsData;
2118
- }
2119
- },
2120
- {
2121
- key: "sceneRoots",
2122
- get: /**
2123
- * @deprecated Please use `instantiateSceneRoot` instead.
2124
- * RootEntities after SceneParser.
2125
- */ function get() {
2126
- return this._sceneRoots;
2127
- }
2128
- },
2129
- {
2130
- key: "defaultSceneRoot",
2131
- get: /**
2132
- * @deprecated Please use `instantiateSceneRoot` instead.
2133
- * RootEntity after SceneParser.
2134
- */ function get() {
2135
- return this._defaultSceneRoot;
2136
- }
2116
+ };
2117
+ var init = _init();
2118
+ function transcode(buffer, targetFormat, KTX2File) {
2119
+ function getTranscodeFormatFromTarget(target, hasAlpha) {
2120
+ switch(target){
2121
+ case 2:
2122
+ return hasAlpha ? 3 : 2;
2123
+ case 4:
2124
+ return hasAlpha ? 1 : 0;
2125
+ case 3:
2126
+ return hasAlpha ? 9 : 8;
2127
+ case 7:
2128
+ return 13;
2129
+ case 0:
2130
+ return 10;
2131
+ case 1:
2132
+ return 7;
2133
+ case 8:
2134
+ return 22;
2135
+ case 9:
2136
+ return 23;
2137
+ case 10:
2138
+ return 25;
2137
2139
  }
2138
- ]);
2139
- return GLTFResource;
2140
- }(engineCore.ReferResource);
2141
-
2142
- /**
2143
- * Module for glTF 2.0 Interface
2144
- */ /**
2145
- * The datatype of the components in the attribute
2146
- */ var AccessorComponentType = /*#__PURE__*/ function(AccessorComponentType) {
2147
- /**
2148
- * Byte
2149
- */ AccessorComponentType[AccessorComponentType["BYTE"] = 5120] = "BYTE";
2150
- /**
2151
- * Unsigned Byte
2152
- */ AccessorComponentType[AccessorComponentType["UNSIGNED_BYTE"] = 5121] = "UNSIGNED_BYTE";
2153
- /**
2154
- * Short
2155
- */ AccessorComponentType[AccessorComponentType["SHORT"] = 5122] = "SHORT";
2156
- /**
2157
- * Unsigned Short
2158
- */ AccessorComponentType[AccessorComponentType["UNSIGNED_SHORT"] = 5123] = "UNSIGNED_SHORT";
2159
- /**
2160
- * Unsigned Int
2161
- */ AccessorComponentType[AccessorComponentType["UNSIGNED_INT"] = 5125] = "UNSIGNED_INT";
2162
- /**
2163
- * Float
2164
- */ AccessorComponentType[AccessorComponentType["FLOAT"] = 5126] = "FLOAT";
2165
- return AccessorComponentType;
2166
- }({});
2167
- /**
2168
- * Specifies if the attirbute is a scalar, vector, or matrix
2169
- */ var AccessorType = /*#__PURE__*/ function(AccessorType) {
2170
- /**
2171
- * Scalar
2172
- */ AccessorType["SCALAR"] = "SCALAR";
2173
- /**
2174
- * Vector2
2175
- */ AccessorType["VEC2"] = "VEC2";
2176
- /**
2177
- * Vector3
2178
- */ AccessorType["VEC3"] = "VEC3";
2179
- /**
2180
- * Vector4
2181
- */ AccessorType["VEC4"] = "VEC4";
2182
- /**
2183
- * Matrix2x2
2184
- */ AccessorType["MAT2"] = "MAT2";
2185
- /**
2186
- * Matrix3x3
2187
- */ AccessorType["MAT3"] = "MAT3";
2188
- /**
2189
- * Matrix4x4
2190
- */ AccessorType["MAT4"] = "MAT4";
2191
- return AccessorType;
2192
- }({});
2193
- /**
2194
- * The name of the node's TRS property to modify, or the weights of the Morph Targets it instantiates
2195
- */ var AnimationChannelTargetPath = /*#__PURE__*/ function(AnimationChannelTargetPath) {
2196
- /**
2197
- * Translation
2198
- */ AnimationChannelTargetPath["TRANSLATION"] = "translation";
2199
- /**
2200
- * Rotation
2201
- */ AnimationChannelTargetPath["ROTATION"] = "rotation";
2202
- /**
2203
- * Scale
2204
- */ AnimationChannelTargetPath["SCALE"] = "scale";
2205
- /**
2206
- * Weights
2207
- */ AnimationChannelTargetPath["WEIGHTS"] = "weights";
2208
- return AnimationChannelTargetPath;
2209
- }({});
2210
- /**
2211
- * Interpolation algorithm
2212
- */ var AnimationSamplerInterpolation = /*#__PURE__*/ function(AnimationSamplerInterpolation) {
2213
- /**
2214
- * The animated values are linearly interpolated between keyframes
2215
- */ AnimationSamplerInterpolation["Linear"] = "LINEAR";
2216
- /**
2217
- * The animated values remain constant to the output of the first keyframe, until the next keyframe
2218
- */ AnimationSamplerInterpolation["Step"] = "STEP";
2219
- /**
2220
- * The animation's interpolation is computed using a cubic spline with specified tangents
2221
- */ AnimationSamplerInterpolation["CubicSpine"] = "CUBICSPLINE";
2222
- return AnimationSamplerInterpolation;
2223
- }({});
2224
- /**
2225
- * A camera's projection. A node can reference a camera to apply a transform to place the camera in the scene
2226
- */ var CameraType = /*#__PURE__*/ function(CameraType) {
2227
- /**
2228
- * A perspective camera containing properties to create a perspective projection matrix
2229
- */ CameraType["PERSPECTIVE"] = "perspective";
2230
- /**
2231
- * An orthographic camera containing properties to create an orthographic projection matrix
2232
- */ CameraType["ORTHOGRAPHIC"] = "orthographic";
2233
- return CameraType;
2234
- }({});
2235
- /**
2236
- * The alpha rendering mode of the material
2237
- */ var MaterialAlphaMode = /*#__PURE__*/ function(MaterialAlphaMode) {
2238
- /**
2239
- * The alpha value is ignored and the rendered output is fully opaque
2240
- */ MaterialAlphaMode["OPAQUE"] = "OPAQUE";
2241
- /**
2242
- * The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value
2243
- */ MaterialAlphaMode["MASK"] = "MASK";
2244
- /**
2245
- * 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)
2246
- */ MaterialAlphaMode["BLEND"] = "BLEND";
2247
- return MaterialAlphaMode;
2248
- }({});
2249
- /**
2250
- * Magnification filter. Valid values correspond to WebGL enums: 9728 (NEAREST) and 9729 (LINEAR)
2251
- */ var TextureMagFilter = /*#__PURE__*/ function(TextureMagFilter) {
2252
- /**
2253
- * Nearest
2254
- */ TextureMagFilter[TextureMagFilter["NEAREST"] = 9728] = "NEAREST";
2255
- /**
2256
- * Linear
2257
- */ TextureMagFilter[TextureMagFilter["LINEAR"] = 9729] = "LINEAR";
2258
- return TextureMagFilter;
2259
- }({});
2260
- /**
2261
- * Minification filter. All valid values correspond to WebGL enums
2262
- */ var TextureMinFilter = /*#__PURE__*/ function(TextureMinFilter) {
2263
- /**
2264
- * Nearest
2265
- */ TextureMinFilter[TextureMinFilter["NEAREST"] = 9728] = "NEAREST";
2266
- /**
2267
- * Linear
2268
- */ TextureMinFilter[TextureMinFilter["LINEAR"] = 9729] = "LINEAR";
2269
- /**
2270
- * Nearest Mip-Map Nearest
2271
- */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_NEAREST"] = 9984] = "NEAREST_MIPMAP_NEAREST";
2272
- /**
2273
- * Linear Mipmap Nearest
2274
- */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_NEAREST"] = 9985] = "LINEAR_MIPMAP_NEAREST";
2275
- /**
2276
- * Nearest Mipmap Linear
2277
- */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_LINEAR"] = 9986] = "NEAREST_MIPMAP_LINEAR";
2278
- /**
2279
- * Linear Mipmap Linear
2280
- */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_LINEAR"] = 9987] = "LINEAR_MIPMAP_LINEAR";
2281
- return TextureMinFilter;
2282
- }({});
2283
- /**
2284
- * S (U) wrapping mode. All valid values correspond to WebGL enums
2285
- */ var TextureWrapMode = /*#__PURE__*/ function(TextureWrapMode) {
2286
- /**
2287
- * Clamp to Edge
2288
- */ TextureWrapMode[TextureWrapMode["CLAMP_TO_EDGE"] = 33071] = "CLAMP_TO_EDGE";
2289
- /**
2290
- * Mirrored Repeat
2291
- */ TextureWrapMode[TextureWrapMode["MIRRORED_REPEAT"] = 33648] = "MIRRORED_REPEAT";
2292
- /**
2293
- * Repeat
2294
- */ TextureWrapMode[TextureWrapMode["REPEAT"] = 10497] = "REPEAT";
2295
- return TextureWrapMode;
2296
- }({});
2297
-
2298
- /**
2299
- * @internal
2300
- */ var GLTFParserContext = /*#__PURE__*/ function() {
2301
- function GLTFParserContext(glTFResource, resourceManager, params) {
2302
- var _this = this;
2303
- this.glTFResource = glTFResource;
2304
- this.resourceManager = resourceManager;
2305
- this.params = params;
2306
- this.accessorBufferCache = {};
2307
- this.needAnimatorController = false;
2308
- this./** @internal */ _getPromises = [];
2309
- this._resourceCache = new Map();
2310
- this._progress = {
2311
- taskDetail: {},
2312
- taskComplete: {
2313
- loaded: 0,
2314
- total: 0
2140
+ }
2141
+ function concat(arrays) {
2142
+ if (arrays.length === 1) return arrays[0];
2143
+ var totalByteLength = 0;
2144
+ for(var i = 0; i < arrays.length; i++){
2145
+ totalByteLength += arrays[i].byteLength;
2146
+ }
2147
+ var result = new Uint8Array(totalByteLength);
2148
+ var byteOffset = 0;
2149
+ for(var i1 = 0; i1 < arrays.length; i1++){
2150
+ result.set(arrays[i1], byteOffset);
2151
+ byteOffset += arrays[i1].byteLength;
2152
+ }
2153
+ return result;
2154
+ }
2155
+ var ktx2File = new KTX2File(new Uint8Array(buffer));
2156
+ function cleanup() {
2157
+ ktx2File.close();
2158
+ ktx2File.delete();
2159
+ }
2160
+ if (!ktx2File.isValid()) {
2161
+ cleanup();
2162
+ throw new Error("Invalid or unsupported .ktx2 file");
2163
+ }
2164
+ if (!ktx2File.startTranscoding()) {
2165
+ cleanup();
2166
+ throw new Error("KTX2 startTranscoding failed");
2167
+ }
2168
+ var width = ktx2File.getWidth();
2169
+ var height = ktx2File.getHeight();
2170
+ var layerCount = ktx2File.getLayers() || 1;
2171
+ var levelCount = ktx2File.getLevels();
2172
+ var hasAlpha = ktx2File.getHasAlpha();
2173
+ var faceCount = ktx2File.getFaces();
2174
+ var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2175
+ var faces = new Array(faceCount);
2176
+ var isBC = format === 2 || format === 3 || format === 7;
2177
+ for(var face = 0; face < faceCount; face++){
2178
+ var mipmaps = new Array(levelCount);
2179
+ for(var mip = 0; mip < levelCount; mip++){
2180
+ var layerMips = new Array(layerCount);
2181
+ var mipWidth = void 0, mipHeight = void 0;
2182
+ for(var layer = 0; layer < layerCount; layer++){
2183
+ var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2184
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2185
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2186
+ width = mipWidth = levelInfo.width;
2187
+ height = mipHeight = levelInfo.height;
2188
+ 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.");
2189
+ } else {
2190
+ mipWidth = levelInfo.origWidth;
2191
+ mipHeight = levelInfo.origHeight;
2192
+ }
2193
+ var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2194
+ var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2195
+ if (targetFormat === 10) {
2196
+ dst = new Uint16Array(dst.buffer, dst.byteOffset, dst.byteLength / Uint16Array.BYTES_PER_ELEMENT);
2197
+ }
2198
+ if (!status) {
2199
+ cleanup();
2200
+ throw new Error("transcodeImage failed.");
2201
+ }
2202
+ layerMips[layer] = dst;
2315
2203
  }
2316
- };
2317
- this./**
2318
- * @internal
2319
- */ _onTaskDetail = function(url, loaded, total) {
2320
- var _this__progress_taskDetail, _url;
2321
- var detail = (_this__progress_taskDetail = _this._progress.taskDetail)[_url = url] || (_this__progress_taskDetail[_url] = {});
2322
- detail.loaded = loaded;
2323
- detail.total = total;
2324
- _this._setTaskDetailProgress(url, loaded, total);
2325
- };
2326
- this.contentRestorer = new GLTFContentRestorer(glTFResource);
2204
+ mipmaps[mip] = {
2205
+ data: concat(layerMips),
2206
+ width: mipWidth,
2207
+ height: mipHeight
2208
+ };
2209
+ }
2210
+ faces[face] = mipmaps;
2327
2211
  }
2328
- var _proto = GLTFParserContext.prototype;
2329
- _proto.get = function get(type, index) {
2212
+ cleanup();
2213
+ return {
2214
+ faces: faces,
2215
+ width: width,
2216
+ height: height,
2217
+ hasAlpha: hasAlpha,
2218
+ faceCount: faceCount,
2219
+ format: format
2220
+ };
2221
+ }
2222
+
2223
+ /** @internal */ var BinomialLLCTranscoder = /*#__PURE__*/ function(AbstractTranscoder) {
2224
+ _inherits(BinomialLLCTranscoder, AbstractTranscoder);
2225
+ function BinomialLLCTranscoder(workerLimitCount) {
2226
+ return AbstractTranscoder.call(this, workerLimitCount) || this;
2227
+ }
2228
+ var _proto = BinomialLLCTranscoder.prototype;
2229
+ _proto._initTranscodeWorkerPool = function _initTranscodeWorkerPool() {
2330
2230
  var _this = this;
2331
- var parser = GLTFParserContext._parsers[type];
2332
- if (!parser) {
2333
- return engineCore.AssetPromise.resolve(null);
2334
- }
2335
- var cache = this._resourceCache;
2336
- var cacheKey = index === undefined ? "" + type : type + ":" + index;
2337
- var resource = cache.get(cacheKey);
2338
- if (resource) {
2339
- return resource;
2340
- }
2341
- var glTFSchemaKey = glTFSchemaMap[type];
2342
- var isSubAsset = !!glTFResourceMap[type];
2343
- if (glTFSchemaKey) {
2344
- var glTFItems = this.glTF[glTFSchemaKey];
2345
- if (glTFItems && (index === undefined || glTFItems[index])) {
2346
- if (index === undefined) {
2347
- resource = type === 8 ? glTFItems.map(function(_, index) {
2348
- return _this.get(type, index);
2349
- }) : engineCore.AssetPromise.all(glTFItems.map(function(_, index) {
2350
- return _this.get(type, index);
2231
+ return Promise.all([
2232
+ fetch("https://mdn.alipayobjects.com/rms/afts/file/A*J8IrSL8WE8EAAAAAQ6AAAAgAehQnAQ/basis_transcoder.js").then(function(res) {
2233
+ return res.text();
2234
+ }),
2235
+ fetch("https://mdn.alipayobjects.com/rms/afts/file/A*F3duSLqOP2sAAAAAXjAAAAgAehQnAQ/basis_transcoder.wasm").then(function(res) {
2236
+ return res.arrayBuffer();
2237
+ })
2238
+ ]).then(function(param) {
2239
+ var jsCode = param[0], wasmBuffer = param[1];
2240
+ if (_this.workerLimitCount === 0) {
2241
+ return new Promise(function(resolve, reject) {
2242
+ var scriptDom = document.createElement("script");
2243
+ scriptDom.src = URL.createObjectURL(new Blob([
2244
+ jsCode
2245
+ ], {
2246
+ type: "application/javascript"
2351
2247
  }));
2352
- } else {
2353
- resource = parser.parse(this, index);
2354
- isSubAsset && this._handleSubAsset(resource, type, index);
2355
- }
2248
+ document.body.appendChild(scriptDom);
2249
+ scriptDom.onload = function() {
2250
+ init(wasmBuffer).then(function() {
2251
+ resolve(null);
2252
+ });
2253
+ };
2254
+ scriptDom.onerror = function() {
2255
+ reject();
2256
+ };
2257
+ });
2356
2258
  } else {
2357
- resource = engineCore.AssetPromise.resolve(null);
2259
+ var funcCode = TranscodeWorkerCode.toString();
2260
+ var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2261
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2262
+ var workerURL = URL.createObjectURL(new Blob([
2263
+ workerCode
2264
+ ], {
2265
+ type: "application/javascript"
2266
+ }));
2267
+ return _this._createTranscodePool(workerURL, wasmBuffer);
2358
2268
  }
2269
+ });
2270
+ };
2271
+ _proto.transcode = function transcode1(buffer, format) {
2272
+ if (this.workerLimitCount === 0) {
2273
+ return init().then(function(KTX2File) {
2274
+ return transcode(buffer, format, KTX2File);
2275
+ });
2359
2276
  } else {
2360
- resource = parser.parse(this, index);
2361
- isSubAsset && this._handleSubAsset(resource, type, index);
2362
- }
2363
- if (_instanceof(resource, engineCore.AssetPromise)) {
2364
- this._getPromises.push(resource);
2277
+ return this._transcodeWorkerPool.postMessage({
2278
+ buffer: buffer,
2279
+ format: format,
2280
+ type: "transcode"
2281
+ });
2365
2282
  }
2366
- cache.set(cacheKey, resource);
2367
- return resource;
2368
2283
  };
2369
- _proto.parse = function parse() {
2370
- var _this = this;
2371
- var promise = this.get(0).then(function(json) {
2372
- _this.glTF = json;
2373
- _this.needAnimatorController = !!(json.skins || json.animations);
2374
- return engineCore.AssetPromise.all([
2375
- _this.get(1),
2376
- _this.get(5),
2377
- _this.get(6),
2378
- _this.get(7),
2379
- _this.get(9),
2380
- _this.get(10),
2381
- _this.get(11),
2382
- _this.get(2)
2383
- ]).then(function() {
2384
- var glTFResource = _this.glTFResource;
2385
- var animatorController = glTFResource.animatorController;
2386
- if (animatorController) {
2387
- var animator = glTFResource._defaultSceneRoot.addComponent(engineCore.Animator);
2388
- animator.animatorController = animatorController;
2389
- }
2390
- _this.resourceManager.addContentRestorer(_this.contentRestorer);
2391
- return glTFResource;
2392
- });
2393
- });
2394
- this._addTaskCompletePromise(promise);
2395
- return promise;
2284
+ return BinomialLLCTranscoder;
2285
+ }(AbstractTranscoder);
2286
+
2287
+ exports.KTX2Loader = /*#__PURE__*/ function(Loader) {
2288
+ _inherits(KTX2Loader, Loader);
2289
+ function KTX2Loader() {
2290
+ return Loader.apply(this, arguments) || this;
2291
+ }
2292
+ var _proto = KTX2Loader.prototype;
2293
+ _proto.initialize = function initialize(_, configuration) {
2294
+ if (configuration.ktx2Loader) {
2295
+ var options = configuration.ktx2Loader;
2296
+ if (options.priorityFormats) {
2297
+ KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
2298
+ KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
2299
+ }
2300
+ return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
2301
+ }
2396
2302
  };
2397
2303
  /**
2398
2304
  * @internal
2399
- */ _proto._addTaskCompletePromise = function _addTaskCompletePromise(taskPromise) {
2400
- var _this = this;
2401
- var task = this._progress.taskComplete;
2402
- task.total += 1;
2403
- taskPromise.finally(function() {
2404
- _this._setTaskCompleteProgress(++task.loaded, task.total);
2405
- }).catch(function(e) {
2406
- // Need catch to avoid unhandled rejection
2407
- });
2408
- };
2409
- _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
2410
- var _this = this;
2411
- var glTFResourceKey = glTFResourceMap[type];
2412
- if (type === 8) {
2413
- var _this_glTFResource, _glTFResourceKey;
2414
- ((_this_glTFResource = this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = resource;
2415
- } else {
2416
- var url = this.glTFResource.url;
2417
- resource.then(function(item) {
2418
- if (index == undefined) {
2419
- _this.glTFResource[glTFResourceKey] = item;
2420
- } else {
2421
- var _this_glTFResource, _glTFResourceKey;
2422
- ((_this_glTFResource = _this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = item;
2423
- }
2424
- if (type === 7) {
2425
- for(var i = 0, length = item.length; i < length; i++){
2426
- var mesh = item[i];
2427
- // @ts-ignore
2428
- _this.resourceManager._onSubAssetSuccess(url, glTFResourceKey + "[" + index + "][" + i + "]", mesh);
2429
- }
2430
- } else {
2431
- // @ts-ignore
2432
- _this.resourceManager._onSubAssetSuccess(url, "" + glTFResourceKey + (index === undefined ? "" : "[" + index + "]"), item);
2433
- var _this_glTF_scene;
2434
- if (type === 2 && ((_this_glTF_scene = _this.glTF.scene) != null ? _this_glTF_scene : 0) === index) {
2435
- // @ts-ignore
2436
- _this.resourceManager._onSubAssetSuccess(url, "defaultSceneRoot", item);
2437
- }
2438
- }
2439
- }).catch(function(e) {
2440
- engineCore.Logger.error("GLTFParserContext", "Failed to load " + glTFResourceKey + " " + index + ": " + e);
2305
+ */ _proto.load = function load(item, resourceManager) {
2306
+ return new engineCore.AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
2307
+ var requestConfig = _extends({}, item, {
2308
+ type: "arraybuffer"
2441
2309
  });
2442
- }
2310
+ var url = item.url;
2311
+ resourceManager// @ts-ignore
2312
+ ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
2313
+ return KTX2Loader._parseBuffer(new Uint8Array(buffer), resourceManager.engine, item.params).then(function(param) {
2314
+ var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
2315
+ return KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params);
2316
+ }).then(function(texture) {
2317
+ resourceManager.addContentRestorer(new KTX2ContentRestorer(texture, url, requestConfig));
2318
+ resolve(texture);
2319
+ });
2320
+ }).catch(reject);
2321
+ });
2443
2322
  };
2444
- GLTFParserContext.addParser = function addParser(parserType, parser) {
2445
- this._parsers[parserType] = parser;
2323
+ /**
2324
+ * Release ktx2 transcoder worker.
2325
+ * @remarks If use loader after releasing, we should release again.
2326
+ */ KTX2Loader.release = function release() {
2327
+ if (this._binomialLLCTranscoder) this._binomialLLCTranscoder.destroy();
2328
+ this._binomialLLCTranscoder = null;
2446
2329
  };
2447
- return GLTFParserContext;
2448
- }();
2449
- GLTFParserContext._parsers = {};
2450
- /**
2451
- * @internal
2452
- */ var BufferInfo = function BufferInfo(data, interleaved, stride) {
2453
- this.data = data;
2454
- this.interleaved = interleaved;
2455
- this.stride = stride;
2456
- this.vertexBindingInfos = {};
2457
- };
2458
- var GLTFParserType = /*#__PURE__*/ function(GLTFParserType) {
2459
- GLTFParserType[GLTFParserType["Schema"] = 0] = "Schema";
2460
- GLTFParserType[GLTFParserType["Validator"] = 1] = "Validator";
2461
- GLTFParserType[GLTFParserType["Scene"] = 2] = "Scene";
2462
- GLTFParserType[GLTFParserType["Buffer"] = 3] = "Buffer";
2463
- GLTFParserType[GLTFParserType["BufferView"] = 4] = "BufferView";
2464
- GLTFParserType[GLTFParserType["Texture"] = 5] = "Texture";
2465
- GLTFParserType[GLTFParserType["Material"] = 6] = "Material";
2466
- GLTFParserType[GLTFParserType["Mesh"] = 7] = "Mesh";
2467
- GLTFParserType[GLTFParserType["Entity"] = 8] = "Entity";
2468
- GLTFParserType[GLTFParserType["Skin"] = 9] = "Skin";
2469
- GLTFParserType[GLTFParserType["Animation"] = 10] = "Animation";
2470
- GLTFParserType[GLTFParserType["AnimatorController"] = 11] = "AnimatorController";
2471
- return GLTFParserType;
2472
- }({});
2473
- var _obj$2;
2474
- 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);
2475
- var _obj1$1;
2476
- 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);
2477
- function registerGLTFParser(pipeline) {
2478
- return function(Parser) {
2479
- var parser = new Parser();
2480
- GLTFParserContext.addParser(pipeline, parser);
2330
+ /** @internal */ KTX2Loader._parseBuffer = function _parseBuffer(buffer, engine, params) {
2331
+ var ktx2Container = new KTX2Container(buffer);
2332
+ var _params_priorityFormats;
2333
+ var formatPriorities = (_params_priorityFormats = params == null ? void 0 : params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.colorModel];
2334
+ var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2335
+ var binomialLLCWorker = KTX2Loader._getBinomialLLCTranscoder();
2336
+ return binomialLLCWorker.init().then(function() {
2337
+ return binomialLLCWorker.transcode(buffer, targetFormat);
2338
+ }).then(function(result) {
2339
+ return {
2340
+ ktx2Container: ktx2Container,
2341
+ engine: engine,
2342
+ result: result,
2343
+ targetFormat: targetFormat,
2344
+ params: ktx2Container.keyValue["GalaceanTextureParams"]
2345
+ };
2346
+ });
2481
2347
  };
2482
- }
2483
-
2484
- /**
2485
- * @internal
2486
- */ var GLTFUtils = /*#__PURE__*/ function() {
2487
- function GLTFUtils() {}
2488
- GLTFUtils.floatBufferToVector2Array = function floatBufferToVector2Array(buffer) {
2489
- var bufferLen = buffer.length;
2490
- var array = new Array(bufferLen / 2);
2491
- for(var i = 0; i < bufferLen; i += 2){
2492
- array[i / 2] = new engineMath.Vector2(buffer[i], buffer[i + 1]);
2348
+ /** @internal */ KTX2Loader._createTextureByBuffer = function _createTextureByBuffer(engine, isSRGB, transcodeResult, targetFormat, params, restoredTexture) {
2349
+ var width = transcodeResult.width, height = transcodeResult.height, faces = transcodeResult.faces;
2350
+ var faceCount = faces.length;
2351
+ var mipmaps = faces[0];
2352
+ var mipmap = mipmaps.length > 1;
2353
+ var engineFormat = this._getEngineTextureFormat(targetFormat, transcodeResult);
2354
+ var texture;
2355
+ if (faceCount !== 6) {
2356
+ texture = restoredTexture || new engineCore.Texture2D(engine, width, height, engineFormat, mipmap, isSRGB);
2357
+ for(var mipLevel = 0; mipLevel < mipmaps.length; mipLevel++){
2358
+ var data = mipmaps[mipLevel].data;
2359
+ texture.setPixelBuffer(data, mipLevel);
2360
+ }
2361
+ } else {
2362
+ texture = restoredTexture || new engineCore.TextureCube(engine, height, engineFormat, mipmap, isSRGB);
2363
+ for(var i = 0; i < faces.length; i++){
2364
+ var faceData = faces[i];
2365
+ for(var mipLevel1 = 0; mipLevel1 < mipmaps.length; mipLevel1++){
2366
+ texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + i, faceData[mipLevel1].data, mipLevel1);
2367
+ }
2368
+ }
2493
2369
  }
2494
- return array;
2495
- };
2496
- GLTFUtils.floatBufferToVector3Array = function floatBufferToVector3Array(buffer) {
2497
- var bufferLen = buffer.length;
2498
- var array = new Array(bufferLen / 3);
2499
- for(var i = 0; i < bufferLen; i += 3){
2500
- array[i / 3] = new engineMath.Vector3(buffer[i], buffer[i + 1], buffer[i + 2]);
2370
+ if (params) {
2371
+ texture.wrapModeU = params[0];
2372
+ texture.wrapModeV = params[1];
2373
+ texture.filterMode = params[2];
2374
+ texture.anisoLevel = params[3];
2501
2375
  }
2502
- return array;
2376
+ return texture;
2503
2377
  };
2504
- GLTFUtils.floatBufferToVector4Array = function floatBufferToVector4Array(buffer) {
2505
- var bufferLen = buffer.length;
2506
- var array = new Array(bufferLen / 4);
2507
- for(var i = 0; i < bufferLen; i += 4){
2508
- array[i / 4] = new engineMath.Vector4(buffer[i], buffer[i + 1], buffer[i + 2], buffer[i + 3]);
2378
+ KTX2Loader._decideTargetFormat = function _decideTargetFormat(engine, ktx2Container, priorityFormats) {
2379
+ var renderer = engine._hardwareRenderer;
2380
+ var isSRGB = ktx2Container.isSRGB, pixelWidth = ktx2Container.pixelWidth, pixelHeight = ktx2Container.pixelHeight;
2381
+ var targetFormat = this._detectSupportedFormat(renderer, priorityFormats, isSRGB);
2382
+ if (targetFormat === KTX2TargetFormat.PVRTC && (!engineMath.MathUtil.isPowerOf2(pixelWidth) || !engineMath.MathUtil.isPowerOf2(pixelHeight) || pixelWidth !== pixelHeight)) {
2383
+ engineCore.Logger.warn("PVRTC image need power of 2 and width===height, downgrade to RGBA8");
2384
+ return KTX2TargetFormat.R8G8B8A8;
2509
2385
  }
2510
- return array;
2386
+ if (targetFormat === null) {
2387
+ engineCore.Logger.warn("Can't support any compressed texture, downgrade to RGBA8");
2388
+ return KTX2TargetFormat.R8G8B8A8;
2389
+ }
2390
+ return targetFormat;
2511
2391
  };
2512
- GLTFUtils.floatBufferToColorArray = function floatBufferToColorArray(buffer, isColor3) {
2513
- var bufferLen = buffer.length;
2514
- var colors = new Array(bufferLen / (isColor3 ? 3 : 4));
2515
- if (isColor3) {
2516
- for(var i = 0; i < bufferLen; i += 3){
2517
- colors[i / 3] = new engineMath.Color(buffer[i], buffer[i + 1], buffer[i + 2], 1.0);
2518
- }
2519
- } else {
2520
- for(var i1 = 0; i1 < bufferLen; i1 += 4){
2521
- colors[i1 / 4] = new engineMath.Color(buffer[i1], buffer[i1 + 1], buffer[i1 + 2], buffer[i1 + 3]);
2392
+ KTX2Loader._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats, isSRGB) {
2393
+ for(var i = 0; i < priorityFormats.length; i++){
2394
+ var _this__capabilityMap_format;
2395
+ var format = priorityFormats[i];
2396
+ var capabilities = (_this__capabilityMap_format = this._capabilityMap[format]) == null ? void 0 : _this__capabilityMap_format[isSRGB ? DFDTransferFunction.sRGB : DFDTransferFunction.linear];
2397
+ if (capabilities) {
2398
+ for(var j = 0; j < capabilities.length; j++){
2399
+ if (renderer.canIUse(capabilities[j])) {
2400
+ return format;
2401
+ }
2402
+ }
2403
+ } else {
2404
+ switch(priorityFormats[i]){
2405
+ case KTX2TargetFormat.R8G8B8A8:
2406
+ return format;
2407
+ case KTX2TargetFormat.R8:
2408
+ case KTX2TargetFormat.R8G8:
2409
+ if (renderer.isWebGL2) return format;
2410
+ }
2522
2411
  }
2523
2412
  }
2524
- return colors;
2413
+ return null;
2525
2414
  };
2526
- /**
2527
- * Get the number of bytes occupied by accessor type.
2528
- */ GLTFUtils.getAccessorTypeSize = function getAccessorTypeSize(accessorType) {
2529
- switch(accessorType){
2530
- case AccessorType.SCALAR:
2531
- return 1;
2532
- case AccessorType.VEC2:
2533
- return 2;
2534
- case AccessorType.VEC3:
2535
- return 3;
2536
- case AccessorType.VEC4:
2537
- return 4;
2538
- case AccessorType.MAT2:
2539
- return 4;
2540
- case AccessorType.MAT3:
2541
- return 9;
2542
- case AccessorType.MAT4:
2543
- return 16;
2415
+ KTX2Loader._getBinomialLLCTranscoder = function _getBinomialLLCTranscoder(workerCount) {
2416
+ if (workerCount === void 0) workerCount = 4;
2417
+ var _this__binomialLLCTranscoder;
2418
+ return (_this__binomialLLCTranscoder = this._binomialLLCTranscoder) != null ? _this__binomialLLCTranscoder : this._binomialLLCTranscoder = new BinomialLLCTranscoder(workerCount);
2419
+ };
2420
+ KTX2Loader._getEngineTextureFormat = function _getEngineTextureFormat(basisFormat, transcodeResult) {
2421
+ var hasAlpha = transcodeResult.hasAlpha;
2422
+ switch(basisFormat){
2423
+ case KTX2TargetFormat.ASTC:
2424
+ return engineCore.TextureFormat.ASTC_4x4;
2425
+ case KTX2TargetFormat.ETC:
2426
+ return hasAlpha ? engineCore.TextureFormat.ETC2_RGBA8 : engineCore.TextureFormat.ETC2_RGB;
2427
+ case KTX2TargetFormat.BC7:
2428
+ return engineCore.TextureFormat.BC7;
2429
+ case KTX2TargetFormat.BC1_BC3:
2430
+ return hasAlpha ? engineCore.TextureFormat.BC3 : engineCore.TextureFormat.BC1;
2431
+ case KTX2TargetFormat.PVRTC:
2432
+ return hasAlpha ? engineCore.TextureFormat.PVRTC_RGBA4 : engineCore.TextureFormat.PVRTC_RGB4;
2433
+ case KTX2TargetFormat.R8G8B8A8:
2434
+ return engineCore.TextureFormat.R8G8B8A8;
2435
+ case KTX2TargetFormat.BC6H:
2436
+ return engineCore.TextureFormat.BC6H;
2437
+ case KTX2TargetFormat.ASTC_HDR_4x4:
2438
+ return engineCore.TextureFormat.ASTC_4x4;
2439
+ case KTX2TargetFormat.R16G16B16A16:
2440
+ return engineCore.TextureFormat.R16G16B16A16;
2544
2441
  }
2545
2442
  };
2546
- /**
2547
- * Get the TypedArray corresponding to the component type.
2548
- */ GLTFUtils.getComponentType = function getComponentType(componentType) {
2549
- switch(componentType){
2550
- case AccessorComponentType.BYTE:
2551
- return Int8Array;
2552
- case AccessorComponentType.UNSIGNED_BYTE:
2553
- return Uint8Array;
2554
- case AccessorComponentType.SHORT:
2555
- return Int16Array;
2556
- case AccessorComponentType.UNSIGNED_SHORT:
2557
- return Uint16Array;
2558
- case AccessorComponentType.UNSIGNED_INT:
2559
- return Uint32Array;
2560
- case AccessorComponentType.FLOAT:
2561
- return Float32Array;
2443
+ return KTX2Loader;
2444
+ }(engineCore.Loader);
2445
+ var _obj$2;
2446
+ exports.KTX2Loader._priorityFormats = (_obj$2 = {}, _obj$2[ColorModel.ETC1S] = [
2447
+ KTX2TargetFormat.ETC,
2448
+ KTX2TargetFormat.BC7,
2449
+ KTX2TargetFormat.ASTC,
2450
+ KTX2TargetFormat.BC1_BC3,
2451
+ KTX2TargetFormat.PVRTC
2452
+ ], _obj$2[ColorModel.UASTC_LDR_4X4] = [
2453
+ KTX2TargetFormat.ASTC,
2454
+ KTX2TargetFormat.BC7,
2455
+ KTX2TargetFormat.ETC,
2456
+ KTX2TargetFormat.BC1_BC3,
2457
+ KTX2TargetFormat.PVRTC
2458
+ ], _obj$2[ColorModel.UASTC_HDR_4X4] = [
2459
+ KTX2TargetFormat.ASTC_HDR_4x4,
2460
+ KTX2TargetFormat.BC6H,
2461
+ KTX2TargetFormat.R16G16B16A16
2462
+ ], _obj$2);
2463
+ var _obj1$1, _obj2, _obj3, _obj4, _obj5, _obj6, _obj7, _obj8, _obj9;
2464
+ exports.KTX2Loader._capabilityMap = (_obj9 = {}, _obj9[KTX2TargetFormat.ASTC] = (_obj1$1 = {}, _obj1$1[DFDTransferFunction.linear] = [
2465
+ engineCore.GLCapabilityType.astc,
2466
+ engineCore.GLCapabilityType.astc_webkit
2467
+ ], _obj1$1[DFDTransferFunction.sRGB] = [
2468
+ engineCore.GLCapabilityType.astc,
2469
+ engineCore.GLCapabilityType.astc_webkit
2470
+ ], _obj1$1), _obj9[KTX2TargetFormat.ETC] = (_obj2 = {}, _obj2[DFDTransferFunction.linear] = [
2471
+ engineCore.GLCapabilityType.etc,
2472
+ engineCore.GLCapabilityType.etc_webkit
2473
+ ], _obj2[DFDTransferFunction.sRGB] = [
2474
+ engineCore.GLCapabilityType.etc,
2475
+ engineCore.GLCapabilityType.etc_webkit
2476
+ ], _obj2), _obj9[KTX2TargetFormat.BC7] = (_obj3 = {}, _obj3[DFDTransferFunction.linear] = [
2477
+ engineCore.GLCapabilityType.bptc
2478
+ ], _obj3[DFDTransferFunction.sRGB] = [
2479
+ engineCore.GLCapabilityType.bptc
2480
+ ], _obj3), _obj9[KTX2TargetFormat.BC1_BC3] = (_obj4 = {}, _obj4[DFDTransferFunction.linear] = [
2481
+ engineCore.GLCapabilityType.s3tc
2482
+ ], _obj4[DFDTransferFunction.sRGB] = [
2483
+ engineCore.GLCapabilityType.s3tc_srgb
2484
+ ], _obj4), _obj9[KTX2TargetFormat.BC6H] = (_obj5 = {}, _obj5[DFDTransferFunction.linear] = [
2485
+ engineCore.GLCapabilityType.bptc
2486
+ ], _obj5), _obj9[KTX2TargetFormat.ASTC_HDR_4x4] = (_obj6 = {}, _obj6[DFDTransferFunction.linear] = [
2487
+ engineCore.GLCapabilityType.astc_hdr
2488
+ ], _obj6), _obj9[KTX2TargetFormat.R16G16B16A16] = (_obj7 = {}, _obj7[DFDTransferFunction.linear] = [
2489
+ engineCore.GLCapabilityType.textureHalfFloat
2490
+ ], _obj7), _obj9[KTX2TargetFormat.PVRTC] = (_obj8 = {}, _obj8[DFDTransferFunction.linear] = [
2491
+ engineCore.GLCapabilityType.pvrtc,
2492
+ engineCore.GLCapabilityType.pvrtc_webkit
2493
+ ], _obj8), _obj9);
2494
+ exports.KTX2Loader = __decorate([
2495
+ engineCore.resourceLoader(engineCore.AssetType.KTX2, [
2496
+ "ktx2"
2497
+ ])
2498
+ ], exports.KTX2Loader);
2499
+ var KTX2ContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
2500
+ _inherits(KTX2ContentRestorer, ContentRestorer);
2501
+ function KTX2ContentRestorer(resource, url, requestConfig) {
2502
+ var _this;
2503
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
2504
+ return _this;
2505
+ }
2506
+ var _proto = KTX2ContentRestorer.prototype;
2507
+ _proto.restoreContent = function restoreContent() {
2508
+ var _this = this;
2509
+ var _this1 = this, resource = _this1.resource, requestConfig = _this1.requestConfig;
2510
+ var engine = resource.engine;
2511
+ return new engineCore.AssetPromise(function(resolve, reject) {
2512
+ engine.resourceManager// @ts-ignore
2513
+ ._request(_this.url, requestConfig).then(function(buffer) {
2514
+ return exports.KTX2Loader._parseBuffer(new Uint8Array(buffer), engine, requestConfig.params).then(function(param) {
2515
+ var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
2516
+ return exports.KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params, resource);
2517
+ });
2518
+ }).then(resolve).catch(reject);
2519
+ });
2520
+ };
2521
+ return KTX2ContentRestorer;
2522
+ }(engineCore.ContentRestorer);
2523
+
2524
+ var AmbientLightLoader = /*#__PURE__*/ function(Loader) {
2525
+ _inherits(AmbientLightLoader, Loader);
2526
+ function AmbientLightLoader() {
2527
+ return Loader.apply(this, arguments) || this;
2528
+ }
2529
+ var _proto = AmbientLightLoader.prototype;
2530
+ _proto.load = function load(item, resourceManager) {
2531
+ return new engineCore.AssetPromise(function(resolve, reject) {
2532
+ var requestConfig = _extends({}, item, {
2533
+ type: "arraybuffer"
2534
+ });
2535
+ var engine = resourceManager.engine;
2536
+ var url = item.url;
2537
+ resourceManager// @ts-ignore
2538
+ ._request(url, requestConfig).then(function(buffer) {
2539
+ var header = FileHeader.decode(buffer);
2540
+ var dataOffset = header.headerLength;
2541
+ var sh = new engineMath.SphericalHarmonics3();
2542
+ sh.copyFromArray(new Float32Array(buffer, dataOffset, 27));
2543
+ var textureOffset = dataOffset + AmbientLightLoader._shByteLength;
2544
+ return AmbientLightLoader._parseTexture(engine, buffer, textureOffset, header.dataLength - AmbientLightLoader._shByteLength).then(function(specularTexture) {
2545
+ engine.resourceManager.addContentRestorer(new AmbientLightContentRestorer(specularTexture, url, requestConfig));
2546
+ var ambientLight = new engineCore.AmbientLight(engine);
2547
+ ambientLight.diffuseMode = engineCore.DiffuseMode.SphericalHarmonics;
2548
+ ambientLight.diffuseSphericalHarmonics = sh;
2549
+ ambientLight.specularTexture = specularTexture;
2550
+ resolve(ambientLight);
2551
+ });
2552
+ }).catch(reject);
2553
+ });
2554
+ };
2555
+ /** @internal */ AmbientLightLoader._parseTexture = function _parseTexture(engine, buffer, textureOffset, textureLength, texture) {
2556
+ if (KTX2Container.checkMagic(buffer, textureOffset)) {
2557
+ var ktx2Data = new Uint8Array(buffer, textureOffset, textureLength);
2558
+ return exports.KTX2Loader._parseBuffer(ktx2Data, engine).then(function(param) {
2559
+ var ktx2Container = param.ktx2Container, _$engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
2560
+ var tex = exports.KTX2Loader._createTextureByBuffer(_$engine, ktx2Container.isSRGB, result, targetFormat, params, texture);
2561
+ tex.filterMode = engineCore.TextureFilterMode.Trilinear;
2562
+ return tex;
2563
+ });
2564
+ } else {
2565
+ var size = new Uint16Array(buffer, textureOffset, 1)[0];
2566
+ texture || (texture = new engineCore.TextureCube(engine, size, engineCore.TextureFormat.R16G16B16A16, true, false));
2567
+ texture.filterMode = engineCore.TextureFilterMode.Trilinear;
2568
+ var mipmapCount = texture.mipmapCount;
2569
+ var offset = textureOffset + 2;
2570
+ for(var mipLevel = 0; mipLevel < mipmapCount; mipLevel++){
2571
+ var mipSize = size >> mipLevel;
2572
+ for(var face = 0; face < 6; face++){
2573
+ var dataSize = mipSize * mipSize * 4;
2574
+ var data = new Uint16Array(buffer, offset, dataSize);
2575
+ offset += dataSize * 2;
2576
+ texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + face, data, mipLevel);
2577
+ }
2578
+ }
2579
+ return Promise.resolve(texture);
2562
2580
  }
2563
2581
  };
2564
- GLTFUtils.getNormalizedComponentScale = function getNormalizedComponentScale(componentType) {
2565
- // Reference: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
2566
- switch(componentType){
2567
- case AccessorComponentType.BYTE:
2568
- return 1 / 127;
2569
- case AccessorComponentType.UNSIGNED_BYTE:
2570
- return 1 / 255;
2571
- case AccessorComponentType.SHORT:
2572
- return 1 / 32767;
2573
- case AccessorComponentType.UNSIGNED_SHORT:
2574
- return 1 / 65535;
2575
- default:
2576
- throw new Error("Galacean.GLTFLoader: Unsupported normalized accessor component type.");
2577
- }
2582
+ return AmbientLightLoader;
2583
+ }(engineCore.Loader);
2584
+ AmbientLightLoader._shByteLength = 27 * 4;
2585
+ AmbientLightLoader = __decorate([
2586
+ engineCore.resourceLoader(engineCore.AssetType.AmbientLight, [
2587
+ "ambLight"
2588
+ ])
2589
+ ], AmbientLightLoader);
2590
+ /**
2591
+ * @internal
2592
+ */ var AmbientLightContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
2593
+ _inherits(AmbientLightContentRestorer, ContentRestorer);
2594
+ function AmbientLightContentRestorer(resource, url, requestConfig) {
2595
+ var _this;
2596
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
2597
+ return _this;
2598
+ }
2599
+ var _proto = AmbientLightContentRestorer.prototype;
2600
+ _proto.restoreContent = function restoreContent() {
2601
+ var _this = this;
2602
+ return new engineCore.AssetPromise(function(resolve, reject) {
2603
+ var resource = _this.resource;
2604
+ var engine = resource.engine;
2605
+ engine.resourceManager// @ts-ignore
2606
+ ._request(_this.url, _this.requestConfig).then(function(buffer) {
2607
+ var header = FileHeader.decode(buffer);
2608
+ var dataOffset = header.headerLength;
2609
+ var textureOffset = dataOffset + AmbientLightLoader._shByteLength;
2610
+ return AmbientLightLoader._parseTexture(engine, buffer, textureOffset, header.dataLength - AmbientLightLoader._shByteLength, resource);
2611
+ }).then(resolve).catch(reject);
2612
+ });
2578
2613
  };
2579
- GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
2580
- var componentType = accessor.componentType;
2581
- var TypedArray = GLTFUtils.getComponentType(componentType);
2582
- var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2583
- var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
2584
- var elementStride = dataElementSize * dataElementBytes;
2585
- var accessorCount = accessor.count;
2586
- var promise;
2587
- if (accessor.bufferView !== undefined) {
2588
- var bufferViewIndex = accessor.bufferView;
2589
- var bufferView = bufferViews[bufferViewIndex];
2590
- promise = context.get(GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
2591
- var bufferIndex = bufferView.buffer;
2592
- var _bufferViewData_byteOffset;
2593
- var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
2594
- var _accessor_byteOffset;
2595
- var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
2596
- var bufferStride = bufferView.byteStride;
2597
- var bufferInfo;
2598
- // According to the glTF official documentation only byteStride not undefined is allowed
2599
- if (bufferStride !== undefined && bufferStride !== elementStride) {
2600
- var bufferSlice = Math.floor(byteOffset / bufferStride);
2601
- var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
2602
- var accessorBufferCache = context.accessorBufferCache;
2603
- bufferInfo = accessorBufferCache[bufferCacheKey];
2604
- if (!bufferInfo) {
2605
- var offset = bufferByteOffset + bufferSlice * bufferStride;
2606
- var count = accessorCount * (bufferStride / dataElementBytes);
2607
- var data = new TypedArray(bufferViewData.buffer, offset, count);
2608
- accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
2609
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
2610
- }
2614
+ return AmbientLightContentRestorer;
2615
+ }(engineCore.ContentRestorer);
2616
+
2617
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2618
+ try {
2619
+ var info = gen[key](arg);
2620
+ var value = info.value;
2621
+ } catch (error) {
2622
+ reject(error);
2623
+ return;
2624
+ }
2625
+ if (info.done) resolve(value);
2626
+ else Promise.resolve(value).then(_next, _throw);
2627
+ }
2628
+ function _async_to_generator(fn) {
2629
+ return function() {
2630
+ var self = this, args = arguments;
2631
+
2632
+ return new Promise(function(resolve, reject) {
2633
+ var gen = fn.apply(self, args);
2634
+
2635
+ function _next(value) {
2636
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
2637
+ }
2638
+
2639
+ function _throw(err) {
2640
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
2641
+ }
2642
+
2643
+ _next(undefined);
2644
+ });
2645
+ };
2646
+ }
2647
+
2648
+ var FontLoader = /*#__PURE__*/ function(Loader) {
2649
+ _inherits(FontLoader, Loader);
2650
+ function FontLoader() {
2651
+ return Loader.apply(this, arguments) || this;
2652
+ }
2653
+ var _proto = FontLoader.prototype;
2654
+ _proto.load = function load(item, resourceManager) {
2655
+ var _this = this;
2656
+ return new engineCore.AssetPromise(function(resolve, reject) {
2657
+ resourceManager// @ts-ignore
2658
+ ._request(item.url, _extends({}, item, {
2659
+ type: "json"
2660
+ })).then(function(data) {
2661
+ var fontName = data.fontName, fontUrl = data.fontUrl;
2662
+ if (fontUrl) {
2663
+ _this._registerFont(fontName, fontUrl).then(function() {
2664
+ var font = new engineCore.Font(resourceManager.engine, fontName);
2665
+ resolve(font);
2666
+ }).catch(function(e) {
2667
+ reject("load font " + fontUrl + " fail");
2668
+ });
2611
2669
  } else {
2612
- var offset1 = bufferByteOffset + byteOffset;
2613
- var count1 = accessorCount * dataElementSize;
2614
- var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
2615
- bufferInfo = new BufferInfo(data1, false, elementStride);
2616
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
2670
+ var font = new engineCore.Font(resourceManager.engine, fontName);
2671
+ resolve(font);
2617
2672
  }
2618
- return bufferInfo;
2619
2673
  }).catch(function(e) {
2620
- engineCore.Logger.error("GLTFUtil getAccessorBuffer error", e);
2621
- });
2622
- } else {
2623
- var count = accessorCount * dataElementSize;
2624
- var data = new TypedArray(count);
2625
- var bufferInfo = new BufferInfo(data, false, elementStride);
2626
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(undefined, TypedArray, undefined, count));
2627
- promise = engineCore.AssetPromise.resolve(bufferInfo);
2628
- }
2629
- return accessor.sparse ? promise.then(function(bufferInfo) {
2630
- return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
2631
- return bufferInfo;
2674
+ reject(e);
2632
2675
  });
2633
- }) : promise;
2634
- };
2635
- GLTFUtils.bufferToVector3Array = function bufferToVector3Array(buffer, byteOffset, count, normalized, componentType) {
2636
- var baseOffset = byteOffset / buffer.BYTES_PER_ELEMENT;
2637
- var stride = buffer.length / count;
2638
- var vertices = new Array(count);
2639
- var factor = normalized ? GLTFUtils.getNormalizedComponentScale(componentType) : 1;
2640
- for(var i = 0; i < count; i++){
2641
- var index = baseOffset + i * stride;
2642
- vertices[i] = new engineMath.Vector3(buffer[index] * factor, buffer[index + 1] * factor, buffer[index + 2] * factor);
2643
- }
2644
- return vertices;
2676
+ });
2645
2677
  };
2646
- GLTFUtils.getBufferViewData = function getBufferViewData(bufferView, buffers) {
2647
- var _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset;
2648
- var arrayBuffer = buffers[bufferView.buffer];
2649
- return arrayBuffer.slice(byteOffset, byteOffset + bufferView.byteLength);
2678
+ _proto._registerFont = function _registerFont(fontName, fontUrl) {
2679
+ return _async_to_generator(function() {
2680
+ var fontFace;
2681
+ return __generator(this, function(_state) {
2682
+ switch(_state.label){
2683
+ case 0:
2684
+ fontFace = new FontFace(fontName, "url(" + fontUrl + ")");
2685
+ return [
2686
+ 4,
2687
+ fontFace.load()
2688
+ ];
2689
+ case 1:
2690
+ _state.sent();
2691
+ document.fonts.add(fontFace);
2692
+ return [
2693
+ 2
2694
+ ];
2695
+ }
2696
+ });
2697
+ })();
2650
2698
  };
2651
- /**
2652
- * Get accessor data.
2653
- */ GLTFUtils.processingSparseData = function processingSparseData(context, accessor, bufferInfo) {
2654
- var restoreInfo = bufferInfo.restoreInfo;
2655
- var bufferViews = context.glTF.bufferViews;
2656
- var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2657
- var TypedArray = GLTFUtils.getComponentType(accessor.componentType);
2658
- var data = bufferInfo.data.slice();
2659
- var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
2660
- var indicesBufferView = bufferViews[indices.bufferView];
2661
- var valuesBufferView = bufferViews[values.bufferView];
2662
- return engineCore.AssetPromise.all([
2663
- context.get(GLTFParserType.BufferView, indices.bufferView),
2664
- context.get(GLTFParserType.BufferView, values.bufferView)
2665
- ]).then(function(param) {
2666
- var indicesUint8Array = param[0], valuesUin8Array = param[1];
2667
- var _indices_byteOffset, _indicesUint8Array_byteOffset;
2668
- var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesUint8Array_byteOffset = indicesUint8Array.byteOffset) != null ? _indicesUint8Array_byteOffset : 0);
2669
- var indicesByteLength = indicesUint8Array.byteLength;
2670
- var _values_byteOffset, _valuesUin8Array_byteOffset;
2671
- var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesUin8Array_byteOffset = valuesUin8Array.byteOffset) != null ? _valuesUin8Array_byteOffset : 0);
2672
- var valuesByteLength = valuesUin8Array.byteLength;
2673
- restoreInfo.typeSize = accessorTypeSize;
2674
- restoreInfo.sparseCount = count;
2675
- var IndexTypeArray = GLTFUtils.getComponentType(indices.componentType);
2676
- var indexLength = indicesByteLength / IndexTypeArray.BYTES_PER_ELEMENT;
2677
- var indicesArray = new IndexTypeArray(indicesUint8Array.buffer, indicesByteOffset, indexLength);
2678
- restoreInfo.sparseIndices = new RestoreDataAccessor(indicesBufferView.buffer, IndexTypeArray, indicesByteOffset, indexLength);
2679
- var valueLength = valuesByteLength / TypedArray.BYTES_PER_ELEMENT;
2680
- var valuesArray = new TypedArray(valuesUin8Array.buffer, valuesByteOffset, valueLength);
2681
- restoreInfo.sparseValues = new RestoreDataAccessor(valuesBufferView.buffer, TypedArray, valuesByteOffset, valueLength);
2682
- for(var i = 0; i < count; i++){
2683
- var replaceIndex = indicesArray[i];
2684
- for(var j = 0; j < accessorTypeSize; j++){
2685
- data[replaceIndex * accessorTypeSize + j] = valuesArray[i * accessorTypeSize + j];
2699
+ return FontLoader;
2700
+ }(engineCore.Loader);
2701
+ FontLoader = __decorate([
2702
+ engineCore.resourceLoader(engineCore.AssetType.Font, [
2703
+ "font"
2704
+ ])
2705
+ ], FontLoader);
2706
+
2707
+ // Source: https://github.com/zeux/meshoptimizer/blob/master/js/meshopt_decoder.js
2708
+ var ready;
2709
+ function getMeshoptDecoder() {
2710
+ if (ready) return ready;
2711
+ 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";
2712
+ 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";
2713
+ var wasmpack = new Uint8Array([
2714
+ 32,
2715
+ 0,
2716
+ 65,
2717
+ 2,
2718
+ 1,
2719
+ 106,
2720
+ 34,
2721
+ 33,
2722
+ 3,
2723
+ 128,
2724
+ 11,
2725
+ 4,
2726
+ 13,
2727
+ 64,
2728
+ 6,
2729
+ 253,
2730
+ 10,
2731
+ 7,
2732
+ 15,
2733
+ 116,
2734
+ 127,
2735
+ 5,
2736
+ 8,
2737
+ 12,
2738
+ 40,
2739
+ 16,
2740
+ 19,
2741
+ 54,
2742
+ 20,
2743
+ 9,
2744
+ 27,
2745
+ 255,
2746
+ 113,
2747
+ 17,
2748
+ 42,
2749
+ 67,
2750
+ 24,
2751
+ 23,
2752
+ 146,
2753
+ 148,
2754
+ 18,
2755
+ 14,
2756
+ 22,
2757
+ 45,
2758
+ 70,
2759
+ 69,
2760
+ 56,
2761
+ 114,
2762
+ 101,
2763
+ 21,
2764
+ 25,
2765
+ 63,
2766
+ 75,
2767
+ 136,
2768
+ 108,
2769
+ 28,
2770
+ 118,
2771
+ 29,
2772
+ 73,
2773
+ 115
2774
+ ]);
2775
+ // @ts-ignore
2776
+ var wasm = engineCore.SystemInfo._detectSIMDSupported() ? wasm_simd : wasm_base;
2777
+ var instance;
2778
+ ready = WebAssembly.instantiate(unpack(wasm)).then(function(result) {
2779
+ instance = result.instance;
2780
+ instance.exports.__wasm_call_ctors();
2781
+ }).then(function() {
2782
+ return {
2783
+ workerCount: 4,
2784
+ ready: ready,
2785
+ useWorkers: function useWorkers(workerCount) {
2786
+ this.workerCount = workerCount != null ? workerCount : this.workerCount;
2787
+ initWorkers(this.workerCount);
2788
+ },
2789
+ decodeGltfBuffer: function decodeGltfBuffer(count, stride, source, mode, filter) {
2790
+ if (this.workerCount > 0 && workers.length === 0) this.useWorkers();
2791
+ if (workers.length > 0) return decodeWorker(count, stride, source, decoders[mode], filters[filter]);
2792
+ return ready.then(function() {
2793
+ var target = new Uint8Array(count * stride);
2794
+ decode(instance.exports[decoders[mode]], target, count, stride, source, instance.exports[filters[filter]]);
2795
+ return target;
2796
+ });
2797
+ },
2798
+ release: function release() {
2799
+ for(var i = 0; i < workers.length; i++){
2800
+ workers[i].object.terminate();
2686
2801
  }
2687
2802
  }
2688
- bufferInfo.data = data;
2689
- }).catch(function(e) {
2690
- engineCore.Logger.error("GLTFUtil processingSparseData error", e);
2691
- });
2692
- };
2693
- GLTFUtils.getIndexFormat = function getIndexFormat(type) {
2694
- switch(type){
2695
- case AccessorComponentType.UNSIGNED_BYTE:
2696
- return engineCore.IndexFormat.UInt8;
2697
- case AccessorComponentType.UNSIGNED_SHORT:
2698
- return engineCore.IndexFormat.UInt16;
2699
- case AccessorComponentType.UNSIGNED_INT:
2700
- return engineCore.IndexFormat.UInt32;
2701
- }
2702
- };
2703
- GLTFUtils.getElementFormat = function getElementFormat(type, size, normalized) {
2704
- if (normalized === void 0) normalized = false;
2705
- if (type == AccessorComponentType.FLOAT) {
2706
- switch(size){
2707
- case 1:
2708
- return engineCore.VertexElementFormat.Float;
2709
- case 2:
2710
- return engineCore.VertexElementFormat.Vector2;
2711
- case 3:
2712
- return engineCore.VertexElementFormat.Vector3;
2713
- case 4:
2714
- return engineCore.VertexElementFormat.Vector4;
2715
- }
2716
- }
2717
- if (type == AccessorComponentType.SHORT) {
2718
- switch(size){
2719
- case 2:
2720
- return normalized ? engineCore.VertexElementFormat.NormalizedShort2 : engineCore.VertexElementFormat.Short2;
2721
- case 3:
2722
- case 4:
2723
- return normalized ? engineCore.VertexElementFormat.NormalizedShort4 : engineCore.VertexElementFormat.Short4;
2724
- }
2803
+ };
2804
+ });
2805
+ function unpack(data) {
2806
+ var result = new Uint8Array(data.length);
2807
+ for(var i = 0; i < data.length; ++i){
2808
+ var ch = data.charCodeAt(i);
2809
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
2725
2810
  }
2726
- if (type == AccessorComponentType.UNSIGNED_SHORT) {
2727
- switch(size){
2728
- case 2:
2729
- return normalized ? engineCore.VertexElementFormat.NormalizedUShort2 : engineCore.VertexElementFormat.UShort2;
2730
- case 3:
2731
- case 4:
2732
- return normalized ? engineCore.VertexElementFormat.NormalizedUShort4 : engineCore.VertexElementFormat.UShort4;
2733
- }
2811
+ var write = 0;
2812
+ for(var i1 = 0; i1 < data.length; ++i1){
2813
+ result[write++] = result[i1] < 60 ? wasmpack[result[i1]] : (result[i1] - 60) * 64 + result[++i1];
2734
2814
  }
2735
- if (type == AccessorComponentType.BYTE) {
2736
- switch(size){
2737
- case 2:
2738
- case 3:
2739
- case 4:
2740
- return normalized ? engineCore.VertexElementFormat.NormalizedByte4 : engineCore.VertexElementFormat.Byte4;
2741
- }
2815
+ return result.buffer.slice(0, write);
2816
+ }
2817
+ function decode(fun, target, count, size, source, filter) {
2818
+ var sbrk = instance.exports.sbrk;
2819
+ var count4 = count + 3 & ~3;
2820
+ var tp = sbrk(count4 * size);
2821
+ var sp = sbrk(source.length);
2822
+ var heap = new Uint8Array(instance.exports.memory.buffer);
2823
+ heap.set(source, sp);
2824
+ var res = fun(tp, count, size, sp, source.length);
2825
+ if (res == 0 && filter) {
2826
+ filter(tp, count4, size);
2742
2827
  }
2743
- if (type == AccessorComponentType.UNSIGNED_BYTE) {
2744
- switch(size){
2745
- case 2:
2746
- case 3:
2747
- case 4:
2748
- return normalized ? engineCore.VertexElementFormat.NormalizedUByte4 : engineCore.VertexElementFormat.UByte4;
2749
- }
2828
+ target.set(heap.subarray(tp, tp + count * size));
2829
+ sbrk(tp - sbrk(0));
2830
+ if (res != 0) {
2831
+ throw new Error("Malformed buffer data: " + res);
2750
2832
  }
2833
+ }
2834
+ var filters = {
2835
+ NONE: "",
2836
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
2837
+ QUATERNION: "meshopt_decodeFilterQuat",
2838
+ EXPONENTIAL: "meshopt_decodeFilterExp"
2751
2839
  };
2752
- /**
2753
- * Load image buffer
2754
- */ GLTFUtils.loadImageBuffer = function loadImageBuffer(imageBuffer, type) {
2755
- return new Promise(function(resolve, reject) {
2756
- var blob = new window.Blob([
2757
- imageBuffer
2758
- ], {
2759
- type: type
2760
- });
2761
- var img = new Image();
2762
- img.onerror = function() {
2763
- reject(new Error("Failed to load image buffer"));
2764
- };
2765
- img.onload = function() {
2766
- // Call requestAnimationFrame to avoid iOS's bug.
2767
- requestAnimationFrame(function() {
2768
- resolve(img);
2769
- img.onload = null;
2770
- img.onerror = null;
2771
- img.onabort = null;
2772
- });
2773
- };
2774
- img.crossOrigin = "anonymous";
2775
- img.src = URL.createObjectURL(blob);
2776
- });
2840
+ var decoders = {
2841
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
2842
+ TRIANGLES: "meshopt_decodeIndexBuffer",
2843
+ INDICES: "meshopt_decodeIndexSequence"
2777
2844
  };
2778
- /**
2779
- * Parse the glb format.
2780
- */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
2781
- var UINT32_LENGTH = 4;
2782
- var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
2783
- var GLB_HEADER_LENGTH = 12;
2784
- var GLB_CHUNK_TYPES = {
2785
- JSON: 0x4e4f534a,
2786
- BIN: 0x004e4942
2787
- };
2788
- var dataView = new DataView(originBuffer);
2789
- // Read header
2790
- var header = {
2791
- magic: dataView.getUint32(0, true),
2792
- version: dataView.getUint32(UINT32_LENGTH, true),
2793
- length: dataView.getUint32(2 * UINT32_LENGTH, true)
2845
+ var workers = [];
2846
+ var requestId = 0;
2847
+ function createWorker(url) {
2848
+ var worker = {
2849
+ object: new Worker(url),
2850
+ pending: 0,
2851
+ requests: {}
2794
2852
  };
2795
- // Return the original buffer if it is not a glb
2796
- if (header.magic !== GLB_HEADER_MAGIC) {
2797
- return {
2798
- originBuffer: originBuffer
2799
- };
2800
- }
2801
- // Read main data
2802
- var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
2803
- var chunkType = dataView.getUint32(GLB_HEADER_LENGTH + UINT32_LENGTH, true);
2804
- // Read glTF json
2805
- if (chunkType !== GLB_CHUNK_TYPES.JSON) {
2806
- console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
2807
- return null;
2808
- }
2809
- var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2810
- var glTF = JSON.parse(engineCore.Utils.decodeText(glTFData));
2811
- // Read all buffers
2812
- var buffers = [];
2813
- var byteOffset = GLB_HEADER_LENGTH + 2 * UINT32_LENGTH + chunkLength;
2814
- var restoreGLBBufferSlice = context.contentRestorer.glbBufferSlices;
2815
- while(byteOffset < header.length){
2816
- chunkLength = dataView.getUint32(byteOffset, true);
2817
- chunkType = dataView.getUint32(byteOffset + UINT32_LENGTH, true);
2818
- if (chunkType !== GLB_CHUNK_TYPES.BIN) {
2819
- console.error("Invalid glb chunk type. Expected 0x004E4942, found 0x" + chunkType.toString(16));
2820
- return null;
2821
- }
2822
- var currentOffset = byteOffset + 2 * UINT32_LENGTH;
2823
- var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
2824
- buffers.push(buffer);
2825
- restoreGLBBufferSlice.push(new engineMath.Vector2(currentOffset, chunkLength));
2826
- byteOffset += chunkLength + 2 * UINT32_LENGTH;
2827
- }
2828
- return {
2829
- glTF: glTF,
2830
- buffers: buffers
2853
+ worker.object.onmessage = function(event) {
2854
+ var data = event.data;
2855
+ worker.pending -= data.count;
2856
+ worker.requests[data.id][data.action](data.value);
2857
+ delete worker.requests[data.id];
2831
2858
  };
2832
- };
2833
- GLTFUtils.parseSampler = function parseSampler(texture, samplerInfo) {
2834
- var filterMode = samplerInfo.filterMode, wrapModeU = samplerInfo.wrapModeU, wrapModeV = samplerInfo.wrapModeV;
2835
- if (filterMode !== undefined) {
2836
- texture.filterMode = filterMode;
2837
- }
2838
- if (wrapModeU !== undefined) {
2839
- texture.wrapModeU = wrapModeU;
2840
- }
2841
- if (wrapModeV !== undefined) {
2842
- texture.wrapModeV = wrapModeV;
2859
+ return worker;
2860
+ }
2861
+ function initWorkers(count) {
2862
+ 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 }';
2863
+ var blob = new Blob([
2864
+ source
2865
+ ], {
2866
+ type: "text/javascript"
2867
+ });
2868
+ var url = URL.createObjectURL(blob);
2869
+ for(var i = 0; i < count; ++i){
2870
+ workers[i] = createWorker(url);
2843
2871
  }
2844
- };
2845
- GLTFUtils.getSamplerInfo = function getSamplerInfo(sampler) {
2846
- var minFilter = sampler.minFilter, magFilter = sampler.magFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
2847
- var info = {};
2848
- if (minFilter || magFilter) {
2849
- info.mipmap = minFilter >= TextureMinFilter.NEAREST_MIPMAP_NEAREST;
2850
- if (magFilter === TextureMagFilter.NEAREST) {
2851
- info.filterMode = engineCore.TextureFilterMode.Point;
2852
- } else {
2853
- if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
2854
- info.filterMode = engineCore.TextureFilterMode.Bilinear;
2855
- } else {
2856
- info.filterMode = engineCore.TextureFilterMode.Trilinear;
2857
- }
2872
+ URL.revokeObjectURL(url);
2873
+ }
2874
+ function decodeWorker(count, size, source, mode, filter) {
2875
+ var worker = workers[0];
2876
+ for(var i = 1; i < workers.length; ++i){
2877
+ if (workers[i].pending < worker.pending) {
2878
+ worker = workers[i];
2858
2879
  }
2859
2880
  }
2860
- if (wrapS) {
2861
- info.wrapModeU = exports.GLTFTextureParser._wrapMap[wrapS];
2862
- }
2863
- if (wrapT) {
2864
- info.wrapModeV = exports.GLTFTextureParser._wrapMap[wrapT];
2865
- }
2866
- return info;
2867
- };
2868
- return GLTFUtils;
2869
- }();
2881
+ return new Promise(function(resolve, reject) {
2882
+ var data = new Uint8Array(source);
2883
+ var id = requestId++;
2884
+ worker.pending += count;
2885
+ worker.requests[id] = {
2886
+ resolve: resolve,
2887
+ reject: reject
2888
+ };
2889
+ worker.object.postMessage({
2890
+ id: id,
2891
+ count: count,
2892
+ size: size,
2893
+ source: data,
2894
+ mode: mode,
2895
+ filter: filter
2896
+ }, [
2897
+ data.buffer
2898
+ ]);
2899
+ });
2900
+ }
2901
+ return ready;
2902
+ }
2870
2903
 
2871
- var DFDTransferFunction = /*#__PURE__*/ function(DFDTransferFunction) {
2872
- DFDTransferFunction[DFDTransferFunction["linear"] = 1] = "linear";
2873
- DFDTransferFunction[DFDTransferFunction["sRGB"] = 2] = "sRGB";
2874
- return DFDTransferFunction;
2875
- }({});
2876
- var ColorModel = /*#__PURE__*/ function(ColorModel) {
2877
- ColorModel[ColorModel["ETC1S"] = 163] = "ETC1S";
2878
- ColorModel[ColorModel["UASTC_LDR_4X4"] = 166] = "UASTC_LDR_4X4";
2879
- ColorModel[ColorModel["UASTC_HDR_4X4"] = 167] = "UASTC_HDR_4X4";
2880
- return ColorModel;
2881
- }({});
2882
- /** @internal */ var KTX2Container = /*#__PURE__*/ function() {
2883
- function KTX2Container(buffer) {
2884
- this.vkFormat = 0;
2885
- this.typeSize = 1;
2886
- this.pixelWidth = 0;
2887
- this.pixelHeight = 0;
2888
- this.pixelDepth = 0;
2889
- this.layerCount = 0;
2890
- this.faceCount = 1;
2891
- this.supercompressionScheme = 0;
2892
- this.levels = [];
2893
- this.keyValue = {};
2894
- this.globalData = null;
2895
- this.parse(buffer);
2904
+ /**
2905
+ * The glTF resource.
2906
+ */ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
2907
+ _inherits(GLTFResource, ReferResource);
2908
+ function GLTFResource(engine, url) {
2909
+ var _this;
2910
+ _this = ReferResource.call(this, engine) || this;
2911
+ _this.url = url;
2912
+ return _this;
2896
2913
  }
2897
- var _proto = KTX2Container.prototype;
2898
- _proto.parse = function parse(data) {
2899
- var buffer = data.buffer;
2900
- var byteOffset = data.byteOffset;
2901
- var headerBufferReader = new BufferReader(data, 12);
2902
- this.vkFormat = headerBufferReader.nextUint32();
2903
- this.typeSize = headerBufferReader.nextUint32();
2904
- this.pixelWidth = headerBufferReader.nextUint32();
2905
- this.pixelHeight = headerBufferReader.nextUint32();
2906
- this.pixelDepth = headerBufferReader.nextUint32();
2907
- this.layerCount = headerBufferReader.nextUint32();
2908
- this.faceCount = headerBufferReader.nextUint32();
2909
- var levelCount = Math.max(1, headerBufferReader.nextUint32());
2910
- this.supercompressionScheme = headerBufferReader.nextUint32();
2911
- var dfdByteOffset = headerBufferReader.nextUint32();
2912
- var dfdByteLength = headerBufferReader.nextUint32();
2913
- var kvdByteOffset = headerBufferReader.nextUint32();
2914
- var kvdByteLength = headerBufferReader.nextUint32();
2915
- var sgdByteOffset = headerBufferReader.nextUint64();
2916
- var sgdByteLength = headerBufferReader.nextUint64();
2917
- // level index
2918
- var ktxLevels = new Array(levelCount);
2919
- var levelByteLength = levelCount * 3 * 8;
2920
- var levelReader = new BufferReader(data, headerBufferReader.offset, levelByteLength);
2921
- this.levels = ktxLevels;
2922
- for(var i = 0; i < levelCount; i++){
2923
- ktxLevels[i] = {
2924
- levelData: new Uint8Array(buffer, byteOffset + levelReader.nextUint64(), levelReader.nextUint64()),
2925
- uncompressedByteLength: levelReader.nextUint64()
2926
- };
2927
- }
2928
- // Data Format Descriptor (DFD).
2929
- var dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength);
2930
- var dfd = {
2931
- vendorId: dfdReader.skip(4 /* totalSize */ ).nextUint16(),
2932
- descriptorType: dfdReader.nextUint16(),
2933
- versionNumber: dfdReader.nextUint16(),
2934
- descriptorBlockSize: dfdReader.nextUint16(),
2935
- colorModel: dfdReader.nextUint8(),
2936
- colorPrimaries: dfdReader.nextUint8(),
2937
- transferFunction: dfdReader.nextUint8(),
2938
- flags: dfdReader.nextUint8(),
2939
- texelBlockDimension: [
2940
- dfdReader.nextUint8(),
2941
- dfdReader.nextUint8(),
2942
- dfdReader.nextUint8(),
2943
- dfdReader.nextUint8()
2944
- ],
2945
- bytesPlane: [
2946
- dfdReader.nextUint8(),
2947
- dfdReader.nextUint8(),
2948
- dfdReader.nextUint8(),
2949
- dfdReader.nextUint8(),
2950
- dfdReader.nextUint8(),
2951
- dfdReader.nextUint8(),
2952
- dfdReader.nextUint8(),
2953
- dfdReader.nextUint8()
2954
- ],
2955
- samples: []
2956
- };
2957
- this.dataFormatDescriptor = dfd;
2958
- var sampleStart = 6;
2959
- var sampleWords = 4;
2960
- var numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;
2961
- for(var i1 = 0; i1 < numSamples; i1++){
2962
- var sample = {
2963
- bitOffset: dfdReader.nextUint16(),
2964
- bitLength: dfdReader.nextUint8(),
2965
- channelType: dfdReader.nextUint8(),
2966
- samplePosition: [
2967
- dfdReader.nextUint8(),
2968
- dfdReader.nextUint8(),
2969
- dfdReader.nextUint8(),
2970
- dfdReader.nextUint8()
2971
- ],
2972
- sampleLower: -Infinity,
2973
- sampleUpper: Infinity
2974
- };
2975
- if (sample.channelType & 0x40) {
2976
- sample.sampleLower = dfdReader.nextInt32();
2977
- sample.sampleUpper = dfdReader.nextInt32();
2978
- } else {
2979
- sample.sampleLower = dfdReader.nextUint32();
2980
- sample.sampleUpper = dfdReader.nextUint32();
2914
+ var _proto = GLTFResource.prototype;
2915
+ /**
2916
+ * Instantiate scene root entity.
2917
+ * @param sceneIndex - Scene index
2918
+ * @returns Root entity
2919
+ */ _proto.instantiateSceneRoot = function instantiateSceneRoot(sceneIndex) {
2920
+ var sceneRoot = sceneIndex === undefined ? this._defaultSceneRoot : this._sceneRoots[sceneIndex];
2921
+ return sceneRoot.clone();
2922
+ };
2923
+ _proto._onDestroy = function _onDestroy() {
2924
+ ReferResource.prototype._onDestroy.call(this);
2925
+ var _this = this, textures = _this.textures, materials = _this.materials, meshes = _this.meshes;
2926
+ textures && this._disassociationSuperResource(textures);
2927
+ materials && this._disassociationSuperResource(materials);
2928
+ if (meshes) {
2929
+ for(var i = 0, n = meshes.length; i < n; i++){
2930
+ var meshArr = meshes[i];
2931
+ meshArr && this._disassociationSuperResource(meshArr);
2981
2932
  }
2982
- dfd.samples[i1] = sample;
2983
- }
2984
- var kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);
2985
- while(kvdReader.position < kvdByteLength){
2986
- var keyValueByteLength = kvdReader.nextUint32();
2987
- var keyData = kvdReader.scan(keyValueByteLength);
2988
- var key = engineCore.Utils.decodeText(keyData);
2989
- // 4-byte alignment.
2990
- var valueData = kvdReader.nextUint8Array(keyValueByteLength - keyData.byteLength - 1);
2991
- this.keyValue[key] = key.match(/^ktx/i) ? engineCore.Utils.decodeText(valueData).replace(/^(.*)\x00$/, "$1") : valueData;
2992
- var kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; // align(4)
2993
- // 4-byte alignment.
2994
- kvdReader.skip(kvPadding);
2995
2933
  }
2996
- if (sgdByteLength <= 0) return this;
2997
- var sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);
2998
- var endpointCount = sgdReader.nextUint16();
2999
- var selectorCount = sgdReader.nextUint16();
3000
- var endpointsByteLength = sgdReader.nextUint32();
3001
- var selectorsByteLength = sgdReader.nextUint32();
3002
- var tablesByteLength = sgdReader.nextUint32();
3003
- var extendedByteLength = sgdReader.nextUint32();
3004
- var imageDescs = new Array(levelCount);
3005
- for(var i2 = 0; i2 < levelCount; i2++){
3006
- imageDescs[i2] = {
3007
- imageFlags: sgdReader.nextUint32(),
3008
- rgbSliceByteOffset: sgdReader.nextUint32(),
3009
- rgbSliceByteLength: sgdReader.nextUint32(),
3010
- alphaSliceByteOffset: sgdReader.nextUint32(),
3011
- alphaSliceByteLength: sgdReader.nextUint32()
3012
- };
2934
+ };
2935
+ _proto._disassociationSuperResource = function _disassociationSuperResource(resources) {
2936
+ for(var i = 0, n = resources.length; i < n; i++){
2937
+ var // @ts-ignore
2938
+ _resources_i;
2939
+ (_resources_i = resources[i]) == null ? void 0 : _resources_i._disassociationSuperResource(this);
3013
2940
  }
3014
- var endpointsByteOffset = sgdByteOffset + sgdReader.position;
3015
- var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
3016
- var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
3017
- var extendedByteOffset = tablesByteOffset + tablesByteLength;
3018
- var endpointsData = new Uint8Array(buffer, byteOffset + endpointsByteOffset, endpointsByteLength);
3019
- var selectorsData = new Uint8Array(buffer, byteOffset + selectorsByteOffset, selectorsByteLength);
3020
- var tablesData = new Uint8Array(buffer, byteOffset + tablesByteOffset, tablesByteLength);
3021
- var extendedData = new Uint8Array(buffer, byteOffset + extendedByteOffset, extendedByteLength);
3022
- this.globalData = {
3023
- endpointCount: endpointCount,
3024
- selectorCount: selectorCount,
3025
- imageDescs: imageDescs,
3026
- endpointsData: endpointsData,
3027
- selectorsData: selectorsData,
3028
- tablesData: tablesData,
3029
- extendedData: extendedData
3030
- };
3031
2941
  };
3032
- _create_class(KTX2Container, [
2942
+ _create_class(GLTFResource, [
2943
+ {
2944
+ key: "extensionsData",
2945
+ get: /**
2946
+ * Extensions data.
2947
+ */ function get() {
2948
+ return this._extensionsData;
2949
+ }
2950
+ },
3033
2951
  {
3034
- key: "isSRGB",
3035
- get: function get() {
3036
- return this.dataFormatDescriptor.transferFunction === 2;
2952
+ key: "sceneRoots",
2953
+ get: /**
2954
+ * @deprecated Please use `instantiateSceneRoot` instead.
2955
+ * RootEntities after SceneParser.
2956
+ */ function get() {
2957
+ return this._sceneRoots;
3037
2958
  }
3038
2959
  },
3039
2960
  {
3040
- key: "colorModel",
3041
- get: function get() {
3042
- return this.dataFormatDescriptor.colorModel;
2961
+ key: "defaultSceneRoot",
2962
+ get: /**
2963
+ * @deprecated Please use `instantiateSceneRoot` instead.
2964
+ * RootEntity after SceneParser.
2965
+ */ function get() {
2966
+ return this._defaultSceneRoot;
3043
2967
  }
3044
2968
  }
3045
2969
  ]);
3046
- return KTX2Container;
3047
- }();
2970
+ return GLTFResource;
2971
+ }(engineCore.ReferResource);
3048
2972
 
3049
2973
  /**
3050
- * KTX2 transcode target format.
3051
- */ var KTX2TargetFormat = /*#__PURE__*/ function(KTX2TargetFormat) {
3052
- /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["ASTC"] = 0] = "ASTC";
3053
- /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["BC7"] = 1] = "BC7";
3054
- /** 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";
3055
- /** RGB(A) compressed format, 4 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["PVRTC"] = 3] = "PVRTC";
3056
- /** 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";
3057
- /** R format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8"] = 5] = "R8";
3058
- /** RG format, 16 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8"] = 6] = "R8G8";
3059
- /** RGBA format, 32 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["R8G8B8A8"] = 7] = "R8G8B8A8";
3060
- /** RGB HDR compressed format, 8 bits per pixel. */ KTX2TargetFormat[KTX2TargetFormat["BC6H"] = 8] = "BC6H";
3061
- /** 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";
3062
- /** RGBA format, 16 bits per channel. */ KTX2TargetFormat[KTX2TargetFormat["R16G16B16A16"] = 10] = "R16G16B16A16";
3063
- return KTX2TargetFormat;
2974
+ * Module for glTF 2.0 Interface
2975
+ */ /**
2976
+ * The datatype of the components in the attribute
2977
+ */ var AccessorComponentType = /*#__PURE__*/ function(AccessorComponentType) {
2978
+ /**
2979
+ * Byte
2980
+ */ AccessorComponentType[AccessorComponentType["BYTE"] = 5120] = "BYTE";
2981
+ /**
2982
+ * Unsigned Byte
2983
+ */ AccessorComponentType[AccessorComponentType["UNSIGNED_BYTE"] = 5121] = "UNSIGNED_BYTE";
2984
+ /**
2985
+ * Short
2986
+ */ AccessorComponentType[AccessorComponentType["SHORT"] = 5122] = "SHORT";
2987
+ /**
2988
+ * Unsigned Short
2989
+ */ AccessorComponentType[AccessorComponentType["UNSIGNED_SHORT"] = 5123] = "UNSIGNED_SHORT";
2990
+ /**
2991
+ * Unsigned Int
2992
+ */ AccessorComponentType[AccessorComponentType["UNSIGNED_INT"] = 5125] = "UNSIGNED_INT";
2993
+ /**
2994
+ * Float
2995
+ */ AccessorComponentType[AccessorComponentType["FLOAT"] = 5126] = "FLOAT";
2996
+ return AccessorComponentType;
2997
+ }({});
2998
+ /**
2999
+ * Specifies if the attirbute is a scalar, vector, or matrix
3000
+ */ var AccessorType = /*#__PURE__*/ function(AccessorType) {
3001
+ /**
3002
+ * Scalar
3003
+ */ AccessorType["SCALAR"] = "SCALAR";
3004
+ /**
3005
+ * Vector2
3006
+ */ AccessorType["VEC2"] = "VEC2";
3007
+ /**
3008
+ * Vector3
3009
+ */ AccessorType["VEC3"] = "VEC3";
3010
+ /**
3011
+ * Vector4
3012
+ */ AccessorType["VEC4"] = "VEC4";
3013
+ /**
3014
+ * Matrix2x2
3015
+ */ AccessorType["MAT2"] = "MAT2";
3016
+ /**
3017
+ * Matrix3x3
3018
+ */ AccessorType["MAT3"] = "MAT3";
3019
+ /**
3020
+ * Matrix4x4
3021
+ */ AccessorType["MAT4"] = "MAT4";
3022
+ return AccessorType;
3023
+ }({});
3024
+ /**
3025
+ * The name of the node's TRS property to modify, or the weights of the Morph Targets it instantiates
3026
+ */ var AnimationChannelTargetPath = /*#__PURE__*/ function(AnimationChannelTargetPath) {
3027
+ /**
3028
+ * Translation
3029
+ */ AnimationChannelTargetPath["TRANSLATION"] = "translation";
3030
+ /**
3031
+ * Rotation
3032
+ */ AnimationChannelTargetPath["ROTATION"] = "rotation";
3033
+ /**
3034
+ * Scale
3035
+ */ AnimationChannelTargetPath["SCALE"] = "scale";
3036
+ /**
3037
+ * Weights
3038
+ */ AnimationChannelTargetPath["WEIGHTS"] = "weights";
3039
+ return AnimationChannelTargetPath;
3040
+ }({});
3041
+ /**
3042
+ * Interpolation algorithm
3043
+ */ var AnimationSamplerInterpolation = /*#__PURE__*/ function(AnimationSamplerInterpolation) {
3044
+ /**
3045
+ * The animated values are linearly interpolated between keyframes
3046
+ */ AnimationSamplerInterpolation["Linear"] = "LINEAR";
3047
+ /**
3048
+ * The animated values remain constant to the output of the first keyframe, until the next keyframe
3049
+ */ AnimationSamplerInterpolation["Step"] = "STEP";
3050
+ /**
3051
+ * The animation's interpolation is computed using a cubic spline with specified tangents
3052
+ */ AnimationSamplerInterpolation["CubicSpine"] = "CUBICSPLINE";
3053
+ return AnimationSamplerInterpolation;
3054
+ }({});
3055
+ /**
3056
+ * A camera's projection. A node can reference a camera to apply a transform to place the camera in the scene
3057
+ */ var CameraType = /*#__PURE__*/ function(CameraType) {
3058
+ /**
3059
+ * A perspective camera containing properties to create a perspective projection matrix
3060
+ */ CameraType["PERSPECTIVE"] = "perspective";
3061
+ /**
3062
+ * An orthographic camera containing properties to create an orthographic projection matrix
3063
+ */ CameraType["ORTHOGRAPHIC"] = "orthographic";
3064
+ return CameraType;
3065
+ }({});
3066
+ /**
3067
+ * The alpha rendering mode of the material
3068
+ */ var MaterialAlphaMode = /*#__PURE__*/ function(MaterialAlphaMode) {
3069
+ /**
3070
+ * The alpha value is ignored and the rendered output is fully opaque
3071
+ */ MaterialAlphaMode["OPAQUE"] = "OPAQUE";
3072
+ /**
3073
+ * The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value
3074
+ */ MaterialAlphaMode["MASK"] = "MASK";
3075
+ /**
3076
+ * 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)
3077
+ */ MaterialAlphaMode["BLEND"] = "BLEND";
3078
+ return MaterialAlphaMode;
3079
+ }({});
3080
+ /**
3081
+ * Magnification filter. Valid values correspond to WebGL enums: 9728 (NEAREST) and 9729 (LINEAR)
3082
+ */ var TextureMagFilter = /*#__PURE__*/ function(TextureMagFilter) {
3083
+ /**
3084
+ * Nearest
3085
+ */ TextureMagFilter[TextureMagFilter["NEAREST"] = 9728] = "NEAREST";
3086
+ /**
3087
+ * Linear
3088
+ */ TextureMagFilter[TextureMagFilter["LINEAR"] = 9729] = "LINEAR";
3089
+ return TextureMagFilter;
3090
+ }({});
3091
+ /**
3092
+ * Minification filter. All valid values correspond to WebGL enums
3093
+ */ var TextureMinFilter = /*#__PURE__*/ function(TextureMinFilter) {
3094
+ /**
3095
+ * Nearest
3096
+ */ TextureMinFilter[TextureMinFilter["NEAREST"] = 9728] = "NEAREST";
3097
+ /**
3098
+ * Linear
3099
+ */ TextureMinFilter[TextureMinFilter["LINEAR"] = 9729] = "LINEAR";
3100
+ /**
3101
+ * Nearest Mip-Map Nearest
3102
+ */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_NEAREST"] = 9984] = "NEAREST_MIPMAP_NEAREST";
3103
+ /**
3104
+ * Linear Mipmap Nearest
3105
+ */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_NEAREST"] = 9985] = "LINEAR_MIPMAP_NEAREST";
3106
+ /**
3107
+ * Nearest Mipmap Linear
3108
+ */ TextureMinFilter[TextureMinFilter["NEAREST_MIPMAP_LINEAR"] = 9986] = "NEAREST_MIPMAP_LINEAR";
3109
+ /**
3110
+ * Linear Mipmap Linear
3111
+ */ TextureMinFilter[TextureMinFilter["LINEAR_MIPMAP_LINEAR"] = 9987] = "LINEAR_MIPMAP_LINEAR";
3112
+ return TextureMinFilter;
3113
+ }({});
3114
+ /**
3115
+ * S (U) wrapping mode. All valid values correspond to WebGL enums
3116
+ */ var TextureWrapMode = /*#__PURE__*/ function(TextureWrapMode) {
3117
+ /**
3118
+ * Clamp to Edge
3119
+ */ TextureWrapMode[TextureWrapMode["CLAMP_TO_EDGE"] = 33071] = "CLAMP_TO_EDGE";
3120
+ /**
3121
+ * Mirrored Repeat
3122
+ */ TextureWrapMode[TextureWrapMode["MIRRORED_REPEAT"] = 33648] = "MIRRORED_REPEAT";
3123
+ /**
3124
+ * Repeat
3125
+ */ TextureWrapMode[TextureWrapMode["REPEAT"] = 10497] = "REPEAT";
3126
+ return TextureWrapMode;
3064
3127
  }({});
3065
3128
 
3066
3129
  /**
3067
3130
  * @internal
3068
- * WorkerPool, T is is post message type, U is return type.
3069
- */ var WorkerPool = /*#__PURE__*/ function() {
3070
- function WorkerPool(limitedCount, _workerCreator) {
3071
- if (limitedCount === void 0) limitedCount = 4;
3072
- this.limitedCount = limitedCount;
3073
- this._workerCreator = _workerCreator;
3074
- this._taskQueue = [];
3075
- this._workerStatus = 0;
3076
- this._workerItems = new Array(limitedCount);
3131
+ */ var GLTFParserContext = /*#__PURE__*/ function() {
3132
+ function GLTFParserContext(glTFResource, resourceManager, params) {
3133
+ var _this = this;
3134
+ this.glTFResource = glTFResource;
3135
+ this.resourceManager = resourceManager;
3136
+ this.params = params;
3137
+ this.accessorBufferCache = {};
3138
+ this.needAnimatorController = false;
3139
+ this./** @internal */ _getPromises = [];
3140
+ this._resourceCache = new Map();
3141
+ this._progress = {
3142
+ taskDetail: {},
3143
+ taskComplete: {
3144
+ loaded: 0,
3145
+ total: 0
3146
+ }
3147
+ };
3148
+ this./**
3149
+ * @internal
3150
+ */ _onTaskDetail = function(url, loaded, total) {
3151
+ var _this__progress_taskDetail, _url;
3152
+ var detail = (_this__progress_taskDetail = _this._progress.taskDetail)[_url = url] || (_this__progress_taskDetail[_url] = {});
3153
+ detail.loaded = loaded;
3154
+ detail.total = total;
3155
+ _this._setTaskDetailProgress(url, loaded, total);
3156
+ };
3157
+ this.contentRestorer = new GLTFContentRestorer(glTFResource);
3077
3158
  }
3078
- var _proto = WorkerPool.prototype;
3079
- _proto.prepareWorker = function prepareWorker() {
3080
- var count = this.limitedCount;
3081
- var promises = new Array(count);
3082
- for(var i = 0; i < count; i++){
3083
- promises.push(this._initWorker(i));
3159
+ var _proto = GLTFParserContext.prototype;
3160
+ _proto.get = function get(type, index) {
3161
+ var _this = this;
3162
+ var parser = GLTFParserContext._parsers[type];
3163
+ if (!parser) {
3164
+ return engineCore.AssetPromise.resolve(null);
3165
+ }
3166
+ var cache = this._resourceCache;
3167
+ var cacheKey = index === undefined ? "" + type : type + ":" + index;
3168
+ var resource = cache.get(cacheKey);
3169
+ if (resource) {
3170
+ return resource;
3171
+ }
3172
+ var glTFSchemaKey = glTFSchemaMap[type];
3173
+ var isSubAsset = !!glTFResourceMap[type];
3174
+ if (glTFSchemaKey) {
3175
+ var glTFItems = this.glTF[glTFSchemaKey];
3176
+ if (glTFItems && (index === undefined || glTFItems[index])) {
3177
+ if (index === undefined) {
3178
+ resource = type === 8 ? glTFItems.map(function(_, index) {
3179
+ return _this.get(type, index);
3180
+ }) : engineCore.AssetPromise.all(glTFItems.map(function(_, index) {
3181
+ return _this.get(type, index);
3182
+ }));
3183
+ } else {
3184
+ resource = parser.parse(this, index);
3185
+ isSubAsset && this._handleSubAsset(resource, type, index);
3186
+ }
3187
+ } else {
3188
+ resource = engineCore.AssetPromise.resolve(null);
3189
+ }
3190
+ } else {
3191
+ resource = parser.parse(this, index);
3192
+ isSubAsset && this._handleSubAsset(resource, type, index);
3084
3193
  }
3085
- return Promise.all(promises);
3194
+ if (_instanceof(resource, engineCore.AssetPromise)) {
3195
+ this._getPromises.push(resource);
3196
+ }
3197
+ cache.set(cacheKey, resource);
3198
+ return resource;
3086
3199
  };
3087
- /**
3088
- * Post message to worker.
3089
- * @param message - Message which posted to worker
3090
- * @returns Return a promise of message
3091
- */ _proto.postMessage = function postMessage(message) {
3200
+ _proto.parse = function parse() {
3092
3201
  var _this = this;
3093
- return new Promise(function(resolve, reject) {
3094
- var workerId = _this._getIdleWorkerId();
3095
- if (workerId !== -1) {
3096
- _this._workerStatus |= 1 << workerId;
3097
- var workerItems = _this._workerItems;
3098
- var _workerItems_workerId;
3099
- Promise.resolve((_workerItems_workerId = workerItems[workerId]) != null ? _workerItems_workerId : _this._initWorker(workerId)).then(function() {
3100
- var workerItem = workerItems[workerId];
3101
- workerItem.resolve = resolve;
3102
- workerItem.reject = reject;
3103
- workerItem.worker.postMessage(message);
3104
- }).catch(reject);
3105
- } else {
3106
- _this._taskQueue.push({
3107
- resolve: resolve,
3108
- reject: reject,
3109
- message: message
3110
- });
3111
- }
3202
+ var promise = this.get(0).then(function(json) {
3203
+ _this.glTF = json;
3204
+ _this.needAnimatorController = !!(json.skins || json.animations);
3205
+ return engineCore.AssetPromise.all([
3206
+ _this.get(1),
3207
+ _this.get(5),
3208
+ _this.get(6),
3209
+ _this.get(7),
3210
+ _this.get(9),
3211
+ _this.get(10),
3212
+ _this.get(11),
3213
+ _this.get(2)
3214
+ ]).then(function() {
3215
+ var glTFResource = _this.glTFResource;
3216
+ var animatorController = glTFResource.animatorController;
3217
+ if (animatorController) {
3218
+ var animator = glTFResource._defaultSceneRoot.addComponent(engineCore.Animator);
3219
+ animator.animatorController = animatorController;
3220
+ }
3221
+ _this.resourceManager.addContentRestorer(_this.contentRestorer);
3222
+ return glTFResource;
3223
+ });
3112
3224
  });
3225
+ this._addTaskCompletePromise(promise);
3226
+ return promise;
3113
3227
  };
3114
3228
  /**
3115
- * Destroy the worker pool.
3116
- */ _proto.destroy = function destroy() {
3117
- var workerItems = this._workerItems;
3118
- for(var i = 0, n = workerItems.length; i < n; i++){
3119
- var workerItem = workerItems[i];
3120
- workerItem.worker.terminate();
3121
- workerItem.reject = null;
3122
- workerItem.resolve = null;
3123
- }
3124
- workerItems.length = 0;
3125
- this._taskQueue.length = 0;
3126
- this._workerStatus = 0;
3127
- };
3128
- _proto._initWorker = function _initWorker(workerId) {
3229
+ * @internal
3230
+ */ _proto._addTaskCompletePromise = function _addTaskCompletePromise(taskPromise) {
3129
3231
  var _this = this;
3130
- return Promise.resolve(this._workerCreator()).then(function(worker) {
3131
- worker.addEventListener("message", _this._onMessage.bind(_this, workerId));
3132
- _this._workerItems[workerId] = {
3133
- worker: worker,
3134
- resolve: null,
3135
- reject: null
3136
- };
3137
- return worker;
3232
+ var task = this._progress.taskComplete;
3233
+ task.total += 1;
3234
+ taskPromise.finally(function() {
3235
+ _this._setTaskCompleteProgress(++task.loaded, task.total);
3236
+ }).catch(function(e) {
3237
+ // Need catch to avoid unhandled rejection
3138
3238
  });
3139
3239
  };
3140
- _proto._getIdleWorkerId = function _getIdleWorkerId() {
3141
- for(var i = 0, count = this.limitedCount; i < count; i++){
3142
- if (!(this._workerStatus & 1 << i)) return i;
3143
- }
3144
- return -1;
3145
- };
3146
- _proto._onMessage = function _onMessage(workerId, msg) {
3147
- // onerror of web worker can't catch error in promise
3148
- var error = msg.data.error;
3149
- if (error) {
3150
- this._workerItems[workerId].reject(error);
3240
+ _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
3241
+ var _this = this;
3242
+ var glTFResourceKey = glTFResourceMap[type];
3243
+ if (type === 8) {
3244
+ var _this_glTFResource, _glTFResourceKey;
3245
+ ((_this_glTFResource = this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = resource;
3151
3246
  } else {
3152
- this._workerItems[workerId].resolve(msg.data);
3247
+ var url = this.glTFResource.url;
3248
+ resource.then(function(item) {
3249
+ if (index == undefined) {
3250
+ _this.glTFResource[glTFResourceKey] = item;
3251
+ } else {
3252
+ var _this_glTFResource, _glTFResourceKey;
3253
+ ((_this_glTFResource = _this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = item;
3254
+ }
3255
+ if (type === 7) {
3256
+ for(var i = 0, length = item.length; i < length; i++){
3257
+ var mesh = item[i];
3258
+ // @ts-ignore
3259
+ _this.resourceManager._onSubAssetSuccess(url, glTFResourceKey + "[" + index + "][" + i + "]", mesh);
3260
+ }
3261
+ } else {
3262
+ // @ts-ignore
3263
+ _this.resourceManager._onSubAssetSuccess(url, "" + glTFResourceKey + (index === undefined ? "" : "[" + index + "]"), item);
3264
+ var _this_glTF_scene;
3265
+ if (type === 2 && ((_this_glTF_scene = _this.glTF.scene) != null ? _this_glTF_scene : 0) === index) {
3266
+ // @ts-ignore
3267
+ _this.resourceManager._onSubAssetSuccess(url, "defaultSceneRoot", item);
3268
+ }
3269
+ }
3270
+ }).catch(function(e) {
3271
+ engineCore.Logger.error("GLTFParserContext", "Failed to load " + glTFResourceKey + " " + index + ": " + e);
3272
+ });
3153
3273
  }
3154
- this._nextTask(workerId);
3155
3274
  };
3156
- _proto._nextTask = function _nextTask(workerId) {
3157
- if (this._taskQueue.length) {
3158
- var taskItem = this._taskQueue.shift();
3159
- var workerItem = this._workerItems[workerId];
3160
- workerItem.resolve = taskItem.resolve;
3161
- workerItem.reject = taskItem.reject;
3162
- workerItem.worker.postMessage(taskItem.message);
3163
- } else {
3164
- this._workerStatus ^= 1 << workerId;
3165
- }
3275
+ GLTFParserContext.addParser = function addParser(parserType, parser) {
3276
+ this._parsers[parserType] = parser;
3166
3277
  };
3167
- return WorkerPool;
3278
+ return GLTFParserContext;
3168
3279
  }();
3280
+ GLTFParserContext._parsers = {};
3281
+ /**
3282
+ * @internal
3283
+ */ var BufferInfo = function BufferInfo(data, interleaved, stride) {
3284
+ this.data = data;
3285
+ this.interleaved = interleaved;
3286
+ this.stride = stride;
3287
+ this.vertexBindingInfos = {};
3288
+ };
3289
+ var GLTFParserType = /*#__PURE__*/ function(GLTFParserType) {
3290
+ GLTFParserType[GLTFParserType["Schema"] = 0] = "Schema";
3291
+ GLTFParserType[GLTFParserType["Validator"] = 1] = "Validator";
3292
+ GLTFParserType[GLTFParserType["Scene"] = 2] = "Scene";
3293
+ GLTFParserType[GLTFParserType["Buffer"] = 3] = "Buffer";
3294
+ GLTFParserType[GLTFParserType["BufferView"] = 4] = "BufferView";
3295
+ GLTFParserType[GLTFParserType["Texture"] = 5] = "Texture";
3296
+ GLTFParserType[GLTFParserType["Material"] = 6] = "Material";
3297
+ GLTFParserType[GLTFParserType["Mesh"] = 7] = "Mesh";
3298
+ GLTFParserType[GLTFParserType["Entity"] = 8] = "Entity";
3299
+ GLTFParserType[GLTFParserType["Skin"] = 9] = "Skin";
3300
+ GLTFParserType[GLTFParserType["Animation"] = 10] = "Animation";
3301
+ GLTFParserType[GLTFParserType["AnimatorController"] = 11] = "AnimatorController";
3302
+ return GLTFParserType;
3303
+ }({});
3304
+ var _obj$1;
3305
+ 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);
3306
+ var _obj1;
3307
+ 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);
3308
+ function registerGLTFParser(pipeline) {
3309
+ return function(Parser) {
3310
+ var parser = new Parser();
3311
+ GLTFParserContext.addParser(pipeline, parser);
3312
+ };
3313
+ }
3169
3314
 
3170
- var AbstractTranscoder = /*#__PURE__*/ function() {
3171
- function AbstractTranscoder(workerLimitCount) {
3172
- this.workerLimitCount = workerLimitCount;
3173
- }
3174
- var _proto = AbstractTranscoder.prototype;
3175
- _proto.init = function init() {
3176
- if (!this._initPromise) {
3177
- this._initPromise = this._initTranscodeWorkerPool();
3315
+ /**
3316
+ * @internal
3317
+ */ var GLTFUtils = /*#__PURE__*/ function() {
3318
+ function GLTFUtils() {}
3319
+ GLTFUtils.floatBufferToVector2Array = function floatBufferToVector2Array(buffer) {
3320
+ var bufferLen = buffer.length;
3321
+ var array = new Array(bufferLen / 2);
3322
+ for(var i = 0; i < bufferLen; i += 2){
3323
+ array[i / 2] = new engineMath.Vector2(buffer[i], buffer[i + 1]);
3178
3324
  }
3179
- return this._initPromise;
3180
- };
3181
- _proto.destroy = function destroy() {
3182
- this._transcodeWorkerPool.destroy();
3183
- };
3184
- _proto._createTranscodePool = function _createTranscodePool(workerURL, wasmBuffer) {
3185
- this._transcodeWorkerPool = new WorkerPool(this.workerLimitCount, function() {
3186
- return new Promise(function(resolve, reject) {
3187
- var onMessage = function onMessage(e) {
3188
- if (e.data.error) {
3189
- reject(e.data.error);
3190
- } else {
3191
- resolve(worker);
3192
- }
3193
- };
3194
- var worker = new Worker(workerURL);
3195
- var msg = {
3196
- type: "init",
3197
- transcoderWasm: wasmBuffer
3198
- };
3199
- worker.addEventListener("message", onMessage);
3200
- worker.postMessage(msg);
3201
- });
3202
- });
3203
- return this._transcodeWorkerPool.prepareWorker();
3325
+ return array;
3204
3326
  };
3205
- return AbstractTranscoder;
3206
- }();
3207
-
3208
- /** @internal */ function TranscodeWorkerCode() {
3209
- var initPromise;
3210
- var init = function init(wasmBinary) {
3211
- if (!initPromise) {
3212
- initPromise = new Promise(function(resolve, reject) {
3213
- var BasisModule = {
3214
- wasmBinary: wasmBinary,
3215
- onRuntimeInitialized: function() {
3216
- return resolve(BasisModule);
3217
- },
3218
- onAbort: reject
3219
- };
3220
- self["BASIS"](BasisModule);
3221
- }).then(function(BasisModule) {
3222
- BasisModule.initializeBasis();
3223
- return BasisModule.KTX2File;
3224
- });
3327
+ GLTFUtils.floatBufferToVector3Array = function floatBufferToVector3Array(buffer) {
3328
+ var bufferLen = buffer.length;
3329
+ var array = new Array(bufferLen / 3);
3330
+ for(var i = 0; i < bufferLen; i += 3){
3331
+ array[i / 3] = new engineMath.Vector3(buffer[i], buffer[i + 1], buffer[i + 2]);
3225
3332
  }
3226
- return initPromise;
3333
+ return array;
3227
3334
  };
3228
- self.onmessage = function onmessage(event) {
3229
- var message = event.data;
3230
- switch(message.type){
3231
- case "init":
3232
- init(message.transcoderWasm).then(function() {
3233
- self.postMessage("init-completed");
3234
- }).catch(function(e) {
3235
- return self.postMessage({
3236
- error: e
3237
- });
3238
- });
3239
- break;
3240
- case "transcode":
3241
- init().then(function(KTX2File) {
3242
- var result = transcode(message.buffer, message.format, KTX2File);
3243
- // @ts-ignore
3244
- result.type = "transcoded";
3245
- self.postMessage(result);
3246
- }).catch(function(e) {
3247
- return self.postMessage({
3248
- error: e
3249
- });
3250
- });
3251
- break;
3335
+ GLTFUtils.floatBufferToVector4Array = function floatBufferToVector4Array(buffer) {
3336
+ var bufferLen = buffer.length;
3337
+ var array = new Array(bufferLen / 4);
3338
+ for(var i = 0; i < bufferLen; i += 4){
3339
+ array[i / 4] = new engineMath.Vector4(buffer[i], buffer[i + 1], buffer[i + 2], buffer[i + 3]);
3252
3340
  }
3341
+ return array;
3253
3342
  };
3254
- }
3255
- var _init = function init() {
3256
- var initPromise;
3257
- return function init(wasmBinary) {
3258
- if (!initPromise) {
3259
- initPromise = new Promise(function(resolve, reject) {
3260
- var BasisModule = {
3261
- wasmBinary: wasmBinary,
3262
- onRuntimeInitialized: function() {
3263
- return resolve(BasisModule);
3264
- },
3265
- onAbort: reject
3266
- };
3267
- self["BASIS"](BasisModule);
3268
- }).then(function(BasisModule) {
3269
- BasisModule.initializeBasis();
3270
- return BasisModule.KTX2File;
3271
- });
3343
+ GLTFUtils.floatBufferToColorArray = function floatBufferToColorArray(buffer, isColor3) {
3344
+ var bufferLen = buffer.length;
3345
+ var colors = new Array(bufferLen / (isColor3 ? 3 : 4));
3346
+ if (isColor3) {
3347
+ for(var i = 0; i < bufferLen; i += 3){
3348
+ colors[i / 3] = new engineMath.Color(buffer[i], buffer[i + 1], buffer[i + 2], 1.0);
3349
+ }
3350
+ } else {
3351
+ for(var i1 = 0; i1 < bufferLen; i1 += 4){
3352
+ colors[i1 / 4] = new engineMath.Color(buffer[i1], buffer[i1 + 1], buffer[i1 + 2], buffer[i1 + 3]);
3353
+ }
3272
3354
  }
3273
- return initPromise;
3355
+ return colors;
3274
3356
  };
3275
- };
3276
- var init = _init();
3277
- function transcode(buffer, targetFormat, KTX2File) {
3278
- function getTranscodeFormatFromTarget(target, hasAlpha) {
3279
- switch(target){
3280
- case 2:
3281
- return hasAlpha ? 3 : 2;
3282
- case 4:
3283
- return hasAlpha ? 1 : 0;
3284
- case 3:
3285
- return hasAlpha ? 9 : 8;
3286
- case 7:
3287
- return 13;
3288
- case 0:
3289
- return 10;
3290
- case 1:
3291
- return 7;
3292
- case 8:
3293
- return 22;
3294
- case 9:
3295
- return 23;
3296
- case 10:
3297
- return 25;
3357
+ /**
3358
+ * Get the number of bytes occupied by accessor type.
3359
+ */ GLTFUtils.getAccessorTypeSize = function getAccessorTypeSize(accessorType) {
3360
+ switch(accessorType){
3361
+ case AccessorType.SCALAR:
3362
+ return 1;
3363
+ case AccessorType.VEC2:
3364
+ return 2;
3365
+ case AccessorType.VEC3:
3366
+ return 3;
3367
+ case AccessorType.VEC4:
3368
+ return 4;
3369
+ case AccessorType.MAT2:
3370
+ return 4;
3371
+ case AccessorType.MAT3:
3372
+ return 9;
3373
+ case AccessorType.MAT4:
3374
+ return 16;
3298
3375
  }
3299
- }
3300
- function concat(arrays) {
3301
- if (arrays.length === 1) return arrays[0];
3302
- var totalByteLength = 0;
3303
- for(var i = 0; i < arrays.length; i++){
3304
- totalByteLength += arrays[i].byteLength;
3376
+ };
3377
+ /**
3378
+ * Get the TypedArray corresponding to the component type.
3379
+ */ GLTFUtils.getComponentType = function getComponentType(componentType) {
3380
+ switch(componentType){
3381
+ case AccessorComponentType.BYTE:
3382
+ return Int8Array;
3383
+ case AccessorComponentType.UNSIGNED_BYTE:
3384
+ return Uint8Array;
3385
+ case AccessorComponentType.SHORT:
3386
+ return Int16Array;
3387
+ case AccessorComponentType.UNSIGNED_SHORT:
3388
+ return Uint16Array;
3389
+ case AccessorComponentType.UNSIGNED_INT:
3390
+ return Uint32Array;
3391
+ case AccessorComponentType.FLOAT:
3392
+ return Float32Array;
3305
3393
  }
3306
- var result = new Uint8Array(totalByteLength);
3307
- var byteOffset = 0;
3308
- for(var i1 = 0; i1 < arrays.length; i1++){
3309
- result.set(arrays[i1], byteOffset);
3310
- byteOffset += arrays[i1].byteLength;
3394
+ };
3395
+ GLTFUtils.getNormalizedComponentScale = function getNormalizedComponentScale(componentType) {
3396
+ // Reference: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
3397
+ switch(componentType){
3398
+ case AccessorComponentType.BYTE:
3399
+ return 1 / 127;
3400
+ case AccessorComponentType.UNSIGNED_BYTE:
3401
+ return 1 / 255;
3402
+ case AccessorComponentType.SHORT:
3403
+ return 1 / 32767;
3404
+ case AccessorComponentType.UNSIGNED_SHORT:
3405
+ return 1 / 65535;
3406
+ default:
3407
+ throw new Error("Galacean.GLTFLoader: Unsupported normalized accessor component type.");
3311
3408
  }
3312
- return result;
3313
- }
3314
- var ktx2File = new KTX2File(new Uint8Array(buffer));
3315
- function cleanup() {
3316
- ktx2File.close();
3317
- ktx2File.delete();
3318
- }
3319
- if (!ktx2File.isValid()) {
3320
- cleanup();
3321
- throw new Error("Invalid or unsupported .ktx2 file");
3322
- }
3323
- if (!ktx2File.startTranscoding()) {
3324
- cleanup();
3325
- throw new Error("KTX2 startTranscoding failed");
3326
- }
3327
- var width = ktx2File.getWidth();
3328
- var height = ktx2File.getHeight();
3329
- var layerCount = ktx2File.getLayers() || 1;
3330
- var levelCount = ktx2File.getLevels();
3331
- var hasAlpha = ktx2File.getHasAlpha();
3332
- var faceCount = ktx2File.getFaces();
3333
- var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
3334
- var faces = new Array(faceCount);
3335
- var isBC = format === 2 || format === 3 || format === 7;
3336
- for(var face = 0; face < faceCount; face++){
3337
- var mipmaps = new Array(levelCount);
3338
- for(var mip = 0; mip < levelCount; mip++){
3339
- var layerMips = new Array(layerCount);
3340
- var mipWidth = void 0, mipHeight = void 0;
3341
- for(var layer = 0; layer < layerCount; layer++){
3342
- var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
3343
- // see: https://github.com/KhronosGroup/KTX-Software/issues/254
3344
- if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
3345
- width = mipWidth = levelInfo.width;
3346
- height = mipHeight = levelInfo.height;
3347
- 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.");
3409
+ };
3410
+ GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
3411
+ var componentType = accessor.componentType;
3412
+ var TypedArray = GLTFUtils.getComponentType(componentType);
3413
+ var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
3414
+ var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
3415
+ var elementStride = dataElementSize * dataElementBytes;
3416
+ var accessorCount = accessor.count;
3417
+ var promise;
3418
+ if (accessor.bufferView !== undefined) {
3419
+ var bufferViewIndex = accessor.bufferView;
3420
+ var bufferView = bufferViews[bufferViewIndex];
3421
+ promise = context.get(GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
3422
+ var bufferIndex = bufferView.buffer;
3423
+ var _bufferViewData_byteOffset;
3424
+ var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
3425
+ var _accessor_byteOffset;
3426
+ var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
3427
+ var bufferStride = bufferView.byteStride;
3428
+ var bufferInfo;
3429
+ // According to the glTF official documentation only byteStride not undefined is allowed
3430
+ if (bufferStride !== undefined && bufferStride !== elementStride) {
3431
+ var bufferSlice = Math.floor(byteOffset / bufferStride);
3432
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
3433
+ var accessorBufferCache = context.accessorBufferCache;
3434
+ bufferInfo = accessorBufferCache[bufferCacheKey];
3435
+ if (!bufferInfo) {
3436
+ var offset = bufferByteOffset + bufferSlice * bufferStride;
3437
+ var count = accessorCount * (bufferStride / dataElementBytes);
3438
+ var data = new TypedArray(bufferViewData.buffer, offset, count);
3439
+ accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
3440
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
3441
+ }
3348
3442
  } else {
3349
- mipWidth = levelInfo.origWidth;
3350
- mipHeight = levelInfo.origHeight;
3351
- }
3352
- var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
3353
- var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
3354
- if (targetFormat === 10) {
3355
- dst = new Uint16Array(dst.buffer, dst.byteOffset, dst.byteLength / Uint16Array.BYTES_PER_ELEMENT);
3356
- }
3357
- if (!status) {
3358
- cleanup();
3359
- throw new Error("transcodeImage failed.");
3443
+ var offset1 = bufferByteOffset + byteOffset;
3444
+ var count1 = accessorCount * dataElementSize;
3445
+ var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
3446
+ bufferInfo = new BufferInfo(data1, false, elementStride);
3447
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
3360
3448
  }
3361
- layerMips[layer] = dst;
3362
- }
3363
- mipmaps[mip] = {
3364
- data: concat(layerMips),
3365
- width: mipWidth,
3366
- height: mipHeight
3367
- };
3449
+ return bufferInfo;
3450
+ }).catch(function(e) {
3451
+ engineCore.Logger.error("GLTFUtil getAccessorBuffer error", e);
3452
+ });
3453
+ } else {
3454
+ var count = accessorCount * dataElementSize;
3455
+ var data = new TypedArray(count);
3456
+ var bufferInfo = new BufferInfo(data, false, elementStride);
3457
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(undefined, TypedArray, undefined, count));
3458
+ promise = engineCore.AssetPromise.resolve(bufferInfo);
3459
+ }
3460
+ return accessor.sparse ? promise.then(function(bufferInfo) {
3461
+ return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
3462
+ return bufferInfo;
3463
+ });
3464
+ }) : promise;
3465
+ };
3466
+ GLTFUtils.bufferToVector3Array = function bufferToVector3Array(buffer, byteOffset, count, normalized, componentType) {
3467
+ var baseOffset = byteOffset / buffer.BYTES_PER_ELEMENT;
3468
+ var stride = buffer.length / count;
3469
+ var vertices = new Array(count);
3470
+ var factor = normalized ? GLTFUtils.getNormalizedComponentScale(componentType) : 1;
3471
+ for(var i = 0; i < count; i++){
3472
+ var index = baseOffset + i * stride;
3473
+ vertices[i] = new engineMath.Vector3(buffer[index] * factor, buffer[index + 1] * factor, buffer[index + 2] * factor);
3368
3474
  }
3369
- faces[face] = mipmaps;
3370
- }
3371
- cleanup();
3372
- return {
3373
- faces: faces,
3374
- width: width,
3375
- height: height,
3376
- hasAlpha: hasAlpha,
3377
- faceCount: faceCount,
3378
- format: format
3475
+ return vertices;
3379
3476
  };
3380
- }
3381
-
3382
- /** @internal */ var BinomialLLCTranscoder = /*#__PURE__*/ function(AbstractTranscoder) {
3383
- _inherits(BinomialLLCTranscoder, AbstractTranscoder);
3384
- function BinomialLLCTranscoder(workerLimitCount) {
3385
- return AbstractTranscoder.call(this, workerLimitCount) || this;
3386
- }
3387
- var _proto = BinomialLLCTranscoder.prototype;
3388
- _proto._initTranscodeWorkerPool = function _initTranscodeWorkerPool() {
3389
- var _this = this;
3390
- return Promise.all([
3391
- fetch("https://mdn.alipayobjects.com/rms/afts/file/A*J8IrSL8WE8EAAAAAQ6AAAAgAehQnAQ/basis_transcoder.js").then(function(res) {
3392
- return res.text();
3393
- }),
3394
- fetch("https://mdn.alipayobjects.com/rms/afts/file/A*F3duSLqOP2sAAAAAXjAAAAgAehQnAQ/basis_transcoder.wasm").then(function(res) {
3395
- return res.arrayBuffer();
3396
- })
3477
+ GLTFUtils.getBufferViewData = function getBufferViewData(bufferView, buffers) {
3478
+ var _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset;
3479
+ var arrayBuffer = buffers[bufferView.buffer];
3480
+ return arrayBuffer.slice(byteOffset, byteOffset + bufferView.byteLength);
3481
+ };
3482
+ /**
3483
+ * Get accessor data.
3484
+ */ GLTFUtils.processingSparseData = function processingSparseData(context, accessor, bufferInfo) {
3485
+ var restoreInfo = bufferInfo.restoreInfo;
3486
+ var bufferViews = context.glTF.bufferViews;
3487
+ var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
3488
+ var TypedArray = GLTFUtils.getComponentType(accessor.componentType);
3489
+ var data = bufferInfo.data.slice();
3490
+ var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
3491
+ var indicesBufferView = bufferViews[indices.bufferView];
3492
+ var valuesBufferView = bufferViews[values.bufferView];
3493
+ return engineCore.AssetPromise.all([
3494
+ context.get(GLTFParserType.BufferView, indices.bufferView),
3495
+ context.get(GLTFParserType.BufferView, values.bufferView)
3397
3496
  ]).then(function(param) {
3398
- var jsCode = param[0], wasmBuffer = param[1];
3399
- if (_this.workerLimitCount === 0) {
3400
- return new Promise(function(resolve, reject) {
3401
- var scriptDom = document.createElement("script");
3402
- scriptDom.src = URL.createObjectURL(new Blob([
3403
- jsCode
3404
- ], {
3405
- type: "application/javascript"
3406
- }));
3407
- document.body.appendChild(scriptDom);
3408
- scriptDom.onload = function() {
3409
- init(wasmBuffer).then(function() {
3410
- resolve(null);
3411
- });
3412
- };
3413
- scriptDom.onerror = function() {
3414
- reject();
3415
- };
3416
- });
3417
- } else {
3418
- var funcCode = TranscodeWorkerCode.toString();
3419
- var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
3420
- var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
3421
- var workerURL = URL.createObjectURL(new Blob([
3422
- workerCode
3423
- ], {
3424
- type: "application/javascript"
3425
- }));
3426
- return _this._createTranscodePool(workerURL, wasmBuffer);
3497
+ var indicesUint8Array = param[0], valuesUin8Array = param[1];
3498
+ var _indices_byteOffset, _indicesUint8Array_byteOffset;
3499
+ var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesUint8Array_byteOffset = indicesUint8Array.byteOffset) != null ? _indicesUint8Array_byteOffset : 0);
3500
+ var indicesByteLength = indicesUint8Array.byteLength;
3501
+ var _values_byteOffset, _valuesUin8Array_byteOffset;
3502
+ var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesUin8Array_byteOffset = valuesUin8Array.byteOffset) != null ? _valuesUin8Array_byteOffset : 0);
3503
+ var valuesByteLength = valuesUin8Array.byteLength;
3504
+ restoreInfo.typeSize = accessorTypeSize;
3505
+ restoreInfo.sparseCount = count;
3506
+ var IndexTypeArray = GLTFUtils.getComponentType(indices.componentType);
3507
+ var indexLength = indicesByteLength / IndexTypeArray.BYTES_PER_ELEMENT;
3508
+ var indicesArray = new IndexTypeArray(indicesUint8Array.buffer, indicesByteOffset, indexLength);
3509
+ restoreInfo.sparseIndices = new RestoreDataAccessor(indicesBufferView.buffer, IndexTypeArray, indicesByteOffset, indexLength);
3510
+ var valueLength = valuesByteLength / TypedArray.BYTES_PER_ELEMENT;
3511
+ var valuesArray = new TypedArray(valuesUin8Array.buffer, valuesByteOffset, valueLength);
3512
+ restoreInfo.sparseValues = new RestoreDataAccessor(valuesBufferView.buffer, TypedArray, valuesByteOffset, valueLength);
3513
+ for(var i = 0; i < count; i++){
3514
+ var replaceIndex = indicesArray[i];
3515
+ for(var j = 0; j < accessorTypeSize; j++){
3516
+ data[replaceIndex * accessorTypeSize + j] = valuesArray[i * accessorTypeSize + j];
3517
+ }
3427
3518
  }
3519
+ bufferInfo.data = data;
3520
+ }).catch(function(e) {
3521
+ engineCore.Logger.error("GLTFUtil processingSparseData error", e);
3428
3522
  });
3429
3523
  };
3430
- _proto.transcode = function transcode1(buffer, format) {
3431
- if (this.workerLimitCount === 0) {
3432
- return init().then(function(KTX2File) {
3433
- return transcode(buffer, format, KTX2File);
3434
- });
3435
- } else {
3436
- return this._transcodeWorkerPool.postMessage({
3437
- buffer: buffer,
3438
- format: format,
3439
- type: "transcode"
3440
- });
3524
+ GLTFUtils.getIndexFormat = function getIndexFormat(type) {
3525
+ switch(type){
3526
+ case AccessorComponentType.UNSIGNED_BYTE:
3527
+ return engineCore.IndexFormat.UInt8;
3528
+ case AccessorComponentType.UNSIGNED_SHORT:
3529
+ return engineCore.IndexFormat.UInt16;
3530
+ case AccessorComponentType.UNSIGNED_INT:
3531
+ return engineCore.IndexFormat.UInt32;
3441
3532
  }
3442
3533
  };
3443
- return BinomialLLCTranscoder;
3444
- }(AbstractTranscoder);
3445
-
3446
- exports.KTX2Loader = /*#__PURE__*/ function(Loader) {
3447
- _inherits(KTX2Loader, Loader);
3448
- function KTX2Loader() {
3449
- return Loader.apply(this, arguments) || this;
3450
- }
3451
- var _proto = KTX2Loader.prototype;
3452
- _proto.initialize = function initialize(_, configuration) {
3453
- if (configuration.ktx2Loader) {
3454
- var options = configuration.ktx2Loader;
3455
- if (options.priorityFormats) {
3456
- KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
3457
- KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
3534
+ GLTFUtils.getElementFormat = function getElementFormat(type, size, normalized) {
3535
+ if (normalized === void 0) normalized = false;
3536
+ if (type == AccessorComponentType.FLOAT) {
3537
+ switch(size){
3538
+ case 1:
3539
+ return engineCore.VertexElementFormat.Float;
3540
+ case 2:
3541
+ return engineCore.VertexElementFormat.Vector2;
3542
+ case 3:
3543
+ return engineCore.VertexElementFormat.Vector3;
3544
+ case 4:
3545
+ return engineCore.VertexElementFormat.Vector4;
3546
+ }
3547
+ }
3548
+ if (type == AccessorComponentType.SHORT) {
3549
+ switch(size){
3550
+ case 2:
3551
+ return normalized ? engineCore.VertexElementFormat.NormalizedShort2 : engineCore.VertexElementFormat.Short2;
3552
+ case 3:
3553
+ case 4:
3554
+ return normalized ? engineCore.VertexElementFormat.NormalizedShort4 : engineCore.VertexElementFormat.Short4;
3555
+ }
3556
+ }
3557
+ if (type == AccessorComponentType.UNSIGNED_SHORT) {
3558
+ switch(size){
3559
+ case 2:
3560
+ return normalized ? engineCore.VertexElementFormat.NormalizedUShort2 : engineCore.VertexElementFormat.UShort2;
3561
+ case 3:
3562
+ case 4:
3563
+ return normalized ? engineCore.VertexElementFormat.NormalizedUShort4 : engineCore.VertexElementFormat.UShort4;
3564
+ }
3565
+ }
3566
+ if (type == AccessorComponentType.BYTE) {
3567
+ switch(size){
3568
+ case 2:
3569
+ case 3:
3570
+ case 4:
3571
+ return normalized ? engineCore.VertexElementFormat.NormalizedByte4 : engineCore.VertexElementFormat.Byte4;
3572
+ }
3573
+ }
3574
+ if (type == AccessorComponentType.UNSIGNED_BYTE) {
3575
+ switch(size){
3576
+ case 2:
3577
+ case 3:
3578
+ case 4:
3579
+ return normalized ? engineCore.VertexElementFormat.NormalizedUByte4 : engineCore.VertexElementFormat.UByte4;
3458
3580
  }
3459
- return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
3460
3581
  }
3461
3582
  };
3462
3583
  /**
3463
- * @internal
3464
- */ _proto.load = function load(item, resourceManager) {
3465
- return new engineCore.AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
3466
- var requestConfig = _extends({}, item, {
3467
- type: "arraybuffer"
3584
+ * Load image buffer
3585
+ */ GLTFUtils.loadImageBuffer = function loadImageBuffer(imageBuffer, type) {
3586
+ return new Promise(function(resolve, reject) {
3587
+ var blob = new window.Blob([
3588
+ imageBuffer
3589
+ ], {
3590
+ type: type
3468
3591
  });
3469
- var url = item.url;
3470
- resourceManager// @ts-ignore
3471
- ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
3472
- return KTX2Loader._parseBuffer(new Uint8Array(buffer), resourceManager.engine, item.params).then(function(param) {
3473
- var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
3474
- return KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params);
3475
- }).then(function(texture) {
3476
- resourceManager.addContentRestorer(new KTX2ContentRestorer(texture, url, requestConfig));
3477
- resolve(texture);
3592
+ var img = new Image();
3593
+ img.onerror = function() {
3594
+ reject(new Error("Failed to load image buffer"));
3595
+ };
3596
+ img.onload = function() {
3597
+ // Call requestAnimationFrame to avoid iOS's bug.
3598
+ requestAnimationFrame(function() {
3599
+ resolve(img);
3600
+ img.onload = null;
3601
+ img.onerror = null;
3602
+ img.onabort = null;
3478
3603
  });
3479
- }).catch(reject);
3604
+ };
3605
+ img.crossOrigin = "anonymous";
3606
+ img.src = URL.createObjectURL(blob);
3480
3607
  });
3481
3608
  };
3482
3609
  /**
3483
- * Release ktx2 transcoder worker.
3484
- * @remarks If use loader after releasing, we should release again.
3485
- */ KTX2Loader.release = function release() {
3486
- if (this._binomialLLCTranscoder) this._binomialLLCTranscoder.destroy();
3487
- this._binomialLLCTranscoder = null;
3488
- };
3489
- /** @internal */ KTX2Loader._parseBuffer = function _parseBuffer(buffer, engine, params) {
3490
- var ktx2Container = new KTX2Container(buffer);
3491
- var _params_priorityFormats;
3492
- var formatPriorities = (_params_priorityFormats = params == null ? void 0 : params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.colorModel];
3493
- var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
3494
- var binomialLLCWorker = KTX2Loader._getBinomialLLCTranscoder();
3495
- return binomialLLCWorker.init().then(function() {
3496
- return binomialLLCWorker.transcode(buffer, targetFormat);
3497
- }).then(function(result) {
3610
+ * Parse the glb format.
3611
+ */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
3612
+ var UINT32_LENGTH = 4;
3613
+ var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
3614
+ var GLB_HEADER_LENGTH = 12;
3615
+ var GLB_CHUNK_TYPES = {
3616
+ JSON: 0x4e4f534a,
3617
+ BIN: 0x004e4942
3618
+ };
3619
+ var dataView = new DataView(originBuffer);
3620
+ // Read header
3621
+ var header = {
3622
+ magic: dataView.getUint32(0, true),
3623
+ version: dataView.getUint32(UINT32_LENGTH, true),
3624
+ length: dataView.getUint32(2 * UINT32_LENGTH, true)
3625
+ };
3626
+ // Return the original buffer if it is not a glb
3627
+ if (header.magic !== GLB_HEADER_MAGIC) {
3498
3628
  return {
3499
- ktx2Container: ktx2Container,
3500
- engine: engine,
3501
- result: result,
3502
- targetFormat: targetFormat,
3503
- params: ktx2Container.keyValue["GalaceanTextureParams"]
3629
+ originBuffer: originBuffer
3504
3630
  };
3505
- });
3506
- };
3507
- /** @internal */ KTX2Loader._createTextureByBuffer = function _createTextureByBuffer(engine, isSRGB, transcodeResult, targetFormat, params, restoredTexture) {
3508
- var width = transcodeResult.width, height = transcodeResult.height, faces = transcodeResult.faces;
3509
- var faceCount = faces.length;
3510
- var mipmaps = faces[0];
3511
- var mipmap = mipmaps.length > 1;
3512
- var engineFormat = this._getEngineTextureFormat(targetFormat, transcodeResult);
3513
- var texture;
3514
- if (faceCount !== 6) {
3515
- texture = restoredTexture || new engineCore.Texture2D(engine, width, height, engineFormat, mipmap, isSRGB);
3516
- for(var mipLevel = 0; mipLevel < mipmaps.length; mipLevel++){
3517
- var data = mipmaps[mipLevel].data;
3518
- texture.setPixelBuffer(data, mipLevel);
3519
- }
3520
- } else {
3521
- texture = restoredTexture || new engineCore.TextureCube(engine, height, engineFormat, mipmap, isSRGB);
3522
- for(var i = 0; i < faces.length; i++){
3523
- var faceData = faces[i];
3524
- for(var mipLevel1 = 0; mipLevel1 < mipmaps.length; mipLevel1++){
3525
- texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + i, faceData[mipLevel1].data, mipLevel1);
3526
- }
3527
- }
3528
3631
  }
3529
- if (params) {
3530
- texture.wrapModeU = params[0];
3531
- texture.wrapModeV = params[1];
3532
- texture.filterMode = params[2];
3533
- texture.anisoLevel = params[3];
3632
+ // Read main data
3633
+ var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
3634
+ var chunkType = dataView.getUint32(GLB_HEADER_LENGTH + UINT32_LENGTH, true);
3635
+ // Read glTF json
3636
+ if (chunkType !== GLB_CHUNK_TYPES.JSON) {
3637
+ console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
3638
+ return null;
3534
3639
  }
3535
- return texture;
3640
+ var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
3641
+ var glTF = JSON.parse(engineCore.Utils.decodeText(glTFData));
3642
+ // Read all buffers
3643
+ var buffers = [];
3644
+ var byteOffset = GLB_HEADER_LENGTH + 2 * UINT32_LENGTH + chunkLength;
3645
+ var restoreGLBBufferSlice = context.contentRestorer.glbBufferSlices;
3646
+ while(byteOffset < header.length){
3647
+ chunkLength = dataView.getUint32(byteOffset, true);
3648
+ chunkType = dataView.getUint32(byteOffset + UINT32_LENGTH, true);
3649
+ if (chunkType !== GLB_CHUNK_TYPES.BIN) {
3650
+ console.error("Invalid glb chunk type. Expected 0x004E4942, found 0x" + chunkType.toString(16));
3651
+ return null;
3652
+ }
3653
+ var currentOffset = byteOffset + 2 * UINT32_LENGTH;
3654
+ var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
3655
+ buffers.push(buffer);
3656
+ restoreGLBBufferSlice.push(new engineMath.Vector2(currentOffset, chunkLength));
3657
+ byteOffset += chunkLength + 2 * UINT32_LENGTH;
3658
+ }
3659
+ return {
3660
+ glTF: glTF,
3661
+ buffers: buffers
3662
+ };
3536
3663
  };
3537
- KTX2Loader._decideTargetFormat = function _decideTargetFormat(engine, ktx2Container, priorityFormats) {
3538
- var renderer = engine._hardwareRenderer;
3539
- var isSRGB = ktx2Container.isSRGB, pixelWidth = ktx2Container.pixelWidth, pixelHeight = ktx2Container.pixelHeight;
3540
- var targetFormat = this._detectSupportedFormat(renderer, priorityFormats, isSRGB);
3541
- if (targetFormat === KTX2TargetFormat.PVRTC && (!engineMath.MathUtil.isPowerOf2(pixelWidth) || !engineMath.MathUtil.isPowerOf2(pixelHeight) || pixelWidth !== pixelHeight)) {
3542
- engineCore.Logger.warn("PVRTC image need power of 2 and width===height, downgrade to RGBA8");
3543
- return KTX2TargetFormat.R8G8B8A8;
3664
+ GLTFUtils.parseSampler = function parseSampler(texture, samplerInfo) {
3665
+ var filterMode = samplerInfo.filterMode, wrapModeU = samplerInfo.wrapModeU, wrapModeV = samplerInfo.wrapModeV;
3666
+ if (filterMode !== undefined) {
3667
+ texture.filterMode = filterMode;
3544
3668
  }
3545
- if (targetFormat === null) {
3546
- engineCore.Logger.warn("Can't support any compressed texture, downgrade to RGBA8");
3547
- return KTX2TargetFormat.R8G8B8A8;
3669
+ if (wrapModeU !== undefined) {
3670
+ texture.wrapModeU = wrapModeU;
3671
+ }
3672
+ if (wrapModeV !== undefined) {
3673
+ texture.wrapModeV = wrapModeV;
3548
3674
  }
3549
- return targetFormat;
3550
3675
  };
3551
- KTX2Loader._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats, isSRGB) {
3552
- for(var i = 0; i < priorityFormats.length; i++){
3553
- var _this__capabilityMap_format;
3554
- var format = priorityFormats[i];
3555
- var capabilities = (_this__capabilityMap_format = this._capabilityMap[format]) == null ? void 0 : _this__capabilityMap_format[isSRGB ? DFDTransferFunction.sRGB : DFDTransferFunction.linear];
3556
- if (capabilities) {
3557
- for(var j = 0; j < capabilities.length; j++){
3558
- if (renderer.canIUse(capabilities[j])) {
3559
- return format;
3560
- }
3561
- }
3676
+ GLTFUtils.getSamplerInfo = function getSamplerInfo(sampler) {
3677
+ var minFilter = sampler.minFilter, magFilter = sampler.magFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
3678
+ var info = {};
3679
+ if (minFilter || magFilter) {
3680
+ info.mipmap = minFilter >= TextureMinFilter.NEAREST_MIPMAP_NEAREST;
3681
+ if (magFilter === TextureMagFilter.NEAREST) {
3682
+ info.filterMode = engineCore.TextureFilterMode.Point;
3562
3683
  } else {
3563
- switch(priorityFormats[i]){
3564
- case KTX2TargetFormat.R8G8B8A8:
3565
- return format;
3566
- case KTX2TargetFormat.R8:
3567
- case KTX2TargetFormat.R8G8:
3568
- if (renderer.isWebGL2) return format;
3684
+ if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
3685
+ info.filterMode = engineCore.TextureFilterMode.Bilinear;
3686
+ } else {
3687
+ info.filterMode = engineCore.TextureFilterMode.Trilinear;
3569
3688
  }
3570
3689
  }
3571
3690
  }
3572
- return null;
3573
- };
3574
- KTX2Loader._getBinomialLLCTranscoder = function _getBinomialLLCTranscoder(workerCount) {
3575
- if (workerCount === void 0) workerCount = 4;
3576
- var _this__binomialLLCTranscoder;
3577
- return (_this__binomialLLCTranscoder = this._binomialLLCTranscoder) != null ? _this__binomialLLCTranscoder : this._binomialLLCTranscoder = new BinomialLLCTranscoder(workerCount);
3578
- };
3579
- KTX2Loader._getEngineTextureFormat = function _getEngineTextureFormat(basisFormat, transcodeResult) {
3580
- var hasAlpha = transcodeResult.hasAlpha;
3581
- switch(basisFormat){
3582
- case KTX2TargetFormat.ASTC:
3583
- return engineCore.TextureFormat.ASTC_4x4;
3584
- case KTX2TargetFormat.ETC:
3585
- return hasAlpha ? engineCore.TextureFormat.ETC2_RGBA8 : engineCore.TextureFormat.ETC2_RGB;
3586
- case KTX2TargetFormat.BC7:
3587
- return engineCore.TextureFormat.BC7;
3588
- case KTX2TargetFormat.BC1_BC3:
3589
- return hasAlpha ? engineCore.TextureFormat.BC3 : engineCore.TextureFormat.BC1;
3590
- case KTX2TargetFormat.PVRTC:
3591
- return hasAlpha ? engineCore.TextureFormat.PVRTC_RGBA4 : engineCore.TextureFormat.PVRTC_RGB4;
3592
- case KTX2TargetFormat.R8G8B8A8:
3593
- return engineCore.TextureFormat.R8G8B8A8;
3594
- case KTX2TargetFormat.BC6H:
3595
- return engineCore.TextureFormat.BC6H;
3596
- case KTX2TargetFormat.ASTC_HDR_4x4:
3597
- return engineCore.TextureFormat.ASTC_4x4;
3598
- case KTX2TargetFormat.R16G16B16A16:
3599
- return engineCore.TextureFormat.R16G16B16A16;
3691
+ if (wrapS) {
3692
+ info.wrapModeU = exports.GLTFTextureParser._wrapMap[wrapS];
3600
3693
  }
3694
+ if (wrapT) {
3695
+ info.wrapModeV = exports.GLTFTextureParser._wrapMap[wrapT];
3696
+ }
3697
+ return info;
3601
3698
  };
3602
- return KTX2Loader;
3603
- }(engineCore.Loader);
3604
- var _obj$1;
3605
- exports.KTX2Loader._priorityFormats = (_obj$1 = {}, _obj$1[ColorModel.ETC1S] = [
3606
- KTX2TargetFormat.ETC,
3607
- KTX2TargetFormat.BC7,
3608
- KTX2TargetFormat.ASTC,
3609
- KTX2TargetFormat.BC1_BC3,
3610
- KTX2TargetFormat.PVRTC
3611
- ], _obj$1[ColorModel.UASTC_LDR_4X4] = [
3612
- KTX2TargetFormat.ASTC,
3613
- KTX2TargetFormat.BC7,
3614
- KTX2TargetFormat.ETC,
3615
- KTX2TargetFormat.BC1_BC3,
3616
- KTX2TargetFormat.PVRTC
3617
- ], _obj$1[ColorModel.UASTC_HDR_4X4] = [
3618
- KTX2TargetFormat.ASTC_HDR_4x4,
3619
- KTX2TargetFormat.BC6H,
3620
- KTX2TargetFormat.R16G16B16A16
3621
- ], _obj$1);
3622
- var _obj1, _obj2, _obj3, _obj4, _obj5, _obj6, _obj7, _obj8, _obj9;
3623
- exports.KTX2Loader._capabilityMap = (_obj9 = {}, _obj9[KTX2TargetFormat.ASTC] = (_obj1 = {}, _obj1[DFDTransferFunction.linear] = [
3624
- engineCore.GLCapabilityType.astc,
3625
- engineCore.GLCapabilityType.astc_webkit
3626
- ], _obj1[DFDTransferFunction.sRGB] = [
3627
- engineCore.GLCapabilityType.astc,
3628
- engineCore.GLCapabilityType.astc_webkit
3629
- ], _obj1), _obj9[KTX2TargetFormat.ETC] = (_obj2 = {}, _obj2[DFDTransferFunction.linear] = [
3630
- engineCore.GLCapabilityType.etc,
3631
- engineCore.GLCapabilityType.etc_webkit
3632
- ], _obj2[DFDTransferFunction.sRGB] = [
3633
- engineCore.GLCapabilityType.etc,
3634
- engineCore.GLCapabilityType.etc_webkit
3635
- ], _obj2), _obj9[KTX2TargetFormat.BC7] = (_obj3 = {}, _obj3[DFDTransferFunction.linear] = [
3636
- engineCore.GLCapabilityType.bptc
3637
- ], _obj3[DFDTransferFunction.sRGB] = [
3638
- engineCore.GLCapabilityType.bptc
3639
- ], _obj3), _obj9[KTX2TargetFormat.BC1_BC3] = (_obj4 = {}, _obj4[DFDTransferFunction.linear] = [
3640
- engineCore.GLCapabilityType.s3tc
3641
- ], _obj4[DFDTransferFunction.sRGB] = [
3642
- engineCore.GLCapabilityType.s3tc_srgb
3643
- ], _obj4), _obj9[KTX2TargetFormat.BC6H] = (_obj5 = {}, _obj5[DFDTransferFunction.linear] = [
3644
- engineCore.GLCapabilityType.bptc
3645
- ], _obj5), _obj9[KTX2TargetFormat.ASTC_HDR_4x4] = (_obj6 = {}, _obj6[DFDTransferFunction.linear] = [
3646
- engineCore.GLCapabilityType.astc_hdr
3647
- ], _obj6), _obj9[KTX2TargetFormat.R16G16B16A16] = (_obj7 = {}, _obj7[DFDTransferFunction.linear] = [
3648
- engineCore.GLCapabilityType.textureHalfFloat
3649
- ], _obj7), _obj9[KTX2TargetFormat.PVRTC] = (_obj8 = {}, _obj8[DFDTransferFunction.linear] = [
3650
- engineCore.GLCapabilityType.pvrtc,
3651
- engineCore.GLCapabilityType.pvrtc_webkit
3652
- ], _obj8), _obj9);
3653
- exports.KTX2Loader = __decorate([
3654
- engineCore.resourceLoader(engineCore.AssetType.KTX2, [
3655
- "ktx2"
3656
- ])
3657
- ], exports.KTX2Loader);
3658
- var KTX2ContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
3659
- _inherits(KTX2ContentRestorer, ContentRestorer);
3660
- function KTX2ContentRestorer(resource, url, requestConfig) {
3661
- var _this;
3662
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
3663
- return _this;
3664
- }
3665
- var _proto = KTX2ContentRestorer.prototype;
3666
- _proto.restoreContent = function restoreContent() {
3667
- var _this = this;
3668
- var _this1 = this, resource = _this1.resource, requestConfig = _this1.requestConfig;
3669
- var engine = resource.engine;
3670
- return new engineCore.AssetPromise(function(resolve, reject) {
3671
- engine.resourceManager// @ts-ignore
3672
- ._request(_this.url, requestConfig).then(function(buffer) {
3673
- return exports.KTX2Loader._parseBuffer(new Uint8Array(buffer), engine, requestConfig.params).then(function(param) {
3674
- var ktx2Container = param.ktx2Container, engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
3675
- return exports.KTX2Loader._createTextureByBuffer(engine, ktx2Container.isSRGB, result, targetFormat, params, resource);
3676
- });
3677
- }).then(resolve).catch(reject);
3678
- });
3679
- };
3680
- return KTX2ContentRestorer;
3681
- }(engineCore.ContentRestorer);
3699
+ return GLTFUtils;
3700
+ }();
3682
3701
 
3683
3702
  /**
3684
3703
  * @internal
@@ -6410,13 +6429,6 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6410
6429
  }
6411
6430
  var _proto = TextureCubeLoader.prototype;
6412
6431
  _proto.load = function load(item, resourceManager) {
6413
- if (item.urls) {
6414
- return this._loadCubeFaces(item, resourceManager);
6415
- } else {
6416
- return this._loadHDR(item, resourceManager);
6417
- }
6418
- };
6419
- _proto._loadHDR = function _loadHDR(item, resourceManager) {
6420
6432
  return new engineCore.AssetPromise(function(resolve, reject) {
6421
6433
  var engine = resourceManager.engine;
6422
6434
  var url = item.url;
@@ -6447,39 +6459,6 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6447
6459
  }).catch(reject);
6448
6460
  });
6449
6461
  };
6450
- _proto._loadCubeFaces = function _loadCubeFaces(item, resourceManager) {
6451
- return new engineCore.AssetPromise(function(resolve, reject) {
6452
- var urls = item.urls;
6453
- var requestConfig = _extends({}, item, {
6454
- type: "image"
6455
- });
6456
- // @ts-ignore
6457
- Promise.all(urls.map(function(url) {
6458
- return resourceManager._request(url, requestConfig);
6459
- })).then(function(images) {
6460
- var _item_params;
6461
- var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_format = _ref.format, format = _ref_format === void 0 ? engineCore.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;
6462
- var _images_ = images[0], width = _images_.width, height = _images_.height;
6463
- if (width !== height) {
6464
- reject(new Error("The cube texture must have the same width and height"));
6465
- return;
6466
- }
6467
- var engine = resourceManager.engine;
6468
- var generateMipmap = engineCore.TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
6469
- var texture = new engineCore.TextureCube(engine, width, format, generateMipmap, isSRGBColorSpace);
6470
- texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
6471
- texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
6472
- texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
6473
- texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
6474
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6475
- texture.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6476
- }
6477
- texture.generateMipmaps();
6478
- resourceManager.addContentRestorer(new CubeFaceContentRestorer(texture, urls, requestConfig));
6479
- resolve(texture);
6480
- }).catch(reject);
6481
- });
6482
- };
6483
6462
  return TextureCubeLoader;
6484
6463
  }(engineCore.Loader);
6485
6464
  TextureCubeLoader = __decorate([
@@ -6513,31 +6492,6 @@ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6513
6492
  };
6514
6493
  return HDRContentRestorer;
6515
6494
  }(engineCore.ContentRestorer);
6516
- var CubeFaceContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6517
- _inherits(CubeFaceContentRestorer, ContentRestorer);
6518
- function CubeFaceContentRestorer(resource, urls, requestConfig) {
6519
- var _this;
6520
- _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
6521
- return _this;
6522
- }
6523
- var _proto = CubeFaceContentRestorer.prototype;
6524
- _proto.restoreContent = function restoreContent() {
6525
- var _this = this;
6526
- return new engineCore.AssetPromise(function(resolve, reject) {
6527
- Promise.all(_this.urls.map(function(url) {
6528
- return engineCore.request(url, _this.requestConfig);
6529
- })).then(function(images) {
6530
- var resource = _this.resource;
6531
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6532
- resource.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6533
- }
6534
- resource.generateMipmaps();
6535
- resolve(resource);
6536
- }).catch(reject);
6537
- });
6538
- };
6539
- return CubeFaceContentRestorer;
6540
- }(engineCore.ContentRestorer);
6541
6495
 
6542
6496
  var AudioLoader = /*#__PURE__*/ function(Loader) {
6543
6497
  _inherits(AudioLoader, Loader);