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