@galacean/engine-core 1.2.0-beta.5 → 1.2.0-beta.7

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.
Files changed (53) hide show
  1. package/dist/main.js +248 -157
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +248 -157
  4. package/dist/module.js +249 -158
  5. package/dist/module.js.map +1 -1
  6. package/package.json +3 -3
  7. package/types/2d/text/CharRenderInfo.d.ts +1 -0
  8. package/types/Camera.d.ts +7 -4
  9. package/types/DisorderedArray.d.ts +2 -2
  10. package/types/Entity.d.ts +4 -1
  11. package/types/RenderPipeline/BatchUtils.d.ts +1 -0
  12. package/types/RenderPipeline/BatcherManager.d.ts +1 -0
  13. package/types/RenderPipeline/DynamicGeometryData.d.ts +1 -0
  14. package/types/RenderPipeline/DynamicGeometryDataManager.d.ts +1 -0
  15. package/types/RenderPipeline/MaskManager.d.ts +1 -0
  16. package/types/RenderPipeline/PrimitiveChunk.d.ts +1 -0
  17. package/types/RenderPipeline/PrimitiveChunkManager.d.ts +1 -0
  18. package/types/RenderPipeline/RenderData2D.d.ts +14 -0
  19. package/types/RenderPipeline/SubPrimitiveChunk.d.ts +1 -0
  20. package/types/RenderPipeline/SubRenderElement.d.ts +22 -0
  21. package/types/RenderPipeline/VertexArea.d.ts +1 -0
  22. package/types/RenderPipeline/enums/ForceUploadShaderDataFlag.d.ts +15 -0
  23. package/types/RenderPipeline/enums/RenderDataUsage.d.ts +13 -0
  24. package/types/animation/AnimatorCondition.d.ts +13 -0
  25. package/types/animation/AnimatorControllerParameter.d.ts +10 -0
  26. package/types/animation/AnimatorStateTransition.d.ts +51 -0
  27. package/types/asset/ResourceManager.d.ts +3 -1
  28. package/types/enums/ReplacementFailureStrategy.d.ts +9 -0
  29. package/types/index.d.ts +1 -0
  30. package/types/input/pointer/PointerEvent.d.ts +4 -0
  31. package/types/input/pointer/PointerEventType.d.ts +7 -0
  32. package/types/postProcess/PostProcessManager.d.ts +1 -0
  33. package/types/postProcess/effects/BloomEffect.d.ts +94 -0
  34. package/types/postProcess/effects/TonemappingEffect.d.ts +35 -0
  35. package/types/postProcess/effects/index.d.ts +2 -0
  36. package/types/postProcess/index.d.ts +3 -0
  37. package/types/ui/Image.d.ts +38 -0
  38. package/types/ui/RedBlackTree.d.ts +2 -0
  39. package/types/ui/UICanvas.d.ts +55 -0
  40. package/types/ui/UIRenderer.d.ts +14 -0
  41. package/types/ui/UITransform.d.ts +20 -0
  42. package/types/ui/enums/BlockingObjects.d.ts +6 -0
  43. package/types/ui/enums/CanvasRenderMode.d.ts +8 -0
  44. package/types/ui/enums/ResolutionAdaptationStrategy.d.ts +10 -0
  45. package/types/ui/index.d.ts +6 -0
  46. package/types/utils/ClearableObjectPool.d.ts +16 -0
  47. package/types/utils/ObjectPool.d.ts +16 -0
  48. package/types/utils/Pool.d.ts +12 -0
  49. package/types/utils/ReturnableObjectPool.d.ts +16 -0
  50. package/types/utils/index.d.ts +3 -0
  51. package/types/Deprecated.d.ts +0 -101
  52. package/types/texture/enums/PixelFormat.d.ts +0 -73
  53. /package/types/{RenderPipeline/batcher/MeshBuffer.d.ts → 2d/assembler/ISpriteAssembler.d.ts} +0 -0
