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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -252,7 +252,9 @@ var decoderMap = {};
252
252
  };
253
253
  }
254
254
 
255
- var FileHeader = /*#__PURE__*/ function() {
255
+ /**
256
+ * Binary format: [MAGIC(4B)] [totalLength(4B)] [version(1B)] [typeLen(2B)] [type] [nameLen(2B)] [name] [data...]
257
+ */ var FileHeader = /*#__PURE__*/ function() {
256
258
  function FileHeader() {
257
259
  this.totalLength = 0;
258
260
  this.version = 0;
@@ -260,14 +262,23 @@ var FileHeader = /*#__PURE__*/ function() {
260
262
  this.name = "";
261
263
  this.headerLength = 0;
262
264
  }
265
+ FileHeader.checkMagic = function checkMagic(arrayBuffer) {
266
+ if (arrayBuffer.byteLength < 4) return false;
267
+ var view = new DataView(arrayBuffer);
268
+ return view.getUint32(0, true) === FileHeader.MAGIC;
269
+ };
263
270
  FileHeader.decode = function decode(arrayBuffer) {
264
271
  var dataView = new DataView(arrayBuffer);
265
- var totalLen = dataView.getUint32(0, true);
266
- var fileVersion = dataView.getUint8(4);
267
- var typeLen = dataView.getUint16(5, true);
268
- var typeUint8Array = new Uint8Array(arrayBuffer, 7, typeLen);
269
- var nameLen = dataView.getUint16(7 + typeLen, true);
270
- var nameUint8Array = new Uint8Array(arrayBuffer, 9 + typeLen, nameLen);
272
+ if (!FileHeader.checkMagic(arrayBuffer)) {
273
+ throw new Error("Invalid Galacean binary file: missing GLCN magic header.");
274
+ }
275
+ var offset = 4;
276
+ var totalLen = dataView.getUint32(offset, true);
277
+ var fileVersion = dataView.getUint8(offset + 4);
278
+ var typeLen = dataView.getUint16(offset + 5, true);
279
+ var typeUint8Array = new Uint8Array(arrayBuffer, offset + 7, typeLen);
280
+ var nameLen = dataView.getUint16(offset + 7 + typeLen, true);
281
+ var nameUint8Array = new Uint8Array(arrayBuffer, offset + 9 + typeLen, nameLen);
271
282
  var name = engineCore.Utils.decodeText(nameUint8Array);
272
283
  var type = engineCore.Utils.decodeText(typeUint8Array);
273
284
  var header = new FileHeader();
@@ -275,7 +286,7 @@ var FileHeader = /*#__PURE__*/ function() {
275
286
  header.name = name;
276
287
  header.type = type;
277
288
  header.version = fileVersion;
278
- header.headerLength = nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
289
+ header.headerLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
279
290
  return header;
280
291
  };
281
292
  _create_class(FileHeader, [
@@ -288,6 +299,8 @@ var FileHeader = /*#__PURE__*/ function() {
288
299
  ]);
289
300
  return FileHeader;
290
301
  }();
302
+ FileHeader.MAGIC = 0x4e434c47 // "GLCN" in little-endian
303
+ ;
291
304
 
292
305
  var InterpolableValueType = /*#__PURE__*/ function(InterpolableValueType) {
293
306
  InterpolableValueType[InterpolableValueType["Float"] = 0] = "Float";
@@ -694,12 +707,12 @@ var ParserType = /*#__PURE__*/ function(ParserType) {
694
707
  this.rootIds.length = 0;
695
708
  this.strippedIds.length = 0;
696
709
  };
697
- /** @internal */ _proto._addDependentAsset = function _addDependentAsset(refID, promise) {
710
+ /** @internal */ _proto._addDependentAsset = function _addDependentAsset(url, promise) {
698
711
  var _this = this;
699
712
  var tasks = this._tasks;
700
- if (tasks.has(refID)) return;
713
+ if (tasks.has(url)) return;
701
714
  ++this._total;
702
- tasks.add(refID);
715
+ tasks.add(url);
703
716
  promise.finally(function() {
704
717
  ++_this._loaded;
705
718
  _this._setTaskCompleteProgress(_this._loaded, _this._total);
@@ -807,7 +820,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
807
820
  // reference object
808
821
  // @ts-ignore
809
822
  return context.resourceManager.getResourceByRef(value).then(function(resource) {
810
- if (context.type === ParserType.Prefab) {
823
+ if (resource && context.type === ParserType.Prefab) {
811
824
  // @ts-ignore
812
825
  context.resource._addDependenceAsset(resource);
813
826
  }
@@ -850,18 +863,18 @@ var ReflectionParser = /*#__PURE__*/ function() {
850
863
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
851
864
  var _this = this;
852
865
  // @ts-ignore
853
- var assetRefId = entityConfig.assetRefId;
866
+ var assetUrl = entityConfig.assetUrl;
854
867
  var engine = this._context.engine;
855
- if (assetRefId) {
868
+ if (assetUrl) {
856
869
  return engine.resourceManager// @ts-ignore
857
870
  .getResourceByRef({
858
- refId: assetRefId,
871
+ url: assetUrl,
859
872
  key: entityConfig.key,
860
873
  isClone: entityConfig.isClone
861
874
  }).then(function(entity) {
862
875
  // @ts-ignore
863
- var resource = engine.resourceManager._objectPool[assetRefId];
864
- if (_this._context.type === ParserType.Prefab) {
876
+ var resource = engine.resourceManager._objectPool[assetUrl];
877
+ if (resource && _this._context.type === ParserType.Prefab) {
865
878
  // @ts-ignore
866
879
  _this._context.resource._addDependenceAsset(resource);
867
880
  }
@@ -884,7 +897,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
884
897
  return value["classType"] !== undefined;
885
898
  };
886
899
  ReflectionParser._isAssetRef = function _isAssetRef(value) {
887
- return value["refId"] !== undefined;
900
+ return value["url"] !== undefined;
888
901
  };
889
902
  ReflectionParser._isEntityRef = function _isEntityRef(value) {
890
903
  return value["entityId"] !== undefined;
@@ -903,7 +916,7 @@ exports.Texture2DDecoder = /*#__PURE__*/ function() {
903
916
  function Texture2DDecoder() {}
904
917
  Texture2DDecoder.decode = function decode(engine, bufferReader, restoredTexture) {
905
918
  return new engineCore.AssetPromise(function(resolve, reject) {
906
- var objectId = bufferReader.nextStr();
919
+ var url = bufferReader.nextStr();
907
920
  var mipmap = !!bufferReader.nextUint8();
908
921
  var filterMode = bufferReader.nextUint8();
909
922
  var anisoLevel = bufferReader.nextUint8();
@@ -932,7 +945,7 @@ exports.Texture2DDecoder = /*#__PURE__*/ function() {
932
945
  }
933
946
  }
934
947
  // @ts-ignore
935
- engine.resourceManager._objectPool[objectId] = texture2D;
948
+ engine.resourceManager._objectPool[url] = texture2D;
936
949
  resolve(texture2D);
937
950
  } else {
938
951
  var blob = new window.Blob([
@@ -1236,7 +1249,7 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1236
1249
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig, engine) {
1237
1250
  var _this = this;
1238
1251
  var entityPromise;
1239
- if (entityConfig.assetRefId) {
1252
+ if (entityConfig.assetUrl) {
1240
1253
  entityPromise = this._parsePrefab(entityConfig, engine);
1241
1254
  } else if (entityConfig.strippedId) {
1242
1255
  entityPromise = this._parseStrippedEntity(entityConfig);
@@ -1256,10 +1269,10 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1256
1269
  };
1257
1270
  _proto._parsePrefab = function _parsePrefab(entityConfig, engine) {
1258
1271
  var _this = this;
1259
- var assetRefId = entityConfig.assetRefId;
1272
+ var assetUrl = entityConfig.assetUrl;
1260
1273
  return engine.resourceManager// @ts-ignore
1261
1274
  .getResourceByRef({
1262
- refId: assetRefId
1275
+ url: assetUrl
1263
1276
  }).then(function(prefabResource) {
1264
1277
  var entity = _instanceof(prefabResource, PrefabResource) ? prefabResource.instantiate() : prefabResource.instantiateSceneRoot();
1265
1278
  var instanceContext = new ParserContext(engine, ParserType.Prefab, null);
@@ -1310,7 +1323,7 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1310
1323
  var componentConfigMap = context.componentConfigMap;
1311
1324
  for(var i = 0, n = components.length; i < n; i++){
1312
1325
  var componentConfig = components[i];
1313
- var key = !componentConfig.refId ? componentConfig.class : componentConfig.refId;
1326
+ var key = !componentConfig.url ? componentConfig.class : componentConfig.url;
1314
1327
  var componentId = componentConfig.id;
1315
1328
  var component = entity.addComponent(engineCore.Loader.getClass(key));
1316
1329
  componentMap.set(componentId, component);
@@ -1358,53 +1371,6 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1358
1371
  return HierarchyParser;
1359
1372
  }();
1360
1373
 
1361
- exports.EditorTextureLoader = /*#__PURE__*/ function(Loader) {
1362
- _inherits(EditorTextureLoader, Loader);
1363
- function EditorTextureLoader() {
1364
- return Loader.apply(this, arguments) || this;
1365
- }
1366
- var _proto = EditorTextureLoader.prototype;
1367
- _proto.load = function load(item, resourceManager) {
1368
- var requestConfig = _extends({}, item, {
1369
- type: "arraybuffer"
1370
- });
1371
- var url = item.url;
1372
- return new engineCore.AssetPromise(function(resolve, reject) {
1373
- resourceManager// @ts-ignore
1374
- ._request(url, requestConfig).then(function(data) {
1375
- decode(data, resourceManager.engine).then(function(texture) {
1376
- resourceManager.addContentRestorer(new EditorTexture2DContentRestorer(texture, url, requestConfig));
1377
- resolve(texture);
1378
- });
1379
- }).catch(reject);
1380
- });
1381
- };
1382
- return EditorTextureLoader;
1383
- }(engineCore.Loader);
1384
- exports.EditorTextureLoader = __decorate([
1385
- engineCore.resourceLoader("EditorTexture2D", [
1386
- "prefab"
1387
- ], true)
1388
- ], exports.EditorTextureLoader);
1389
- var EditorTexture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
1390
- _inherits(EditorTexture2DContentRestorer, ContentRestorer);
1391
- function EditorTexture2DContentRestorer(resource, url, requestConfig) {
1392
- var _this;
1393
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
1394
- return _this;
1395
- }
1396
- var _proto = EditorTexture2DContentRestorer.prototype;
1397
- _proto.restoreContent = function restoreContent() {
1398
- var texture = this.resource;
1399
- var engine = texture.engine;
1400
- return engine.resourceManager// @ts-ignore
1401
- ._request(this.url, this.requestConfig).then(function(data) {
1402
- return decode(data, engine, texture);
1403
- });
1404
- };
1405
- return EditorTexture2DContentRestorer;
1406
- }(engineCore.ContentRestorer);
1407
-
1408
1374
  var MaterialLoaderType = /*#__PURE__*/ function(MaterialLoaderType) {
1409
1375
  MaterialLoaderType["Vector2"] = "Vector2";
1410
1376
  MaterialLoaderType["Vector3"] = "Vector3";
@@ -1445,11 +1411,11 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1445
1411
  var customAmbientLight = ambient.customAmbientLight, ambientLight = ambient.ambientLight;
1446
1412
  if (useCustomAmbient && customAmbientLight) {
1447
1413
  // @ts-ignore
1448
- context._addDependentAsset(customAmbientLight.refId, resourceManager.getResourceByRef(customAmbientLight));
1414
+ context._addDependentAsset(customAmbientLight.url, resourceManager.getResourceByRef(customAmbientLight));
1449
1415
  }
1450
1416
  if (ambientLight && (!useCustomAmbient || useSH)) {
1451
1417
  // @ts-ignore
1452
- context._addDependentAsset(ambientLight.refId, resourceManager.getResourceByRef(ambientLight));
1418
+ context._addDependentAsset(ambientLight.url, resourceManager.getResourceByRef(ambientLight));
1453
1419
  }
1454
1420
  }
1455
1421
  var background = scene.background;
@@ -1457,14 +1423,14 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1457
1423
  if (backgroundMode === engineCore.BackgroundMode.Texture) {
1458
1424
  var texture = background.texture;
1459
1425
  // @ts-ignore
1460
- texture && context._addDependentAsset(texture.refId, resourceManager.getResourceByRef(texture));
1426
+ texture && context._addDependentAsset(texture.url, resourceManager.getResourceByRef(texture));
1461
1427
  } else if (backgroundMode === engineCore.BackgroundMode.Sky) {
1462
1428
  var skyMesh = background.skyMesh, skyMaterial = background.skyMaterial;
1463
1429
  if (skyMesh && skyMaterial) {
1464
1430
  // @ts-ignore
1465
- context._addDependentAsset(skyMesh.refId, resourceManager.getResourceByRef(skyMesh));
1431
+ context._addDependentAsset(skyMesh.url, resourceManager.getResourceByRef(skyMesh));
1466
1432
  // @ts-ignore
1467
- context._addDependentAsset(skyMaterial.refId, resourceManager.getResourceByRef(skyMaterial));
1433
+ context._addDependentAsset(skyMaterial.url, resourceManager.getResourceByRef(skyMaterial));
1468
1434
  }
1469
1435
  }
1470
1436
  };
@@ -1480,12 +1446,12 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1480
1446
  var entities = file.entities;
1481
1447
  for(var i = 0, n = entities.length; i < n; i++){
1482
1448
  var entity = entities[i];
1483
- if (!!entity.assetRefId) {
1449
+ if (!!entity.assetUrl) {
1484
1450
  var context = this.context;
1485
- var refId = entity.assetRefId, key = entity.key;
1451
+ var url = entity.assetUrl, key = entity.key;
1486
1452
  // @ts-ignore
1487
- context._addDependentAsset(refId, context.resourceManager.getResourceByRef({
1488
- refId: refId,
1453
+ context._addDependentAsset(url, context.resourceManager.getResourceByRef({
1454
+ url: url,
1489
1455
  key: key
1490
1456
  }));
1491
1457
  } else if (entity.strippedId) {
@@ -1510,7 +1476,7 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1510
1476
  if (ReflectionParser._isAssetRef(value)) {
1511
1477
  var context = this.context;
1512
1478
  // @ts-ignore
1513
- context._addDependentAsset(value.refId, context.resourceManager.getResourceByRef(value));
1479
+ context._addDependentAsset(value.url, context.resourceManager.getResourceByRef(value));
1514
1480
  } else {
1515
1481
  for(var key in value){
1516
1482
  this._searchDependentAssets(value[key]);
@@ -1574,7 +1540,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
1574
1540
  };
1575
1541
  _proto._parseKeyframeValue = function _parseKeyframeValue(keyframe, resourceManager) {
1576
1542
  var value = keyframe.value;
1577
- if ((typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && (value == null ? void 0 : value.refId)) {
1543
+ if ((typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && (value == null ? void 0 : value.url)) {
1578
1544
  return new Promise(function(resolve) {
1579
1545
  resourceManager// @ts-ignore
1580
1546
  .getResourceByRef(value).then(function(asset) {
@@ -1590,7 +1556,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
1590
1556
  }(engineCore.Loader);
1591
1557
  AnimationClipLoader = __decorate([
1592
1558
  engineCore.resourceLoader(engineCore.AssetType.AnimationClip, [
1593
- "ani"
1559
+ "anim"
1594
1560
  ])
1595
1561
  ], AnimationClipLoader);
1596
1562
 
@@ -1702,13 +1668,11 @@ var AnimatorControllerLoader = /*#__PURE__*/ function(Loader1) {
1702
1668
  }(engineCore.Loader);
1703
1669
  AnimatorControllerLoader = __decorate([
1704
1670
  engineCore.resourceLoader(engineCore.AssetType.AnimatorController, [
1705
- "json"
1706
- ], false)
1671
+ "animCtrl"
1672
+ ])
1707
1673
  ], AnimatorControllerLoader);
1708
1674
 
1709
- function isBase64(url) {
1710
- return /^data:(.+?);base64,/.test(url);
1711
- }
1675
+ var base64Regex = /^data:(.+?);base64,/;
1712
1676
  var BufferLoader = /*#__PURE__*/ function(Loader) {
1713
1677
  _inherits(BufferLoader, Loader);
1714
1678
  function BufferLoader() {
@@ -1717,27 +1681,24 @@ var BufferLoader = /*#__PURE__*/ function(Loader) {
1717
1681
  var _proto = BufferLoader.prototype;
1718
1682
  _proto.load = function load(item, resourceManager) {
1719
1683
  var url = item.url;
1720
- if (isBase64(url)) {
1721
- return new engineCore.AssetPromise(function(resolve) {
1722
- var base64Str = url.slice(13 + RegExp.$1.length);
1723
- var result = Uint8Array.from(atob(base64Str), function(c) {
1724
- return c.charCodeAt(0);
1725
- });
1726
- resolve(result.buffer);
1727
- });
1728
- }
1729
- // @ts-ignore
1730
- return resourceManager._request(url, _extends({}, item, {
1684
+ var base64Match = base64Regex.exec(url);
1685
+ var bufferPromise = base64Match ? Promise.resolve(Uint8Array.from(atob(url.slice(13 + base64Match[1].length)), function(c) {
1686
+ return c.charCodeAt(0);
1687
+ }).buffer) : resourceManager._request(url, _extends({}, item, {
1731
1688
  type: "arraybuffer"
1732
1689
  }));
1690
+ return engineCore.AssetPromise.resolve(bufferPromise).then(function(buffer) {
1691
+ var asset = new engineCore.BufferAsset(resourceManager.engine);
1692
+ asset.buffer = buffer;
1693
+ return asset;
1694
+ });
1733
1695
  };
1734
1696
  return BufferLoader;
1735
1697
  }(engineCore.Loader);
1736
1698
  BufferLoader = __decorate([
1737
1699
  engineCore.resourceLoader(engineCore.AssetType.Buffer, [
1738
- "bin",
1739
- "r3bin"
1740
- ], false)
1700
+ "bin"
1701
+ ])
1741
1702
  ], BufferLoader);
1742
1703
 
1743
1704
  var EnvLoader = /*#__PURE__*/ function(Loader) {
@@ -1763,7 +1724,6 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
1763
1724
  sh.copyFromArray(new Float32Array(arraybuffer, 0, 27));
1764
1725
  ambientLight.diffuseSphericalHarmonics = sh;
1765
1726
  ambientLight.specularTexture = texture;
1766
- ambientLight.specularTextureDecodeRGBM = true;
1767
1727
  resolve(ambientLight);
1768
1728
  }).catch(function(e) {
1769
1729
  reject(e);
@@ -1776,7 +1736,7 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
1776
1736
  var _this;
1777
1737
  var shByteLength = 27 * 4;
1778
1738
  var size = (_this = new Uint16Array(buffer, shByteLength, 1)) == null ? void 0 : _this[0];
1779
- texture || (texture = new engineCore.TextureCube(engine, size, undefined, undefined, false));
1739
+ texture || (texture = new engineCore.TextureCube(engine, size, engineCore.TextureFormat.R16G16B16A16, true, false));
1780
1740
  texture.filterMode = engineCore.TextureFilterMode.Trilinear;
1781
1741
  var mipmapCount = texture.mipmapCount;
1782
1742
  var offset = shByteLength + 2;
@@ -1784,8 +1744,8 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
1784
1744
  var mipSize = size >> mipLevel;
1785
1745
  for(var face = 0; face < 6; face++){
1786
1746
  var dataSize = mipSize * mipSize * 4;
1787
- var data = new Uint8Array(buffer, offset, dataSize);
1788
- offset += dataSize;
1747
+ var data = new Uint16Array(buffer, offset, dataSize);
1748
+ offset += dataSize * 2;
1789
1749
  texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + face, data, mipLevel);
1790
1750
  }
1791
1751
  }
@@ -5314,341 +5274,6 @@ PrefabLoader = __decorate([
5314
5274
  ])
5315
5275
  ], PrefabLoader);
5316
5276
 
5317
- var PI = Math.PI;
5318
- // referenece: https://www.flipcode.com/archives/HDR_Image_Reader.shtml
5319
- var HDRLoader = /*#__PURE__*/ function(Loader) {
5320
- _inherits(HDRLoader, Loader);
5321
- function HDRLoader() {
5322
- return Loader.apply(this, arguments) || this;
5323
- }
5324
- var _proto = HDRLoader.prototype;
5325
- _proto.load = function load(item, resourceManager) {
5326
- return new engineCore.AssetPromise(function(resolve, reject) {
5327
- var engine = resourceManager.engine;
5328
- var requestConfig = _extends({}, item, {
5329
- type: "arraybuffer"
5330
- });
5331
- var url = item.url;
5332
- resourceManager// @ts-ignore
5333
- ._request(url, requestConfig).then(function(buffer) {
5334
- var texture = HDRLoader._setTextureByBuffer(engine, buffer);
5335
- engine.resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
5336
- resolve(texture);
5337
- }).catch(reject);
5338
- });
5339
- };
5340
- /**
5341
- * @internal
5342
- */ HDRLoader._setTextureByBuffer = function _setTextureByBuffer(engine, buffer, texture) {
5343
- var bufferArray = new Uint8Array(buffer);
5344
- var _HDRLoader__parseHeader = HDRLoader._parseHeader(bufferArray), width = _HDRLoader__parseHeader.width, height = _HDRLoader__parseHeader.height, dataPosition = _HDRLoader__parseHeader.dataPosition;
5345
- var cubeSize = height >> 1;
5346
- texture || (texture = new engineCore.TextureCube(engine, cubeSize, undefined, undefined, false));
5347
- var pixels = HDRLoader._readPixels(bufferArray.subarray(dataPosition), width, height);
5348
- var cubeMapData = HDRLoader._convertToCubemap(pixels, width, height, cubeSize);
5349
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
5350
- texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + faceIndex, cubeMapData[faceIndex], 0);
5351
- }
5352
- texture.generateMipmaps();
5353
- return texture;
5354
- };
5355
- HDRLoader._convertToCubemap = function _convertToCubemap(pixels, inputWidth, inputHeight, size) {
5356
- if (!pixels) {
5357
- throw "ConvertPanoramaToCubemap: input cannot be null";
5358
- }
5359
- if (pixels.length != inputWidth * inputHeight * 4) {
5360
- throw "ConvertPanoramaToCubemap: input size is wrong";
5361
- }
5362
- var textureRight = this._createCubemapData(size, this._faceRight, pixels, inputWidth, inputHeight);
5363
- var textureLeft = this._createCubemapData(size, this._faceLeft, pixels, inputWidth, inputHeight);
5364
- var textureUp = this._createCubemapData(size, this._faceUp, pixels, inputWidth, inputHeight);
5365
- var textureDown = this._createCubemapData(size, this._faceBottom, pixels, inputWidth, inputHeight);
5366
- var textureFront = this._createCubemapData(size, this._faceFront, pixels, inputWidth, inputHeight);
5367
- var textureBack = this._createCubemapData(size, this._faceBack, pixels, inputWidth, inputHeight);
5368
- return [
5369
- textureRight,
5370
- textureLeft,
5371
- textureUp,
5372
- textureDown,
5373
- textureFront,
5374
- textureBack
5375
- ];
5376
- };
5377
- HDRLoader._createCubemapData = function _createCubemapData(texSize, faceData, pixels, inputWidth, inputHeight) {
5378
- var textureArray = new Uint8ClampedArray(texSize * texSize * 4);
5379
- var rotDX1 = this._tempVector3.set(0, 0, 0).add(faceData[1]).subtract(faceData[0]).scale(1 / texSize);
5380
- var rotDX2 = this._temp2Vector3.set(0, 0, 0).add(faceData[3]).subtract(faceData[2]).scale(1 / texSize);
5381
- var dy = 1 / texSize;
5382
- var fy = 0;
5383
- for(var y = 0; y < texSize; y++){
5384
- var xv1 = this._temp3Vector3.set(0, 0, 0).add(faceData[0]);
5385
- var xv2 = this._temp4Vector3.set(0, 0, 0).add(faceData[2]);
5386
- for(var x = 0; x < texSize; x++){
5387
- var v = this._temp5Vector3.set(0, 0, 0).add(xv2).subtract(xv1).scale(fy).add(xv1);
5388
- v.normalize();
5389
- var color = this._calcProjectionSpherical(v, pixels, inputWidth, inputHeight);
5390
- this._RGBEToLinear(color);
5391
- this._linearToRGBM(color, 5);
5392
- // 4 channels per pixels
5393
- var index = y * texSize * 4 + x * 4;
5394
- textureArray[index] = color.r;
5395
- textureArray[index + 1] = color.g;
5396
- textureArray[index + 2] = color.b;
5397
- textureArray[index + 3] = color.a;
5398
- xv1.add(rotDX1);
5399
- xv2.add(rotDX2);
5400
- }
5401
- fy += dy;
5402
- }
5403
- return textureArray;
5404
- };
5405
- HDRLoader._calcProjectionSpherical = function _calcProjectionSpherical(vDir, pixels, inputWidth, inputHeight) {
5406
- var theta = Math.atan2(vDir.z, vDir.x);
5407
- var phi = Math.acos(vDir.y);
5408
- while(theta < -PI){
5409
- theta += 2 * PI;
5410
- }
5411
- while(theta > PI){
5412
- theta -= 2 * PI;
5413
- }
5414
- var dx = theta / PI;
5415
- var dy = phi / PI;
5416
- // recenter.
5417
- dx = dx * 0.5 + 0.5;
5418
- var px = Math.round(dx * inputWidth);
5419
- if (px < 0) {
5420
- px = 0;
5421
- } else if (px >= inputWidth) {
5422
- px = inputWidth - 1;
5423
- }
5424
- var py = Math.round(dy * inputHeight);
5425
- if (py < 0) {
5426
- py = 0;
5427
- } else if (py >= inputHeight) {
5428
- py = inputHeight - 1;
5429
- }
5430
- var inputY = inputHeight - py - 1;
5431
- var index = inputY * inputWidth * 4 + px * 4;
5432
- var r = pixels[index];
5433
- var g = pixels[index + 1];
5434
- var b = pixels[index + 2];
5435
- var a = pixels[index + 3];
5436
- return new engineMath.Color(r, g, b, a);
5437
- };
5438
- HDRLoader._readStringLine = function _readStringLine(uint8array, startIndex) {
5439
- var line = "";
5440
- var character = "";
5441
- for(var i = startIndex; i < uint8array.length - startIndex; i++){
5442
- character = String.fromCharCode(uint8array[i]);
5443
- if (character == "\n") {
5444
- break;
5445
- }
5446
- line += character;
5447
- }
5448
- return line;
5449
- };
5450
- HDRLoader._parseHeader = function _parseHeader(uint8array) {
5451
- var height = 0;
5452
- var width = 0;
5453
- var line = this._readStringLine(uint8array, 0);
5454
- if (line[0] != "#" || line[1] != "?") {
5455
- throw "Bad HDR Format.";
5456
- }
5457
- var endOfHeader = false;
5458
- var findFormat = false;
5459
- var lineIndex = 0;
5460
- do {
5461
- lineIndex += line.length + 1;
5462
- line = this._readStringLine(uint8array, lineIndex);
5463
- if (line == "FORMAT=32-bit_rle_rgbe") {
5464
- findFormat = true;
5465
- } else if (line.length == 0) {
5466
- endOfHeader = true;
5467
- }
5468
- }while (!endOfHeader);
5469
- if (!findFormat) {
5470
- throw "HDR Bad header format, unsupported FORMAT";
5471
- }
5472
- lineIndex += line.length + 1;
5473
- line = this._readStringLine(uint8array, lineIndex);
5474
- var sizeRegexp = /^\-Y (.*) \+X (.*)$/g;
5475
- var match = sizeRegexp.exec(line);
5476
- // TODO. Support +Y and -X if needed.
5477
- if (!match || match.length < 3) {
5478
- throw "HDR Bad header format, no size";
5479
- }
5480
- width = parseInt(match[2]);
5481
- height = parseInt(match[1]);
5482
- if (width < 8 || width > 0x7fff) {
5483
- throw "HDR Bad header format, unsupported size";
5484
- }
5485
- lineIndex += line.length + 1;
5486
- return {
5487
- height: height,
5488
- width: width,
5489
- dataPosition: lineIndex
5490
- };
5491
- };
5492
- HDRLoader._readPixels = function _readPixels(buffer, width, height) {
5493
- var scanLineWidth = width;
5494
- var byteLength = buffer.byteLength;
5495
- var dataRGBA = new Uint8Array(4 * width * height);
5496
- var offset = 0, pos = 0;
5497
- var ptrEnd = 4 * scanLineWidth;
5498
- var scanLineBuffer = new Uint8Array(ptrEnd);
5499
- var numScanLines = height; // read in each successive scanLine
5500
- while(numScanLines > 0 && pos < byteLength){
5501
- var a = buffer[pos++];
5502
- var b = buffer[pos++];
5503
- var c = buffer[pos++];
5504
- var d = buffer[pos++];
5505
- if (a != 2 || b != 2 || c & 0x80 || width < 8 || width > 32767) {
5506
- // this file is not run length encoded
5507
- // read values sequentially
5508
- return buffer;
5509
- }
5510
- if ((c << 8 | d) != scanLineWidth) {
5511
- // eslint-disable-next-line no-throw-literal
5512
- throw "HDR Bad header format, wrong scan line width";
5513
- }
5514
- // read each of the four channels for the scanline into the buffer
5515
- // first red, then green, then blue, then exponent
5516
- var ptr = 0, count = void 0;
5517
- while(ptr < ptrEnd && pos < byteLength){
5518
- count = buffer[pos++];
5519
- var isEncodedRun = count > 128;
5520
- if (isEncodedRun) count -= 128;
5521
- if (0 === count || ptr + count > ptrEnd) {
5522
- throw "HDR Bad Format, bad scanline data (run)";
5523
- }
5524
- if (isEncodedRun) {
5525
- // a (encoded) run of the same value
5526
- var byteValue = buffer[pos++];
5527
- for(var i = 0; i < count; i++){
5528
- scanLineBuffer[ptr++] = byteValue;
5529
- } //ptr += count;
5530
- } else {
5531
- // a literal-run
5532
- scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
5533
- ptr += count;
5534
- pos += count;
5535
- }
5536
- } // now convert data from buffer into rgba
5537
- // first red, then green, then blue, then exponent (alpha)
5538
- var l = scanLineWidth; //scanLine_buffer.byteLength;
5539
- for(var i1 = 0; i1 < l; i1++){
5540
- var off = 0;
5541
- dataRGBA[offset] = scanLineBuffer[i1 + off];
5542
- off += scanLineWidth;
5543
- dataRGBA[offset + 1] = scanLineBuffer[i1 + off];
5544
- off += scanLineWidth;
5545
- dataRGBA[offset + 2] = scanLineBuffer[i1 + off];
5546
- off += scanLineWidth;
5547
- dataRGBA[offset + 3] = scanLineBuffer[i1 + off];
5548
- offset += 4;
5549
- }
5550
- numScanLines--;
5551
- }
5552
- return dataRGBA;
5553
- };
5554
- HDRLoader._RGBEToLinear = function _RGBEToLinear(color) {
5555
- var scaleFactor = Math.pow(2, color.a - 128) / 255;
5556
- color.r *= scaleFactor;
5557
- color.g *= scaleFactor;
5558
- color.b *= scaleFactor;
5559
- color.a = 1;
5560
- };
5561
- HDRLoader._linearToRGBM = function _linearToRGBM(color, maxRange) {
5562
- var maxRGB = Math.max(color.r, Math.max(color.g, color.b));
5563
- var M = Math.min(maxRGB / maxRange, 1);
5564
- M = Math.ceil(M * 255);
5565
- var scaleFactor = 65025 / (M * maxRange); // 255 * (255 / (M * maxRange) )
5566
- color.r *= scaleFactor;
5567
- color.g *= scaleFactor;
5568
- color.b *= scaleFactor;
5569
- color.a *= M;
5570
- };
5571
- return HDRLoader;
5572
- }(engineCore.Loader);
5573
- HDRLoader._rightBottomBack = new engineMath.Vector3(1.0, -1.0, -1.0);
5574
- HDRLoader._rightBottomFront = new engineMath.Vector3(1.0, -1.0, 1.0);
5575
- HDRLoader._rightUpBack = new engineMath.Vector3(1.0, 1.0, -1.0);
5576
- HDRLoader._rightUpFront = new engineMath.Vector3(1.0, 1.0, 1.0);
5577
- HDRLoader._leftBottomBack = new engineMath.Vector3(-1.0, -1.0, -1.0);
5578
- HDRLoader._leftBottomFront = new engineMath.Vector3(-1.0, -1.0, 1.0);
5579
- HDRLoader._leftUpBack = new engineMath.Vector3(-1.0, 1.0, -1.0);
5580
- HDRLoader._leftUpFront = new engineMath.Vector3(-1.0, 1.0, 1.0);
5581
- HDRLoader._faceRight = [
5582
- HDRLoader._rightBottomBack,
5583
- HDRLoader._rightBottomFront,
5584
- HDRLoader._rightUpBack,
5585
- HDRLoader._rightUpFront
5586
- ];
5587
- HDRLoader._faceLeft = [
5588
- HDRLoader._leftBottomFront,
5589
- HDRLoader._leftBottomBack,
5590
- HDRLoader._leftUpFront,
5591
- HDRLoader._leftUpBack
5592
- ];
5593
- HDRLoader._faceUp = [
5594
- HDRLoader._leftBottomFront,
5595
- HDRLoader._rightBottomFront,
5596
- HDRLoader._leftBottomBack,
5597
- HDRLoader._rightBottomBack
5598
- ];
5599
- HDRLoader._faceBottom = [
5600
- HDRLoader._leftUpBack,
5601
- HDRLoader._rightUpBack,
5602
- HDRLoader._leftUpFront,
5603
- HDRLoader._rightUpFront
5604
- ];
5605
- HDRLoader._faceFront = [
5606
- HDRLoader._leftBottomBack,
5607
- HDRLoader._rightBottomBack,
5608
- HDRLoader._leftUpBack,
5609
- HDRLoader._rightUpBack
5610
- ];
5611
- HDRLoader._faceBack = [
5612
- HDRLoader._rightBottomFront,
5613
- HDRLoader._leftBottomFront,
5614
- HDRLoader._rightUpFront,
5615
- HDRLoader._leftUpFront
5616
- ];
5617
- HDRLoader._tempVector3 = new engineMath.Vector3();
5618
- HDRLoader._temp2Vector3 = new engineMath.Vector3();
5619
- HDRLoader._temp3Vector3 = new engineMath.Vector3();
5620
- HDRLoader._temp4Vector3 = new engineMath.Vector3();
5621
- HDRLoader._temp5Vector3 = new engineMath.Vector3();
5622
- HDRLoader = __decorate([
5623
- engineCore.resourceLoader(engineCore.AssetType.HDR, [
5624
- "hdr"
5625
- ])
5626
- ], HDRLoader);
5627
- /**
5628
- * @internal
5629
- */ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
5630
- _inherits(HDRContentRestorer, ContentRestorer);
5631
- function HDRContentRestorer(resource, url, requestConfig) {
5632
- var _this;
5633
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
5634
- return _this;
5635
- }
5636
- var _proto = HDRContentRestorer.prototype;
5637
- _proto.restoreContent = function restoreContent() {
5638
- var _this = this;
5639
- return new engineCore.AssetPromise(function(resolve, reject) {
5640
- var resource = _this.resource;
5641
- var engine = resource.engine;
5642
- engine.resourceManager// @ts-ignore
5643
- ._request(_this.url, _this.requestConfig).then(function(buffer) {
5644
- HDRLoader._setTextureByBuffer(engine, buffer, resource);
5645
- resolve(resource);
5646
- }).catch(reject);
5647
- });
5648
- };
5649
- return HDRContentRestorer;
5650
- }(engineCore.ContentRestorer);
5651
-
5652
5277
  var JSONLoader = /*#__PURE__*/ function(Loader) {
5653
5278
  _inherits(JSONLoader, Loader);
5654
5279
  function JSONLoader() {
@@ -5659,14 +5284,18 @@ var JSONLoader = /*#__PURE__*/ function(Loader) {
5659
5284
  // @ts-ignore
5660
5285
  return resourceManager._request(item.url, _extends({}, item, {
5661
5286
  type: "json"
5662
- }));
5287
+ })).then(function(data) {
5288
+ var asset = new engineCore.JSONAsset(resourceManager.engine);
5289
+ asset.data = data;
5290
+ return asset;
5291
+ });
5663
5292
  };
5664
5293
  return JSONLoader;
5665
5294
  }(engineCore.Loader);
5666
5295
  JSONLoader = __decorate([
5667
5296
  engineCore.resourceLoader(engineCore.AssetType.JSON, [
5668
5297
  "json"
5669
- ], false)
5298
+ ])
5670
5299
  ], JSONLoader);
5671
5300
 
5672
5301
  var HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)
@@ -6047,7 +5676,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
6047
5676
  }(engineCore.Loader);
6048
5677
  MaterialLoader = __decorate([
6049
5678
  engineCore.resourceLoader(engineCore.AssetType.Material, [
6050
- "json"
5679
+ "mat"
6051
5680
  ])
6052
5681
  ], MaterialLoader);
6053
5682
 
@@ -6170,7 +5799,7 @@ var ProjectLoader = /*#__PURE__*/ function(Loader) {
6170
5799
  }(engineCore.Loader);
6171
5800
  ProjectLoader = __decorate([
6172
5801
  engineCore.resourceLoader(engineCore.AssetType.Project, [
6173
- "proj"
5802
+ "project"
6174
5803
  ], false)
6175
5804
  ], ProjectLoader);
6176
5805
 
@@ -6367,28 +5996,44 @@ SpriteLoader = __decorate([
6367
5996
  ])
6368
5997
  ], SpriteLoader);
6369
5998
 
6370
- /**
6371
- * @internal
6372
- */ var Texture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6373
- _inherits(Texture2DContentRestorer, ContentRestorer);
6374
- function Texture2DContentRestorer(resource, url, requestConfig) {
6375
- var _this;
6376
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
6377
- return _this;
5999
+ var TextLoader = /*#__PURE__*/ function(Loader) {
6000
+ _inherits(TextLoader, Loader);
6001
+ function TextLoader() {
6002
+ return Loader.apply(this, arguments) || this;
6378
6003
  }
6379
- var _proto = Texture2DContentRestorer.prototype;
6380
- _proto.restoreContent = function restoreContent() {
6381
- var _this = this;
6382
- return engineCore.request(this.url, this.requestConfig).then(function(image) {
6383
- var resource = _this.resource;
6384
- resource.setImageSource(image);
6385
- resource.generateMipmaps();
6386
- return resource;
6004
+ var _proto = TextLoader.prototype;
6005
+ _proto.load = function load(item, resourceManager) {
6006
+ // @ts-ignore
6007
+ return resourceManager._request(item.url, _extends({}, item, {
6008
+ type: "text"
6009
+ })).then(function(text) {
6010
+ var asset = new engineCore.TextAsset(resourceManager.engine);
6011
+ asset.text = text;
6012
+ return asset;
6387
6013
  });
6388
6014
  };
6389
- return Texture2DContentRestorer;
6390
- }(engineCore.ContentRestorer);
6015
+ return TextLoader;
6016
+ }(engineCore.Loader);
6017
+ TextLoader = __decorate([
6018
+ engineCore.resourceLoader(engineCore.AssetType.Text, [
6019
+ "txt"
6020
+ ])
6021
+ ], TextLoader);
6391
6022
 
6023
+ function loadImageFromBuffer(buffer) {
6024
+ return new engineCore.AssetPromise(function(resolve, reject) {
6025
+ var blob = new Blob([
6026
+ buffer
6027
+ ]);
6028
+ var img = new Image();
6029
+ img.onload = function() {
6030
+ URL.revokeObjectURL(img.src);
6031
+ resolve(img);
6032
+ };
6033
+ img.onerror = reject;
6034
+ img.src = URL.createObjectURL(blob);
6035
+ });
6036
+ }
6392
6037
  var Texture2DLoader = /*#__PURE__*/ function(Loader) {
6393
6038
  _inherits(Texture2DLoader, Loader);
6394
6039
  function Texture2DLoader() {
@@ -6396,36 +6041,48 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader) {
6396
6041
  }
6397
6042
  var _proto = Texture2DLoader.prototype;
6398
6043
  _proto.load = function load(item, resourceManager) {
6044
+ var _this = this;
6045
+ var url = item.url;
6046
+ var requestConfig = _extends({}, item, {
6047
+ type: "arraybuffer"
6048
+ });
6399
6049
  return new engineCore.AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
6400
- var url = item.url;
6401
- var requestConfig = _extends({}, item, {
6402
- type: "image"
6403
- });
6404
6050
  resourceManager// @ts-ignore
6405
- ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(image) {
6406
- var _item_params;
6407
- var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_format = _ref.format, format = _ref_format === void 0 ? engineCore.TextureFormat.R8G8B8A8 : _ref_format, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode, _ref_isSRGBColorSpace = _ref.isSRGBColorSpace, isSRGBColorSpace = _ref_isSRGBColorSpace === void 0 ? true : _ref_isSRGBColorSpace, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap;
6408
- var width = image.width, height = image.height;
6409
- var engine = resourceManager.engine;
6410
- var generateMipmap = engineCore.TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
6411
- var texture = new engineCore.Texture2D(engine, width, height, format, generateMipmap, isSRGBColorSpace);
6412
- texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
6413
- texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
6414
- texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
6415
- texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
6416
- texture.setImageSource(image);
6417
- generateMipmap && texture.generateMipmaps();
6418
- if (url.indexOf("data:") !== 0) {
6419
- var index = url.lastIndexOf("/");
6420
- texture.name = url.substring(index + 1);
6051
+ ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
6052
+ if (FileHeader.checkMagic(buffer)) {
6053
+ decode(buffer, resourceManager.engine).then(function(texture) {
6054
+ resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
6055
+ resolve(texture);
6056
+ }, reject);
6057
+ } else {
6058
+ loadImageFromBuffer(buffer).then(function(img) {
6059
+ var texture = _this._createTexture(img, item, resourceManager);
6060
+ resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
6061
+ resolve(texture);
6062
+ }, reject);
6421
6063
  }
6422
- resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
6423
- resolve(texture);
6424
- }).catch(function(e) {
6425
- reject(e);
6426
- });
6064
+ }).catch(reject);
6427
6065
  });
6428
6066
  };
6067
+ _proto._createTexture = function _createTexture(img, item, resourceManager) {
6068
+ var _item_params;
6069
+ var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_format = _ref.format, format = _ref_format === void 0 ? engineCore.TextureFormat.R8G8B8A8 : _ref_format, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode, _ref_isSRGBColorSpace = _ref.isSRGBColorSpace, isSRGBColorSpace = _ref_isSRGBColorSpace === void 0 ? true : _ref_isSRGBColorSpace, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap;
6070
+ var width = img.width, height = img.height;
6071
+ var engine = resourceManager.engine;
6072
+ var generateMipmap = engineCore.TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
6073
+ var texture = new engineCore.Texture2D(engine, width, height, format, generateMipmap, isSRGBColorSpace);
6074
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
6075
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
6076
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
6077
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
6078
+ texture.setImageSource(img);
6079
+ generateMipmap && texture.generateMipmaps();
6080
+ var url = item.url;
6081
+ if (url.indexOf("data:") !== 0) {
6082
+ texture.name = url.substring(url.lastIndexOf("/") + 1);
6083
+ }
6084
+ return texture;
6085
+ };
6429
6086
  return Texture2DLoader;
6430
6087
  }(engineCore.Loader);
6431
6088
  Texture2DLoader = __decorate([
@@ -6433,40 +6090,319 @@ Texture2DLoader = __decorate([
6433
6090
  "png",
6434
6091
  "jpg",
6435
6092
  "webp",
6436
- "jpeg"
6093
+ "jpeg",
6094
+ "tex"
6437
6095
  ])
6438
6096
  ], Texture2DLoader);
6439
-
6440
- /**
6441
- * @internal
6442
- */ var TextureCubeContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6443
- _inherits(TextureCubeContentRestorer, ContentRestorer);
6444
- function TextureCubeContentRestorer(resource, urls, requestConfig) {
6097
+ var Texture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6098
+ _inherits(Texture2DContentRestorer, ContentRestorer);
6099
+ function Texture2DContentRestorer(resource, url, requestConfig) {
6445
6100
  var _this;
6446
- _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
6101
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
6447
6102
  return _this;
6448
6103
  }
6449
- var _proto = TextureCubeContentRestorer.prototype;
6104
+ var _proto = Texture2DContentRestorer.prototype;
6450
6105
  _proto.restoreContent = function restoreContent() {
6451
- var _this = this;
6452
- return new engineCore.AssetPromise(function(resolve, reject) {
6453
- Promise.all(_this.urls.map(function(url) {
6454
- return engineCore.request(url, _this.requestConfig);
6455
- })).then(function(images) {
6456
- var resource = _this.resource;
6457
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6458
- resource.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6459
- }
6460
- resource.generateMipmaps();
6461
- resolve(resource);
6462
- }).catch(function(e) {
6463
- reject(e);
6464
- });
6106
+ var texture = this.resource;
6107
+ var engine = texture.engine;
6108
+ return engine.resourceManager// @ts-ignore
6109
+ ._request(this.url, this.requestConfig).then(function(buffer) {
6110
+ if (FileHeader.checkMagic(buffer)) {
6111
+ return decode(buffer, engine, texture);
6112
+ } else {
6113
+ return loadImageFromBuffer(buffer).then(function(img) {
6114
+ texture.setImageSource(img);
6115
+ texture.generateMipmaps();
6116
+ return texture;
6117
+ });
6118
+ }
6465
6119
  });
6466
6120
  };
6467
- return TextureCubeContentRestorer;
6121
+ return Texture2DContentRestorer;
6468
6122
  }(engineCore.ContentRestorer);
6469
6123
 
6124
+ /**
6125
+ * HDR panorama to cubemap decoder.
6126
+ */ var HDRDecoder = /*#__PURE__*/ function() {
6127
+ function HDRDecoder() {}
6128
+ HDRDecoder.parseHeader = function parseHeader(uint8array) {
6129
+ var line = this._readStringLine(uint8array, 0);
6130
+ if (line[0] !== "#" || line[1] !== "?") {
6131
+ throw "HDRDecoder: invalid file header";
6132
+ }
6133
+ var endOfHeader = false;
6134
+ var findFormat = false;
6135
+ var lineIndex = 0;
6136
+ do {
6137
+ lineIndex += line.length + 1;
6138
+ line = this._readStringLine(uint8array, lineIndex);
6139
+ if (line === "FORMAT=32-bit_rle_rgbe") findFormat = true;
6140
+ else if (line.length === 0) endOfHeader = true;
6141
+ }while (!endOfHeader);
6142
+ if (!findFormat) {
6143
+ throw "HDRDecoder: unsupported format, expected 32-bit_rle_rgbe";
6144
+ }
6145
+ lineIndex += line.length + 1;
6146
+ line = this._readStringLine(uint8array, lineIndex);
6147
+ var match = /^\-Y (.*) \+X (.*)$/g.exec(line);
6148
+ if (!match || match.length < 3) {
6149
+ throw "HDRDecoder: missing image size, only -Y +X layout is supported";
6150
+ }
6151
+ var width = parseInt(match[2]);
6152
+ var height = parseInt(match[1]);
6153
+ if (width < 8 || width > 0x7fff) {
6154
+ throw "HDRDecoder: unsupported image width, must be between 8 and 32767";
6155
+ }
6156
+ return {
6157
+ height: height,
6158
+ width: width,
6159
+ dataPosition: lineIndex + line.length + 1
6160
+ };
6161
+ };
6162
+ HDRDecoder.decodeFaces = function decodeFaces(bufferArray, header, onFace) {
6163
+ var width = header.width, height = header.height, dataPosition = header.dataPosition;
6164
+ var cubeSize = height >> 1;
6165
+ var pixels = HDRDecoder._readPixels(bufferArray.subarray(dataPosition), width, height);
6166
+ var faces = HDRDecoder._faces;
6167
+ var faceBuffer = new Uint16Array(cubeSize * cubeSize * 4);
6168
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6169
+ HDRDecoder._createCubemapData(cubeSize, faces[faceIndex], pixels, width, height, faceBuffer);
6170
+ onFace(faceIndex, faceBuffer);
6171
+ }
6172
+ };
6173
+ HDRDecoder._generateFloat2HalfTables = function _generateFloat2HalfTables() {
6174
+ var baseTable = new Uint32Array(512);
6175
+ var shiftTable = new Uint32Array(512);
6176
+ for(var i = 0; i < 256; ++i){
6177
+ var e = i - 127;
6178
+ if (e < -27) {
6179
+ baseTable[i] = 0x0000;
6180
+ baseTable[i | 0x100] = 0x8000;
6181
+ shiftTable[i] = 24;
6182
+ shiftTable[i | 0x100] = 24;
6183
+ } else if (e < -14) {
6184
+ baseTable[i] = 0x0400 >> -e - 14;
6185
+ baseTable[i | 0x100] = 0x0400 >> -e - 14 | 0x8000;
6186
+ shiftTable[i] = -e - 1;
6187
+ shiftTable[i | 0x100] = -e - 1;
6188
+ } else if (e <= 15) {
6189
+ baseTable[i] = e + 15 << 10;
6190
+ baseTable[i | 0x100] = e + 15 << 10 | 0x8000;
6191
+ shiftTable[i] = 13;
6192
+ shiftTable[i | 0x100] = 13;
6193
+ } else if (e < 128) {
6194
+ baseTable[i] = 0x7c00;
6195
+ baseTable[i | 0x100] = 0xfc00;
6196
+ shiftTable[i] = 24;
6197
+ shiftTable[i | 0x100] = 24;
6198
+ } else {
6199
+ baseTable[i] = 0x7c00;
6200
+ baseTable[i | 0x100] = 0xfc00;
6201
+ shiftTable[i] = 13;
6202
+ shiftTable[i | 0x100] = 13;
6203
+ }
6204
+ }
6205
+ return {
6206
+ baseTable: baseTable,
6207
+ shiftTable: shiftTable
6208
+ };
6209
+ };
6210
+ HDRDecoder._createCubemapData = function _createCubemapData(texSize, face, pixels, inputWidth, inputHeight, facePixels) {
6211
+ var invSize = 1 / texSize;
6212
+ var rotDX1X = (face[3] - face[0]) * invSize;
6213
+ var rotDX1Y = (face[4] - face[1]) * invSize;
6214
+ var rotDX1Z = (face[5] - face[2]) * invSize;
6215
+ var rotDX2X = (face[9] - face[6]) * invSize;
6216
+ var rotDX2Y = (face[10] - face[7]) * invSize;
6217
+ var rotDX2Z = (face[11] - face[8]) * invSize;
6218
+ var floatView = HDRDecoder._floatView;
6219
+ var uint32View = HDRDecoder._uint32View;
6220
+ var _HDRDecoder__float2HalfTables = HDRDecoder._float2HalfTables, baseTable = _HDRDecoder__float2HalfTables.baseTable, shiftTable = _HDRDecoder__float2HalfTables.shiftTable;
6221
+ var one = HDRDecoder._one;
6222
+ var fy = 0;
6223
+ for(var y = 0; y < texSize; y++){
6224
+ var xv1X = face[0], xv1Y = face[1], xv1Z = face[2];
6225
+ var xv2X = face[6], xv2Y = face[7], xv2Z = face[8];
6226
+ for(var x = 0; x < texSize; x++){
6227
+ var dirX = xv1X + (xv2X - xv1X) * fy;
6228
+ var dirY = xv1Y + (xv2Y - xv1Y) * fy;
6229
+ var dirZ = xv1Z + (xv2Z - xv1Z) * fy;
6230
+ var invLen = 1 / Math.sqrt(dirX * dirX + dirY * dirY + dirZ * dirZ);
6231
+ dirX *= invLen;
6232
+ dirY *= invLen;
6233
+ dirZ *= invLen;
6234
+ var px = Math.round((Math.atan2(dirZ, dirX) / Math.PI * 0.5 + 0.5) * inputWidth);
6235
+ if (px < 0) px = 0;
6236
+ else if (px >= inputWidth) px = inputWidth - 1;
6237
+ var py = Math.round(Math.acos(dirY) / Math.PI * inputHeight);
6238
+ if (py < 0) py = 0;
6239
+ else if (py >= inputHeight) py = inputHeight - 1;
6240
+ var srcIndex = (inputHeight - py - 1) * inputWidth * 4 + px * 4;
6241
+ var scaleFactor = Math.pow(2, pixels[srcIndex + 3] - 128) / 255;
6242
+ var dstIndex = y * texSize * 4 + x * 4;
6243
+ for(var c = 0; c < 3; c++){
6244
+ // Clamp to half-float max (65504) to prevent Infinity in R16G16B16A16
6245
+ floatView[0] = Math.min(pixels[srcIndex + c] * scaleFactor, 65504);
6246
+ var f = uint32View[0];
6247
+ var e = f >> 23 & 0x1ff;
6248
+ facePixels[dstIndex + c] = baseTable[e] + ((f & 0x007fffff) >> shiftTable[e]);
6249
+ }
6250
+ facePixels[dstIndex + 3] = one;
6251
+ xv1X += rotDX1X;
6252
+ xv1Y += rotDX1Y;
6253
+ xv1Z += rotDX1Z;
6254
+ xv2X += rotDX2X;
6255
+ xv2Y += rotDX2Y;
6256
+ xv2Z += rotDX2Z;
6257
+ }
6258
+ fy += invSize;
6259
+ }
6260
+ };
6261
+ HDRDecoder._readStringLine = function _readStringLine(uint8array, startIndex) {
6262
+ var line = "";
6263
+ for(var i = startIndex, n = uint8array.length; i < n; i++){
6264
+ var character = String.fromCharCode(uint8array[i]);
6265
+ if (character === "\n") break;
6266
+ line += character;
6267
+ }
6268
+ return line;
6269
+ };
6270
+ HDRDecoder._readPixels = function _readPixels(buffer, width, height) {
6271
+ var byteLength = buffer.byteLength;
6272
+ var dataRGBA = new Uint8Array(4 * width * height);
6273
+ var offset = 0;
6274
+ var pos = 0;
6275
+ var ptrEnd = 4 * width;
6276
+ var scanLineBuffer = new Uint8Array(ptrEnd);
6277
+ var numScanLines = height;
6278
+ while(numScanLines > 0 && pos < byteLength){
6279
+ var a = buffer[pos++];
6280
+ var b = buffer[pos++];
6281
+ var c = buffer[pos++];
6282
+ var d = buffer[pos++];
6283
+ if (a !== 2 || b !== 2 || c & 0x80 || width < 8 || width > 32767) return buffer;
6284
+ if ((c << 8 | d) !== width) throw "HDRDecoder: wrong scanline width";
6285
+ var ptr = 0;
6286
+ while(ptr < ptrEnd && pos < byteLength){
6287
+ var count = buffer[pos++];
6288
+ var isEncodedRun = count > 128;
6289
+ if (isEncodedRun) count -= 128;
6290
+ if (count === 0 || ptr + count > ptrEnd) throw "HDRDecoder: bad scanline data";
6291
+ if (isEncodedRun) {
6292
+ var byteValue = buffer[pos++];
6293
+ for(var i = 0; i < count; i++)scanLineBuffer[ptr++] = byteValue;
6294
+ } else {
6295
+ scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
6296
+ ptr += count;
6297
+ pos += count;
6298
+ }
6299
+ }
6300
+ for(var i1 = 0; i1 < width; i1++, offset += 4){
6301
+ dataRGBA[offset] = scanLineBuffer[i1];
6302
+ dataRGBA[offset + 1] = scanLineBuffer[i1 + width];
6303
+ dataRGBA[offset + 2] = scanLineBuffer[i1 + width * 2];
6304
+ dataRGBA[offset + 3] = scanLineBuffer[i1 + width * 3];
6305
+ }
6306
+ numScanLines--;
6307
+ }
6308
+ return dataRGBA;
6309
+ };
6310
+ return HDRDecoder;
6311
+ }();
6312
+ // Float32 to Float16 lookup tables (http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf)
6313
+ HDRDecoder._float2HalfTables = HDRDecoder._generateFloat2HalfTables();
6314
+ HDRDecoder._floatView = new Float32Array(1);
6315
+ HDRDecoder._uint32View = new Uint32Array(HDRDecoder._floatView.buffer);
6316
+ HDRDecoder._one = 0x3c00 // Half float for 1.0
6317
+ ;
6318
+ // prettier-ignore
6319
+ HDRDecoder._faces = [
6320
+ /* +X */ [
6321
+ 1,
6322
+ -1,
6323
+ -1,
6324
+ 1,
6325
+ -1,
6326
+ 1,
6327
+ 1,
6328
+ 1,
6329
+ -1,
6330
+ 1,
6331
+ 1,
6332
+ 1
6333
+ ],
6334
+ /* -X */ [
6335
+ -1,
6336
+ -1,
6337
+ 1,
6338
+ -1,
6339
+ -1,
6340
+ -1,
6341
+ -1,
6342
+ 1,
6343
+ 1,
6344
+ -1,
6345
+ 1,
6346
+ -1
6347
+ ],
6348
+ /* +Y */ [
6349
+ -1,
6350
+ -1,
6351
+ 1,
6352
+ 1,
6353
+ -1,
6354
+ 1,
6355
+ -1,
6356
+ -1,
6357
+ -1,
6358
+ 1,
6359
+ -1,
6360
+ -1
6361
+ ],
6362
+ /* -Y */ [
6363
+ -1,
6364
+ 1,
6365
+ -1,
6366
+ 1,
6367
+ 1,
6368
+ -1,
6369
+ -1,
6370
+ 1,
6371
+ 1,
6372
+ 1,
6373
+ 1,
6374
+ 1
6375
+ ],
6376
+ /* +Z */ [
6377
+ -1,
6378
+ -1,
6379
+ -1,
6380
+ 1,
6381
+ -1,
6382
+ -1,
6383
+ -1,
6384
+ 1,
6385
+ -1,
6386
+ 1,
6387
+ 1,
6388
+ -1
6389
+ ],
6390
+ /* -Z */ [
6391
+ 1,
6392
+ -1,
6393
+ 1,
6394
+ -1,
6395
+ -1,
6396
+ 1,
6397
+ 1,
6398
+ 1,
6399
+ 1,
6400
+ -1,
6401
+ 1,
6402
+ 1
6403
+ ]
6404
+ ];
6405
+
6470
6406
  var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6471
6407
  _inherits(TextureCubeLoader, Loader);
6472
6408
  function TextureCubeLoader() {
@@ -6474,6 +6410,44 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6474
6410
  }
6475
6411
  var _proto = TextureCubeLoader.prototype;
6476
6412
  _proto.load = function load(item, resourceManager) {
6413
+ if (item.urls) {
6414
+ return this._loadCubeFaces(item, resourceManager);
6415
+ } else {
6416
+ return this._loadHDR(item, resourceManager);
6417
+ }
6418
+ };
6419
+ _proto._loadHDR = function _loadHDR(item, resourceManager) {
6420
+ return new engineCore.AssetPromise(function(resolve, reject) {
6421
+ var engine = resourceManager.engine;
6422
+ var url = item.url;
6423
+ var requestConfig = _extends({}, item, {
6424
+ type: "arraybuffer"
6425
+ });
6426
+ resourceManager// @ts-ignore
6427
+ ._request(url, requestConfig).then(function(buffer) {
6428
+ if (!engineCore.SystemInfo.supportsTextureFormat(engine, engineCore.TextureFormat.R16G16B16A16)) {
6429
+ reject(new Error("TextureCubeLoader: HDR texture requires half float support."));
6430
+ return;
6431
+ }
6432
+ var _item_params;
6433
+ var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode;
6434
+ var bufferArray = new Uint8Array(buffer);
6435
+ var header = HDRDecoder.parseHeader(bufferArray);
6436
+ var texture = new engineCore.TextureCube(engine, header.height >> 1, engineCore.TextureFormat.R16G16B16A16, mipmap, false);
6437
+ HDRDecoder.decodeFaces(bufferArray, header, function(faceIndex, data) {
6438
+ texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + faceIndex, data, 0);
6439
+ });
6440
+ texture.generateMipmaps();
6441
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
6442
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
6443
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
6444
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
6445
+ resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
6446
+ resolve(texture);
6447
+ }).catch(reject);
6448
+ });
6449
+ };
6450
+ _proto._loadCubeFaces = function _loadCubeFaces(item, resourceManager) {
6477
6451
  return new engineCore.AssetPromise(function(resolve, reject) {
6478
6452
  var urls = item.urls;
6479
6453
  var requestConfig = _extends({}, item, {
@@ -6487,7 +6461,7 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6487
6461
  var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_format = _ref.format, format = _ref_format === void 0 ? engineCore.TextureFormat.R8G8B8A8 : _ref_format, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode, _ref_isSRGBColorSpace = _ref.isSRGBColorSpace, isSRGBColorSpace = _ref_isSRGBColorSpace === void 0 ? true : _ref_isSRGBColorSpace, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap;
6488
6462
  var _images_ = images[0], width = _images_.width, height = _images_.height;
6489
6463
  if (width !== height) {
6490
- console.error("The cube texture must have the same width and height");
6464
+ reject(new Error("The cube texture must have the same width and height"));
6491
6465
  return;
6492
6466
  }
6493
6467
  var engine = resourceManager.engine;
@@ -6500,21 +6474,70 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6500
6474
  for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6501
6475
  texture.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6502
6476
  }
6503
- generateMipmap && texture.generateMipmaps();
6504
- resourceManager.addContentRestorer(new TextureCubeContentRestorer(texture, urls, requestConfig));
6477
+ texture.generateMipmaps();
6478
+ resourceManager.addContentRestorer(new CubeFaceContentRestorer(texture, urls, requestConfig));
6505
6479
  resolve(texture);
6506
- }).catch(function(e) {
6507
- reject(e);
6508
- });
6480
+ }).catch(reject);
6509
6481
  });
6510
6482
  };
6511
6483
  return TextureCubeLoader;
6512
6484
  }(engineCore.Loader);
6513
6485
  TextureCubeLoader = __decorate([
6514
6486
  engineCore.resourceLoader(engineCore.AssetType.TextureCube, [
6515
- ""
6487
+ "texCube",
6488
+ "hdr"
6516
6489
  ])
6517
6490
  ], TextureCubeLoader);
6491
+ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6492
+ _inherits(HDRContentRestorer, ContentRestorer);
6493
+ function HDRContentRestorer(resource, url, requestConfig) {
6494
+ var _this;
6495
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
6496
+ return _this;
6497
+ }
6498
+ var _proto = HDRContentRestorer.prototype;
6499
+ _proto.restoreContent = function restoreContent() {
6500
+ var _this = this;
6501
+ return new engineCore.AssetPromise(function(resolve, reject) {
6502
+ var resource = _this.resource;
6503
+ resource.engine.resourceManager// @ts-ignore
6504
+ ._request(_this.url, _this.requestConfig).then(function(buffer) {
6505
+ var bufferArray = new Uint8Array(buffer);
6506
+ HDRDecoder.decodeFaces(bufferArray, HDRDecoder.parseHeader(bufferArray), function(faceIndex, data) {
6507
+ resource.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + faceIndex, data, 0);
6508
+ });
6509
+ resource.generateMipmaps();
6510
+ resolve(resource);
6511
+ }).catch(reject);
6512
+ });
6513
+ };
6514
+ return HDRContentRestorer;
6515
+ }(engineCore.ContentRestorer);
6516
+ var CubeFaceContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6517
+ _inherits(CubeFaceContentRestorer, ContentRestorer);
6518
+ function CubeFaceContentRestorer(resource, urls, requestConfig) {
6519
+ var _this;
6520
+ _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
6521
+ return _this;
6522
+ }
6523
+ var _proto = CubeFaceContentRestorer.prototype;
6524
+ _proto.restoreContent = function restoreContent() {
6525
+ var _this = this;
6526
+ return new engineCore.AssetPromise(function(resolve, reject) {
6527
+ Promise.all(_this.urls.map(function(url) {
6528
+ return engineCore.request(url, _this.requestConfig);
6529
+ })).then(function(images) {
6530
+ var resource = _this.resource;
6531
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6532
+ resource.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6533
+ }
6534
+ resource.generateMipmaps();
6535
+ resolve(resource);
6536
+ }).catch(reject);
6537
+ });
6538
+ };
6539
+ return CubeFaceContentRestorer;
6540
+ }(engineCore.ContentRestorer);
6518
6541
 
6519
6542
  var AudioLoader = /*#__PURE__*/ function(Loader) {
6520
6543
  _inherits(AudioLoader, Loader);
@@ -6587,6 +6610,7 @@ var ShaderChunkLoader = /*#__PURE__*/ function(Loader) {
6587
6610
  }
6588
6611
  }
6589
6612
  return Promise.all(shaderChunkPaths.map(function(chunkPath) {
6613
+ // @ts-ignore
6590
6614
  return resourceManager.load({
6591
6615
  type: "ShaderChunk",
6592
6616
  url: chunkPath
@@ -6663,7 +6687,7 @@ var PhysicsMaterialLoader = /*#__PURE__*/ function(Loader) {
6663
6687
  }(engineCore.Loader);
6664
6688
  PhysicsMaterialLoader = __decorate([
6665
6689
  engineCore.resourceLoader(engineCore.AssetType.PhysicsMaterial, [
6666
- "mesh"
6690
+ "physMat"
6667
6691
  ])
6668
6692
  ], PhysicsMaterialLoader);
6669
6693
 
@@ -6698,7 +6722,6 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
6698
6722
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
6699
6723
  scene.ambientLight.diffuseMode = ambient.diffuseMode;
6700
6724
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
6701
- scene.ambientLight.specularTextureDecodeRGBM = true;
6702
6725
  if (useCustomAmbient && ambient.customAmbientLight) {
6703
6726
  promises.push(// @ts-ignore
6704
6727
  resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
@@ -7346,6 +7369,7 @@ exports.GLTFParserContext = GLTFParserContext;
7346
7369
  exports.GLTFParserType = GLTFParserType;
7347
7370
  exports.GLTFResource = GLTFResource;
7348
7371
  exports.GLTFUtils = GLTFUtils;
7372
+ exports.HDRDecoder = HDRDecoder;
7349
7373
  exports.HierarchyParser = HierarchyParser;
7350
7374
  exports.InterpolableValueType = InterpolableValueType;
7351
7375
  exports.KTX2TargetFormat = KTX2TargetFormat;