@galacean/engine-loader 2.0.0-alpha.5 → 2.0.0-alpha.6

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,4 +1,4 @@
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, resourceLoader, ContentRestorer, DiffuseMode, BackgroundMode, AssetType, AnimatorController, AnimatorControllerLayer, AnimatorStateTransition, BufferAsset, AmbientLight, TextureCube, TextureFilterMode, TextureCubeFace, Font, SystemInfo, Animator, Logger, IndexFormat, VertexElementFormat, GLCapabilityType, TextureFormat, 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';
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, TextureFilterMode, TextureCubeFace, ContentRestorer, Font, SystemInfo, Animator, Logger, IndexFormat, VertexElementFormat, GLCapabilityType, TextureFormat, 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
2
  import { Quaternion, Vector4, Color, Vector3, Vector2, SphericalHarmonics3, MathUtil, BoundingBox, Matrix, Rect } from '@galacean/engine-math';
3
3
  import { GLCompressedTextureInternalFormat } from '@galacean/engine-rhi-webgl';
4
4
 
@@ -248,7 +248,9 @@ var decoderMap = {};
248
248
  };
249
249
  }
250
250
 
251
- var FileHeader = /*#__PURE__*/ function() {
251
+ /**
252
+ * Binary format: [MAGIC(4B)] [totalLength(4B)] [version(1B)] [typeLen(2B)] [type] [nameLen(2B)] [name] [data...]
253
+ */ var FileHeader = /*#__PURE__*/ function() {
252
254
  function FileHeader() {
253
255
  this.totalLength = 0;
254
256
  this.version = 0;
@@ -256,14 +258,23 @@ var FileHeader = /*#__PURE__*/ function() {
256
258
  this.name = "";
257
259
  this.headerLength = 0;
258
260
  }
261
+ FileHeader.checkMagic = function checkMagic(arrayBuffer) {
262
+ if (arrayBuffer.byteLength < 4) return false;
263
+ var view = new DataView(arrayBuffer);
264
+ return view.getUint32(0, true) === FileHeader.MAGIC;
265
+ };
259
266
  FileHeader.decode = function decode(arrayBuffer) {
260
267
  var dataView = new DataView(arrayBuffer);
261
- var totalLen = dataView.getUint32(0, true);
262
- var fileVersion = dataView.getUint8(4);
263
- var typeLen = dataView.getUint16(5, true);
264
- var typeUint8Array = new Uint8Array(arrayBuffer, 7, typeLen);
265
- var nameLen = dataView.getUint16(7 + typeLen, true);
266
- var nameUint8Array = new Uint8Array(arrayBuffer, 9 + typeLen, nameLen);
268
+ if (!FileHeader.checkMagic(arrayBuffer)) {
269
+ throw new Error("Invalid Galacean binary file: missing GLCN magic header.");
270
+ }
271
+ var offset = 4;
272
+ var totalLen = dataView.getUint32(offset, true);
273
+ var fileVersion = dataView.getUint8(offset + 4);
274
+ var typeLen = dataView.getUint16(offset + 5, true);
275
+ var typeUint8Array = new Uint8Array(arrayBuffer, offset + 7, typeLen);
276
+ var nameLen = dataView.getUint16(offset + 7 + typeLen, true);
277
+ var nameUint8Array = new Uint8Array(arrayBuffer, offset + 9 + typeLen, nameLen);
267
278
  var name = Utils.decodeText(nameUint8Array);
268
279
  var type = Utils.decodeText(typeUint8Array);
269
280
  var header = new FileHeader();
@@ -271,7 +282,7 @@ var FileHeader = /*#__PURE__*/ function() {
271
282
  header.name = name;
272
283
  header.type = type;
273
284
  header.version = fileVersion;
274
- header.headerLength = nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
285
+ header.headerLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
275
286
  return header;
276
287
  };
277
288
  _create_class(FileHeader, [
@@ -284,6 +295,8 @@ var FileHeader = /*#__PURE__*/ function() {
284
295
  ]);
285
296
  return FileHeader;
286
297
  }();
298
+ FileHeader.MAGIC = 0x4e434c47 // "GLCN" in little-endian
299
+ ;
287
300
 
288
301
  var InterpolableValueType = /*#__PURE__*/ function(InterpolableValueType) {
289
302
  InterpolableValueType[InterpolableValueType["Float"] = 0] = "Float";
@@ -690,12 +703,12 @@ var ParserType = /*#__PURE__*/ function(ParserType) {
690
703
  this.rootIds.length = 0;
691
704
  this.strippedIds.length = 0;
692
705
  };
693
- /** @internal */ _proto._addDependentAsset = function _addDependentAsset(refID, promise) {
706
+ /** @internal */ _proto._addDependentAsset = function _addDependentAsset(url, promise) {
694
707
  var _this = this;
695
708
  var tasks = this._tasks;
696
- if (tasks.has(refID)) return;
709
+ if (tasks.has(url)) return;
697
710
  ++this._total;
698
- tasks.add(refID);
711
+ tasks.add(url);
699
712
  promise.finally(function() {
700
713
  ++_this._loaded;
701
714
  _this._setTaskCompleteProgress(_this._loaded, _this._total);
@@ -803,7 +816,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
803
816
  // reference object
804
817
  // @ts-ignore
805
818
  return context.resourceManager.getResourceByRef(value).then(function(resource) {
806
- if (context.type === ParserType.Prefab) {
819
+ if (resource && context.type === ParserType.Prefab) {
807
820
  // @ts-ignore
808
821
  context.resource._addDependenceAsset(resource);
809
822
  }
@@ -846,18 +859,18 @@ var ReflectionParser = /*#__PURE__*/ function() {
846
859
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
847
860
  var _this = this;
848
861
  // @ts-ignore
849
- var assetRefId = entityConfig.assetRefId;
862
+ var assetUrl = entityConfig.assetUrl;
850
863
  var engine = this._context.engine;
851
- if (assetRefId) {
864
+ if (assetUrl) {
852
865
  return engine.resourceManager// @ts-ignore
853
866
  .getResourceByRef({
854
- refId: assetRefId,
867
+ url: assetUrl,
855
868
  key: entityConfig.key,
856
869
  isClone: entityConfig.isClone
857
870
  }).then(function(entity) {
858
871
  // @ts-ignore
859
- var resource = engine.resourceManager._objectPool[assetRefId];
860
- if (_this._context.type === ParserType.Prefab) {
872
+ var resource = engine.resourceManager._objectPool[assetUrl];
873
+ if (resource && _this._context.type === ParserType.Prefab) {
861
874
  // @ts-ignore
862
875
  _this._context.resource._addDependenceAsset(resource);
863
876
  }
@@ -880,7 +893,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
880
893
  return value["classType"] !== undefined;
881
894
  };
882
895
  ReflectionParser._isAssetRef = function _isAssetRef(value) {
883
- return value["refId"] !== undefined;
896
+ return value["url"] !== undefined;
884
897
  };
885
898
  ReflectionParser._isEntityRef = function _isEntityRef(value) {
886
899
  return value["entityId"] !== undefined;
@@ -899,7 +912,7 @@ var Texture2DDecoder = /*#__PURE__*/ function() {
899
912
  function Texture2DDecoder() {}
900
913
  Texture2DDecoder.decode = function decode(engine, bufferReader, restoredTexture) {
901
914
  return new AssetPromise(function(resolve, reject) {
902
- var objectId = bufferReader.nextStr();
915
+ var url = bufferReader.nextStr();
903
916
  var mipmap = !!bufferReader.nextUint8();
904
917
  var filterMode = bufferReader.nextUint8();
905
918
  var anisoLevel = bufferReader.nextUint8();
@@ -928,7 +941,7 @@ var Texture2DDecoder = /*#__PURE__*/ function() {
928
941
  }
929
942
  }
930
943
  // @ts-ignore
931
- engine.resourceManager._objectPool[objectId] = texture2D;
944
+ engine.resourceManager._objectPool[url] = texture2D;
932
945
  resolve(texture2D);
933
946
  } else {
934
947
  var blob = new window.Blob([
@@ -1232,7 +1245,7 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1232
1245
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig, engine) {
1233
1246
  var _this = this;
1234
1247
  var entityPromise;
1235
- if (entityConfig.assetRefId) {
1248
+ if (entityConfig.assetUrl) {
1236
1249
  entityPromise = this._parsePrefab(entityConfig, engine);
1237
1250
  } else if (entityConfig.strippedId) {
1238
1251
  entityPromise = this._parseStrippedEntity(entityConfig);
@@ -1252,10 +1265,10 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1252
1265
  };
1253
1266
  _proto._parsePrefab = function _parsePrefab(entityConfig, engine) {
1254
1267
  var _this = this;
1255
- var assetRefId = entityConfig.assetRefId;
1268
+ var assetUrl = entityConfig.assetUrl;
1256
1269
  return engine.resourceManager// @ts-ignore
1257
1270
  .getResourceByRef({
1258
- refId: assetRefId
1271
+ url: assetUrl
1259
1272
  }).then(function(prefabResource) {
1260
1273
  var entity = _instanceof(prefabResource, PrefabResource) ? prefabResource.instantiate() : prefabResource.instantiateSceneRoot();
1261
1274
  var instanceContext = new ParserContext(engine, ParserType.Prefab, null);
@@ -1306,7 +1319,7 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1306
1319
  var componentConfigMap = context.componentConfigMap;
1307
1320
  for(var i = 0, n = components.length; i < n; i++){
1308
1321
  var componentConfig = components[i];
1309
- var key = !componentConfig.refId ? componentConfig.class : componentConfig.refId;
1322
+ var key = !componentConfig.url ? componentConfig.class : componentConfig.url;
1310
1323
  var componentId = componentConfig.id;
1311
1324
  var component = entity.addComponent(Loader.getClass(key));
1312
1325
  componentMap.set(componentId, component);
@@ -1354,53 +1367,6 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1354
1367
  return HierarchyParser;
1355
1368
  }();
1356
1369
 
1357
- var EditorTextureLoader = /*#__PURE__*/ function(Loader) {
1358
- _inherits(EditorTextureLoader, Loader);
1359
- function EditorTextureLoader() {
1360
- return Loader.apply(this, arguments) || this;
1361
- }
1362
- var _proto = EditorTextureLoader.prototype;
1363
- _proto.load = function load(item, resourceManager) {
1364
- var requestConfig = _extends({}, item, {
1365
- type: "arraybuffer"
1366
- });
1367
- var url = item.url;
1368
- return new AssetPromise(function(resolve, reject) {
1369
- resourceManager// @ts-ignore
1370
- ._request(url, requestConfig).then(function(data) {
1371
- decode(data, resourceManager.engine).then(function(texture) {
1372
- resourceManager.addContentRestorer(new EditorTexture2DContentRestorer(texture, url, requestConfig));
1373
- resolve(texture);
1374
- });
1375
- }).catch(reject);
1376
- });
1377
- };
1378
- return EditorTextureLoader;
1379
- }(Loader);
1380
- EditorTextureLoader = __decorate([
1381
- resourceLoader("EditorTexture2D", [
1382
- "prefab"
1383
- ], true)
1384
- ], EditorTextureLoader);
1385
- var EditorTexture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
1386
- _inherits(EditorTexture2DContentRestorer, ContentRestorer);
1387
- function EditorTexture2DContentRestorer(resource, url, requestConfig) {
1388
- var _this;
1389
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
1390
- return _this;
1391
- }
1392
- var _proto = EditorTexture2DContentRestorer.prototype;
1393
- _proto.restoreContent = function restoreContent() {
1394
- var texture = this.resource;
1395
- var engine = texture.engine;
1396
- return engine.resourceManager// @ts-ignore
1397
- ._request(this.url, this.requestConfig).then(function(data) {
1398
- return decode(data, engine, texture);
1399
- });
1400
- };
1401
- return EditorTexture2DContentRestorer;
1402
- }(ContentRestorer);
1403
-
1404
1370
  var MaterialLoaderType = /*#__PURE__*/ function(MaterialLoaderType) {
1405
1371
  MaterialLoaderType["Vector2"] = "Vector2";
1406
1372
  MaterialLoaderType["Vector3"] = "Vector3";
@@ -1441,11 +1407,11 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1441
1407
  var customAmbientLight = ambient.customAmbientLight, ambientLight = ambient.ambientLight;
1442
1408
  if (useCustomAmbient && customAmbientLight) {
1443
1409
  // @ts-ignore
1444
- context._addDependentAsset(customAmbientLight.refId, resourceManager.getResourceByRef(customAmbientLight));
1410
+ context._addDependentAsset(customAmbientLight.url, resourceManager.getResourceByRef(customAmbientLight));
1445
1411
  }
1446
1412
  if (ambientLight && (!useCustomAmbient || useSH)) {
1447
1413
  // @ts-ignore
1448
- context._addDependentAsset(ambientLight.refId, resourceManager.getResourceByRef(ambientLight));
1414
+ context._addDependentAsset(ambientLight.url, resourceManager.getResourceByRef(ambientLight));
1449
1415
  }
1450
1416
  }
1451
1417
  var background = scene.background;
@@ -1453,14 +1419,14 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1453
1419
  if (backgroundMode === BackgroundMode.Texture) {
1454
1420
  var texture = background.texture;
1455
1421
  // @ts-ignore
1456
- texture && context._addDependentAsset(texture.refId, resourceManager.getResourceByRef(texture));
1422
+ texture && context._addDependentAsset(texture.url, resourceManager.getResourceByRef(texture));
1457
1423
  } else if (backgroundMode === BackgroundMode.Sky) {
1458
1424
  var skyMesh = background.skyMesh, skyMaterial = background.skyMaterial;
1459
1425
  if (skyMesh && skyMaterial) {
1460
1426
  // @ts-ignore
1461
- context._addDependentAsset(skyMesh.refId, resourceManager.getResourceByRef(skyMesh));
1427
+ context._addDependentAsset(skyMesh.url, resourceManager.getResourceByRef(skyMesh));
1462
1428
  // @ts-ignore
1463
- context._addDependentAsset(skyMaterial.refId, resourceManager.getResourceByRef(skyMaterial));
1429
+ context._addDependentAsset(skyMaterial.url, resourceManager.getResourceByRef(skyMaterial));
1464
1430
  }
1465
1431
  }
1466
1432
  };
@@ -1476,12 +1442,12 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1476
1442
  var entities = file.entities;
1477
1443
  for(var i = 0, n = entities.length; i < n; i++){
1478
1444
  var entity = entities[i];
1479
- if (!!entity.assetRefId) {
1445
+ if (!!entity.assetUrl) {
1480
1446
  var context = this.context;
1481
- var refId = entity.assetRefId, key = entity.key;
1447
+ var url = entity.assetUrl, key = entity.key;
1482
1448
  // @ts-ignore
1483
- context._addDependentAsset(refId, context.resourceManager.getResourceByRef({
1484
- refId: refId,
1449
+ context._addDependentAsset(url, context.resourceManager.getResourceByRef({
1450
+ url: url,
1485
1451
  key: key
1486
1452
  }));
1487
1453
  } else if (entity.strippedId) {
@@ -1506,7 +1472,7 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
1506
1472
  if (ReflectionParser._isAssetRef(value)) {
1507
1473
  var context = this.context;
1508
1474
  // @ts-ignore
1509
- context._addDependentAsset(value.refId, context.resourceManager.getResourceByRef(value));
1475
+ context._addDependentAsset(value.url, context.resourceManager.getResourceByRef(value));
1510
1476
  } else {
1511
1477
  for(var key in value){
1512
1478
  this._searchDependentAssets(value[key]);
@@ -1570,7 +1536,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
1570
1536
  };
1571
1537
  _proto._parseKeyframeValue = function _parseKeyframeValue(keyframe, resourceManager) {
1572
1538
  var value = keyframe.value;
1573
- if ((typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && (value == null ? void 0 : value.refId)) {
1539
+ if ((typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && (value == null ? void 0 : value.url)) {
1574
1540
  return new Promise(function(resolve) {
1575
1541
  resourceManager// @ts-ignore
1576
1542
  .getResourceByRef(value).then(function(asset) {
@@ -1586,7 +1552,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
1586
1552
  }(Loader);
1587
1553
  AnimationClipLoader = __decorate([
1588
1554
  resourceLoader(AssetType.AnimationClip, [
1589
- "ani"
1555
+ "anim"
1590
1556
  ])
1591
1557
  ], AnimationClipLoader);
1592
1558
 
@@ -1698,8 +1664,8 @@ var AnimatorControllerLoader = /*#__PURE__*/ function(Loader1) {
1698
1664
  }(Loader);
1699
1665
  AnimatorControllerLoader = __decorate([
1700
1666
  resourceLoader(AssetType.AnimatorController, [
1701
- "json"
1702
- ], false)
1667
+ "animCtrl"
1668
+ ])
1703
1669
  ], AnimatorControllerLoader);
1704
1670
 
1705
1671
  var base64Regex = /^data:(.+?);base64,/;
@@ -1727,8 +1693,7 @@ var BufferLoader = /*#__PURE__*/ function(Loader) {
1727
1693
  }(Loader);
1728
1694
  BufferLoader = __decorate([
1729
1695
  resourceLoader(AssetType.Buffer, [
1730
- "bin",
1731
- "r3bin"
1696
+ "bin"
1732
1697
  ])
1733
1698
  ], BufferLoader);
1734
1699
 
@@ -5306,341 +5271,6 @@ PrefabLoader = __decorate([
5306
5271
  ])
5307
5272
  ], PrefabLoader);
5308
5273
 
5309
- var PI = Math.PI;
5310
- // referenece: https://www.flipcode.com/archives/HDR_Image_Reader.shtml
5311
- var HDRLoader = /*#__PURE__*/ function(Loader) {
5312
- _inherits(HDRLoader, Loader);
5313
- function HDRLoader() {
5314
- return Loader.apply(this, arguments) || this;
5315
- }
5316
- var _proto = HDRLoader.prototype;
5317
- _proto.load = function load(item, resourceManager) {
5318
- return new AssetPromise(function(resolve, reject) {
5319
- var engine = resourceManager.engine;
5320
- var requestConfig = _extends({}, item, {
5321
- type: "arraybuffer"
5322
- });
5323
- var url = item.url;
5324
- resourceManager// @ts-ignore
5325
- ._request(url, requestConfig).then(function(buffer) {
5326
- var texture = HDRLoader._setTextureByBuffer(engine, buffer);
5327
- engine.resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
5328
- resolve(texture);
5329
- }).catch(reject);
5330
- });
5331
- };
5332
- /**
5333
- * @internal
5334
- */ HDRLoader._setTextureByBuffer = function _setTextureByBuffer(engine, buffer, texture) {
5335
- var bufferArray = new Uint8Array(buffer);
5336
- var _HDRLoader__parseHeader = HDRLoader._parseHeader(bufferArray), width = _HDRLoader__parseHeader.width, height = _HDRLoader__parseHeader.height, dataPosition = _HDRLoader__parseHeader.dataPosition;
5337
- var cubeSize = height >> 1;
5338
- texture || (texture = new TextureCube(engine, cubeSize, undefined, undefined, false));
5339
- var pixels = HDRLoader._readPixels(bufferArray.subarray(dataPosition), width, height);
5340
- var cubeMapData = HDRLoader._convertToCubemap(pixels, width, height, cubeSize);
5341
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
5342
- texture.setPixelBuffer(TextureCubeFace.PositiveX + faceIndex, cubeMapData[faceIndex], 0);
5343
- }
5344
- texture.generateMipmaps();
5345
- return texture;
5346
- };
5347
- HDRLoader._convertToCubemap = function _convertToCubemap(pixels, inputWidth, inputHeight, size) {
5348
- if (!pixels) {
5349
- throw "ConvertPanoramaToCubemap: input cannot be null";
5350
- }
5351
- if (pixels.length != inputWidth * inputHeight * 4) {
5352
- throw "ConvertPanoramaToCubemap: input size is wrong";
5353
- }
5354
- var textureRight = this._createCubemapData(size, this._faceRight, pixels, inputWidth, inputHeight);
5355
- var textureLeft = this._createCubemapData(size, this._faceLeft, pixels, inputWidth, inputHeight);
5356
- var textureUp = this._createCubemapData(size, this._faceUp, pixels, inputWidth, inputHeight);
5357
- var textureDown = this._createCubemapData(size, this._faceBottom, pixels, inputWidth, inputHeight);
5358
- var textureFront = this._createCubemapData(size, this._faceFront, pixels, inputWidth, inputHeight);
5359
- var textureBack = this._createCubemapData(size, this._faceBack, pixels, inputWidth, inputHeight);
5360
- return [
5361
- textureRight,
5362
- textureLeft,
5363
- textureUp,
5364
- textureDown,
5365
- textureFront,
5366
- textureBack
5367
- ];
5368
- };
5369
- HDRLoader._createCubemapData = function _createCubemapData(texSize, faceData, pixels, inputWidth, inputHeight) {
5370
- var textureArray = new Uint8ClampedArray(texSize * texSize * 4);
5371
- var rotDX1 = this._tempVector3.set(0, 0, 0).add(faceData[1]).subtract(faceData[0]).scale(1 / texSize);
5372
- var rotDX2 = this._temp2Vector3.set(0, 0, 0).add(faceData[3]).subtract(faceData[2]).scale(1 / texSize);
5373
- var dy = 1 / texSize;
5374
- var fy = 0;
5375
- for(var y = 0; y < texSize; y++){
5376
- var xv1 = this._temp3Vector3.set(0, 0, 0).add(faceData[0]);
5377
- var xv2 = this._temp4Vector3.set(0, 0, 0).add(faceData[2]);
5378
- for(var x = 0; x < texSize; x++){
5379
- var v = this._temp5Vector3.set(0, 0, 0).add(xv2).subtract(xv1).scale(fy).add(xv1);
5380
- v.normalize();
5381
- var color = this._calcProjectionSpherical(v, pixels, inputWidth, inputHeight);
5382
- this._RGBEToLinear(color);
5383
- this._linearToRGBM(color, 5);
5384
- // 4 channels per pixels
5385
- var index = y * texSize * 4 + x * 4;
5386
- textureArray[index] = color.r;
5387
- textureArray[index + 1] = color.g;
5388
- textureArray[index + 2] = color.b;
5389
- textureArray[index + 3] = color.a;
5390
- xv1.add(rotDX1);
5391
- xv2.add(rotDX2);
5392
- }
5393
- fy += dy;
5394
- }
5395
- return textureArray;
5396
- };
5397
- HDRLoader._calcProjectionSpherical = function _calcProjectionSpherical(vDir, pixels, inputWidth, inputHeight) {
5398
- var theta = Math.atan2(vDir.z, vDir.x);
5399
- var phi = Math.acos(vDir.y);
5400
- while(theta < -PI){
5401
- theta += 2 * PI;
5402
- }
5403
- while(theta > PI){
5404
- theta -= 2 * PI;
5405
- }
5406
- var dx = theta / PI;
5407
- var dy = phi / PI;
5408
- // recenter.
5409
- dx = dx * 0.5 + 0.5;
5410
- var px = Math.round(dx * inputWidth);
5411
- if (px < 0) {
5412
- px = 0;
5413
- } else if (px >= inputWidth) {
5414
- px = inputWidth - 1;
5415
- }
5416
- var py = Math.round(dy * inputHeight);
5417
- if (py < 0) {
5418
- py = 0;
5419
- } else if (py >= inputHeight) {
5420
- py = inputHeight - 1;
5421
- }
5422
- var inputY = inputHeight - py - 1;
5423
- var index = inputY * inputWidth * 4 + px * 4;
5424
- var r = pixels[index];
5425
- var g = pixels[index + 1];
5426
- var b = pixels[index + 2];
5427
- var a = pixels[index + 3];
5428
- return new Color(r, g, b, a);
5429
- };
5430
- HDRLoader._readStringLine = function _readStringLine(uint8array, startIndex) {
5431
- var line = "";
5432
- var character = "";
5433
- for(var i = startIndex; i < uint8array.length - startIndex; i++){
5434
- character = String.fromCharCode(uint8array[i]);
5435
- if (character == "\n") {
5436
- break;
5437
- }
5438
- line += character;
5439
- }
5440
- return line;
5441
- };
5442
- HDRLoader._parseHeader = function _parseHeader(uint8array) {
5443
- var height = 0;
5444
- var width = 0;
5445
- var line = this._readStringLine(uint8array, 0);
5446
- if (line[0] != "#" || line[1] != "?") {
5447
- throw "Bad HDR Format.";
5448
- }
5449
- var endOfHeader = false;
5450
- var findFormat = false;
5451
- var lineIndex = 0;
5452
- do {
5453
- lineIndex += line.length + 1;
5454
- line = this._readStringLine(uint8array, lineIndex);
5455
- if (line == "FORMAT=32-bit_rle_rgbe") {
5456
- findFormat = true;
5457
- } else if (line.length == 0) {
5458
- endOfHeader = true;
5459
- }
5460
- }while (!endOfHeader);
5461
- if (!findFormat) {
5462
- throw "HDR Bad header format, unsupported FORMAT";
5463
- }
5464
- lineIndex += line.length + 1;
5465
- line = this._readStringLine(uint8array, lineIndex);
5466
- var sizeRegexp = /^\-Y (.*) \+X (.*)$/g;
5467
- var match = sizeRegexp.exec(line);
5468
- // TODO. Support +Y and -X if needed.
5469
- if (!match || match.length < 3) {
5470
- throw "HDR Bad header format, no size";
5471
- }
5472
- width = parseInt(match[2]);
5473
- height = parseInt(match[1]);
5474
- if (width < 8 || width > 0x7fff) {
5475
- throw "HDR Bad header format, unsupported size";
5476
- }
5477
- lineIndex += line.length + 1;
5478
- return {
5479
- height: height,
5480
- width: width,
5481
- dataPosition: lineIndex
5482
- };
5483
- };
5484
- HDRLoader._readPixels = function _readPixels(buffer, width, height) {
5485
- var scanLineWidth = width;
5486
- var byteLength = buffer.byteLength;
5487
- var dataRGBA = new Uint8Array(4 * width * height);
5488
- var offset = 0, pos = 0;
5489
- var ptrEnd = 4 * scanLineWidth;
5490
- var scanLineBuffer = new Uint8Array(ptrEnd);
5491
- var numScanLines = height; // read in each successive scanLine
5492
- while(numScanLines > 0 && pos < byteLength){
5493
- var a = buffer[pos++];
5494
- var b = buffer[pos++];
5495
- var c = buffer[pos++];
5496
- var d = buffer[pos++];
5497
- if (a != 2 || b != 2 || c & 0x80 || width < 8 || width > 32767) {
5498
- // this file is not run length encoded
5499
- // read values sequentially
5500
- return buffer;
5501
- }
5502
- if ((c << 8 | d) != scanLineWidth) {
5503
- // eslint-disable-next-line no-throw-literal
5504
- throw "HDR Bad header format, wrong scan line width";
5505
- }
5506
- // read each of the four channels for the scanline into the buffer
5507
- // first red, then green, then blue, then exponent
5508
- var ptr = 0, count = void 0;
5509
- while(ptr < ptrEnd && pos < byteLength){
5510
- count = buffer[pos++];
5511
- var isEncodedRun = count > 128;
5512
- if (isEncodedRun) count -= 128;
5513
- if (0 === count || ptr + count > ptrEnd) {
5514
- throw "HDR Bad Format, bad scanline data (run)";
5515
- }
5516
- if (isEncodedRun) {
5517
- // a (encoded) run of the same value
5518
- var byteValue = buffer[pos++];
5519
- for(var i = 0; i < count; i++){
5520
- scanLineBuffer[ptr++] = byteValue;
5521
- } //ptr += count;
5522
- } else {
5523
- // a literal-run
5524
- scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
5525
- ptr += count;
5526
- pos += count;
5527
- }
5528
- } // now convert data from buffer into rgba
5529
- // first red, then green, then blue, then exponent (alpha)
5530
- var l = scanLineWidth; //scanLine_buffer.byteLength;
5531
- for(var i1 = 0; i1 < l; i1++){
5532
- var off = 0;
5533
- dataRGBA[offset] = scanLineBuffer[i1 + off];
5534
- off += scanLineWidth;
5535
- dataRGBA[offset + 1] = scanLineBuffer[i1 + off];
5536
- off += scanLineWidth;
5537
- dataRGBA[offset + 2] = scanLineBuffer[i1 + off];
5538
- off += scanLineWidth;
5539
- dataRGBA[offset + 3] = scanLineBuffer[i1 + off];
5540
- offset += 4;
5541
- }
5542
- numScanLines--;
5543
- }
5544
- return dataRGBA;
5545
- };
5546
- HDRLoader._RGBEToLinear = function _RGBEToLinear(color) {
5547
- var scaleFactor = Math.pow(2, color.a - 128) / 255;
5548
- color.r *= scaleFactor;
5549
- color.g *= scaleFactor;
5550
- color.b *= scaleFactor;
5551
- color.a = 1;
5552
- };
5553
- HDRLoader._linearToRGBM = function _linearToRGBM(color, maxRange) {
5554
- var maxRGB = Math.max(color.r, Math.max(color.g, color.b));
5555
- var M = Math.min(maxRGB / maxRange, 1);
5556
- M = Math.ceil(M * 255);
5557
- var scaleFactor = 65025 / (M * maxRange); // 255 * (255 / (M * maxRange) )
5558
- color.r *= scaleFactor;
5559
- color.g *= scaleFactor;
5560
- color.b *= scaleFactor;
5561
- color.a *= M;
5562
- };
5563
- return HDRLoader;
5564
- }(Loader);
5565
- HDRLoader._rightBottomBack = new Vector3(1.0, -1.0, -1.0);
5566
- HDRLoader._rightBottomFront = new Vector3(1.0, -1.0, 1.0);
5567
- HDRLoader._rightUpBack = new Vector3(1.0, 1.0, -1.0);
5568
- HDRLoader._rightUpFront = new Vector3(1.0, 1.0, 1.0);
5569
- HDRLoader._leftBottomBack = new Vector3(-1.0, -1.0, -1.0);
5570
- HDRLoader._leftBottomFront = new Vector3(-1.0, -1.0, 1.0);
5571
- HDRLoader._leftUpBack = new Vector3(-1.0, 1.0, -1.0);
5572
- HDRLoader._leftUpFront = new Vector3(-1.0, 1.0, 1.0);
5573
- HDRLoader._faceRight = [
5574
- HDRLoader._rightBottomBack,
5575
- HDRLoader._rightBottomFront,
5576
- HDRLoader._rightUpBack,
5577
- HDRLoader._rightUpFront
5578
- ];
5579
- HDRLoader._faceLeft = [
5580
- HDRLoader._leftBottomFront,
5581
- HDRLoader._leftBottomBack,
5582
- HDRLoader._leftUpFront,
5583
- HDRLoader._leftUpBack
5584
- ];
5585
- HDRLoader._faceUp = [
5586
- HDRLoader._leftBottomFront,
5587
- HDRLoader._rightBottomFront,
5588
- HDRLoader._leftBottomBack,
5589
- HDRLoader._rightBottomBack
5590
- ];
5591
- HDRLoader._faceBottom = [
5592
- HDRLoader._leftUpBack,
5593
- HDRLoader._rightUpBack,
5594
- HDRLoader._leftUpFront,
5595
- HDRLoader._rightUpFront
5596
- ];
5597
- HDRLoader._faceFront = [
5598
- HDRLoader._leftBottomBack,
5599
- HDRLoader._rightBottomBack,
5600
- HDRLoader._leftUpBack,
5601
- HDRLoader._rightUpBack
5602
- ];
5603
- HDRLoader._faceBack = [
5604
- HDRLoader._rightBottomFront,
5605
- HDRLoader._leftBottomFront,
5606
- HDRLoader._rightUpFront,
5607
- HDRLoader._leftUpFront
5608
- ];
5609
- HDRLoader._tempVector3 = new Vector3();
5610
- HDRLoader._temp2Vector3 = new Vector3();
5611
- HDRLoader._temp3Vector3 = new Vector3();
5612
- HDRLoader._temp4Vector3 = new Vector3();
5613
- HDRLoader._temp5Vector3 = new Vector3();
5614
- HDRLoader = __decorate([
5615
- resourceLoader(AssetType.HDR, [
5616
- "hdr"
5617
- ])
5618
- ], HDRLoader);
5619
- /**
5620
- * @internal
5621
- */ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
5622
- _inherits(HDRContentRestorer, ContentRestorer);
5623
- function HDRContentRestorer(resource, url, requestConfig) {
5624
- var _this;
5625
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
5626
- return _this;
5627
- }
5628
- var _proto = HDRContentRestorer.prototype;
5629
- _proto.restoreContent = function restoreContent() {
5630
- var _this = this;
5631
- return new AssetPromise(function(resolve, reject) {
5632
- var resource = _this.resource;
5633
- var engine = resource.engine;
5634
- engine.resourceManager// @ts-ignore
5635
- ._request(_this.url, _this.requestConfig).then(function(buffer) {
5636
- HDRLoader._setTextureByBuffer(engine, buffer, resource);
5637
- resolve(resource);
5638
- }).catch(reject);
5639
- });
5640
- };
5641
- return HDRContentRestorer;
5642
- }(ContentRestorer);
5643
-
5644
5274
  var JSONLoader = /*#__PURE__*/ function(Loader) {
5645
5275
  _inherits(JSONLoader, Loader);
5646
5276
  function JSONLoader() {
@@ -6043,7 +5673,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
6043
5673
  }(Loader);
6044
5674
  MaterialLoader = __decorate([
6045
5675
  resourceLoader(AssetType.Material, [
6046
- "json"
5676
+ "mat"
6047
5677
  ])
6048
5678
  ], MaterialLoader);
6049
5679
 
@@ -6166,7 +5796,7 @@ var ProjectLoader = /*#__PURE__*/ function(Loader) {
6166
5796
  }(Loader);
6167
5797
  ProjectLoader = __decorate([
6168
5798
  resourceLoader(AssetType.Project, [
6169
- "proj"
5799
+ "project"
6170
5800
  ], false)
6171
5801
  ], ProjectLoader);
6172
5802
 
@@ -6387,28 +6017,20 @@ TextLoader = __decorate([
6387
6017
  ])
6388
6018
  ], TextLoader);
6389
6019
 
6390
- /**
6391
- * @internal
6392
- */ var Texture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6393
- _inherits(Texture2DContentRestorer, ContentRestorer);
6394
- function Texture2DContentRestorer(resource, url, requestConfig) {
6395
- var _this;
6396
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
6397
- return _this;
6398
- }
6399
- var _proto = Texture2DContentRestorer.prototype;
6400
- _proto.restoreContent = function restoreContent() {
6401
- var _this = this;
6402
- return request(this.url, this.requestConfig).then(function(image) {
6403
- var resource = _this.resource;
6404
- resource.setImageSource(image);
6405
- resource.generateMipmaps();
6406
- return resource;
6407
- });
6408
- };
6409
- return Texture2DContentRestorer;
6410
- }(ContentRestorer);
6411
-
6020
+ function loadImageFromBuffer(buffer) {
6021
+ return new AssetPromise(function(resolve, reject) {
6022
+ var blob = new Blob([
6023
+ buffer
6024
+ ]);
6025
+ var img = new Image();
6026
+ img.onload = function() {
6027
+ URL.revokeObjectURL(img.src);
6028
+ resolve(img);
6029
+ };
6030
+ img.onerror = reject;
6031
+ img.src = URL.createObjectURL(blob);
6032
+ });
6033
+ }
6412
6034
  var Texture2DLoader = /*#__PURE__*/ function(Loader) {
6413
6035
  _inherits(Texture2DLoader, Loader);
6414
6036
  function Texture2DLoader() {
@@ -6416,36 +6038,48 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader) {
6416
6038
  }
6417
6039
  var _proto = Texture2DLoader.prototype;
6418
6040
  _proto.load = function load(item, resourceManager) {
6041
+ var _this = this;
6042
+ var url = item.url;
6043
+ var requestConfig = _extends({}, item, {
6044
+ type: "arraybuffer"
6045
+ });
6419
6046
  return new AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
6420
- var url = item.url;
6421
- var requestConfig = _extends({}, item, {
6422
- type: "image"
6423
- });
6424
6047
  resourceManager// @ts-ignore
6425
- ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(image) {
6426
- var _item_params;
6427
- 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;
6428
- var width = image.width, height = image.height;
6429
- var engine = resourceManager.engine;
6430
- var generateMipmap = TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
6431
- var texture = new Texture2D(engine, width, height, format, generateMipmap, isSRGBColorSpace);
6432
- texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
6433
- texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
6434
- texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
6435
- texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
6436
- texture.setImageSource(image);
6437
- generateMipmap && texture.generateMipmaps();
6438
- if (url.indexOf("data:") !== 0) {
6439
- var index = url.lastIndexOf("/");
6440
- texture.name = url.substring(index + 1);
6048
+ ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
6049
+ if (FileHeader.checkMagic(buffer)) {
6050
+ decode(buffer, resourceManager.engine).then(function(texture) {
6051
+ resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
6052
+ resolve(texture);
6053
+ }, reject);
6054
+ } else {
6055
+ loadImageFromBuffer(buffer).then(function(img) {
6056
+ var texture = _this._createTexture(img, item, resourceManager);
6057
+ resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
6058
+ resolve(texture);
6059
+ }, reject);
6441
6060
  }
6442
- resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
6443
- resolve(texture);
6444
- }).catch(function(e) {
6445
- reject(e);
6446
- });
6061
+ }).catch(reject);
6447
6062
  });
6448
6063
  };
6064
+ _proto._createTexture = function _createTexture(img, item, resourceManager) {
6065
+ var _item_params;
6066
+ 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;
6067
+ var width = img.width, height = img.height;
6068
+ var engine = resourceManager.engine;
6069
+ var generateMipmap = TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
6070
+ var texture = new Texture2D(engine, width, height, format, generateMipmap, isSRGBColorSpace);
6071
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
6072
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
6073
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
6074
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
6075
+ texture.setImageSource(img);
6076
+ generateMipmap && texture.generateMipmaps();
6077
+ var url = item.url;
6078
+ if (url.indexOf("data:") !== 0) {
6079
+ texture.name = url.substring(url.lastIndexOf("/") + 1);
6080
+ }
6081
+ return texture;
6082
+ };
6449
6083
  return Texture2DLoader;
6450
6084
  }(Loader);
6451
6085
  Texture2DLoader = __decorate([
@@ -6453,40 +6087,319 @@ Texture2DLoader = __decorate([
6453
6087
  "png",
6454
6088
  "jpg",
6455
6089
  "webp",
6456
- "jpeg"
6090
+ "jpeg",
6091
+ "tex"
6457
6092
  ])
6458
6093
  ], Texture2DLoader);
6459
-
6460
- /**
6461
- * @internal
6462
- */ var TextureCubeContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6463
- _inherits(TextureCubeContentRestorer, ContentRestorer);
6464
- function TextureCubeContentRestorer(resource, urls, requestConfig) {
6094
+ var Texture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6095
+ _inherits(Texture2DContentRestorer, ContentRestorer);
6096
+ function Texture2DContentRestorer(resource, url, requestConfig) {
6465
6097
  var _this;
6466
- _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
6098
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
6467
6099
  return _this;
6468
6100
  }
6469
- var _proto = TextureCubeContentRestorer.prototype;
6101
+ var _proto = Texture2DContentRestorer.prototype;
6470
6102
  _proto.restoreContent = function restoreContent() {
6471
- var _this = this;
6472
- return new AssetPromise(function(resolve, reject) {
6473
- Promise.all(_this.urls.map(function(url) {
6474
- return request(url, _this.requestConfig);
6475
- })).then(function(images) {
6476
- var resource = _this.resource;
6477
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6478
- resource.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6479
- }
6480
- resource.generateMipmaps();
6481
- resolve(resource);
6482
- }).catch(function(e) {
6483
- reject(e);
6484
- });
6103
+ var texture = this.resource;
6104
+ var engine = texture.engine;
6105
+ return engine.resourceManager// @ts-ignore
6106
+ ._request(this.url, this.requestConfig).then(function(buffer) {
6107
+ if (FileHeader.checkMagic(buffer)) {
6108
+ return decode(buffer, engine, texture);
6109
+ } else {
6110
+ return loadImageFromBuffer(buffer).then(function(img) {
6111
+ texture.setImageSource(img);
6112
+ texture.generateMipmaps();
6113
+ return texture;
6114
+ });
6115
+ }
6485
6116
  });
6486
6117
  };
6487
- return TextureCubeContentRestorer;
6118
+ return Texture2DContentRestorer;
6488
6119
  }(ContentRestorer);
6489
6120
 
6121
+ /**
6122
+ * @internal
6123
+ * HDR panorama to cubemap decoder.
6124
+ */ var HDRDecoder = /*#__PURE__*/ function() {
6125
+ function HDRDecoder() {}
6126
+ HDRDecoder.parseHeader = function parseHeader(uint8array) {
6127
+ var line = this._readStringLine(uint8array, 0);
6128
+ if (line[0] !== "#" || line[1] !== "?") {
6129
+ throw "HDRDecoder: invalid file header";
6130
+ }
6131
+ var endOfHeader = false;
6132
+ var findFormat = false;
6133
+ var lineIndex = 0;
6134
+ do {
6135
+ lineIndex += line.length + 1;
6136
+ line = this._readStringLine(uint8array, lineIndex);
6137
+ if (line === "FORMAT=32-bit_rle_rgbe") findFormat = true;
6138
+ else if (line.length === 0) endOfHeader = true;
6139
+ }while (!endOfHeader);
6140
+ if (!findFormat) {
6141
+ throw "HDRDecoder: unsupported format, expected 32-bit_rle_rgbe";
6142
+ }
6143
+ lineIndex += line.length + 1;
6144
+ line = this._readStringLine(uint8array, lineIndex);
6145
+ var match = /^\-Y (.*) \+X (.*)$/g.exec(line);
6146
+ if (!match || match.length < 3) {
6147
+ throw "HDRDecoder: missing image size, only -Y +X layout is supported";
6148
+ }
6149
+ var width = parseInt(match[2]);
6150
+ var height = parseInt(match[1]);
6151
+ if (width < 8 || width > 0x7fff) {
6152
+ throw "HDRDecoder: unsupported image width, must be between 8 and 32767";
6153
+ }
6154
+ return {
6155
+ height: height,
6156
+ width: width,
6157
+ dataPosition: lineIndex + line.length + 1
6158
+ };
6159
+ };
6160
+ HDRDecoder.decodeFaces = function decodeFaces(bufferArray, header, onFace) {
6161
+ var width = header.width, height = header.height, dataPosition = header.dataPosition;
6162
+ var cubeSize = height >> 1;
6163
+ var pixels = HDRDecoder._readPixels(bufferArray.subarray(dataPosition), width, height);
6164
+ var faces = HDRDecoder._faces;
6165
+ var faceBuffer = new Uint16Array(cubeSize * cubeSize * 4);
6166
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6167
+ HDRDecoder._createCubemapData(cubeSize, faces[faceIndex], pixels, width, height, faceBuffer);
6168
+ onFace(faceIndex, faceBuffer);
6169
+ }
6170
+ };
6171
+ HDRDecoder._generateFloat2HalfTables = function _generateFloat2HalfTables() {
6172
+ var baseTable = new Uint32Array(512);
6173
+ var shiftTable = new Uint32Array(512);
6174
+ for(var i = 0; i < 256; ++i){
6175
+ var e = i - 127;
6176
+ if (e < -27) {
6177
+ baseTable[i] = 0x0000;
6178
+ baseTable[i | 0x100] = 0x8000;
6179
+ shiftTable[i] = 24;
6180
+ shiftTable[i | 0x100] = 24;
6181
+ } else if (e < -14) {
6182
+ baseTable[i] = 0x0400 >> -e - 14;
6183
+ baseTable[i | 0x100] = 0x0400 >> -e - 14 | 0x8000;
6184
+ shiftTable[i] = -e - 1;
6185
+ shiftTable[i | 0x100] = -e - 1;
6186
+ } else if (e <= 15) {
6187
+ baseTable[i] = e + 15 << 10;
6188
+ baseTable[i | 0x100] = e + 15 << 10 | 0x8000;
6189
+ shiftTable[i] = 13;
6190
+ shiftTable[i | 0x100] = 13;
6191
+ } else if (e < 128) {
6192
+ baseTable[i] = 0x7c00;
6193
+ baseTable[i | 0x100] = 0xfc00;
6194
+ shiftTable[i] = 24;
6195
+ shiftTable[i | 0x100] = 24;
6196
+ } else {
6197
+ baseTable[i] = 0x7c00;
6198
+ baseTable[i | 0x100] = 0xfc00;
6199
+ shiftTable[i] = 13;
6200
+ shiftTable[i | 0x100] = 13;
6201
+ }
6202
+ }
6203
+ return {
6204
+ baseTable: baseTable,
6205
+ shiftTable: shiftTable
6206
+ };
6207
+ };
6208
+ HDRDecoder._createCubemapData = function _createCubemapData(texSize, face, pixels, inputWidth, inputHeight, facePixels) {
6209
+ var invSize = 1 / texSize;
6210
+ var rotDX1X = (face[3] - face[0]) * invSize;
6211
+ var rotDX1Y = (face[4] - face[1]) * invSize;
6212
+ var rotDX1Z = (face[5] - face[2]) * invSize;
6213
+ var rotDX2X = (face[9] - face[6]) * invSize;
6214
+ var rotDX2Y = (face[10] - face[7]) * invSize;
6215
+ var rotDX2Z = (face[11] - face[8]) * invSize;
6216
+ var floatView = HDRDecoder._floatView;
6217
+ var uint32View = HDRDecoder._uint32View;
6218
+ var _HDRDecoder__float2HalfTables = HDRDecoder._float2HalfTables, baseTable = _HDRDecoder__float2HalfTables.baseTable, shiftTable = _HDRDecoder__float2HalfTables.shiftTable;
6219
+ var one = HDRDecoder._one;
6220
+ var fy = 0;
6221
+ for(var y = 0; y < texSize; y++){
6222
+ var xv1X = face[0], xv1Y = face[1], xv1Z = face[2];
6223
+ var xv2X = face[6], xv2Y = face[7], xv2Z = face[8];
6224
+ for(var x = 0; x < texSize; x++){
6225
+ var dirX = xv1X + (xv2X - xv1X) * fy;
6226
+ var dirY = xv1Y + (xv2Y - xv1Y) * fy;
6227
+ var dirZ = xv1Z + (xv2Z - xv1Z) * fy;
6228
+ var invLen = 1 / Math.sqrt(dirX * dirX + dirY * dirY + dirZ * dirZ);
6229
+ dirX *= invLen;
6230
+ dirY *= invLen;
6231
+ dirZ *= invLen;
6232
+ var px = Math.round((Math.atan2(dirZ, dirX) / Math.PI * 0.5 + 0.5) * inputWidth);
6233
+ if (px < 0) px = 0;
6234
+ else if (px >= inputWidth) px = inputWidth - 1;
6235
+ var py = Math.round(Math.acos(dirY) / Math.PI * inputHeight);
6236
+ if (py < 0) py = 0;
6237
+ else if (py >= inputHeight) py = inputHeight - 1;
6238
+ var srcIndex = (inputHeight - py - 1) * inputWidth * 4 + px * 4;
6239
+ var scaleFactor = Math.pow(2, pixels[srcIndex + 3] - 128) / 255;
6240
+ var dstIndex = y * texSize * 4 + x * 4;
6241
+ for(var c = 0; c < 3; c++){
6242
+ floatView[0] = pixels[srcIndex + c] * scaleFactor;
6243
+ var f = uint32View[0];
6244
+ var e = f >> 23 & 0x1ff;
6245
+ facePixels[dstIndex + c] = baseTable[e] + ((f & 0x007fffff) >> shiftTable[e]);
6246
+ }
6247
+ facePixels[dstIndex + 3] = one;
6248
+ xv1X += rotDX1X;
6249
+ xv1Y += rotDX1Y;
6250
+ xv1Z += rotDX1Z;
6251
+ xv2X += rotDX2X;
6252
+ xv2Y += rotDX2Y;
6253
+ xv2Z += rotDX2Z;
6254
+ }
6255
+ fy += invSize;
6256
+ }
6257
+ };
6258
+ HDRDecoder._readStringLine = function _readStringLine(uint8array, startIndex) {
6259
+ var line = "";
6260
+ for(var i = startIndex, n = uint8array.length; i < n; i++){
6261
+ var character = String.fromCharCode(uint8array[i]);
6262
+ if (character === "\n") break;
6263
+ line += character;
6264
+ }
6265
+ return line;
6266
+ };
6267
+ HDRDecoder._readPixels = function _readPixels(buffer, width, height) {
6268
+ var byteLength = buffer.byteLength;
6269
+ var dataRGBA = new Uint8Array(4 * width * height);
6270
+ var offset = 0;
6271
+ var pos = 0;
6272
+ var ptrEnd = 4 * width;
6273
+ var scanLineBuffer = new Uint8Array(ptrEnd);
6274
+ var numScanLines = height;
6275
+ while(numScanLines > 0 && pos < byteLength){
6276
+ var a = buffer[pos++];
6277
+ var b = buffer[pos++];
6278
+ var c = buffer[pos++];
6279
+ var d = buffer[pos++];
6280
+ if (a !== 2 || b !== 2 || c & 0x80 || width < 8 || width > 32767) return buffer;
6281
+ if ((c << 8 | d) !== width) throw "HDRDecoder: wrong scanline width";
6282
+ var ptr = 0;
6283
+ while(ptr < ptrEnd && pos < byteLength){
6284
+ var count = buffer[pos++];
6285
+ var isEncodedRun = count > 128;
6286
+ if (isEncodedRun) count -= 128;
6287
+ if (count === 0 || ptr + count > ptrEnd) throw "HDRDecoder: bad scanline data";
6288
+ if (isEncodedRun) {
6289
+ var byteValue = buffer[pos++];
6290
+ for(var i = 0; i < count; i++)scanLineBuffer[ptr++] = byteValue;
6291
+ } else {
6292
+ scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
6293
+ ptr += count;
6294
+ pos += count;
6295
+ }
6296
+ }
6297
+ for(var i1 = 0; i1 < width; i1++, offset += 4){
6298
+ dataRGBA[offset] = scanLineBuffer[i1];
6299
+ dataRGBA[offset + 1] = scanLineBuffer[i1 + width];
6300
+ dataRGBA[offset + 2] = scanLineBuffer[i1 + width * 2];
6301
+ dataRGBA[offset + 3] = scanLineBuffer[i1 + width * 3];
6302
+ }
6303
+ numScanLines--;
6304
+ }
6305
+ return dataRGBA;
6306
+ };
6307
+ return HDRDecoder;
6308
+ }();
6309
+ // Float32 to Float16 lookup tables (http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf)
6310
+ HDRDecoder._float2HalfTables = HDRDecoder._generateFloat2HalfTables();
6311
+ HDRDecoder._floatView = new Float32Array(1);
6312
+ HDRDecoder._uint32View = new Uint32Array(HDRDecoder._floatView.buffer);
6313
+ HDRDecoder._one = 0x3c00 // Half float for 1.0
6314
+ ;
6315
+ // prettier-ignore
6316
+ HDRDecoder._faces = [
6317
+ /* +X */ [
6318
+ 1,
6319
+ -1,
6320
+ -1,
6321
+ 1,
6322
+ -1,
6323
+ 1,
6324
+ 1,
6325
+ 1,
6326
+ -1,
6327
+ 1,
6328
+ 1,
6329
+ 1
6330
+ ],
6331
+ /* -X */ [
6332
+ -1,
6333
+ -1,
6334
+ 1,
6335
+ -1,
6336
+ -1,
6337
+ -1,
6338
+ -1,
6339
+ 1,
6340
+ 1,
6341
+ -1,
6342
+ 1,
6343
+ -1
6344
+ ],
6345
+ /* +Y */ [
6346
+ -1,
6347
+ -1,
6348
+ 1,
6349
+ 1,
6350
+ -1,
6351
+ 1,
6352
+ -1,
6353
+ -1,
6354
+ -1,
6355
+ 1,
6356
+ -1,
6357
+ -1
6358
+ ],
6359
+ /* -Y */ [
6360
+ -1,
6361
+ 1,
6362
+ -1,
6363
+ 1,
6364
+ 1,
6365
+ -1,
6366
+ -1,
6367
+ 1,
6368
+ 1,
6369
+ 1,
6370
+ 1,
6371
+ 1
6372
+ ],
6373
+ /* +Z */ [
6374
+ -1,
6375
+ -1,
6376
+ -1,
6377
+ 1,
6378
+ -1,
6379
+ -1,
6380
+ -1,
6381
+ 1,
6382
+ -1,
6383
+ 1,
6384
+ 1,
6385
+ -1
6386
+ ],
6387
+ /* -Z */ [
6388
+ 1,
6389
+ -1,
6390
+ 1,
6391
+ -1,
6392
+ -1,
6393
+ 1,
6394
+ 1,
6395
+ 1,
6396
+ 1,
6397
+ -1,
6398
+ 1,
6399
+ 1
6400
+ ]
6401
+ ];
6402
+
6490
6403
  var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6491
6404
  _inherits(TextureCubeLoader, Loader);
6492
6405
  function TextureCubeLoader() {
@@ -6494,6 +6407,44 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6494
6407
  }
6495
6408
  var _proto = TextureCubeLoader.prototype;
6496
6409
  _proto.load = function load(item, resourceManager) {
6410
+ if (item.urls) {
6411
+ return this._loadCubeFaces(item, resourceManager);
6412
+ } else {
6413
+ return this._loadHDR(item, resourceManager);
6414
+ }
6415
+ };
6416
+ _proto._loadHDR = function _loadHDR(item, resourceManager) {
6417
+ return new AssetPromise(function(resolve, reject) {
6418
+ var engine = resourceManager.engine;
6419
+ var url = item.url;
6420
+ var requestConfig = _extends({}, item, {
6421
+ type: "arraybuffer"
6422
+ });
6423
+ resourceManager// @ts-ignore
6424
+ ._request(url, requestConfig).then(function(buffer) {
6425
+ if (!SystemInfo.supportsTextureFormat(engine, TextureFormat.R16G16B16A16)) {
6426
+ reject(new Error("TextureCubeLoader: HDR texture requires half float support."));
6427
+ return;
6428
+ }
6429
+ var _item_params;
6430
+ 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;
6431
+ var bufferArray = new Uint8Array(buffer);
6432
+ var header = HDRDecoder.parseHeader(bufferArray);
6433
+ var texture = new TextureCube(engine, header.height >> 1, TextureFormat.R16G16B16A16, mipmap, false);
6434
+ HDRDecoder.decodeFaces(bufferArray, header, function(faceIndex, data) {
6435
+ texture.setPixelBuffer(TextureCubeFace.PositiveX + faceIndex, data, 0);
6436
+ });
6437
+ texture.generateMipmaps();
6438
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
6439
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
6440
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
6441
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
6442
+ resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
6443
+ resolve(texture);
6444
+ }).catch(reject);
6445
+ });
6446
+ };
6447
+ _proto._loadCubeFaces = function _loadCubeFaces(item, resourceManager) {
6497
6448
  return new AssetPromise(function(resolve, reject) {
6498
6449
  var urls = item.urls;
6499
6450
  var requestConfig = _extends({}, item, {
@@ -6507,7 +6458,7 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6507
6458
  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;
6508
6459
  var _images_ = images[0], width = _images_.width, height = _images_.height;
6509
6460
  if (width !== height) {
6510
- console.error("The cube texture must have the same width and height");
6461
+ reject(new Error("The cube texture must have the same width and height"));
6511
6462
  return;
6512
6463
  }
6513
6464
  var engine = resourceManager.engine;
@@ -6520,21 +6471,70 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
6520
6471
  for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6521
6472
  texture.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6522
6473
  }
6523
- generateMipmap && texture.generateMipmaps();
6524
- resourceManager.addContentRestorer(new TextureCubeContentRestorer(texture, urls, requestConfig));
6474
+ texture.generateMipmaps();
6475
+ resourceManager.addContentRestorer(new CubeFaceContentRestorer(texture, urls, requestConfig));
6525
6476
  resolve(texture);
6526
- }).catch(function(e) {
6527
- reject(e);
6528
- });
6477
+ }).catch(reject);
6529
6478
  });
6530
6479
  };
6531
6480
  return TextureCubeLoader;
6532
6481
  }(Loader);
6533
6482
  TextureCubeLoader = __decorate([
6534
6483
  resourceLoader(AssetType.TextureCube, [
6535
- ""
6484
+ "texCube",
6485
+ "hdr"
6536
6486
  ])
6537
6487
  ], TextureCubeLoader);
6488
+ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6489
+ _inherits(HDRContentRestorer, ContentRestorer);
6490
+ function HDRContentRestorer(resource, url, requestConfig) {
6491
+ var _this;
6492
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
6493
+ return _this;
6494
+ }
6495
+ var _proto = HDRContentRestorer.prototype;
6496
+ _proto.restoreContent = function restoreContent() {
6497
+ var _this = this;
6498
+ return new AssetPromise(function(resolve, reject) {
6499
+ var resource = _this.resource;
6500
+ resource.engine.resourceManager// @ts-ignore
6501
+ ._request(_this.url, _this.requestConfig).then(function(buffer) {
6502
+ var bufferArray = new Uint8Array(buffer);
6503
+ HDRDecoder.decodeFaces(bufferArray, HDRDecoder.parseHeader(bufferArray), function(faceIndex, data) {
6504
+ resource.setPixelBuffer(TextureCubeFace.PositiveX + faceIndex, data, 0);
6505
+ });
6506
+ resource.generateMipmaps();
6507
+ resolve(resource);
6508
+ }).catch(reject);
6509
+ });
6510
+ };
6511
+ return HDRContentRestorer;
6512
+ }(ContentRestorer);
6513
+ var CubeFaceContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
6514
+ _inherits(CubeFaceContentRestorer, ContentRestorer);
6515
+ function CubeFaceContentRestorer(resource, urls, requestConfig) {
6516
+ var _this;
6517
+ _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
6518
+ return _this;
6519
+ }
6520
+ var _proto = CubeFaceContentRestorer.prototype;
6521
+ _proto.restoreContent = function restoreContent() {
6522
+ var _this = this;
6523
+ return new AssetPromise(function(resolve, reject) {
6524
+ Promise.all(_this.urls.map(function(url) {
6525
+ return request(url, _this.requestConfig);
6526
+ })).then(function(images) {
6527
+ var resource = _this.resource;
6528
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
6529
+ resource.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
6530
+ }
6531
+ resource.generateMipmaps();
6532
+ resolve(resource);
6533
+ }).catch(reject);
6534
+ });
6535
+ };
6536
+ return CubeFaceContentRestorer;
6537
+ }(ContentRestorer);
6538
6538
 
6539
6539
  var AudioLoader = /*#__PURE__*/ function(Loader) {
6540
6540
  _inherits(AudioLoader, Loader);
@@ -6684,7 +6684,7 @@ var PhysicsMaterialLoader = /*#__PURE__*/ function(Loader) {
6684
6684
  }(Loader);
6685
6685
  PhysicsMaterialLoader = __decorate([
6686
6686
  resourceLoader(AssetType.PhysicsMaterial, [
6687
- "mesh"
6687
+ "physMat"
6688
6688
  ])
6689
6689
  ], PhysicsMaterialLoader);
6690
6690
 
@@ -7356,5 +7356,5 @@ EXT_texture_webp = __decorate([
7356
7356
  registerGLTFExtension("EXT_texture_webp", GLTFExtensionMode.CreateAndParse)
7357
7357
  ], EXT_texture_webp);
7358
7358
 
7359
- export { AccessorType, AnimationClipDecoder, BufferInfo, BufferReader, EditorTextureLoader, FileHeader, GLTFAnimationParser, GLTFAnimatorControllerParser, GLTFBufferParser, GLTFBufferViewParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFLoader, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFParserType, GLTFResource, GLTFSceneParser, GLTFSchemaParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, HierarchyParser, InterpolableValueType, KTX2Loader, KTX2TargetFormat, MaterialLoaderType, MeshDecoder, ParserContext, ParserType, PrefabResource, ReflectionParser, SceneParser, SpecularMode, Texture2DDecoder, decode, decoder, decoderMap, parseSingleKTX, registerGLTFExtension, registerGLTFParser };
7359
+ export { AccessorType, AnimationClipDecoder, BufferInfo, BufferReader, FileHeader, GLTFAnimationParser, GLTFAnimatorControllerParser, GLTFBufferParser, GLTFBufferViewParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFLoader, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFParserType, GLTFResource, GLTFSceneParser, GLTFSchemaParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, HierarchyParser, InterpolableValueType, KTX2Loader, KTX2TargetFormat, MaterialLoaderType, MeshDecoder, ParserContext, ParserType, PrefabResource, ReflectionParser, SceneParser, SpecularMode, Texture2DDecoder, decode, decoder, decoderMap, parseSingleKTX, registerGLTFExtension, registerGLTFParser };
7360
7360
  //# sourceMappingURL=module.js.map