package/dist/module.js CHANGED
@@ -3980,6 +3980,7 @@ var ShaderFactory = /*#__PURE__*/ function() {
3980
3980
  var program = this._glProgram;
3981
3981
  var uniformInfos = this._getUniformInfos();
3982
3982
  var attributeInfos = this._getAttributeInfos();
3983
+ var basicResources = this._engine._basicResources;
3983
3984
  uniformInfos.forEach(function(param) {
3984
3985
  var name = param.name, size = param.size, type = param.type;
3985
3986
  var shaderUniform = new ShaderUniform(_this._engine);
@@ -4073,16 +4074,16 @@ var ShaderFactory = /*#__PURE__*/ function() {
4073
4074
  var defaultTexture;
4074
4075
  switch(type){
4075
4076
  case gl.SAMPLER_2D:
4076
- defaultTexture = _this._engine._magentaTexture2D;
4077
+ defaultTexture = basicResources.whiteTexture2D;
4077
4078
  break;
4078
4079
  case gl.SAMPLER_CUBE:
4079
- defaultTexture = _this._engine._magentaTextureCube;
4080
+ defaultTexture = basicResources.whiteTextureCube;
4080
4081
  break;
4081
4082
  case gl.UNSIGNED_INT_SAMPLER_2D:
4082
- defaultTexture = _this._engine._uintMagentaTexture2D;
4083
+ defaultTexture = basicResources.uintWhiteTexture2D;
4083
4084
  break;
4084
4085
  case gl.SAMPLER_2D_ARRAY:
4085
- defaultTexture = _this._engine._magentaTexture2DArray;
4086
+ defaultTexture = basicResources.whiteTexture2DArray;
4086
4087
  break;
4087
4088
  case gl.SAMPLER_2D_SHADOW:
4088
4089
  defaultTexture = _this._engine._depthTexture2D;
@@ -6412,14 +6413,15 @@ SlicedSpriteAssembler = __decorate([
6412
6413
  }
6413
6414
  this._endLoop(swapFn);
6414
6415
  };
6415
- _proto.forEachAndClean = function forEachAndClean(callbackFn) {
6416
+ _proto.forEachAndClean = function forEachAndClean(callbackFn, swapFn) {
6416
6417
  this._startLoop();
6418
+ var preEnd = this.length;
6417
6419
  var elements = this._elements;
6418
- for(var i = 0, n = this.length; i < n; i++){
6420
+ for(var i = 0, n = preEnd; i < n; i++){
6419
6421
  var element = elements[i];
6420
6422
  element && callbackFn(element);
6421
6423
  }
6422
- this._endLoopAndClear();
6424
+ this._endLoopAndClean(preEnd, elements, swapFn);
6423
6425
  };
6424
6426
  _proto.sort = function sort(compareFn) {
6425
6427
  Utils._quickSort(this._elements, 0, this.length, compareFn);
@@ -6452,9 +6454,17 @@ SlicedSpriteAssembler = __decorate([
6452
6454
  this._blankCount = 0;
6453
6455
  }
6454
6456
  };
6455
- _proto._endLoopAndClear = function _endLoopAndClear() {
6457
+ _proto._endLoopAndClean = function _endLoopAndClean(preEnd, elements, swapFn) {
6458
+ var index = 0;
6459
+ for(var i = preEnd, n = this.length; i < n; i++){
6460
+ var element = elements[i];
6461
+ if (!element) continue;
6462
+ elements[index] = element;
6463
+ swapFn(element, index);
6464
+ index++;
6465
+ }
6456
6466
  this._isLooping = false;
6457
- this.length = 0;
6467
+ this.length = index;
6458
6468
  this._blankCount = 0;
6459
6469
  };
6460
6470
  return DisorderedArray;
@@ -10966,6 +10976,38 @@ var PrimitiveType;
10966
10976
  PrimitiveMesh._spherePoleIdx = 0;
10967
10977
  })();
10968
10978
 
10979
+ function _is_native_reflect_construct() {
10980
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
10981
+ if (Reflect.construct.sham) return false;
10982
+ if (typeof Proxy === "function") return true;
10983
+
10984
+ try {
10985
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
10986
+
10987
+ return true;
10988
+ } catch (e) {
10989
+ return false;
10990
+ }
10991
+ }
10992
+
10993
+ function _construct(Parent, args, Class) {
10994
+ if (_is_native_reflect_construct()) _construct = Reflect.construct;
10995
+ else {
10996
+ _construct = function construct(Parent, args, Class) {
10997
+ var a = [null];
10998
+ a.push.apply(a, args);
10999
+ var Constructor = Function.bind.apply(Parent, a);
11000
+ var instance = new Constructor();
11001
+
11002
+ if (Class) _set_prototype_of(instance, Class.prototype);
11003
+
11004
+ return instance;
11005
+ };
11006
+ }
11007
+
11008
+ return _construct.apply(null, arguments);
11009
+ }
11010
+
10969
11011
  /**
10970
11012
  * Layer, used for bit operations.
10971
11013
  */ var Layer;
@@ -11053,10 +11095,14 @@ var ComponentCloner = /*#__PURE__*/ function() {
11053
11095
  /**
11054
11096
  * Add component based on the component type.
11055
11097
  * @param type - The type of the component
11098
+ * @param args - The arguments of the component
11056
11099
  * @returns The component which has been added
11057
11100
  */ _proto.addComponent = function addComponent(type) {
11101
+ for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
11102
+ args[_key - 1] = arguments[_key];
11103
+ }
11058
11104
  ComponentsDependencies._addCheck(this, type);
11059
- var component = new type(this);
11105
+ var component = _construct(type, [].concat(this, args));
11060
11106
  this._components.push(component);
11061
11107
  component._setActive(true, ActiveChangeFlag.All);
11062
11108
  return component;
@@ -11225,7 +11271,7 @@ var ComponentCloner = /*#__PURE__*/ function() {
11225
11271
  * Clone this entity include children and components.
11226
11272
  * @returns Cloned entity
11227
11273
  */ _proto.clone = function clone() {
11228
- var cloneEntity = this._createCloneEntity(this);
11274
+ var cloneEntity = this._createCloneEntity();
11229
11275
  this._parseCloneEntity(this, cloneEntity, this, cloneEntity, new Map());
11230
11276
  return cloneEntity;
11231
11277
  };
@@ -11235,23 +11281,23 @@ var ComponentCloner = /*#__PURE__*/ function() {
11235
11281
  this._isTemplate = true;
11236
11282
  this._templateResource = templateResource;
11237
11283
  };
11238
- _proto._createCloneEntity = function _createCloneEntity(srcEntity) {
11239
- var cloneEntity = new Entity(srcEntity._engine, srcEntity.name);
11284
+ _proto._createCloneEntity = function _createCloneEntity() {
11285
+ var cloneEntity = new Entity(this._engine, this.name);
11240
11286
  var templateResource = this._templateResource;
11241
11287
  if (templateResource) {
11242
11288
  cloneEntity._templateResource = templateResource;
11243
11289
  templateResource._addReferCount(1);
11244
11290
  }
11245
- cloneEntity.layer = srcEntity.layer;
11246
- cloneEntity._isActive = srcEntity._isActive;
11291
+ cloneEntity.layer = this.layer;
11292
+ cloneEntity._isActive = this._isActive;
11247
11293
  var cloneTransform = cloneEntity.transform;
11248
- var srcTransform = srcEntity.transform;
11294
+ var _this = this, srcTransform = _this.transform;
11249
11295
  cloneTransform.position = srcTransform.position;
11250
11296
  cloneTransform.rotation = srcTransform.rotation;
11251
11297
  cloneTransform.scale = srcTransform.scale;
11252
- var children = srcEntity._children;
11253
- for(var i = 0, n = srcEntity._children.length; i < n; i++){
11254
- cloneEntity.addChild(this._createCloneEntity(children[i]));
11298
+ var srcChildren = this._children;
11299
+ for(var i = 0, n = srcChildren.length; i < n; i++){
11300
+ cloneEntity.addChild(srcChildren[i]._createCloneEntity());
11255
11301
  }
11256
11302
  return cloneEntity;
11257
11303
  };
@@ -13462,7 +13508,7 @@ var /**
13462
13508
  if (info) {
13463
13509
  return info;
13464
13510
  }
13465
- info = TextUtils._measureFontOrChar(fontString);
13511
+ info = TextUtils._measureFontOrChar(fontString, TextUtils._measureString, false);
13466
13512
  fontSizeInfoCache[fontString] = info;
13467
13513
  return info;
13468
13514
  };
@@ -13483,7 +13529,7 @@ var /**
13483
13529
  return str;
13484
13530
  };
13485
13531
  TextUtils.measureChar = function measureChar(char, fontString) {
13486
- return TextUtils._measureFontOrChar(fontString, char);
13532
+ return TextUtils._measureFontOrChar(fontString, char, true);
13487
13533
  };
13488
13534
  TextUtils.measureTextWithWrap = function measureTextWithWrap(renderer) {
13489
13535
  var subFont = renderer._subFont;
@@ -13703,15 +13749,15 @@ var /**
13703
13749
  /**
13704
13750
  * @internal
13705
13751
  * Use internal for CanvasRenderer plugin.
13706
- */ TextUtils._measureFontOrChar = function _measureFontOrChar(fontString, char) {
13707
- if (char === void 0) char = "";
13752
+ */ TextUtils._measureFontOrChar = function _measureFontOrChar(fontString, measureString, isChar) {
13708
13753
  var _TextUtils_textContext = TextUtils.textContext(), canvas = _TextUtils_textContext.canvas, context = _TextUtils_textContext.context;
13709
13754
  context.font = fontString;
13710
- var measureString = char || TextUtils._measureString;
13711
13755
  // Safari gets data confusion through getImageData when the canvas width is not an integer.
13712
13756
  // The measure text width of some special invisible characters may be 0, so make sure the width is at least 1.
13713
13757
  // @todo: Text layout may vary from standard and not support emoji.
13714
- var width = Math.max(1, Math.round(context.measureText(measureString).width));
13758
+ var textMetrics = context.measureText(measureString);
13759
+ // In some case (ex: " "), actualBoundingBoxRight and actualBoundingBoxLeft will be 0, so use width.
13760
+ var width = Math.max(1, Math.round(textMetrics.actualBoundingBoxRight - textMetrics.actualBoundingBoxLeft || textMetrics.width));
13715
13761
  var baseline = Math.ceil(context.measureText(TextUtils._measureBaseline).width);
13716
13762
  var height = baseline * TextUtils._heightMultiplier;
13717
13763
  baseline = TextUtils._baselineMultiplier * baseline | 0;
@@ -13756,12 +13802,7 @@ var /**
13756
13802
  descent = bottom - baseline + 1;
13757
13803
  size = ascent + descent;
13758
13804
  }
13759
- var sizeInfo = {
13760
- ascent: ascent,
13761
- descent: descent,
13762
- size: size
13763
- };
13764
- if (char) {
13805
+ if (isChar) {
13765
13806
  var data = null;
13766
13807
  if (size > 0) {
13767
13808
  var lineIntegerW = integerW * 4;
@@ -13769,7 +13810,7 @@ var /**
13769
13810
  data = new Uint8Array(colorData.buffer, top * lineIntegerW, size * lineIntegerW);
13770
13811
  }
13771
13812
  return {
13772
- char: char,
13813
+ char: measureString,
13773
13814
  x: 0,
13774
13815
  y: 0,
13775
13816
  w: width,
@@ -13789,7 +13830,11 @@ var /**
13789
13830
  data: data
13790
13831
  };
13791
13832
  } else {
13792
- return sizeInfo;
13833
+ return {
13834
+ ascent: ascent,
13835
+ descent: descent,
13836
+ size: size
13837
+ };
13793
13838
  }
13794
13839
  };
13795
13840
  /**
@@ -15856,6 +15901,26 @@ var BaseMaterial = /*#__PURE__*/ function(Material1) {
15856
15901
  this.blitMesh = this._createBlitMesh(engine, vertices);
15857
15902
  this.flipYBlitMesh = this._createBlitMesh(engine, flipYVertices);
15858
15903
  this.blitMaterial = blitMaterial;
15904
+ // Create white and magenta textures
15905
+ var whitePixel = new Uint8Array([
15906
+ 255,
15907
+ 255,
15908
+ 255,
15909
+ 255
15910
+ ]);
15911
+ this.whiteTexture2D = this._create1x1Texture(engine, 0, TextureFormat.R8G8B8A8, whitePixel);
15912
+ this.whiteTextureCube = this._create1x1Texture(engine, 1, TextureFormat.R8G8B8A8, whitePixel);
15913
+ var isWebGL2 = engine._hardwareRenderer.isWebGL2;
15914
+ if (isWebGL2) {
15915
+ this.whiteTexture2DArray = this._create1x1Texture(engine, 2, TextureFormat.R8G8B8A8, whitePixel);
15916
+ var whitePixel32 = new Uint32Array([
15917
+ 255,
15918
+ 255,
15919
+ 255,
15920
+ 255
15921
+ ]);
15922
+ this.uintWhiteTexture2D = this._create1x1Texture(engine, 0, TextureFormat.R32G32B32A32_UInt, whitePixel32);
15923
+ }
15859
15924
  }
15860
15925
  var _proto = BasicResources.prototype;
15861
15926
  _proto._createBlitMesh = function _createBlitMesh(engine, vertices) {
@@ -15868,8 +15933,63 @@ var BaseMaterial = /*#__PURE__*/ function(Material1) {
15868
15933
  mesh.addSubMesh(0, 4, MeshTopology.TriangleStrip);
15869
15934
  return mesh;
15870
15935
  };
15936
+ _proto._create1x1Texture = function _create1x1Texture(engine, type, format, pixel) {
15937
+ var texture;
15938
+ switch(type){
15939
+ case 0:
15940
+ var texture2D = new Texture2D(engine, 1, 1, format, false);
15941
+ texture2D.setPixelBuffer(pixel);
15942
+ texture = texture2D;
15943
+ break;
15944
+ case 2:
15945
+ var texture2DArray = new Texture2DArray(engine, 1, 1, 1, format, false);
15946
+ texture2DArray.setPixelBuffer(0, pixel);
15947
+ texture = texture2DArray;
15948
+ break;
15949
+ case 1:
15950
+ var textureCube = new TextureCube(engine, 1, format, false);
15951
+ for(var i = 0; i < 6; i++){
15952
+ textureCube.setPixelBuffer(TextureCubeFace.PositiveX + i, pixel);
15953
+ }
15954
+ texture = textureCube;
15955
+ break;
15956
+ default:
15957
+ throw "Invalid texture type";
15958
+ }
15959
+ texture.isGCIgnored = true;
15960
+ engine.resourceManager.addContentRestorer(new /*#__PURE__*/ (function(ContentRestorer) {
15961
+ _inherits(_class, ContentRestorer);
15962
+ function _class() {
15963
+ return ContentRestorer.call(this, texture);
15964
+ }
15965
+ var _proto = _class.prototype;
15966
+ _proto.restoreContent = function restoreContent() {
15967
+ switch(type){
15968
+ case 0:
15969
+ this.resource.setPixelBuffer(pixel);
15970
+ break;
15971
+ case 2:
15972
+ this.resource.setPixelBuffer(0, pixel);
15973
+ break;
15974
+ case 1:
15975
+ for(var i = 0; i < 6; i++){
15976
+ this.resource.setPixelBuffer(TextureCubeFace.PositiveX + i, pixel);
15977
+ }
15978
+ break;
15979
+ }
15980
+ };
15981
+ return _class;
15982
+ }(ContentRestorer))());
15983
+ return texture;
15984
+ };
15871
15985
  return BasicResources;
15872
15986
  }();
15987
+ var TextureType;
15988
+ (function(TextureType) {
15989
+ TextureType[TextureType["Texture2D"] = 0] = "Texture2D";
15990
+ TextureType[TextureType["TextureCube"] = 1] = "TextureCube";
15991
+ TextureType[TextureType["Texture2DArray"] = 2] = "Texture2DArray";
15992
+ })(TextureType || (TextureType = {}));
15873
15993
 
15874
15994
  /**
15875
15995
  * @internal
@@ -16663,17 +16783,35 @@ var /** @internal */ PromiseState;
16663
16783
  };
16664
16784
  /**
16665
16785
  * @internal
16666
- */ _proto._onSubAssetSuccess = function _onSubAssetSuccess(assetURL, value) {
16667
- var _this__subAssetPromiseCallbacks_assetURL;
16668
- (_this__subAssetPromiseCallbacks_assetURL = this._subAssetPromiseCallbacks[assetURL]) == null ? void 0 : _this__subAssetPromiseCallbacks_assetURL.resolve(value);
16669
- delete this._subAssetPromiseCallbacks[assetURL];
16786
+ */ _proto._onSubAssetSuccess = function _onSubAssetSuccess(assetBaseURL, assetSubPath, value) {
16787
+ var _this__subAssetPromiseCallbacks_assetBaseURL;
16788
+ var subPromiseCallback = (_this__subAssetPromiseCallbacks_assetBaseURL = this._subAssetPromiseCallbacks[assetBaseURL]) == null ? void 0 : _this__subAssetPromiseCallbacks_assetBaseURL[assetSubPath];
16789
+ if (subPromiseCallback) {
16790
+ // Already resolved
16791
+ subPromiseCallback.resolve(value);
16792
+ } else {
16793
+ var // Pending
16794
+ _this__subAssetPromiseCallbacks, _assetBaseURL;
16795
+ ((_this__subAssetPromiseCallbacks = this._subAssetPromiseCallbacks)[_assetBaseURL = assetBaseURL] || (_this__subAssetPromiseCallbacks[_assetBaseURL] = {}))[assetSubPath] = {
16796
+ resolve: value
16797
+ };
16798
+ }
16670
16799
  };
16671
16800
  /**
16672
16801
  * @internal
16673
- */ _proto._onSubAssetFail = function _onSubAssetFail(assetURL, value) {
16674
- var _this__subAssetPromiseCallbacks_assetURL;
16675
- (_this__subAssetPromiseCallbacks_assetURL = this._subAssetPromiseCallbacks[assetURL]) == null ? void 0 : _this__subAssetPromiseCallbacks_assetURL.reject(value);
16676
- delete this._subAssetPromiseCallbacks[assetURL];
16802
+ */ _proto._onSubAssetFail = function _onSubAssetFail(assetBaseURL, assetSubPath, value) {
16803
+ var _this__subAssetPromiseCallbacks_assetBaseURL;
16804
+ var subPromiseCallback = (_this__subAssetPromiseCallbacks_assetBaseURL = this._subAssetPromiseCallbacks[assetBaseURL]) == null ? void 0 : _this__subAssetPromiseCallbacks_assetBaseURL[assetSubPath];
16805
+ if (subPromiseCallback) {
16806
+ // Already rejected
16807
+ subPromiseCallback.reject(value);
16808
+ } else {
16809
+ var // Pending
16810
+ _this__subAssetPromiseCallbacks, _assetBaseURL;
16811
+ ((_this__subAssetPromiseCallbacks = this._subAssetPromiseCallbacks)[_assetBaseURL = assetBaseURL] || (_this__subAssetPromiseCallbacks[_assetBaseURL] = {}))[assetSubPath] = {
16812
+ reject: value
16813
+ };
16814
+ }
16677
16815
  };
16678
16816
  /**
16679
16817
  * @internal
@@ -16818,8 +16956,21 @@ var /** @internal */ PromiseState;
16818
16956
  if (!loader) {
16819
16957
  throw "loader not found: " + item.type;
16820
16958
  }
16821
- // Load asset
16959
+ // Check sub asset
16960
+ if (queryPath) {
16961
+ // Check whether load main asset
16962
+ var mainPromise = loadingPromises[assetBaseURL] || this._loadMainAsset(loader, item, assetBaseURL);
16963
+ mainPromise.catch(function(e) {
16964
+ _this._onSubAssetFail(assetBaseURL, queryPath, e);
16965
+ });
16966
+ return this._createSubAssetPromiseCallback(assetBaseURL, assetURL, queryPath);
16967
+ }
16968
+ return this._loadMainAsset(loader, item, assetBaseURL);
16969
+ };
16970
+ _proto._loadMainAsset = function _loadMainAsset(loader, item, assetBaseURL) {
16971
+ var _this = this;
16822
16972
  item.url = assetBaseURL;
16973
+ var loadingPromises = this._loadingPromises;
16823
16974
  var promise = loader.load(item, this);
16824
16975
  loadingPromises[assetBaseURL] = promise;
16825
16976
  promise.then(function(resource) {
@@ -16827,32 +16978,46 @@ var /** @internal */ PromiseState;
16827
16978
  _this._addAsset(assetBaseURL, resource);
16828
16979
  }
16829
16980
  delete loadingPromises[assetBaseURL];
16981
+ _this._releaseSubAssetPromiseCallback(assetBaseURL);
16830
16982
  }, function() {
16831
- return delete loadingPromises[assetBaseURL];
16983
+ delete loadingPromises[assetBaseURL];
16984
+ _this._releaseSubAssetPromiseCallback(assetBaseURL);
16832
16985
  });
16833
- if (queryPath) {
16834
- var subPromise = new AssetPromise(function(resolve, reject) {
16835
- _this._pushSubAssetPromiseCallback(assetURL, resolve, reject);
16836
- });
16837
- loadingPromises[assetURL] = subPromise;
16838
- subPromise.then(function() {
16986
+ return promise;
16987
+ };
16988
+ _proto._createSubAssetPromiseCallback = function _createSubAssetPromiseCallback(assetBaseURL, assetURL, assetSubPath) {
16989
+ var _this = this;
16990
+ var _this__subAssetPromiseCallbacks_assetBaseURL, _subPromiseCallback, _subPromiseCallback1;
16991
+ var loadingPromises = this._loadingPromises;
16992
+ var subPromiseCallback = (_this__subAssetPromiseCallbacks_assetBaseURL = this._subAssetPromiseCallbacks[assetBaseURL]) == null ? void 0 : _this__subAssetPromiseCallbacks_assetBaseURL[assetSubPath];
16993
+ var resolvedValue = (_subPromiseCallback = subPromiseCallback) == null ? void 0 : _subPromiseCallback.resolve;
16994
+ var rejectedValue = (_subPromiseCallback1 = subPromiseCallback) == null ? void 0 : _subPromiseCallback1.reject;
16995
+ var promise = new AssetPromise(function(resolve, reject) {
16996
+ if (resolvedValue) {
16997
+ // Already resolved
16998
+ resolve(resolvedValue);
16999
+ } else if (rejectedValue) {
17000
+ // Already rejected
17001
+ reject(rejectedValue);
17002
+ } else {
17003
+ var _this__subAssetPromiseCallbacks, _assetBaseURL;
17004
+ // Pending
17005
+ loadingPromises[assetURL] = promise;
17006
+ ((_this__subAssetPromiseCallbacks = _this._subAssetPromiseCallbacks)[_assetBaseURL = assetBaseURL] || (_this__subAssetPromiseCallbacks[_assetBaseURL] = {}))[assetSubPath] = {
17007
+ resolve: resolve,
17008
+ reject: reject
17009
+ };
17010
+ }
17011
+ });
17012
+ if (!resolvedValue && !rejectedValue) {
17013
+ promise.then(function() {
16839
17014
  delete loadingPromises[assetURL];
16840
17015
  }, function() {
16841
17016
  return delete loadingPromises[assetURL];
16842
17017
  });
16843
- promise.catch(function(e) {
16844
- _this._onSubAssetFail(assetURL, e);
16845
- });
16846
- return subPromise;
16847
17018
  }
16848
17019
  return promise;
16849
17020
  };
16850
- _proto._pushSubAssetPromiseCallback = function _pushSubAssetPromiseCallback(assetURL, resolve, reject) {
16851
- this._subAssetPromiseCallbacks[assetURL] = {
16852
- resolve: resolve,
16853
- reject: reject
16854
- };
16855
- };
16856
17021
  _proto._gc = function _gc(forceDestroy) {
16857
17022
  var objects = Utils.objectValues(this._referResourcePool);
16858
17023
  for(var i = 0, n = objects.length; i < n; i++){
@@ -16909,6 +17074,9 @@ var /** @internal */ PromiseState;
16909
17074
  });
16910
17075
  return result;
16911
17076
  };
17077
+ _proto._releaseSubAssetPromiseCallback = function _releaseSubAssetPromiseCallback(assetBaseURL) {
17078
+ delete this._subAssetPromiseCallbacks[assetBaseURL];
17079
+ };
16912
17080
  /**
16913
17081
  * @internal
16914
17082
  * @beta Just for internal editor, not recommended for developers.
@@ -20402,7 +20570,6 @@ ShaderPool.init();
20402
20570
  _this.xrManager = new XRManager();
20403
20571
  _this.xrManager._initialize(_assert_this_initialized(_this), xrDevice);
20404
20572
  }
20405
- _this._initMagentaTextures(hardwareRenderer);
20406
20573
  if (!hardwareRenderer.canIUse(GLCapabilityType.depthTexture)) {
20407
20574
  _this._macroCollection.enable(Engine._noDepthTextureMacro);
20408
20575
  } else {
@@ -20638,99 +20805,6 @@ ShaderPool.init();
20638
20805
  };
20639
20806
  /**
20640
20807
  * @internal
20641
- * Standalone for CanvasRenderer plugin.
20642
- */ _proto._initMagentaTextures = function _initMagentaTextures(hardwareRenderer) {
20643
- var whitePixel = new Uint8Array([
20644
- 255,
20645
- 255,
20646
- 255,
20647
- 255
20648
- ]);
20649
- var whiteTexture2D = new Texture2D(this, 1, 1, TextureFormat.R8G8B8A8, false);
20650
- whiteTexture2D.setPixelBuffer(whitePixel);
20651
- whiteTexture2D.isGCIgnored = true;
20652
- var magentaPixel = new Uint8Array([
20653
- 255,
20654
- 0,
20655
- 255,
20656
- 255
20657
- ]);
20658
- var magentaTexture2D = new Texture2D(this, 1, 1, TextureFormat.R8G8B8A8, false);
20659
- magentaTexture2D.setPixelBuffer(magentaPixel);
20660
- magentaTexture2D.isGCIgnored = true;
20661
- this.resourceManager.addContentRestorer(new /*#__PURE__*/ (function(ContentRestorer) {
20662
- _inherits(_class, ContentRestorer);
20663
- function _class() {
20664
- return ContentRestorer.call(this, magentaTexture2D);
20665
- }
20666
- var _proto = _class.prototype;
20667
- _proto.restoreContent = function restoreContent() {
20668
- this.resource.setPixelBuffer(magentaPixel);
20669
- };
20670
- return _class;
20671
- }(ContentRestorer))());
20672
- var magentaTextureCube = new TextureCube(this, 1, TextureFormat.R8G8B8A8, false);
20673
- for(var i = 0; i < 6; i++){
20674
- magentaTextureCube.setPixelBuffer(TextureCubeFace.PositiveX + i, magentaPixel);
20675
- }
20676
- magentaTextureCube.isGCIgnored = true;
20677
- this.resourceManager.addContentRestorer(new /*#__PURE__*/ (function(ContentRestorer) {
20678
- _inherits(_class, ContentRestorer);
20679
- function _class() {
20680
- return ContentRestorer.call(this, magentaTextureCube);
20681
- }
20682
- var _proto = _class.prototype;
20683
- _proto.restoreContent = function restoreContent() {
20684
- for(var i = 0; i < 6; i++){
20685
- this.resource.setPixelBuffer(TextureCubeFace.PositiveX + i, magentaPixel);
20686
- }
20687
- };
20688
- return _class;
20689
- }(ContentRestorer))());
20690
- this._whiteTexture2D = whiteTexture2D;
20691
- this._magentaTexture2D = magentaTexture2D;
20692
- this._magentaTextureCube = magentaTextureCube;
20693
- if (hardwareRenderer.isWebGL2) {
20694
- var magentaPixel32 = new Uint32Array([
20695
- 255,
20696
- 0,
20697
- 255,
20698
- 255
20699
- ]);
20700
- var uintMagentaTexture2D = new Texture2D(this, 1, 1, TextureFormat.R32G32B32A32_UInt, false);
20701
- uintMagentaTexture2D.setPixelBuffer(magentaPixel32);
20702
- uintMagentaTexture2D.isGCIgnored = true;
20703
- this.resourceManager.addContentRestorer(new /*#__PURE__*/ (function(ContentRestorer) {
20704
- _inherits(_class, ContentRestorer);
20705
- function _class() {
20706
- return ContentRestorer.call(this, uintMagentaTexture2D);
20707
- }
20708
- var _proto = _class.prototype;
20709
- _proto.restoreContent = function restoreContent() {
20710
- this.resource.setPixelBuffer(magentaPixel32);
20711
- };
20712
- return _class;
20713
- }(ContentRestorer))());
20714
- var magentaTexture2DArray = new Texture2DArray(this, 1, 1, 1, TextureFormat.R8G8B8A8, false);
20715
- magentaTexture2DArray.setPixelBuffer(0, magentaPixel);
20716
- magentaTexture2DArray.isGCIgnored = true;
20717
- this.resourceManager.addContentRestorer(new /*#__PURE__*/ (function(ContentRestorer) {
20718
- _inherits(_class, ContentRestorer);
20719
- function _class() {
20720
- return ContentRestorer.call(this, magentaTexture2DArray);
20721
- }
20722
- var _proto = _class.prototype;
20723
- _proto.restoreContent = function restoreContent() {
20724
- this.resource.setPixelBuffer(0, magentaPixel);
20725
- };
20726
- return _class;
20727
- }(ContentRestorer))());
20728
- this._uintMagentaTexture2D = uintMagentaTexture2D;
20729
- this._magentaTexture2DArray = magentaTexture2DArray;
20730
- }
20731
- };
20732
- /**
20733
- * @internal
20734
20808
  */ _proto._pendingGC = function _pendingGC() {
20735
20809
  if (this._frameInProcess) {
20736
20810
  this._waitingGC = true;
@@ -21370,6 +21444,8 @@ ShaderPool.init();
21370
21444
  script._started = true;
21371
21445
  _this.removeOnStartScript(script);
21372
21446
  script.onStart();
21447
+ }, function(element, index) {
21448
+ element._onStartIndex = index;
21373
21449
  });
21374
21450
  }
21375
21451
  };
@@ -22960,6 +23036,14 @@ __decorate([
22960
23036
  DepthTextureMode[DepthTextureMode[/* Generate depth texture by pre-pass rendering. */ "PrePass"] = 1] = "PrePass";
22961
23037
  })(DepthTextureMode || (DepthTextureMode = {}));
22962
23038
 
23039
+ /**
23040
+ * The strategy to use when a shader replacement fails.
23041
+ */ var ReplacementFailureStrategy;
23042
+ (function(ReplacementFailureStrategy) {
23043
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Keep the original shader. */ "KeepOriginalShader"] = 0] = "KeepOriginalShader";
23044
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Do not render. */ "DoNotRender"] = 1] = "DoNotRender";
23045
+ })(ReplacementFailureStrategy || (ReplacementFailureStrategy = {}));
23046
+
22963
23047
  /**
22964
23048
  * PipelinePass is a base class for all pipeline passes.
22965
23049
  */ var PipelinePass = function PipelinePass(engine) {
@@ -24310,7 +24394,7 @@ var /**
24310
24394
  depthOnlyPass.onConfig(camera);
24311
24395
  depthOnlyPass.onRender(context, cullingResults);
24312
24396
  } else {
24313
- camera.shaderData.setTexture(Camera._cameraDepthTextureProperty, engine._whiteTexture2D);
24397
+ camera.shaderData.setTexture(Camera._cameraDepthTextureProperty, engine._basicResources.whiteTexture2D);
24314
24398
  }
24315
24399
  // Check if need to create internal color texture
24316
24400
  var independentCanvasEnabled = camera.independentCanvasEnabled;
@@ -24396,13 +24480,15 @@ var /**
24396
24480
  var replacementSubShaders = replacementShader.subShaders;
24397
24481
  var replacementTag = context.replacementTag;
24398
24482
  if (replacementTag) {
24483
+ var materialSubShaderTagValue = materialSubShader.getTagValue(replacementTag);
24399
24484
  for(var i = 0, n = replacementSubShaders.length; i < n; i++){
24400
24485
  var subShader = replacementSubShaders[i];
24401
- if (subShader.getTagValue(replacementTag) === materialSubShader.getTagValue(replacementTag)) {
24486
+ if (subShader.getTagValue(replacementTag) === materialSubShaderTagValue) {
24402
24487
  this.pushRenderDataWithShader(context, data, subShader.passes, renderStates);
24403
- break;
24488
+ return;
24404
24489
  }
24405
24490
  }
24491
+ context.replacementFailureStrategy === ReplacementFailureStrategy.KeepOriginalShader && this.pushRenderDataWithShader(context, data, materialSubShader.passes, renderStates);
24406
24492
  } else {
24407
24493
  this.pushRenderDataWithShader(context, data, replacementSubShaders[0].passes, renderStates);
24408
24494
  }
@@ -24563,6 +24649,7 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component1) {
24563
24649
  /** @internal */ _this._virtualCamera = new VirtualCamera();
24564
24650
  /** @internal */ _this._replacementShader = null;
24565
24651
  /** @internal */ _this._replacementSubShaderTag = null;
24652
+ /** @internal */ _this._replacementFailureStrategy = null;
24566
24653
  /** @internal */ _this._cameraIndex = -1;
24567
24654
  _this._priority = 0;
24568
24655
  _this._shaderData = new ShaderData(ShaderDataGroup.Camera);
@@ -24740,6 +24827,7 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component1) {
24740
24827
  context.virtualCamera = virtualCamera;
24741
24828
  context.replacementShader = this._replacementShader;
24742
24829
  context.replacementTag = this._replacementSubShaderTag;
24830
+ context.replacementFailureStrategy = this._replacementFailureStrategy;
24743
24831
  // compute cull frustum.
24744
24832
  if (this.enableFrustumCulling && this._frustumChangeFlag.flag) {
24745
24833
  this._frustum.calculateFromMatrix(virtualCamera.viewProjectionMatrix);
@@ -24759,15 +24847,18 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component1) {
24759
24847
  this._renderPipeline.render(context, cubeFace, mipLevel, clearMask);
24760
24848
  this._engine._renderCount++;
24761
24849
  };
24762
- _proto.setReplacementShader = function setReplacementShader(shader, replacementTag) {
24850
+ _proto.setReplacementShader = function setReplacementShader(shader, replacementTag, failureStrategy) {
24851
+ if (failureStrategy === void 0) failureStrategy = ReplacementFailureStrategy.KeepOriginalShader;
24763
24852
  this._replacementShader = shader;
24764
24853
  this._replacementSubShaderTag = typeof replacementTag === "string" ? ShaderTagKey.getByName(replacementTag) : replacementTag;
24854
+ this._replacementFailureStrategy = failureStrategy;
24765
24855
  };
24766
24856
  /**
24767
24857
  * Reset and clear the replacement shader.
24768
24858
  */ _proto.resetReplacementShader = function resetReplacementShader() {
24769
24859
  this._replacementShader = null;
24770
24860
  this._replacementSubShaderTag = null;
24861
+ this._replacementFailureStrategy = null;
24771
24862
  };
24772
24863
  /**
24773
24864
  * @inheritdoc
@@ -31583,5 +31674,5 @@ var cacheDir = new Vector3();
31583
31674
  return CubeProbe;
31584
31675
  }(Probe);
31585
31676
 
31586
- export { AmbientLight, AnimationArrayCurve, AnimationBoolCurve, AnimationClip, AnimationClipCurveBinding, AnimationColorCurve, AnimationCurve, AnimationEvent, AnimationFloatArrayCurve, AnimationFloatCurve, AnimationQuaternionCurve, AnimationRectCurve, AnimationRefCurve, AnimationStringCurve, AnimationVector2Curve, AnimationVector3Curve, AnimationVector4Curve, Animator, AnimatorConditionMode, AnimatorController, AnimatorControllerLayer, AnimatorCullingMode, AnimatorLayerBlendingMode, AnimatorLayerMask, AnimatorState, AnimatorStateMachine, AnimatorStateTransition, AssetPromise, AssetType, Background, BackgroundMode, BackgroundTextureFillMode, BaseMaterial, Basic2DBatcher, BasicRenderPipeline, BlendFactor, BlendMode, BlendOperation, BlendShape, BlendShapeFrame, BlendState, BlinnPhongMaterial, BoolUpdateFlag, BoxColliderShape, BoxShape, Buffer, BufferBindFlag, BufferMesh, BufferUsage, BufferUtil, Burst, Camera, CameraClearFlags, CameraType, Canvas, CapsuleColliderShape, CharacterController, CircleShape, CloneManager, Collider, ColliderShape, ColliderShapeUpAxis, CollisionDetectionMode, ColorOverLifetimeModule, ColorSpace, ColorWriteMask, CompareFunction, Component, ConeEmitType, ConeShape, ContentRestorer, ControllerCollisionFlag, ControllerNonWalkableMode, CubeProbe, CullMode, CurveKey, DataType, DependentMode, DepthState, DepthTextureMode, DiffuseMode, DirectLight, Downsampling, DynamicCollider, DynamicColliderConstraints, EmissionModule, Engine, EngineObject, Entity, EventDispatcher, FixedJoint, FogMode, Font, FontStyle, GLCapabilityType, GradientAlphaKey, GradientColorKey, HemisphereShape, HingeJoint, HitResult, IndexBufferBinding, IndexFormat, InputManager, InterpolationType, Joint, JointLimits, JointMotor, Keyframe, Keys, Layer, Light, Loader, Logger, MSAASamples, MainModule, Material, Mesh, MeshRenderer, MeshTopology, ModelMesh, OverflowMode, PBRBaseMaterial, PBRMaterial, PBRSpecularMaterial, ParticleCompositeCurve, ParticleCompositeGradient, ParticleCurve, ParticleCurveMode, ParticleGenerator, ParticleGradient, ParticleGradientMode, ParticleMaterial, ParticleRenderMode, ParticleRenderer, ParticleScaleMode, ParticleShapeArcMode, ParticleShapeType, ParticleSimulationSpace, ParticleStopMode, PhysicsMaterial, PhysicsMaterialCombineMode, PhysicsScene, PipelineStage, PlaneColliderShape, Platform, PointLight, Pointer, PointerButton, PointerPhase, Primitive, PrimitiveMesh, Probe, RasterState, ReferResource, RenderBufferDepthFormat, RenderFace, RenderQueue, RenderQueueType, RenderState, RenderStateElementKey as RenderStateDataKey, RenderTarget, RenderTargetBlendState, Renderer, ResourceManager, RotationOverLifetimeModule, Scene, SceneManager, Script, SetDataOptions, Shader, ShaderData, ShaderFactory, ShaderLib, ShaderMacro, ShaderMacroCollection, ShaderPass, ShaderProperty, ShaderPropertyType, ShaderTagKey, ShadowCascadesMode, ShadowResolution, ShadowType, SizeOverLifetimeModule, Skin, SkinnedMeshRenderer, Sky, SkyBoxMaterial, SkyProceduralMaterial, SphereColliderShape, SphereShape, SpotLight, SpringJoint, Sprite, SpriteAtlas, SpriteDrawMode, SpriteMask, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer, SpriteTileMode, StateMachineScript, StaticCollider, StencilOperation, StencilState, SubMesh, SubShader, SunMode, SystemInfo, TextHorizontalAlignment, TextRenderer, TextUtils, TextVerticalAlignment, Texture, Texture2D, Texture2DArray, TextureCoordinate, TextureCube, TextureCubeFace, TextureDepthCompareFunction, TextureFilterMode, TextureFormat, TextureSheetAnimationModule, TextureUsage, TextureWrapMode, Time, TrailMaterial, TrailRenderer, Transform, UnlitMaterial, Utils, VelocityOverLifetimeModule, VertexAttribute, VertexBufferBinding, VertexElement, VertexElementFormat, WrapMode, XRManager, assignmentClone, deepClone, dependentComponents, ignoreClone, request, resourceLoader, shallowClone };
31677
+ export { AmbientLight, AnimationArrayCurve, AnimationBoolCurve, AnimationClip, AnimationClipCurveBinding, AnimationColorCurve, AnimationCurve, AnimationEvent, AnimationFloatArrayCurve, AnimationFloatCurve, AnimationQuaternionCurve, AnimationRectCurve, AnimationRefCurve, AnimationStringCurve, AnimationVector2Curve, AnimationVector3Curve, AnimationVector4Curve, Animator, AnimatorConditionMode, AnimatorController, AnimatorControllerLayer, AnimatorCullingMode, AnimatorLayerBlendingMode, AnimatorLayerMask, AnimatorState, AnimatorStateMachine, AnimatorStateTransition, AssetPromise, AssetType, Background, BackgroundMode, BackgroundTextureFillMode, BaseMaterial, Basic2DBatcher, BasicRenderPipeline, BlendFactor, BlendMode, BlendOperation, BlendShape, BlendShapeFrame, BlendState, BlinnPhongMaterial, BoolUpdateFlag, BoxColliderShape, BoxShape, Buffer, BufferBindFlag, BufferMesh, BufferUsage, BufferUtil, Burst, Camera, CameraClearFlags, CameraType, Canvas, CapsuleColliderShape, CharacterController, CircleShape, CloneManager, Collider, ColliderShape, ColliderShapeUpAxis, CollisionDetectionMode, ColorOverLifetimeModule, ColorSpace, ColorWriteMask, CompareFunction, Component, ConeEmitType, ConeShape, ContentRestorer, ControllerCollisionFlag, ControllerNonWalkableMode, CubeProbe, CullMode, CurveKey, DataType, DependentMode, DepthState, DepthTextureMode, DiffuseMode, DirectLight, Downsampling, DynamicCollider, DynamicColliderConstraints, EmissionModule, Engine, EngineObject, Entity, EventDispatcher, FixedJoint, FogMode, Font, FontStyle, GLCapabilityType, GradientAlphaKey, GradientColorKey, HemisphereShape, HingeJoint, HitResult, IndexBufferBinding, IndexFormat, InputManager, InterpolationType, Joint, JointLimits, JointMotor, Keyframe, Keys, Layer, Light, Loader, Logger, MSAASamples, MainModule, Material, Mesh, MeshRenderer, MeshTopology, ModelMesh, OverflowMode, PBRBaseMaterial, PBRMaterial, PBRSpecularMaterial, ParticleCompositeCurve, ParticleCompositeGradient, ParticleCurve, ParticleCurveMode, ParticleGenerator, ParticleGradient, ParticleGradientMode, ParticleMaterial, ParticleRenderMode, ParticleRenderer, ParticleScaleMode, ParticleShapeArcMode, ParticleShapeType, ParticleSimulationSpace, ParticleStopMode, PhysicsMaterial, PhysicsMaterialCombineMode, PhysicsScene, PipelineStage, PlaneColliderShape, Platform, PointLight, Pointer, PointerButton, PointerPhase, Primitive, PrimitiveMesh, Probe, RasterState, ReferResource, RenderBufferDepthFormat, RenderFace, RenderQueue, RenderQueueType, RenderState, RenderStateElementKey as RenderStateDataKey, RenderTarget, RenderTargetBlendState, Renderer, ReplacementFailureStrategy, ResourceManager, RotationOverLifetimeModule, Scene, SceneManager, Script, SetDataOptions, Shader, ShaderData, ShaderFactory, ShaderLib, ShaderMacro, ShaderMacroCollection, ShaderPass, ShaderProperty, ShaderPropertyType, ShaderTagKey, ShadowCascadesMode, ShadowResolution, ShadowType, SizeOverLifetimeModule, Skin, SkinnedMeshRenderer, Sky, SkyBoxMaterial, SkyProceduralMaterial, SphereColliderShape, SphereShape, SpotLight, SpringJoint, Sprite, SpriteAtlas, SpriteDrawMode, SpriteMask, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer, SpriteTileMode, StateMachineScript, StaticCollider, StencilOperation, StencilState, SubMesh, SubShader, SunMode, SystemInfo, TextHorizontalAlignment, TextRenderer, TextUtils, TextVerticalAlignment, Texture, Texture2D, Texture2DArray, TextureCoordinate, TextureCube, TextureCubeFace, TextureDepthCompareFunction, TextureFilterMode, TextureFormat, TextureSheetAnimationModule, TextureUsage, TextureWrapMode, Time, TrailMaterial, TrailRenderer, Transform, UnlitMaterial, Utils, VelocityOverLifetimeModule, VertexAttribute, VertexBufferBinding, VertexElement, VertexElementFormat, WrapMode, XRManager, assignmentClone, deepClone, dependentComponents, ignoreClone, request, resourceLoader, shallowClone };
31587
31678
  //# sourceMappingURL=module.js.map