@galacean/engine 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/browser.js CHANGED
@@ -28932,7 +28932,6 @@
28932
28932
  /** Sprite Atlas. */ AssetType["SpriteAtlas"] = "SpriteAtlas";
28933
28933
  /** Ambient light. */ AssetType["Env"] = "Environment";
28934
28934
  /** Scene. */ AssetType["Scene"] = "Scene";
28935
- /** HDR to cube. */ AssetType["HDR"] = "HDR";
28936
28935
  /** Font. */ AssetType["Font"] = "Font";
28937
28936
  /** Source Font, include ttf, otf and woff. */ AssetType["SourceFont"] = "SourceFont";
28938
28937
  /** AudioClip, include ogg, wav and mp3. */ AssetType["Audio"] = "Audio";
@@ -29346,7 +29345,6 @@
29346
29345
  this._contentRestorerPool = Object.create(null);
29347
29346
  this._subAssetPromiseCallbacks = {};
29348
29347
  this./** @internal */ _objectPool = Object.create(null);
29349
- this./** @internal */ _idResourceMap = Object.create(null);
29350
29348
  this./** @internal */ _virtualPathResourceMap = Object.create(null);
29351
29349
  }
29352
29350
  var _proto = ResourceManager.prototype;
@@ -29745,30 +29743,29 @@
29745
29743
  * @internal
29746
29744
  * @beta Just for internal editor, not recommended for developers.
