@galacean/engine-core 1.1.0-beta.19 → 1.1.0-beta.20

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 (71) hide show
  1. package/dist/main.js +174 -91
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +174 -91
  4. package/dist/module.js +174 -91
  5. package/dist/module.js.map +1 -1
  6. package/package.json +3 -3
  7. package/types/2d/atlas/types.d.ts +3 -0
  8. package/types/asset/AssetPromise.d.ts +1 -0
  9. package/types/mesh/SubModelMesh.d.ts +260 -0
  10. package/types/particle/modules/MainModule.d.ts +0 -1
  11. package/types/xr/IXRDevice.d.ts +26 -0
  12. package/types/xr/XRManager.d.ts +89 -24
  13. package/types/xr/XRModule.d.ts +126 -0
  14. package/types/xr/component/XRPoseDriver.d.ts +5 -5
  15. package/types/xr/component/XRTrackingMode.d.ts +15 -0
  16. package/types/xr/component/trackable/XRAnchor.d.ts +4 -0
  17. package/types/xr/component/trackable/XRImage.d.ts +6 -0
  18. package/types/xr/component/trackable/XRPlane.d.ts +7 -0
  19. package/types/xr/component/trackable/XRTracked.d.ts +13 -0
  20. package/types/xr/feature/XRFeatureManager.d.ts +65 -0
  21. package/types/xr/feature/XRFeatureType.d.ts +17 -0
  22. package/types/xr/feature/XRPlatformFeature.d.ts +17 -0
  23. package/types/xr/feature/camera/IXRCameraDescriptor.d.ts +7 -0
  24. package/types/xr/feature/camera/XRCameraManager.d.ts +35 -0
  25. package/types/xr/feature/camera/XRPlatformCamera.d.ts +5 -0
  26. package/types/xr/feature/hitTest/XRHItTestType.d.ts +16 -0
  27. package/types/xr/feature/hitTest/XRHitTestManager.d.ts +38 -0
  28. package/types/xr/feature/movementTracking/IXRMovementTrackingDescriptor.d.ts +9 -0
  29. package/types/xr/feature/movementTracking/XRMovementTrackingManager.d.ts +8 -0
  30. package/types/xr/feature/movementTracking/XRMovementTrackingMode.d.ts +5 -0
  31. package/types/xr/feature/movementTracking/XRPlatformMovementTracking.d.ts +10 -0
  32. package/types/xr/feature/trackable/XRRequestTrackingState.d.ts +11 -0
  33. package/types/xr/feature/trackable/XRTrackableManager.d.ts +41 -0
  34. package/types/xr/feature/trackable/XRTrackablePlatformFeature.d.ts +29 -0
  35. package/types/xr/feature/trackable/XRTracked.d.ts +9 -0
  36. package/types/xr/feature/trackable/XRTrackedUpdateFlag.d.ts +11 -0
  37. package/types/xr/feature/trackable/XRTrackingState.d.ts +11 -0
  38. package/types/xr/feature/trackable/anchor/IXRAnchorTrackingDescriptor.d.ts +8 -0
  39. package/types/xr/feature/trackable/anchor/XRAnchorTrackingManager.d.ts +22 -0
  40. package/types/xr/feature/trackable/anchor/XRAnchorTrackingMode.d.ts +4 -0
  41. package/types/xr/feature/trackable/anchor/XRPlatformAnchorTracking.d.ts +12 -0
  42. package/types/xr/feature/trackable/anchor/XRRequestTrackingAnchor.d.ts +10 -0
  43. package/types/xr/feature/trackable/image/IXRImageTrackingDescriptor.d.ts +5 -0
  44. package/types/xr/feature/trackable/image/XRImageTrackingManager.d.ts +33 -0
  45. package/types/xr/feature/trackable/image/XRPlatformImageTracking.d.ts +14 -0
  46. package/types/xr/feature/trackable/image/XRReferenceImage.d.ts +14 -0
  47. package/types/xr/feature/trackable/image/XRRequestTrackingImage.d.ts +11 -0
  48. package/types/xr/feature/trackable/image/XRTrackedImage.d.ts +5 -0
  49. package/types/xr/feature/trackable/plane/IXRPlaneTrackingDescriptor.d.ts +9 -0
  50. package/types/xr/feature/trackable/plane/XRPlaneDetectionMode.d.ts +13 -0
  51. package/types/xr/feature/trackable/plane/XRPlaneMode.d.ts +13 -0
  52. package/types/xr/feature/trackable/plane/XRPlaneTrackingManager.d.ts +14 -0
  53. package/types/xr/feature/trackable/plane/XRPlatformPlaneTracking.d.ts +11 -0
  54. package/types/xr/feature/trackable/plane/XRRequestTrackingPlane.d.ts +11 -0
  55. package/types/xr/feature/trackable/plane/XRTrackedPlane.d.ts +11 -0
  56. package/types/xr/index.d.ts +39 -18
  57. package/types/xr/input/XRCamera.d.ts +28 -0
  58. package/types/xr/input/XRController.d.ts +38 -0
  59. package/types/xr/input/XRControllerPoseMode.d.ts +9 -0
  60. package/types/xr/input/XRInput.d.ts +14 -0
  61. package/types/xr/input/XRInputButton.d.ts +19 -0
  62. package/types/xr/input/XRInputEvent.d.ts +24 -0
  63. package/types/xr/input/XRInputEventType.d.ts +11 -0
  64. package/types/xr/input/XRInputManager.d.ts +58 -0
  65. package/types/xr/input/XRInputType.d.ts +23 -0
  66. package/types/xr/input/XRTargetRayMode.d.ts +12 -0
  67. package/types/xr/input/XRTrackedUpdateFlag.d.ts +11 -0
  68. package/types/xr/input/XRTrackingState.d.ts +11 -0
  69. package/types/xr/session/XRSessionManager.d.ts +76 -0
  70. package/types/xr/session/XRSessionState.d.ts +13 -0
  71. package/types/xr/session/XRSessionType.d.ts +7 -0