29747
29745
  */ _proto.getResourceByRef = function getResourceByRef(ref) {
29748
- var refId = ref.refId, key = ref.key, isClone = ref.isClone;
29749
- var obj = this._objectPool[refId];
29750
- var promise;
29751
- if (obj) {
29752
- promise = AssetPromise.resolve(obj);
29753
- } else {
29754
- var resourceConfig = this._idResourceMap[refId];
29755
- if (!resourceConfig) {
29756
- Logger.warn("refId:" + refId + " is not find in this._idResourceMap.");
29757
- return AssetPromise.resolve(null);
29758
- }
29759
- var url = resourceConfig.virtualPath;
29760
- if (key) {
29761
- url += "?q=" + key;
29762
- }
29763
- promise = this.load({
29764
- url: url,
29765
- type: resourceConfig.type,
29766
- params: resourceConfig.params
29767
- });
29746
+ var url = ref.url, key = ref.key, isClone = ref.isClone;
29747
+ if (!url) {
29748
+ Logger.warn("ResourceManager.getResourceByRef: url is empty.");
29749
+ return AssetPromise.resolve(null);
29750
+ }
29751
+ var cached = this._objectPool[url];
29752
+ if (cached) {
29753
+ return AssetPromise.resolve(isClone ? cached.clone() : cached);
29754
+ }
29755
+ var mapped = this._virtualPathResourceMap[url];
29756
+ if (!mapped) {
29757
+ Logger.warn('ResourceManager.getResourceByRef: url "' + url + '" not found in virtualPathResourceMap.');
29758
+ return AssetPromise.resolve(null);
29768
29759
  }
29769
- return promise.then(function(item) {
29770
- return isClone ? item.clone() : item;
29760
+ var loadUrl = key ? url + "?q=" + key : url;
29761
+ var promise = this.load({
29762
+ url: loadUrl,
29763
+ type: mapped.type,
29764
+ params: mapped.params
29771
29765
  });
29766
+ return isClone ? promise.then(function(item) {
29767
+ return item.clone();
29768
+ }) : promise;
29772
29769
  };
29773
29770
  /**
29774
29771
  * @internal
@@ -29777,7 +29774,6 @@
29777
29774
  var _this = this;
29778
29775
  config.forEach(function(element) {
29779
29776
  _this._virtualPathResourceMap[element.virtualPath] = element;
29780
- _this._idResourceMap[element.id] = element;
29781
29777
  if (element.dependentAssetMap) {
29782
29778
  _this._virtualPathResourceMap[element.virtualPath].dependentAssetMap = element.dependentAssetMap;
29783
29779
  }
@@ -45757,7 +45753,9 @@
45757
45753
  decoderMap[type] = target;
45758
45754
  };
45759
45755
  }
45760
- var FileHeader = /*#__PURE__*/ function() {
45756
+ /**
45757
+ * Binary format: [MAGIC(4B)] [totalLength(4B)] [version(1B)] [typeLen(2B)] [type] [nameLen(2B)] [name] [data...]
45758
+ */ var FileHeader = /*#__PURE__*/ function() {
45761
45759
  function FileHeader() {
45762
45760
  this.totalLength = 0;
45763
45761
  this.version = 0;
@@ -45765,14 +45763,23 @@
45765
45763
  this.name = "";
45766
45764
  this.headerLength = 0;
45767
45765
  }
45766
+ FileHeader.checkMagic = function checkMagic(arrayBuffer) {
45767
+ if (arrayBuffer.byteLength < 4) return false;
45768
+ var view = new DataView(arrayBuffer);
45769
+ return view.getUint32(0, true) === FileHeader.MAGIC;
45770
+ };
45768
45771
  FileHeader.decode = function decode(arrayBuffer) {
45769
45772
  var dataView = new DataView(arrayBuffer);
45770
- var totalLen = dataView.getUint32(0, true);
45771
- var fileVersion = dataView.getUint8(4);
45772
- var typeLen = dataView.getUint16(5, true);
45773
- var typeUint8Array = new Uint8Array(arrayBuffer, 7, typeLen);
45774
- var nameLen = dataView.getUint16(7 + typeLen, true);
45775
- var nameUint8Array = new Uint8Array(arrayBuffer, 9 + typeLen, nameLen);
45773
+ if (!FileHeader.checkMagic(arrayBuffer)) {
45774
+ throw new Error("Invalid Galacean binary file: missing GLCN magic header.");
45775
+ }
45776
+ var offset = 4;
45777
+ var totalLen = dataView.getUint32(offset, true);
45778
+ var fileVersion = dataView.getUint8(offset + 4);
45779
+ var typeLen = dataView.getUint16(offset + 5, true);
45780
+ var typeUint8Array = new Uint8Array(arrayBuffer, offset + 7, typeLen);
45781
+ var nameLen = dataView.getUint16(offset + 7 + typeLen, true);
45782
+ var nameUint8Array = new Uint8Array(arrayBuffer, offset + 9 + typeLen, nameLen);
45776
45783
  var name = Utils.decodeText(nameUint8Array);
45777
45784
  var type = Utils.decodeText(typeUint8Array);
45778
45785
  var header = new FileHeader();
@@ -45780,7 +45787,7 @@
45780
45787
  header.name = name;
45781
45788
  header.type = type;
45782
45789
  header.version = fileVersion;
45783
- header.headerLength = nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
45790
+ header.headerLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
45784
45791
  return header;
45785
45792
  };
45786
45793
  _create_class(FileHeader, [
@@ -45793,6 +45800,8 @@
45793
45800
  ]);
45794
45801
  return FileHeader;
45795
45802
  }();
45803
+ FileHeader.MAGIC = 0x4e434c47 // "GLCN" in little-endian
45804
+ ;
45796
45805
  var InterpolableValueType = /*#__PURE__*/ function(InterpolableValueType) {
45797
45806
  InterpolableValueType[InterpolableValueType["Float"] = 0] = "Float";
45798
45807
  InterpolableValueType[InterpolableValueType["FloatArray"] = 1] = "FloatArray";
@@ -46193,12 +46202,12 @@
46193
46202
  this.rootIds.length = 0;
46194
46203
  this.strippedIds.length = 0;
46195
46204
  };
46196
- /** @internal */ _proto._addDependentAsset = function _addDependentAsset(refID, promise) {
46205
+ /** @internal */ _proto._addDependentAsset = function _addDependentAsset(url, promise) {
46197
46206
  var _this = this;
46198
46207
  var tasks = this._tasks;
46199
- if (tasks.has(refID)) return;
46208
+ if (tasks.has(url)) return;
46200
46209
  ++this._total;
46201
- tasks.add(refID);
46210
+ tasks.add(url);
46202
46211
  promise.finally(function() {
46203
46212
  ++_this._loaded;
46204
46213
  _this._setTaskCompleteProgress(_this._loaded, _this._total);
@@ -46305,7 +46314,7 @@
46305
46314
  // reference object
46306
46315
  // @ts-ignore
46307
46316
  return context.resourceManager.getResourceByRef(value).then(function(resource) {
46308
- if (context.type === ParserType.Prefab) {
46317
+ if (resource && context.type === ParserType.Prefab) {
46309
46318
  // @ts-ignore
46310
46319
  context.resource._addDependenceAsset(resource);
46311
46320
  }
@@ -46348,18 +46357,18 @@
46348
46357
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
46349
46358
  var _this = this;
46350
46359
  // @ts-ignore
46351
- var assetRefId = entityConfig.assetRefId;
46360
+ var assetUrl = entityConfig.assetUrl;
46352
46361
  var engine = this._context.engine;
46353
- if (assetRefId) {
46362
+ if (assetUrl) {
46354
46363
  return engine.resourceManager // @ts-ignore
46355
46364
  .getResourceByRef({
46356
- refId: assetRefId,
46365
+ url: assetUrl,
46357
46366
  key: entityConfig.key,
46358
46367
  isClone: entityConfig.isClone
46359
46368
  }).then(function(entity) {
46360
46369
  // @ts-ignore
46361
- var resource = engine.resourceManager._objectPool[assetRefId];
46362
- if (_this._context.type === ParserType.Prefab) {
46370
+ var resource = engine.resourceManager._objectPool[assetUrl];
46371
+ if (resource && _this._context.type === ParserType.Prefab) {
46363
46372
  // @ts-ignore
46364
46373
  _this._context.resource._addDependenceAsset(resource);
46365
46374
  }
@@ -46382,7 +46391,7 @@
46382
46391
  return value["classType"] !== undefined;
46383
46392
  };
46384
46393
  ReflectionParser._isAssetRef = function _isAssetRef(value) {
46385
- return value["refId"] !== undefined;
46394
+ return value["url"] !== undefined;
46386
46395
  };
46387
46396
  ReflectionParser._isEntityRef = function _isEntityRef(value) {
46388
46397
  return value["entityId"] !== undefined;
@@ -46400,7 +46409,7 @@
46400
46409
  function Texture2DDecoder() {}
46401
46410
  Texture2DDecoder.decode = function decode(engine, bufferReader, restoredTexture) {
46402
46411
  return new AssetPromise(function(resolve, reject) {
46403
- var objectId = bufferReader.nextStr();
46412
+ var url = bufferReader.nextStr();
46404
46413
  var mipmap = !!bufferReader.nextUint8();
46405
46414
  var filterMode = bufferReader.nextUint8();
46406
46415
  var anisoLevel = bufferReader.nextUint8();
@@ -46429,7 +46438,7 @@
46429
46438
  }
46430
46439
  }
46431
46440
  // @ts-ignore
46432
- engine.resourceManager._objectPool[objectId] = texture2D;
46441
+ engine.resourceManager._objectPool[url] = texture2D;
46433
46442
  resolve(texture2D);
46434
46443
  } else {
46435
46444
  var blob = new window.Blob([
@@ -46723,7 +46732,7 @@
46723
46732
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig, engine) {
46724
46733
  var _this = this;
46725
46734
  var entityPromise;
46726
- if (entityConfig.assetRefId) {
46735
+ if (entityConfig.assetUrl) {
46727
46736
  entityPromise = this._parsePrefab(entityConfig, engine);
46728
46737
  } else if (entityConfig.strippedId) {
46729
46738
  entityPromise = this._parseStrippedEntity(entityConfig);
@@ -46743,10 +46752,10 @@
46743
46752
  };
46744
46753
  _proto._parsePrefab = function _parsePrefab(entityConfig, engine) {
46745
46754
  var _this = this;
46746
- var assetRefId = entityConfig.assetRefId;
46755
+ var assetUrl = entityConfig.assetUrl;
46747
46756
  return engine.resourceManager // @ts-ignore
46748
46757
  .getResourceByRef({
46749
- refId: assetRefId
46758
+ url: assetUrl
46750
46759
  }).then(function(prefabResource) {
46751
46760
  var entity = _instanceof1(prefabResource, PrefabResource) ? prefabResource.instantiate() : prefabResource.instantiateSceneRoot();
46752
46761
  var instanceContext = new ParserContext(engine, ParserType.Prefab, null);
@@ -46797,7 +46806,7 @@
46797
46806
  var componentConfigMap = context.componentConfigMap;
46798
46807
  for(var i = 0, n = components.length; i < n; i++){
46799
46808
  var componentConfig = components[i];
46800
- var key = !componentConfig.refId ? componentConfig.class : componentConfig.refId;
46809
+ var key = !componentConfig.url ? componentConfig.class : componentConfig.url;
46801
46810
  var componentId = componentConfig.id;
46802
46811
  var component = entity.addComponent(Loader.getClass(key));
46803
46812
  componentMap.set(componentId, component);
@@ -46844,52 +46853,6 @@
46844
46853
  _proto._addEntityPlugin = function _addEntityPlugin(entityId, entity) {};
46845
46854
  return HierarchyParser;
46846
46855
  }();
46847
- exports.EditorTextureLoader = /*#__PURE__*/ function(Loader) {
46848
- _inherits(EditorTextureLoader, Loader);
46849
- function EditorTextureLoader() {
46850
- return Loader.apply(this, arguments) || this;
46851
- }
46852
- var _proto = EditorTextureLoader.prototype;
46853
- _proto.load = function load(item, resourceManager) {
46854
- var requestConfig = _extends({}, item, {
46855
- type: "arraybuffer"
46856
- });
46857
- var url = item.url;
46858
- return new AssetPromise(function(resolve, reject) {
46859
- resourceManager // @ts-ignore
46860
- ._request(url, requestConfig).then(function(data) {
46861
- decode(data, resourceManager.engine).then(function(texture) {
46862
- resourceManager.addContentRestorer(new EditorTexture2DContentRestorer(texture, url, requestConfig));
46863
- resolve(texture);
46864
- });
46865
- }).catch(reject);
46866
- });
46867
- };
46868
- return EditorTextureLoader;
46869
- }(Loader);
46870
- exports.EditorTextureLoader = __decorate([
46871
- resourceLoader("EditorTexture2D", [
46872
- "prefab"
46873
- ], true)
46874
- ], exports.EditorTextureLoader);
46875
- var EditorTexture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
46876
- _inherits(EditorTexture2DContentRestorer, ContentRestorer);
46877
- function EditorTexture2DContentRestorer(resource, url, requestConfig) {
46878
- var _this;
46879
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
46880
- return _this;
46881
- }
46882
- var _proto = EditorTexture2DContentRestorer.prototype;
46883
- _proto.restoreContent = function restoreContent() {
46884
- var texture = this.resource;
46885
- var engine = texture.engine;
46886
- return engine.resourceManager // @ts-ignore
46887
- ._request(this.url, this.requestConfig).then(function(data) {
46888
- return decode(data, engine, texture);
46889
- });
46890
- };
46891
- return EditorTexture2DContentRestorer;
46892
- }(ContentRestorer);
46893
46856
  var MaterialLoaderType = /*#__PURE__*/ function(MaterialLoaderType) {
46894
46857
  MaterialLoaderType["Vector2"] = "Vector2";
46895
46858
  MaterialLoaderType["Vector3"] = "Vector3";
@@ -46928,11 +46891,11 @@
46928
46891
  var customAmbientLight = ambient.customAmbientLight, ambientLight = ambient.ambientLight;
46929
46892
  if (useCustomAmbient && customAmbientLight) {
46930
46893
  // @ts-ignore
46931
- context._addDependentAsset(customAmbientLight.refId, resourceManager.getResourceByRef(customAmbientLight));
46894
+ context._addDependentAsset(customAmbientLight.url, resourceManager.getResourceByRef(customAmbientLight));
46932
46895
  }
46933
46896
  if (ambientLight && (!useCustomAmbient || useSH)) {
46934
46897
  // @ts-ignore
46935
- context._addDependentAsset(ambientLight.refId, resourceManager.getResourceByRef(ambientLight));
46898
+ context._addDependentAsset(ambientLight.url, resourceManager.getResourceByRef(ambientLight));
46936
46899
  }
46937
46900
  }
46938
46901
  var background = scene.background;
@@ -46940,14 +46903,14 @@
46940
46903
  if (backgroundMode === BackgroundMode.Texture) {
46941
46904
  var texture = background.texture;
46942
46905
  // @ts-ignore
46943
- texture && context._addDependentAsset(texture.refId, resourceManager.getResourceByRef(texture));
46906
+ texture && context._addDependentAsset(texture.url, resourceManager.getResourceByRef(texture));
46944
46907
  } else if (backgroundMode === BackgroundMode.Sky) {
46945
46908
  var skyMesh = background.skyMesh, skyMaterial = background.skyMaterial;
46946
46909
  if (skyMesh && skyMaterial) {
46947
46910
  // @ts-ignore
46948
- context._addDependentAsset(skyMesh.refId, resourceManager.getResourceByRef(skyMesh));
46911
+ context._addDependentAsset(skyMesh.url, resourceManager.getResourceByRef(skyMesh));
46949
46912
  // @ts-ignore
46950
- context._addDependentAsset(skyMaterial.refId, resourceManager.getResourceByRef(skyMaterial));
46913
+ context._addDependentAsset(skyMaterial.url, resourceManager.getResourceByRef(skyMaterial));
46951
46914
  }
46952
46915
  }
46953
46916
  };
@@ -46963,12 +46926,12 @@
46963
46926
  var entities = file.entities;
46964
46927
  for(var i = 0, n = entities.length; i < n; i++){
46965
46928
  var entity = entities[i];
46966
- if (!!entity.assetRefId) {
46929
+ if (!!entity.assetUrl) {
46967
46930
  var context = this.context;
46968
- var refId = entity.assetRefId, key = entity.key;
46931
+ var url = entity.assetUrl, key = entity.key;
46969
46932
  // @ts-ignore
46970
- context._addDependentAsset(refId, context.resourceManager.getResourceByRef({
46971
- refId: refId,
46933
+ context._addDependentAsset(url, context.resourceManager.getResourceByRef({
46934
+ url: url,
46972
46935
  key: key
46973
46936
  }));
46974
46937
  } else if (entity.strippedId) {
@@ -46993,7 +46956,7 @@
46993
46956
  if (ReflectionParser._isAssetRef(value)) {
46994
46957
  var context = this.context;
46995
46958
  // @ts-ignore
46996
- context._addDependentAsset(value.refId, context.resourceManager.getResourceByRef(value));
46959
+ context._addDependentAsset(value.url, context.resourceManager.getResourceByRef(value));
46997
46960
  } else {
46998
46961
  for(var key in value){
46999
46962
  this._searchDependentAssets(value[key]);
@@ -47055,7 +47018,7 @@
47055
47018
  };
47056
47019
  _proto._parseKeyframeValue = function _parseKeyframeValue(keyframe, resourceManager) {
47057
47020
  var value = keyframe.value;
47058
- if ((typeof value === "undefined" ? "undefined" : _type_of1(value)) === "object" && (value == null ? void 0 : value.refId)) {
47021
+ if ((typeof value === "undefined" ? "undefined" : _type_of1(value)) === "object" && (value == null ? void 0 : value.url)) {
47059
47022
  return new Promise(function(resolve) {
47060
47023
  resourceManager // @ts-ignore
47061
47024
  .getResourceByRef(value).then(function(asset) {
@@ -47071,7 +47034,7 @@
47071
47034
  }(Loader);
47072
47035
  AnimationClipLoader = __decorate([
47073
47036
  resourceLoader(AssetType.AnimationClip, [
47074
- "ani"
47037
+ "anim"
47075
47038
  ])
47076
47039
  ], AnimationClipLoader);
47077
47040
  var AnimatorControllerLoader = /*#__PURE__*/ function(Loader1) {
@@ -47182,8 +47145,8 @@
47182
47145
  }(Loader);
47183
47146
  AnimatorControllerLoader = __decorate([
47184
47147
  resourceLoader(AssetType.AnimatorController, [
47185
- "json"
47186
- ], false)
47148
+ "animCtrl"
47149
+ ])
47187
47150
  ], AnimatorControllerLoader);
47188
47151
  var base64Regex = /^data:(.+?);base64,/;
47189
47152
  var BufferLoader = /*#__PURE__*/ function(Loader) {
@@ -47210,8 +47173,7 @@
47210
47173
  }(Loader);
47211
47174
  BufferLoader = __decorate([
47212
47175
  resourceLoader(AssetType.Buffer, [
47213
- "bin",
47214
- "r3bin"
47176
+ "bin"
47215
47177
  ])
47216
47178
  ], BufferLoader);
47217
47179
  var EnvLoader = /*#__PURE__*/ function(Loader) {
@@ -50750,340 +50712,6 @@
50750
50712
  "prefab"
50751
50713
  ])
50752
50714
  ], PrefabLoader);
50753
- var PI = Math.PI;
50754
- // referenece: https://www.flipcode.com/archives/HDR_Image_Reader.shtml
50755
- var HDRLoader = /*#__PURE__*/ function(Loader) {
50756
- _inherits(HDRLoader, Loader);
50757
- function HDRLoader() {
50758
- return Loader.apply(this, arguments) || this;
50759
- }
50760
- var _proto = HDRLoader.prototype;
50761
- _proto.load = function load(item, resourceManager) {
50762
- return new AssetPromise(function(resolve, reject) {
50763
- var engine = resourceManager.engine;
50764
- var requestConfig = _extends({}, item, {
50765
- type: "arraybuffer"
50766
- });
50767
- var url = item.url;
50768
- resourceManager // @ts-ignore
50769
- ._request(url, requestConfig).then(function(buffer) {
50770
- var texture = HDRLoader._setTextureByBuffer(engine, buffer);
50771
- engine.resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
50772
- resolve(texture);
50773
- }).catch(reject);
50774
- });
50775
- };
50776
- /**
50777
- * @internal
50778
- */ HDRLoader._setTextureByBuffer = function _setTextureByBuffer(engine, buffer, texture) {
50779
- var bufferArray = new Uint8Array(buffer);
50780
- var _HDRLoader__parseHeader = HDRLoader._parseHeader(bufferArray), width = _HDRLoader__parseHeader.width, height = _HDRLoader__parseHeader.height, dataPosition = _HDRLoader__parseHeader.dataPosition;
50781
- var cubeSize = height >> 1;
50782
- texture || (texture = new TextureCube(engine, cubeSize, undefined, undefined, false));
50783
- var pixels = HDRLoader._readPixels(bufferArray.subarray(dataPosition), width, height);
50784
- var cubeMapData = HDRLoader._convertToCubemap(pixels, width, height, cubeSize);
50785
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
50786
- texture.setPixelBuffer(TextureCubeFace.PositiveX + faceIndex, cubeMapData[faceIndex], 0);
50787
- }
50788
- texture.generateMipmaps();
50789
- return texture;
50790
- };
50791
- HDRLoader._convertToCubemap = function _convertToCubemap(pixels, inputWidth, inputHeight, size) {
50792
- if (!pixels) {
50793
- throw "ConvertPanoramaToCubemap: input cannot be null";
50794
- }
50795
- if (pixels.length != inputWidth * inputHeight * 4) {
50796
- throw "ConvertPanoramaToCubemap: input size is wrong";
50797
- }
50798
- var textureRight = this._createCubemapData(size, this._faceRight, pixels, inputWidth, inputHeight);
50799
- var textureLeft = this._createCubemapData(size, this._faceLeft, pixels, inputWidth, inputHeight);
50800
- var textureUp = this._createCubemapData(size, this._faceUp, pixels, inputWidth, inputHeight);
50801
- var textureDown = this._createCubemapData(size, this._faceBottom, pixels, inputWidth, inputHeight);
50802
- var textureFront = this._createCubemapData(size, this._faceFront, pixels, inputWidth, inputHeight);
50803
- var textureBack = this._createCubemapData(size, this._faceBack, pixels, inputWidth, inputHeight);
50804
- return [
50805
- textureRight,
50806
- textureLeft,
50807
- textureUp,
50808
- textureDown,
50809
- textureFront,
50810
- textureBack
50811
- ];
50812
- };
50813
- HDRLoader._createCubemapData = function _createCubemapData(texSize, faceData, pixels, inputWidth, inputHeight) {
50814
- var textureArray = new Uint8ClampedArray(texSize * texSize * 4);
50815
- var rotDX1 = this._tempVector3.set(0, 0, 0).add(faceData[1]).subtract(faceData[0]).scale(1 / texSize);
50816
- var rotDX2 = this._temp2Vector3.set(0, 0, 0).add(faceData[3]).subtract(faceData[2]).scale(1 / texSize);
50817
- var dy = 1 / texSize;
50818
- var fy = 0;
50819
- for(var y = 0; y < texSize; y++){
50820
- var xv1 = this._temp3Vector3.set(0, 0, 0).add(faceData[0]);
50821
- var xv2 = this._temp4Vector3.set(0, 0, 0).add(faceData[2]);
50822
- for(var x = 0; x < texSize; x++){
50823
- var v = this._temp5Vector3.set(0, 0, 0).add(xv2).subtract(xv1).scale(fy).add(xv1);
50824
- v.normalize();
50825
- var color = this._calcProjectionSpherical(v, pixels, inputWidth, inputHeight);
50826
- this._RGBEToLinear(color);
50827
- this._linearToRGBM(color, 5);
50828
- // 4 channels per pixels
50829
- var index = y * texSize * 4 + x * 4;
50830
- textureArray[index] = color.r;
50831
- textureArray[index + 1] = color.g;
50832
- textureArray[index + 2] = color.b;
50833
- textureArray[index + 3] = color.a;
50834
- xv1.add(rotDX1);
50835
- xv2.add(rotDX2);
50836
- }
50837
- fy += dy;
50838
- }
50839
- return textureArray;
50840
- };
50841
- HDRLoader._calcProjectionSpherical = function _calcProjectionSpherical(vDir, pixels, inputWidth, inputHeight) {
50842
- var theta = Math.atan2(vDir.z, vDir.x);
50843
- var phi = Math.acos(vDir.y);
50844
- while(theta < -PI){
50845
- theta += 2 * PI;
50846
- }
50847
- while(theta > PI){
50848
- theta -= 2 * PI;
50849
- }
50850
- var dx = theta / PI;
50851
- var dy = phi / PI;
50852
- // recenter.
50853
- dx = dx * 0.5 + 0.5;
50854
- var px = Math.round(dx * inputWidth);
50855
- if (px < 0) {
50856
- px = 0;
50857
- } else if (px >= inputWidth) {
50858
- px = inputWidth - 1;
50859
- }
50860
- var py = Math.round(dy * inputHeight);
50861
- if (py < 0) {
50862
- py = 0;
50863
- } else if (py >= inputHeight) {
50864
- py = inputHeight - 1;
50865
- }
50866
- var inputY = inputHeight - py - 1;
50867
- var index = inputY * inputWidth * 4 + px * 4;
50868
- var r = pixels[index];
50869
- var g = pixels[index + 1];
50870
- var b = pixels[index + 2];
50871
- var a = pixels[index + 3];
50872
- return new Color(r, g, b, a);
50873
- };
50874
- HDRLoader._readStringLine = function _readStringLine(uint8array, startIndex) {
50875
- var line = "";
50876
- var character = "";
50877
- for(var i = startIndex; i < uint8array.length - startIndex; i++){
50878
- character = String.fromCharCode(uint8array[i]);
50879
- if (character == "\n") {
50880
- break;
50881
- }
50882
- line += character;
50883
- }
50884
- return line;
50885
- };
50886
- HDRLoader._parseHeader = function _parseHeader(uint8array) {
50887
- var height = 0;
50888
- var width = 0;
50889
- var line = this._readStringLine(uint8array, 0);
50890
- if (line[0] != "#" || line[1] != "?") {
50891
- throw "Bad HDR Format.";
50892
- }
50893
- var endOfHeader = false;
50894
- var findFormat = false;
50895
- var lineIndex = 0;
50896
- do {
50897
- lineIndex += line.length + 1;
50898
- line = this._readStringLine(uint8array, lineIndex);
50899
- if (line == "FORMAT=32-bit_rle_rgbe") {
50900
- findFormat = true;
50901
- } else if (line.length == 0) {
50902
- endOfHeader = true;
50903
- }
50904
- }while (!endOfHeader);
50905
- if (!findFormat) {
50906
- throw "HDR Bad header format, unsupported FORMAT";
50907
- }
50908
- lineIndex += line.length + 1;
50909
- line = this._readStringLine(uint8array, lineIndex);
50910
- var sizeRegexp = /^\-Y (.*) \+X (.*)$/g;
50911
- var match = sizeRegexp.exec(line);
50912
- // TODO. Support +Y and -X if needed.
50913
- if (!match || match.length < 3) {
50914
- throw "HDR Bad header format, no size";
50915
- }
50916
- width = parseInt(match[2]);
50917
- height = parseInt(match[1]);
50918
- if (width < 8 || width > 0x7fff) {
50919
- throw "HDR Bad header format, unsupported size";
50920
- }
50921
- lineIndex += line.length + 1;
50922
- return {
50923
- height: height,
50924
- width: width,
50925
- dataPosition: lineIndex
50926
- };
50927
- };
50928
- HDRLoader._readPixels = function _readPixels(buffer, width, height) {
50929
- var scanLineWidth = width;
50930
- var byteLength = buffer.byteLength;
50931
- var dataRGBA = new Uint8Array(4 * width * height);
50932
- var offset = 0, pos = 0;
50933
- var ptrEnd = 4 * scanLineWidth;
50934
- var scanLineBuffer = new Uint8Array(ptrEnd);
50935
- var numScanLines = height; // read in each successive scanLine
50936
- while(numScanLines > 0 && pos < byteLength){
50937
- var a = buffer[pos++];
50938
- var b = buffer[pos++];
50939
- var c = buffer[pos++];
50940
- var d = buffer[pos++];
50941
- if (a != 2 || b != 2 || c & 0x80 || width < 8 || width > 32767) {
50942
- // this file is not run length encoded
50943
- // read values sequentially
50944
- return buffer;
50945
- }
50946
- if ((c << 8 | d) != scanLineWidth) {
50947
- // eslint-disable-next-line no-throw-literal
50948
- throw "HDR Bad header format, wrong scan line width";
50949
- }
50950
- // read each of the four channels for the scanline into the buffer
50951
- // first red, then green, then blue, then exponent
50952
- var ptr = 0, count = void 0;
50953
- while(ptr < ptrEnd && pos < byteLength){
50954
- count = buffer[pos++];
50955
- var isEncodedRun = count > 128;
50956
- if (isEncodedRun) count -= 128;
50957
- if (0 === count || ptr + count > ptrEnd) {
50958
- throw "HDR Bad Format, bad scanline data (run)";
50959
- }
50960
- if (isEncodedRun) {
50961
- // a (encoded) run of the same value
50962
- var byteValue = buffer[pos++];
50963
- for(var i = 0; i < count; i++){
50964
- scanLineBuffer[ptr++] = byteValue;
50965
- } //ptr += count;
50966
- } else {
50967
- // a literal-run
50968
- scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
50969
- ptr += count;
50970
- pos += count;
50971
- }
50972
- } // now convert data from buffer into rgba
50973
- // first red, then green, then blue, then exponent (alpha)
50974
- var l = scanLineWidth; //scanLine_buffer.byteLength;
50975
- for(var i1 = 0; i1 < l; i1++){
50976
- var off = 0;
50977
- dataRGBA[offset] = scanLineBuffer[i1 + off];
50978
- off += scanLineWidth;
50979
- dataRGBA[offset + 1] = scanLineBuffer[i1 + off];
50980
- off += scanLineWidth;
50981
- dataRGBA[offset + 2] = scanLineBuffer[i1 + off];
50982
- off += scanLineWidth;
50983
- dataRGBA[offset + 3] = scanLineBuffer[i1 + off];
50984
- offset += 4;
50985
- }
50986
- numScanLines--;
50987
- }
50988
- return dataRGBA;
50989
- };
50990
- HDRLoader._RGBEToLinear = function _RGBEToLinear(color) {
50991
- var scaleFactor = Math.pow(2, color.a - 128) / 255;
50992
- color.r *= scaleFactor;
50993
- color.g *= scaleFactor;
50994
- color.b *= scaleFactor;
50995
- color.a = 1;
50996
- };
50997
- HDRLoader._linearToRGBM = function _linearToRGBM(color, maxRange) {
50998
- var maxRGB = Math.max(color.r, Math.max(color.g, color.b));
50999
- var M = Math.min(maxRGB / maxRange, 1);
51000
- M = Math.ceil(M * 255);
51001
- var scaleFactor = 65025 / (M * maxRange); // 255 * (255 / (M * maxRange) )
51002
- color.r *= scaleFactor;
51003
- color.g *= scaleFactor;
51004
- color.b *= scaleFactor;
51005
- color.a *= M;
51006
- };
51007
- return HDRLoader;
51008
- }(Loader);
51009
- HDRLoader._rightBottomBack = new Vector3(1.0, -1.0, -1.0);
51010
- HDRLoader._rightBottomFront = new Vector3(1.0, -1.0, 1.0);
51011
- HDRLoader._rightUpBack = new Vector3(1.0, 1.0, -1.0);
51012
- HDRLoader._rightUpFront = new Vector3(1.0, 1.0, 1.0);
51013
- HDRLoader._leftBottomBack = new Vector3(-1.0, -1.0, -1.0);
51014
- HDRLoader._leftBottomFront = new Vector3(-1.0, -1.0, 1.0);
51015
- HDRLoader._leftUpBack = new Vector3(-1.0, 1.0, -1.0);
51016
- HDRLoader._leftUpFront = new Vector3(-1.0, 1.0, 1.0);
51017
- HDRLoader._faceRight = [
51018
- HDRLoader._rightBottomBack,
51019
- HDRLoader._rightBottomFront,
51020
- HDRLoader._rightUpBack,
51021
- HDRLoader._rightUpFront
51022
- ];
51023
- HDRLoader._faceLeft = [
51024
- HDRLoader._leftBottomFront,
51025
- HDRLoader._leftBottomBack,
51026
- HDRLoader._leftUpFront,
51027
- HDRLoader._leftUpBack
51028
- ];
51029
- HDRLoader._faceUp = [
51030
- HDRLoader._leftBottomFront,
51031
- HDRLoader._rightBottomFront,
51032
- HDRLoader._leftBottomBack,
51033
- HDRLoader._rightBottomBack
51034
- ];
51035
- HDRLoader._faceBottom = [
51036
- HDRLoader._leftUpBack,
51037
- HDRLoader._rightUpBack,
51038
- HDRLoader._leftUpFront,
51039
- HDRLoader._rightUpFront
51040
- ];
51041
- HDRLoader._faceFront = [
51042
- HDRLoader._leftBottomBack,
51043
- HDRLoader._rightBottomBack,
51044
- HDRLoader._leftUpBack,
51045
- HDRLoader._rightUpBack
51046
- ];
51047
- HDRLoader._faceBack = [
51048
- HDRLoader._rightBottomFront,
51049
- HDRLoader._leftBottomFront,
51050
- HDRLoader._rightUpFront,
51051
- HDRLoader._leftUpFront
51052
- ];
51053
- HDRLoader._tempVector3 = new Vector3();
51054
- HDRLoader._temp2Vector3 = new Vector3();
51055
- HDRLoader._temp3Vector3 = new Vector3();
51056
- HDRLoader._temp4Vector3 = new Vector3();
51057
- HDRLoader._temp5Vector3 = new Vector3();
51058
- HDRLoader = __decorate([
51059
- resourceLoader(AssetType.HDR, [
51060
- "hdr"
51061
- ])
51062
- ], HDRLoader);
51063
- /**
51064
- * @internal
51065
- */ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51066
- _inherits(HDRContentRestorer, ContentRestorer);
51067
- function HDRContentRestorer(resource, url, requestConfig) {
51068
- var _this;
51069
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
51070
- return _this;
51071
- }
51072
- var _proto = HDRContentRestorer.prototype;
51073
- _proto.restoreContent = function restoreContent() {
51074
- var _this = this;
51075
- return new AssetPromise(function(resolve, reject) {
51076
- var resource = _this.resource;
51077
- var engine = resource.engine;
51078
- engine.resourceManager // @ts-ignore
51079
- ._request(_this.url, _this.requestConfig).then(function(buffer) {
51080
- HDRLoader._setTextureByBuffer(engine, buffer, resource);
51081
- resolve(resource);
51082
- }).catch(reject);
51083
- });
51084
- };
51085
- return HDRContentRestorer;
51086
- }(ContentRestorer);
51087
50715
  var JSONLoader = /*#__PURE__*/ function(Loader) {
51088
50716
  _inherits(JSONLoader, Loader);
51089
50717
  function JSONLoader() {
@@ -51479,7 +51107,7 @@
51479
51107
  }(Loader);
51480
51108
  MaterialLoader = __decorate([
51481
51109
  resourceLoader(AssetType.Material, [
51482
- "json"
51110
+ "mat"
51483
51111
  ])
51484
51112
  ], MaterialLoader);
51485
51113
  var MeshLoader = /*#__PURE__*/ function(Loader) {
@@ -51599,7 +51227,7 @@
51599
51227
  }(Loader);
51600
51228
  ProjectLoader = __decorate([
51601
51229
  resourceLoader(AssetType.Project, [
51602
- "proj"
51230
+ "project"
51603
51231
  ], false)
51604
51232
  ], ProjectLoader);
51605
51233
  var SourceFontLoader = /*#__PURE__*/ function(Loader) {
@@ -51815,27 +51443,20 @@
51815
51443
  "txt"
51816
51444
  ])
51817
51445
  ], TextLoader);
51818
- /**
51819
- * @internal
51820
- */ var Texture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51821
- _inherits(Texture2DContentRestorer, ContentRestorer);
51822
- function Texture2DContentRestorer(resource, url, requestConfig) {
51823
- var _this;
51824
- _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
51825
- return _this;
51826
- }
51827
- var _proto = Texture2DContentRestorer.prototype;
51828
- _proto.restoreContent = function restoreContent() {
51829
- var _this = this;
51830
- return request(this.url, this.requestConfig).then(function(image) {
51831
- var resource = _this.resource;
51832
- resource.setImageSource(image);
51833
- resource.generateMipmaps();
51834
- return resource;
51835
- });
51836
- };
51837
- return Texture2DContentRestorer;
51838
- }(ContentRestorer);
51446
+ function loadImageFromBuffer(buffer) {
51447
+ return new AssetPromise(function(resolve, reject) {
51448
+ var blob = new Blob([
51449
+ buffer
51450
+ ]);
51451
+ var img = new Image();
51452
+ img.onload = function() {
51453
+ URL.revokeObjectURL(img.src);
51454
+ resolve(img);
51455
+ };
51456
+ img.onerror = reject;
51457
+ img.src = URL.createObjectURL(blob);
51458
+ });
51459
+ }
51839
51460
  var Texture2DLoader = /*#__PURE__*/ function(Loader) {
51840
51461
  _inherits(Texture2DLoader, Loader);
51841
51462
  function Texture2DLoader() {
@@ -51843,36 +51464,48 @@
51843
51464
  }
51844
51465
  var _proto = Texture2DLoader.prototype;
51845
51466
  _proto.load = function load(item, resourceManager) {
51467
+ var _this = this;
51468
+ var url = item.url;
51469
+ var requestConfig = _extends({}, item, {
51470
+ type: "arraybuffer"
51471
+ });
51846
51472
  return new AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
51847
- var url = item.url;
51848
- var requestConfig = _extends({}, item, {
51849
- type: "image"
51850
- });
51851
51473
  resourceManager // @ts-ignore
51852
- ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(image) {
51853
- var _item_params;
51854
- 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;
51855
- var width = image.width, height = image.height;
51856
- var engine = resourceManager.engine;
51857
- var generateMipmap = TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
51858
- var texture = new Texture2D(engine, width, height, format, generateMipmap, isSRGBColorSpace);
51859
- texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
51860
- texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
51861
- texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
51862
- texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
51863
- texture.setImageSource(image);
51864
- generateMipmap && texture.generateMipmaps();
51865
- if (url.indexOf("data:") !== 0) {
51866
- var index = url.lastIndexOf("/");
51867
- texture.name = url.substring(index + 1);
51474
+ ._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
51475
+ if (FileHeader.checkMagic(buffer)) {
51476
+ decode(buffer, resourceManager.engine).then(function(texture) {
51477
+ resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
51478
+ resolve(texture);
51479
+ }, reject);
51480
+ } else {
51481
+ loadImageFromBuffer(buffer).then(function(img) {
51482
+ var texture = _this._createTexture(img, item, resourceManager);
51483
+ resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
51484
+ resolve(texture);
51485
+ }, reject);
51868
51486
  }
51869
- resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
51870
- resolve(texture);
51871
- }).catch(function(e) {
51872
- reject(e);
51873
- });
51487
+ }).catch(reject);
51874
51488
  });
51875
51489
  };
51490
+ _proto._createTexture = function _createTexture(img, item, resourceManager) {
51491
+ var _item_params;
51492
+ 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;
51493
+ var width = img.width, height = img.height;
51494
+ var engine = resourceManager.engine;
51495
+ var generateMipmap = TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
51496
+ var texture = new Texture2D(engine, width, height, format, generateMipmap, isSRGBColorSpace);
51497
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
51498
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
51499
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
51500
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
51501
+ texture.setImageSource(img);
51502
+ generateMipmap && texture.generateMipmaps();
51503
+ var url = item.url;
51504
+ if (url.indexOf("data:") !== 0) {
51505
+ texture.name = url.substring(url.lastIndexOf("/") + 1);
51506
+ }
51507
+ return texture;
51508
+ };
51876
51509
  return Texture2DLoader;
51877
51510
  }(Loader);
51878
51511
  Texture2DLoader = __decorate([
@@ -51880,38 +51513,317 @@
51880
51513
  "png",
51881
51514
  "jpg",
51882
51515
  "webp",
51883
- "jpeg"
51516
+ "jpeg",
51517
+ "tex"
51884
51518
  ])
51885
51519
  ], Texture2DLoader);
51886
- /**
51887
- * @internal
51888
- */ var TextureCubeContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51889
- _inherits(TextureCubeContentRestorer, ContentRestorer);
51890
- function TextureCubeContentRestorer(resource, urls, requestConfig) {
51520
+ var Texture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51521
+ _inherits(Texture2DContentRestorer, ContentRestorer);
51522
+ function Texture2DContentRestorer(resource, url, requestConfig) {
51891
51523
  var _this;
51892
- _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
51524
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
51893
51525
  return _this;
51894
51526
  }
51895
- var _proto = TextureCubeContentRestorer.prototype;
51527
+ var _proto = Texture2DContentRestorer.prototype;
51896
51528
  _proto.restoreContent = function restoreContent() {
51897
- var _this = this;
51898
- return new AssetPromise(function(resolve, reject) {
51899
- Promise.all(_this.urls.map(function(url) {
51900
- return request(url, _this.requestConfig);
51901
- })).then(function(images) {
51902
- var resource = _this.resource;
51903
- for(var faceIndex = 0; faceIndex < 6; faceIndex++){
51904
- resource.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
51905
- }
51906
- resource.generateMipmaps();
51907
- resolve(resource);
51908
- }).catch(function(e) {
51909
- reject(e);
51910
- });
51529
+ var texture = this.resource;
51530
+ var engine = texture.engine;
51531
+ return engine.resourceManager // @ts-ignore
51532
+ ._request(this.url, this.requestConfig).then(function(buffer) {
51533
+ if (FileHeader.checkMagic(buffer)) {
51534
+ return decode(buffer, engine, texture);
51535
+ } else {
51536
+ return loadImageFromBuffer(buffer).then(function(img) {
51537
+ texture.setImageSource(img);
51538
+ texture.generateMipmaps();
51539
+ return texture;
51540
+ });
51541
+ }
51911
51542
  });
51912
51543
  };
51913
- return TextureCubeContentRestorer;
51544
+ return Texture2DContentRestorer;
51914
51545
  }(ContentRestorer);
51546
+ /**
51547
+ * @internal
51548
+ * HDR panorama to cubemap decoder.
51549
+ */ var HDRDecoder = /*#__PURE__*/ function() {
51550
+ function HDRDecoder() {}
51551
+ HDRDecoder.parseHeader = function parseHeader(uint8array) {
51552
+ var line = this._readStringLine(uint8array, 0);
51553
+ if (line[0] !== "#" || line[1] !== "?") {
51554
+ throw "HDRDecoder: invalid file header";
51555
+ }
51556
+ var endOfHeader = false;
51557
+ var findFormat = false;
51558
+ var lineIndex = 0;
51559
+ do {
51560
+ lineIndex += line.length + 1;
51561
+ line = this._readStringLine(uint8array, lineIndex);
51562
+ if (line === "FORMAT=32-bit_rle_rgbe") findFormat = true;
51563
+ else if (line.length === 0) endOfHeader = true;
51564
+ }while (!endOfHeader);
51565
+ if (!findFormat) {
51566
+ throw "HDRDecoder: unsupported format, expected 32-bit_rle_rgbe";
51567
+ }
51568
+ lineIndex += line.length + 1;
51569
+ line = this._readStringLine(uint8array, lineIndex);
51570
+ var match = /^\-Y (.*) \+X (.*)$/g.exec(line);
51571
+ if (!match || match.length < 3) {
51572
+ throw "HDRDecoder: missing image size, only -Y +X layout is supported";
51573
+ }
51574
+ var width = parseInt(match[2]);
51575
+ var height = parseInt(match[1]);
51576
+ if (width < 8 || width > 0x7fff) {
51577
+ throw "HDRDecoder: unsupported image width, must be between 8 and 32767";
51578
+ }
51579
+ return {
51580
+ height: height,
51581
+ width: width,
51582
+ dataPosition: lineIndex + line.length + 1
51583
+ };
51584
+ };
51585
+ HDRDecoder.decodeFaces = function decodeFaces(bufferArray, header, onFace) {
51586
+ var width = header.width, height = header.height, dataPosition = header.dataPosition;
51587
+ var cubeSize = height >> 1;
51588
+ var pixels = HDRDecoder._readPixels(bufferArray.subarray(dataPosition), width, height);
51589
+ var faces = HDRDecoder._faces;
51590
+ var faceBuffer = new Uint16Array(cubeSize * cubeSize * 4);
51591
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
51592
+ HDRDecoder._createCubemapData(cubeSize, faces[faceIndex], pixels, width, height, faceBuffer);
51593
+ onFace(faceIndex, faceBuffer);
51594
+ }
51595
+ };
51596
+ HDRDecoder._generateFloat2HalfTables = function _generateFloat2HalfTables() {
51597
+ var baseTable = new Uint32Array(512);
51598
+ var shiftTable = new Uint32Array(512);
51599
+ for(var i = 0; i < 256; ++i){
51600
+ var e = i - 127;
51601
+ if (e < -27) {
51602
+ baseTable[i] = 0x0000;
51603
+ baseTable[i | 0x100] = 0x8000;
51604
+ shiftTable[i] = 24;
51605
+ shiftTable[i | 0x100] = 24;
51606
+ } else if (e < -14) {
51607
+ baseTable[i] = 0x0400 >> -e - 14;
51608
+ baseTable[i | 0x100] = 0x0400 >> -e - 14 | 0x8000;
51609
+ shiftTable[i] = -e - 1;
51610
+ shiftTable[i | 0x100] = -e - 1;
51611
+ } else if (e <= 15) {
51612
+ baseTable[i] = e + 15 << 10;
51613
+ baseTable[i | 0x100] = e + 15 << 10 | 0x8000;
51614
+ shiftTable[i] = 13;
51615
+ shiftTable[i | 0x100] = 13;
51616
+ } else if (e < 128) {
51617
+ baseTable[i] = 0x7c00;
51618
+ baseTable[i | 0x100] = 0xfc00;
51619
+ shiftTable[i] = 24;
51620
+ shiftTable[i | 0x100] = 24;
51621
+ } else {
51622
+ baseTable[i] = 0x7c00;
51623
+ baseTable[i | 0x100] = 0xfc00;
51624
+ shiftTable[i] = 13;
51625
+ shiftTable[i | 0x100] = 13;
51626
+ }
51627
+ }
51628
+ return {
51629
+ baseTable: baseTable,
51630
+ shiftTable: shiftTable
51631
+ };
51632
+ };
51633
+ HDRDecoder._createCubemapData = function _createCubemapData(texSize, face, pixels, inputWidth, inputHeight, facePixels) {
51634
+ var invSize = 1 / texSize;
51635
+ var rotDX1X = (face[3] - face[0]) * invSize;
51636
+ var rotDX1Y = (face[4] - face[1]) * invSize;
51637
+ var rotDX1Z = (face[5] - face[2]) * invSize;
51638
+ var rotDX2X = (face[9] - face[6]) * invSize;
51639
+ var rotDX2Y = (face[10] - face[7]) * invSize;
51640
+ var rotDX2Z = (face[11] - face[8]) * invSize;
51641
+ var floatView = HDRDecoder._floatView;
51642
+ var uint32View = HDRDecoder._uint32View;
51643
+ var _HDRDecoder__float2HalfTables = HDRDecoder._float2HalfTables, baseTable = _HDRDecoder__float2HalfTables.baseTable, shiftTable = _HDRDecoder__float2HalfTables.shiftTable;
51644
+ var one = HDRDecoder._one;
51645
+ var fy = 0;
51646
+ for(var y = 0; y < texSize; y++){
51647
+ var xv1X = face[0], xv1Y = face[1], xv1Z = face[2];
51648
+ var xv2X = face[6], xv2Y = face[7], xv2Z = face[8];
51649
+ for(var x = 0; x < texSize; x++){
51650
+ var dirX = xv1X + (xv2X - xv1X) * fy;
51651
+ var dirY = xv1Y + (xv2Y - xv1Y) * fy;
51652
+ var dirZ = xv1Z + (xv2Z - xv1Z) * fy;
51653
+ var invLen = 1 / Math.sqrt(dirX * dirX + dirY * dirY + dirZ * dirZ);
51654
+ dirX *= invLen;
51655
+ dirY *= invLen;
51656
+ dirZ *= invLen;
51657
+ var px = Math.round((Math.atan2(dirZ, dirX) / Math.PI * 0.5 + 0.5) * inputWidth);
51658
+ if (px < 0) px = 0;
51659
+ else if (px >= inputWidth) px = inputWidth - 1;
51660
+ var py = Math.round(Math.acos(dirY) / Math.PI * inputHeight);
51661
+ if (py < 0) py = 0;
51662
+ else if (py >= inputHeight) py = inputHeight - 1;
51663
+ var srcIndex = (inputHeight - py - 1) * inputWidth * 4 + px * 4;
51664
+ var scaleFactor = Math.pow(2, pixels[srcIndex + 3] - 128) / 255;
51665
+ var dstIndex = y * texSize * 4 + x * 4;
51666
+ for(var c = 0; c < 3; c++){
51667
+ floatView[0] = pixels[srcIndex + c] * scaleFactor;
51668
+ var f = uint32View[0];
51669
+ var e = f >> 23 & 0x1ff;
51670
+ facePixels[dstIndex + c] = baseTable[e] + ((f & 0x007fffff) >> shiftTable[e]);
51671
+ }
51672
+ facePixels[dstIndex + 3] = one;
51673
+ xv1X += rotDX1X;
51674
+ xv1Y += rotDX1Y;
51675
+ xv1Z += rotDX1Z;
51676
+ xv2X += rotDX2X;
51677
+ xv2Y += rotDX2Y;
51678
+ xv2Z += rotDX2Z;
51679
+ }
51680
+ fy += invSize;
51681
+ }
51682
+ };
51683
+ HDRDecoder._readStringLine = function _readStringLine(uint8array, startIndex) {
51684
+ var line = "";
51685
+ for(var i = startIndex, n = uint8array.length; i < n; i++){
51686
+ var character = String.fromCharCode(uint8array[i]);
51687
+ if (character === "\n") break;
51688
+ line += character;
51689
+ }
51690
+ return line;
51691
+ };
51692
+ HDRDecoder._readPixels = function _readPixels(buffer, width, height) {
51693
+ var byteLength = buffer.byteLength;
51694
+ var dataRGBA = new Uint8Array(4 * width * height);
51695
+ var offset = 0;
51696
+ var pos = 0;
51697
+ var ptrEnd = 4 * width;
51698
+ var scanLineBuffer = new Uint8Array(ptrEnd);
51699
+ var numScanLines = height;
51700
+ while(numScanLines > 0 && pos < byteLength){
51701
+ var a = buffer[pos++];
51702
+ var b = buffer[pos++];
51703
+ var c = buffer[pos++];
51704
+ var d = buffer[pos++];
51705
+ if (a !== 2 || b !== 2 || c & 0x80 || width < 8 || width > 32767) return buffer;
51706
+ if ((c << 8 | d) !== width) throw "HDRDecoder: wrong scanline width";
51707
+ var ptr = 0;
51708
+ while(ptr < ptrEnd && pos < byteLength){
51709
+ var count = buffer[pos++];
51710
+ var isEncodedRun = count > 128;
51711
+ if (isEncodedRun) count -= 128;
51712
+ if (count === 0 || ptr + count > ptrEnd) throw "HDRDecoder: bad scanline data";
51713
+ if (isEncodedRun) {
51714
+ var byteValue = buffer[pos++];
51715
+ for(var i = 0; i < count; i++)scanLineBuffer[ptr++] = byteValue;
51716
+ } else {
51717
+ scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
51718
+ ptr += count;
51719
+ pos += count;
51720
+ }
51721
+ }
51722
+ for(var i1 = 0; i1 < width; i1++, offset += 4){
51723
+ dataRGBA[offset] = scanLineBuffer[i1];
51724
+ dataRGBA[offset + 1] = scanLineBuffer[i1 + width];
51725
+ dataRGBA[offset + 2] = scanLineBuffer[i1 + width * 2];
51726
+ dataRGBA[offset + 3] = scanLineBuffer[i1 + width * 3];
51727
+ }
51728
+ numScanLines--;
51729
+ }
51730
+ return dataRGBA;
51731
+ };
51732
+ return HDRDecoder;
51733
+ }();
51734
+ // Float32 to Float16 lookup tables (http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf)
51735
+ HDRDecoder._float2HalfTables = HDRDecoder._generateFloat2HalfTables();
51736
+ HDRDecoder._floatView = new Float32Array(1);
51737
+ HDRDecoder._uint32View = new Uint32Array(HDRDecoder._floatView.buffer);
51738
+ HDRDecoder._one = 0x3c00 // Half float for 1.0
51739
+ ;
51740
+ // prettier-ignore
51741
+ HDRDecoder._faces = [
51742
+ /* +X */ [
51743
+ 1,
51744
+ -1,
51745
+ -1,
51746
+ 1,
51747
+ -1,
51748
+ 1,
51749
+ 1,
51750
+ 1,
51751
+ -1,
51752
+ 1,
51753
+ 1,
51754
+ 1
51755
+ ],
51756
+ /* -X */ [
51757
+ -1,
51758
+ -1,
51759
+ 1,
51760
+ -1,
51761
+ -1,
51762
+ -1,
51763
+ -1,
51764
+ 1,
51765
+ 1,
51766
+ -1,
51767
+ 1,
51768
+ -1
51769
+ ],
51770
+ /* +Y */ [
51771
+ -1,
51772
+ -1,
51773
+ 1,
51774
+ 1,
51775
+ -1,
51776
+ 1,
51777
+ -1,
51778
+ -1,
51779
+ -1,
51780
+ 1,
51781
+ -1,
51782
+ -1
51783
+ ],
51784
+ /* -Y */ [
51785
+ -1,
51786
+ 1,
51787
+ -1,
51788
+ 1,
51789
+ 1,
51790
+ -1,
51791
+ -1,
51792
+ 1,
51793
+ 1,
51794
+ 1,
51795
+ 1,
51796
+ 1
51797
+ ],
51798
+ /* +Z */ [
51799
+ -1,
51800
+ -1,
51801
+ -1,
51802
+ 1,
51803
+ -1,
51804
+ -1,
51805
+ -1,
51806
+ 1,
51807
+ -1,
51808
+ 1,
51809
+ 1,
51810
+ -1
51811
+ ],
51812
+ /* -Z */ [
51813
+ 1,
51814
+ -1,
51815
+ 1,
51816
+ -1,
51817
+ -1,
51818
+ 1,
51819
+ 1,
51820
+ 1,
51821
+ 1,
51822
+ -1,
51823
+ 1,
51824
+ 1
51825
+ ]
51826
+ ];
51915
51827
  var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
51916
51828
  _inherits(TextureCubeLoader, Loader);
51917
51829
  function TextureCubeLoader() {
@@ -51919,6 +51831,44 @@
51919
51831
  }
51920
51832
  var _proto = TextureCubeLoader.prototype;
51921
51833
  _proto.load = function load(item, resourceManager) {
51834
+ if (item.urls) {
51835
+ return this._loadCubeFaces(item, resourceManager);
51836
+ } else {
51837
+ return this._loadHDR(item, resourceManager);
51838
+ }
51839
+ };
51840
+ _proto._loadHDR = function _loadHDR(item, resourceManager) {
51841
+ return new AssetPromise(function(resolve, reject) {
51842
+ var engine = resourceManager.engine;
51843
+ var url = item.url;
51844
+ var requestConfig = _extends({}, item, {
51845
+ type: "arraybuffer"
51846
+ });
51847
+ resourceManager // @ts-ignore
51848
+ ._request(url, requestConfig).then(function(buffer) {
51849
+ if (!SystemInfo.supportsTextureFormat(engine, TextureFormat.R16G16B16A16)) {
51850
+ reject(new Error("TextureCubeLoader: HDR texture requires half float support."));
51851
+ return;
51852
+ }
51853
+ var _item_params;
51854
+ 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;
51855
+ var bufferArray = new Uint8Array(buffer);
51856
+ var header = HDRDecoder.parseHeader(bufferArray);
51857
+ var texture = new TextureCube(engine, header.height >> 1, TextureFormat.R16G16B16A16, mipmap, false);
51858
+ HDRDecoder.decodeFaces(bufferArray, header, function(faceIndex, data) {
51859
+ texture.setPixelBuffer(TextureCubeFace.PositiveX + faceIndex, data, 0);
51860
+ });
51861
+ texture.generateMipmaps();
51862
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
51863
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
51864
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
51865
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
51866
+ resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
51867
+ resolve(texture);
51868
+ }).catch(reject);
51869
+ });
51870
+ };
51871
+ _proto._loadCubeFaces = function _loadCubeFaces(item, resourceManager) {
51922
51872
  return new AssetPromise(function(resolve, reject) {
51923
51873
  var urls = item.urls;
51924
51874
  var requestConfig = _extends({}, item, {
@@ -51932,7 +51882,7 @@
51932
51882
  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;
51933
51883
  var _images_ = images[0], width = _images_.width, height = _images_.height;
51934
51884
  if (width !== height) {
51935
- console.error("The cube texture must have the same width and height");
51885
+ reject(new Error("The cube texture must have the same width and height"));
51936
51886
  return;
51937
51887
  }
51938
51888
  var engine = resourceManager.engine;
@@ -51945,21 +51895,70 @@
51945
51895
  for(var faceIndex = 0; faceIndex < 6; faceIndex++){
51946
51896
  texture.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
51947
51897
  }
51948
- generateMipmap && texture.generateMipmaps();
51949
- resourceManager.addContentRestorer(new TextureCubeContentRestorer(texture, urls, requestConfig));
51898
+ texture.generateMipmaps();
51899
+ resourceManager.addContentRestorer(new CubeFaceContentRestorer(texture, urls, requestConfig));
51950
51900
  resolve(texture);
51951
- }).catch(function(e) {
51952
- reject(e);
51953
- });
51901
+ }).catch(reject);
51954
51902
  });
51955
51903
  };
51956
51904
  return TextureCubeLoader;
51957
51905
  }(Loader);
51958
51906
  TextureCubeLoader = __decorate([
51959
51907
  resourceLoader(AssetType.TextureCube, [
51960
- ""
51908
+ "texCube",
51909
+ "hdr"
51961
51910
  ])
51962
51911
  ], TextureCubeLoader);
51912
+ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51913
+ _inherits(HDRContentRestorer, ContentRestorer);
51914
+ function HDRContentRestorer(resource, url, requestConfig) {
51915
+ var _this;
51916
+ _this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
51917
+ return _this;
51918
+ }
51919
+ var _proto = HDRContentRestorer.prototype;
51920
+ _proto.restoreContent = function restoreContent() {
51921
+ var _this = this;
51922
+ return new AssetPromise(function(resolve, reject) {
51923
+ var resource = _this.resource;
51924
+ resource.engine.resourceManager // @ts-ignore
51925
+ ._request(_this.url, _this.requestConfig).then(function(buffer) {
51926
+ var bufferArray = new Uint8Array(buffer);
51927
+ HDRDecoder.decodeFaces(bufferArray, HDRDecoder.parseHeader(bufferArray), function(faceIndex, data) {
51928
+ resource.setPixelBuffer(TextureCubeFace.PositiveX + faceIndex, data, 0);
51929
+ });
51930
+ resource.generateMipmaps();
51931
+ resolve(resource);
51932
+ }).catch(reject);
51933
+ });
51934
+ };
51935
+ return HDRContentRestorer;
51936
+ }(ContentRestorer);
51937
+ var CubeFaceContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
51938
+ _inherits(CubeFaceContentRestorer, ContentRestorer);
51939
+ function CubeFaceContentRestorer(resource, urls, requestConfig) {
51940
+ var _this;
51941
+ _this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
51942
+ return _this;
51943
+ }
51944
+ var _proto = CubeFaceContentRestorer.prototype;
51945
+ _proto.restoreContent = function restoreContent() {
51946
+ var _this = this;
51947
+ return new AssetPromise(function(resolve, reject) {
51948
+ Promise.all(_this.urls.map(function(url) {
51949
+ return request(url, _this.requestConfig);
51950
+ })).then(function(images) {
51951
+ var resource = _this.resource;
51952
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
51953
+ resource.setImageSource(TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
51954
+ }
51955
+ resource.generateMipmaps();
51956
+ resolve(resource);
51957
+ }).catch(reject);
51958
+ });
51959
+ };
51960
+ return CubeFaceContentRestorer;
51961
+ }(ContentRestorer);
51963
51962
  var AudioLoader = /*#__PURE__*/ function(Loader) {
51964
51963
  _inherits(AudioLoader, Loader);
51965
51964
  function AudioLoader() {
@@ -52105,7 +52104,7 @@
52105
52104
  }(Loader);
52106
52105
  PhysicsMaterialLoader = __decorate([
52107
52106
  resourceLoader(AssetType.PhysicsMaterial, [
52108
- "mesh"
52107
+ "physMat"
52109
52108
  ])
52110
52109
  ], PhysicsMaterialLoader);
52111
52110
  var SceneLoader = /*#__PURE__*/ function(Loader) {
@@ -52757,7 +52756,7 @@
52757
52756
  ], EXT_texture_webp);
52758
52757
 
52759
52758
  //@ts-ignore
52760
- var version = "2.0.0-alpha.5";
52759
+ var version = "2.0.0-alpha.6";
52761
52760
  console.log("Galacean Engine Version: " + version);
52762
52761
  for(var key in CoreObjects){
52763
52762
  Loader.registerClass(key, CoreObjects[key]);