package/dist/module.js CHANGED
@@ -5835,8 +5835,12 @@ var ShaderFactory = /*#__PURE__*/ function() {
5835
5835
  break;
5836
5836
  case gl.BOOL_VEC3:
5837
5837
  case gl.INT_VEC3:
5838
- shaderUniform.applyFunc = isArray ? shaderUniform.upload3iv : shaderUniform.upload3i;
5839
- shaderUniform.cacheValue = new Vector3(0, 0, 0);
5838
+ if (isArray) {
5839
+ shaderUniform.applyFunc = shaderUniform.upload3iv;
5840
+ } else {
5841
+ shaderUniform.applyFunc = shaderUniform.upload3i;
5842
+ shaderUniform.cacheValue = new Vector3(0, 0, 0);
5843
+ }
5840
5844
  break;
5841
5845
  case gl.BOOL_VEC4:
5842
5846
  case gl.INT_VEC4:
@@ -7856,6 +7860,9 @@ SimpleSpriteAssembler = __decorate([
7856
7860
  case SpriteModifyFlags.pivot:
7857
7861
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
7858
7862
  break;
7863
+ case SpriteModifyFlags.destroy:
7864
+ this.sprite = null;
7865
+ break;
7859
7866
  }
7860
7867
  };
7861
7868
  _create_class(SpriteMask, [
@@ -9056,6 +9063,10 @@ var BlendShapeFrameDirty;
9056
9063
  Logger.error("mesh is null.");
9057
9064
  return;
9058
9065
  }
9066
+ if (this._mesh.destroyed) {
9067
+ Logger.error("mesh is destroyed.");
9068
+ return;
9069
+ }
9059
9070
  Renderer1.prototype._prepareRender.call(this, context);
9060
9071
  };
9061
9072
  /**
@@ -12722,6 +12733,7 @@ var AssetPromise = /*#__PURE__*/ function() {
12722
12733
  function AssetPromise(executor) {
12723
12734
  var _this = this;
12724
12735
  this._state = "pending";
12736
+ this._progress = 0;
12725
12737
  this._onProgressCallback = [];
12726
12738
  this._promise = new Promise(function(resolve, reject) {
12727
12739
  _this._reject = reject;
@@ -12746,6 +12758,7 @@ var AssetPromise = /*#__PURE__*/ function() {
12746
12758
  };
12747
12759
  var setProgress = function(progress) {
12748
12760
  if (_this._state === "pending") {
12761
+ _this._progress = progress;
12749
12762
  _this._onProgressCallback.forEach(function(callback) {
12750
12763
  return callback(progress);
12751
12764
  });
@@ -12760,7 +12773,12 @@ var AssetPromise = /*#__PURE__*/ function() {
12760
12773
  * @param callback
12761
12774
  * @returns AssetPromise
12762
12775
  */ _proto.onProgress = function onProgress(callback) {
12763
- this._onProgressCallback.push(callback);
12776
+ if (this._progress) {
12777
+ callback(this._progress);
12778
+ }
12779
+ if (this._state === "pending") {
12780
+ this._onProgressCallback.push(callback);
12781
+ }
12764
12782
  return this;
12765
12783
  };
12766
12784
  _proto.then = function then(onfulfilled, onrejected) {
@@ -13071,7 +13089,8 @@ var /** @internal */ PromiseState;
13071
13089
  // Check cache
13072
13090
  var cacheObject = this._assetUrlPool[assetBaseURL];
13073
13091
  if (cacheObject) {
13074
- return new AssetPromise(function(resolve) {
13092
+ return new AssetPromise(function(resolve, _, setProgress) {
13093
+ setProgress(1);
13075
13094
  resolve(_this._getResolveResource(cacheObject, paths));
13076
13095
  });
13077
13096
  }
@@ -13088,8 +13107,10 @@ var /** @internal */ PromiseState;
13088
13107
  var loadingPromises = this._loadingPromises;
13089
13108
  var loadingPromise = loadingPromises[assetURL];
13090
13109
  if (loadingPromise) {
13091
- return new AssetPromise(function(resolve, reject) {
13092
- loadingPromise.then(function(resource) {
13110
+ return new AssetPromise(function(resolve, reject, setProgress) {
13111
+ loadingPromise.onProgress(function(v) {
13112
+ setProgress(v);
13113
+ }).then(function(resource) {
13093
13114
  resolve(resource);
13094
13115
  }).catch(function(error) {
13095
13116
  reject(error);
@@ -19272,12 +19293,20 @@ ShaderPool.init();
19272
19293
  Logger.warn("The material of sky is not defined.");
19273
19294
  return;
19274
19295
  }
19296
+ if (material.destroyed) {
19297
+ Logger.warn("The material of sky is destroyed.");
19298
+ return;
19299
+ }
19275
19300
  if (!mesh) {
19276
19301
  Logger.warn("The mesh of sky is not defined.");
19277
19302
  return;
19278
19303
  }
19279
- var _context_camera = context.camera, engine = _context_camera.engine, aspectRatio = _context_camera.aspectRatio, fieldOfView = _context_camera.fieldOfView, viewMatrix = _context_camera.viewMatrix, cameraShaderData = _context_camera.shaderData;
19280
- var sceneData = context.camera.scene.shaderData;
19304
+ if (mesh.destroyed) {
19305
+ Logger.warn("The mesh of sky is destroyed.");
19306
+ return;
19307
+ }
19308
+ var _context_camera = context.camera, engine = _context_camera.engine, scene = _context_camera.scene, aspectRatio = _context_camera.aspectRatio, fieldOfView = _context_camera.fieldOfView, viewMatrix = _context_camera.viewMatrix, cameraShaderData = _context_camera.shaderData;
19309
+ var sceneData = scene.shaderData;
19281
19310
  var viewProjMatrix = Sky._viewProjMatrix, projectionMatrix = Sky._projectionMatrix;
19282
19311
  var rhi = engine._hardwareRenderer;
19283
19312
  var materialShaderData = material.shaderData, shader = material.shader, renderState = material.renderState;
@@ -24491,7 +24520,7 @@ var BaseMaterial = /*#__PURE__*/ function(Material1) {
24491
24520
  /**
24492
24521
  * @internal
24493
24522
  */ var AnimationCurveOwner = /*#__PURE__*/ function() {
24494
- function AnimationCurveOwner(target, type, property, cureType) {
24523
+ function AnimationCurveOwner(target, type, component, property, cureType) {
24495
24524
  this.baseEvaluateData = {
24496
24525
  curKeyframeIndex: 0,
24497
24526
  value: null
@@ -24502,9 +24531,8 @@ var BaseMaterial = /*#__PURE__*/ function(Material1) {
24502
24531
  };
24503
24532
  this.updateMark = 0;
24504
24533
  this.target = target;
24505
- this.type = type;
24506
24534
  this.property = property;
24507
- this.component = target.getComponent(type);
24535
+ this.component = component;
24508
24536
  this.cureType = cureType;
24509
24537
  this._isBlendShape = _instanceof(this.component, SkinnedMeshRenderer);
24510
24538
  var assemblerType = AnimationCurveOwner.getAssemblerType(type, property);
@@ -24736,9 +24764,9 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
24736
24764
  var _proto = AnimationClipCurveBinding.prototype;
24737
24765
  /**
24738
24766
  * @internal
24739
- */ _proto._createCurveOwner = function _createCurveOwner(entity) {
24767
+ */ _proto._createCurveOwner = function _createCurveOwner(entity, component) {
24740
24768
  var curveType = this.curve.constructor;
24741
- var owner = new AnimationCurveOwner(entity, this.type, this.property, curveType);
24769
+ var owner = new AnimationCurveOwner(entity, this.type, component, this.property, curveType);
24742
24770
  curveType._initializeOwner(owner);
24743
24771
  owner.saveDefaultValue();
24744
24772
  return owner;
@@ -24756,10 +24784,10 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
24756
24784
  };
24757
24785
  /**
24758
24786
  * @internal
24759
- */ _proto._getTempCurveOwner = function _getTempCurveOwner(entity) {
24787
+ */ _proto._getTempCurveOwner = function _getTempCurveOwner(entity, component) {
24760
24788
  var instanceId = entity.instanceId;
24761
24789
  if (!this._tempCurveOwner[instanceId]) {
24762
- this._tempCurveOwner[instanceId] = this._createCurveOwner(entity);
24790
+ this._tempCurveOwner[instanceId] = this._createCurveOwner(entity, component);
24763
24791
  }
24764
24792
  return this._tempCurveOwner[instanceId];
24765
24793
  };
@@ -24847,9 +24875,15 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
24847
24875
  var curveData = curveBindings[i];
24848
24876
  var targetEntity = entity.findByPath(curveData.relativePath);
24849
24877
  if (targetEntity) {
24850
- var curveOwner = curveData._getTempCurveOwner(targetEntity);
24851
- var value = curveOwner.evaluateValue(curveData.curve, time, false);
24852
- curveOwner.applyValue(value, 1, false);
24878
+ var component = targetEntity.getComponent(curveData.type);
24879
+ if (!component) {
24880
+ continue;
24881
+ }
24882
+ var curveOwner = curveData._getTempCurveOwner(targetEntity, component);
24883
+ if (curveOwner && curveData.curve.keys.length) {
24884
+ var value = curveOwner.evaluateValue(curveData.curve, time, false);
24885
+ curveOwner.applyValue(value, 1, false);
24886
+ }
24853
24887
  }
24854
24888
  }
24855
24889
  };
@@ -26266,11 +26300,15 @@ var AnimatorLayerBlendingMode;
26266
26300
  var targetEntity = curve.relativePath === "" ? entity : entity.findByPath(curve.relativePath);
26267
26301
  if (targetEntity) {
26268
26302
  var _curveOwnerPool, _instanceId, _propertyOwners, _property, _layerCurveOwnerPool, _instanceId1, _layerPropertyOwners, _property1;
26303
+ var component = targetEntity.getComponent(curve.type);
26304
+ if (!component) {
26305
+ continue;
26306
+ }
26269
26307
  var property = curve.property;
26270
26308
  var instanceId = targetEntity.instanceId;
26271
26309
  // Get owner
26272
26310
  var propertyOwners = (_curveOwnerPool = curveOwnerPool)[_instanceId = instanceId] || (_curveOwnerPool[_instanceId] = Object.create(null));
26273
- var owner = (_propertyOwners = propertyOwners)[_property = property] || (_propertyOwners[_property] = curve._createCurveOwner(targetEntity));
26311
+ var owner = (_propertyOwners = propertyOwners)[_property = property] || (_propertyOwners[_property] = curve._createCurveOwner(targetEntity, component));
26274
26312
  // Get layer owner
26275
26313
  var layerPropertyOwners = (_layerCurveOwnerPool = layerCurveOwnerPool)[_instanceId1 = instanceId] || (_layerCurveOwnerPool[_instanceId1] = Object.create(null));
26276
26314
  var layerOwner = (_layerPropertyOwners = layerPropertyOwners)[_property1 = property] || (_layerPropertyOwners[_property1] = curve._createCurveLayerOwner(owner));
@@ -27448,16 +27486,7 @@ var ParticleStopMode;
27448
27486
  };
27449
27487
  _proto._render = function _render(context) {
27450
27488
  var generator = this.generator;
27451
- var primitive = generator._primitive;
27452
- if (generator._firstActiveElement < generator._firstFreeElement) {
27453
- primitive.instanceCount = generator._firstFreeElement - generator._firstActiveElement;
27454
- } else {
27455
- var instanceCount = generator._currentParticleCount - generator._firstActiveElement;
27456
- if (generator._firstFreeElement > 0) {
27457
- instanceCount += generator._firstFreeElement;
27458
- }
27459
- primitive.instanceCount = instanceCount;
27460
- }
27489
+ generator._primitive.instanceCount = generator._getAliveParticleCount();
27461
27490
  var material = this.getMaterial();
27462
27491
  if (!material) {
27463
27492
  return;
@@ -28242,13 +28271,13 @@ var MainModule = /*#__PURE__*/ function() {
28242
28271
  /** Override the default playback speed of the Particle Generator. */ this.simulationSpeed = 1.0;
28243
28272
  /** Control how the Particle Generator applies its Transform component to the particles it emits. */ this.scalingMode = ParticleScaleMode.Local;
28244
28273
  /** If set to true, the Particle Generator automatically begins to play on startup. */ this.playOnEnabled = true;
28245
- this._maxParticles = 1000;
28246
- this._gravity = new Vector3();
28274
+ /** @internal */ this._maxParticleBuffer = 1000;
28247
28275
  /** @internal */ this._startSpeedRand = new Rand(0, ParticleRandomSubSeeds.StartSpeed);
28248
28276
  /** @internal */ this._startLifeTimeRand = new Rand(0, ParticleRandomSubSeeds.StartLifetime);
28249
28277
  /** @internal */ this._startColorRand = new Rand(0, ParticleRandomSubSeeds.StartColor);
28250
28278
  /** @internal */ this._startSizeRand = new Rand(0, ParticleRandomSubSeeds.StartSize);
28251
28279
  /** @internal */ this._startRotationRand = new Rand(0, ParticleRandomSubSeeds.StartRotation);
28280
+ this._gravity = new Vector3();
28252
28281
  this._generator = generator;
28253
28282
  }
28254
28283
  var _proto = MainModule.prototype;
@@ -28326,16 +28355,10 @@ var MainModule = /*#__PURE__*/ function() {
28326
28355
  get: /**
28327
28356
  * Max particles count.
28328
28357
  */ function get() {
28329
- return this._maxParticles;
28358
+ return this._maxParticleBuffer - 1;
28330
28359
  },
28331
28360
  set: function set(value) {
28332
- if (this._maxParticles !== value) {
28333
- this._maxParticles = value;
28334
- var generator = this._generator;
28335
- if (value < generator._currentParticleCount) {
28336
- generator._resizeInstanceBuffer(value);
28337
- }
28338
- }
28361
+ this._maxParticleBuffer = value + 1;
28339
28362
  }
28340
28363
  },
28341
28364
  {
@@ -28417,13 +28440,7 @@ __decorate([
28417
28440
  ], MainModule.prototype, "gravityModifier", void 0);
28418
28441
  __decorate([
28419
28442
  ignoreClone
28420
- ], MainModule.prototype, "_maxParticles", void 0);
28421
- __decorate([
28422
- ignoreClone
28423
- ], MainModule.prototype, "_generator", void 0);
28424
- __decorate([
28425
- ignoreClone
28426
- ], MainModule.prototype, "_gravity", void 0);
28443
+ ], MainModule.prototype, "_maxParticleBuffer", void 0);
28427
28444
  __decorate([
28428
28445
  ignoreClone
28429
28446
  ], MainModule.prototype, "_startSpeedRand", void 0);
@@ -28439,6 +28456,12 @@ __decorate([
28439
28456
  __decorate([
28440
28457
  ignoreClone
28441
28458
  ], MainModule.prototype, "_startRotationRand", void 0);
28459
+ __decorate([
28460
+ ignoreClone
28461
+ ], MainModule.prototype, "_generator", void 0);
28462
+ __decorate([
28463
+ ignoreClone
28464
+ ], MainModule.prototype, "_gravity", void 0);
28442
28465
 
28443
28466
  /**
28444
28467
  * Rotate particles throughout their lifetime.
@@ -29036,7 +29059,7 @@ __decorate([
29036
29059
  subPrimitive.start = 0;
29037
29060
  this._primitive = new Primitive(renderer.engine);
29038
29061
  this._reorganizeGeometryBuffers();
29039
- this._resizeInstanceBuffer(ParticleGenerator._particleIncreaseCount);
29062
+ this._resizeInstanceBuffer(true, ParticleGenerator._particleIncreaseCount);
29040
29063
  this.emission.enabled = true;
29041
29064
  }
29042
29065
  var _proto = ParticleGenerator.prototype;
@@ -29093,9 +29116,13 @@ __decorate([
29093
29116
  /**
29094
29117
  * @internal
29095
29118
  */ _proto._emit = function _emit(time, count) {
29096
- var position = ParticleGenerator._tempVector30;
29097
- var direction = ParticleGenerator._tempVector31;
29098
29119
  if (this.emission.enabled) {
29120
+ // Wait the existing particles to be retired
29121
+ if (this.main._maxParticleBuffer < this._currentParticleCount) {
29122
+ return;
29123
+ }
29124
+ var position = ParticleGenerator._tempVector30;
29125
+ var direction = ParticleGenerator._tempVector31;
29099
29126
  var transform = this._renderer.entity.transform;
29100
29127
  var shape = this.emission.shape;
29101
29128
  for(var i = 0; i < count; i++){
@@ -29122,6 +29149,13 @@ __decorate([
29122
29149
  this._retireActiveParticles();
29123
29150
  this._freeRetiredParticles();
29124
29151
  if (emission.enabled && this._isPlaying) {
29152
+ // If maxParticles is changed dynamically, currentParticleCount may be greater than maxParticles
29153
+ if (this._currentParticleCount > main._maxParticleBuffer) {
29154
+ var notRetireParticleCount = this._getNotRetiredParticleCount();
29155
+ if (notRetireParticleCount < main._maxParticleBuffer) {
29156
+ this._resizeInstanceBuffer(false);
29157
+ }
29158
+ }
29125
29159
  emission._emit(lastPlayTime, this._playTime);
29126
29160
  if (!main.isLoop && this._playTime > duration) {
29127
29161
  this._isPlaying = false;
@@ -29193,12 +29227,12 @@ __decorate([
29193
29227
  };
29194
29228
  /**
29195
29229
  * @internal
29196
- */ _proto._resizeInstanceBuffer = function _resizeInstanceBuffer(increaseCount) {
29230
+ */ _proto._resizeInstanceBuffer = function _resizeInstanceBuffer(isIncrease, increaseCount) {
29197
29231
  var _this__instanceVertexBufferBinding;
29198
29232
  (_this__instanceVertexBufferBinding = this._instanceVertexBufferBinding) == null ? void 0 : _this__instanceVertexBufferBinding.buffer.destroy();
29199
29233
  var particleUtils = this._renderer.engine._particleBufferUtils;
29200
29234
  var stride = particleUtils.instanceVertexStride;
29201
- var newParticleCount = this._currentParticleCount + increaseCount;
29235
+ var newParticleCount = isIncrease ? this._currentParticleCount + increaseCount : this.main._maxParticleBuffer;
29202
29236
  var newByteLength = stride * newParticleCount;
29203
29237
  var engine = this._renderer.engine;
29204
29238
  var vertexInstanceBuffer = new Buffer(engine, BufferBindFlag.VertexBuffer, newByteLength, BufferUsage.Dynamic, false);
@@ -29209,10 +29243,37 @@ __decorate([
29209
29243
  var lastInstanceVertices = this._instanceVertices;
29210
29244
  if (lastInstanceVertices) {
29211
29245
  var floatStride = particleUtils.instanceVertexFloatStride;
29212
- var freeOffset = this._firstFreeElement * floatStride;
29213
- instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, 0, freeOffset));
29214
- var freeEndOffset = (this._firstFreeElement + increaseCount) * floatStride;
29215
- instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, freeOffset * 4), freeEndOffset);
29246
+ var firstFreeElement = this._firstFreeElement;
29247
+ var firstRetiredElement = this._firstRetiredElement;
29248
+ if (isIncrease) {
29249
+ var freeOffset = this._firstFreeElement * floatStride;
29250
+ instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, 0, freeOffset));
29251
+ var freeEndOffset = (this._firstFreeElement + increaseCount) * floatStride;
29252
+ instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, freeOffset * 4), freeEndOffset);
29253
+ // Maintain expanded pointers
29254
+ this._firstNewElement > firstFreeElement && (this._firstNewElement += increaseCount);
29255
+ this._firstActiveElement > firstFreeElement && (this._firstActiveElement += increaseCount);
29256
+ firstRetiredElement > firstFreeElement && (this._firstRetiredElement += increaseCount);
29257
+ } else {
29258
+ var migrateCount, bufferOffset;
29259
+ if (firstRetiredElement <= firstFreeElement) {
29260
+ migrateCount = firstFreeElement - firstRetiredElement;
29261
+ bufferOffset = 0;
29262
+ // Maintain expanded pointers
29263
+ this._firstFreeElement -= firstRetiredElement;
29264
+ this._firstNewElement -= firstRetiredElement;
29265
+ this._firstActiveElement -= firstRetiredElement;
29266
+ this._firstRetiredElement = 0;
29267
+ } else {
29268
+ migrateCount = this._currentParticleCount - firstRetiredElement;
29269
+ bufferOffset = firstFreeElement;
29270
+ // Maintain expanded pointers
29271
+ this._firstNewElement > firstFreeElement && (this._firstNewElement -= firstFreeElement);
29272
+ this._firstActiveElement > firstFreeElement && (this._firstActiveElement -= firstFreeElement);
29273
+ firstRetiredElement > firstFreeElement && (this._firstRetiredElement -= firstFreeElement);
29274
+ }
29275
+ instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, firstRetiredElement * floatStride * 4, migrateCount * floatStride), bufferOffset * floatStride);
29276
+ }
29216
29277
  this._instanceBufferResized = true;
29217
29278
  }
29218
29279
  // Instance buffer always at last
@@ -29221,8 +29282,60 @@ __decorate([
29221
29282
  this._instanceVertexBufferBinding = vertexBufferBinding;
29222
29283
  this._currentParticleCount = newParticleCount;
29223
29284
  };
29285
+ /**
29286
+ * @internal
29287
+ */ _proto._updateShaderData = function _updateShaderData(shaderData) {
29288
+ this.main._updateShaderData(shaderData);
29289
+ this.velocityOverLifetime._updateShaderData(shaderData);
29290
+ this.textureSheetAnimation._updateShaderData(shaderData);
29291
+ this.sizeOverLifetime._updateShaderData(shaderData);
29292
+ this.rotationOverLifetime._updateShaderData(shaderData);
29293
+ this.colorOverLifetime._updateShaderData(shaderData);
29294
+ };
29295
+ /**
29296
+ * @internal
29297
+ */ _proto._resetGlobalRandSeed = function _resetGlobalRandSeed(seed) {
29298
+ this._randomSeed = seed;
29299
+ this.main._resetRandomSeed(seed);
29300
+ this.emission._resetRandomSeed(seed);
29301
+ this.textureSheetAnimation._resetRandomSeed(seed);
29302
+ this.velocityOverLifetime._resetRandomSeed(seed);
29303
+ this.rotationOverLifetime._resetRandomSeed(seed);
29304
+ this.colorOverLifetime._resetRandomSeed(seed);
29305
+ };
29306
+ /**
29307
+ * @internal
29308
+ */ _proto._getAliveParticleCount = function _getAliveParticleCount() {
29309
+ if (this._firstActiveElement <= this._firstFreeElement) {
29310
+ return this._firstFreeElement - this._firstActiveElement;
29311
+ } else {
29312
+ var instanceCount = this._currentParticleCount - this._firstActiveElement;
29313
+ if (this._firstFreeElement > 0) {
29314
+ instanceCount += this._firstFreeElement;
29315
+ }
29316
+ return instanceCount;
29317
+ }
29318
+ };
29319
+ /**
29320
+ * @internal
29321
+ */ _proto._getNotRetiredParticleCount = function _getNotRetiredParticleCount() {
29322
+ if (this._firstRetiredElement <= this._firstFreeElement) {
29323
+ return this._firstFreeElement - this._firstRetiredElement;
29324
+ } else {
29325
+ var instanceCount = this._currentParticleCount - this._firstRetiredElement;
29326
+ if (this._firstFreeElement > 0) {
29327
+ instanceCount += this._firstFreeElement;
29328
+ }
29329
+ return instanceCount;
29330
+ }
29331
+ };
29332
+ /**
29333
+ * @internal
29334
+ */ _proto._destroy = function _destroy() {
29335
+ this._instanceVertexBufferBinding.buffer.destroy();
29336
+ this._primitive.destroy();
29337
+ };
29224
29338
  _proto._addNewParticle = function _addNewParticle(position, direction, transform, time) {
29225
- var particleUtils = this._renderer.engine._particleBufferUtils;
29226
29339
  var firstFreeElement = this._firstFreeElement;
29227
29340
  var nextFreeElement = firstFreeElement + 1;
29228
29341
  if (nextFreeElement >= this._currentParticleCount) {
@@ -29231,23 +29344,20 @@ __decorate([
29231
29344
  var main = this.main;
29232
29345
  // Check if can be expanded
29233
29346
  if (nextFreeElement === this._firstRetiredElement) {
29234
- var increaseCount = Math.min(ParticleGenerator._particleIncreaseCount, main.maxParticles - this._currentParticleCount);
29347
+ var increaseCount = Math.min(ParticleGenerator._particleIncreaseCount, main._maxParticleBuffer - this._currentParticleCount);
29235
29348
  if (increaseCount === 0) {
29236
29349
  return;
29237
29350
  }
29238
- this._resizeInstanceBuffer(increaseCount);
29351
+ this._resizeInstanceBuffer(true, increaseCount);
29239
29352
  // Recalculate nextFreeElement after resize
29240
29353
  nextFreeElement = firstFreeElement + 1;
29241
- // Maintain expanded pointers
29242
- this._firstNewElement > firstFreeElement && (this._firstNewElement += increaseCount);
29243
- this._firstActiveElement > firstFreeElement && (this._firstActiveElement += increaseCount);
29244
- this._firstRetiredElement > firstFreeElement && (this._firstRetiredElement += increaseCount);
29245
29354
  }
29246
29355
  var pos, rot;
29247
29356
  if (main.simulationSpace === ParticleSimulationSpace.World) {
29248
29357
  pos = transform.worldPosition;
29249
29358
  rot = transform.worldRotationQuaternion;
29250
29359
  }
29360
+ var particleUtils = this._renderer.engine._particleBufferUtils;
29251
29361
  var startSpeed = main.startSpeed.evaluate(undefined, main._startSpeedRand.random());
29252
29362
  var instanceVertices = this._instanceVertices;
29253
29363
  var offset = firstFreeElement * particleUtils.instanceVertexFloatStride;
@@ -29351,7 +29461,7 @@ __decorate([
29351
29461
  var particleUtils = engine._particleBufferUtils;
29352
29462
  var frameCount = engine.time.frameCount;
29353
29463
  var instanceVertices = this._instanceVertices;
29354
- while(this._firstActiveElement != this._firstNewElement){
29464
+ while(this._firstActiveElement !== this._firstNewElement){
29355
29465
  var activeParticleOffset = this._firstActiveElement * particleUtils.instanceVertexFloatStride;
29356
29466
  var activeParticleTimeOffset = activeParticleOffset + particleUtils.timeOffset;
29357
29467
  var particleAge = this._playTime - instanceVertices[activeParticleTimeOffset];
@@ -29368,37 +29478,10 @@ __decorate([
29368
29478
  this._waitProcessRetiredElementCount++;
29369
29479
  }
29370
29480
  };
29371
- /**
29372
- * @internal
29373
- */ _proto._updateShaderData = function _updateShaderData(shaderData) {
29374
- this.main._updateShaderData(shaderData);
29375
- this.velocityOverLifetime._updateShaderData(shaderData);
29376
- this.textureSheetAnimation._updateShaderData(shaderData);
29377
- this.sizeOverLifetime._updateShaderData(shaderData);
29378
- this.rotationOverLifetime._updateShaderData(shaderData);
29379
- this.colorOverLifetime._updateShaderData(shaderData);
29380
- };
29381
- /**
29382
- * @internal
29383
- */ _proto._resetGlobalRandSeed = function _resetGlobalRandSeed(seed) {
29384
- this._randomSeed = seed;
29385
- this.main._resetRandomSeed(seed);
29386
- this.emission._resetRandomSeed(seed);
29387
- this.textureSheetAnimation._resetRandomSeed(seed);
29388
- this.velocityOverLifetime._resetRandomSeed(seed);
29389
- this.rotationOverLifetime._resetRandomSeed(seed);
29390
- this.colorOverLifetime._resetRandomSeed(seed);
29391
- };
29392
- /**
29393
- * @internal
29394
- */ _proto._destroy = function _destroy() {
29395
- this._instanceVertexBufferBinding.buffer.destroy();
29396
- this._primitive.destroy();
29397
- };
29398
29481
  _proto._freeRetiredParticles = function _freeRetiredParticles() {
29399
29482
  var particleUtils = this._renderer.engine._particleBufferUtils;
29400
29483
  var frameCount = this._renderer.engine.time.frameCount;
29401
- while(this._firstRetiredElement != this._firstActiveElement){
29484
+ while(this._firstRetiredElement !== this._firstActiveElement){
29402
29485
  var offset = this._firstRetiredElement * particleUtils.instanceVertexFloatStride + particleUtils.startLifeTimeOffset;
29403
29486
  var age = frameCount - this._instanceVertices[offset];
29404
29487
  // WebGL don't support map buffer range, so off this optimization