@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/main.js CHANGED
@@ -5839,8 +5839,12 @@ var ShaderFactory = /*#__PURE__*/ function() {
5839
5839
  break;
5840
5840
  case gl.BOOL_VEC3:
5841
5841
  case gl.INT_VEC3:
5842
- shaderUniform.applyFunc = isArray ? shaderUniform.upload3iv : shaderUniform.upload3i;
5843
- shaderUniform.cacheValue = new engineMath.Vector3(0, 0, 0);
5842
+ if (isArray) {
5843
+ shaderUniform.applyFunc = shaderUniform.upload3iv;
5844
+ } else {
5845
+ shaderUniform.applyFunc = shaderUniform.upload3i;
5846
+ shaderUniform.cacheValue = new engineMath.Vector3(0, 0, 0);
5847
+ }
5844
5848
  break;
5845
5849
  case gl.BOOL_VEC4:
5846
5850
  case gl.INT_VEC4:
@@ -7860,6 +7864,9 @@ SimpleSpriteAssembler = __decorate([
7860
7864
  case SpriteModifyFlags.pivot:
7861
7865
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
7862
7866
  break;
7867
+ case SpriteModifyFlags.destroy:
7868
+ this.sprite = null;
7869
+ break;
7863
7870
  }
7864
7871
  };
7865
7872
  _create_class(SpriteMask, [
@@ -9060,6 +9067,10 @@ var BlendShapeFrameDirty;
9060
9067
  Logger.error("mesh is null.");
9061
9068
  return;
9062
9069
  }
9070
+ if (this._mesh.destroyed) {
9071
+ Logger.error("mesh is destroyed.");
9072
+ return;
9073
+ }
9063
9074
  Renderer1.prototype._prepareRender.call(this, context);
9064
9075
  };
9065
9076
  /**
@@ -12726,6 +12737,7 @@ var AssetPromise = /*#__PURE__*/ function() {
12726
12737
  function AssetPromise(executor) {
12727
12738
  var _this = this;
12728
12739
  this._state = "pending";
12740
+ this._progress = 0;
12729
12741
  this._onProgressCallback = [];
12730
12742
  this._promise = new Promise(function(resolve, reject) {
12731
12743
  _this._reject = reject;
@@ -12750,6 +12762,7 @@ var AssetPromise = /*#__PURE__*/ function() {
12750
12762
  };
12751
12763
  var setProgress = function(progress) {
12752
12764
  if (_this._state === "pending") {
12765
+ _this._progress = progress;
12753
12766
  _this._onProgressCallback.forEach(function(callback) {
12754
12767
  return callback(progress);
12755
12768
  });
@@ -12764,7 +12777,12 @@ var AssetPromise = /*#__PURE__*/ function() {
12764
12777
  * @param callback
12765
12778
  * @returns AssetPromise
12766
12779
  */ _proto.onProgress = function onProgress(callback) {
12767
- this._onProgressCallback.push(callback);
12780
+ if (this._progress) {
12781
+ callback(this._progress);
12782
+ }
12783
+ if (this._state === "pending") {
12784
+ this._onProgressCallback.push(callback);
12785
+ }
12768
12786
  return this;
12769
12787
  };
12770
12788
  _proto.then = function then(onfulfilled, onrejected) {
@@ -13075,7 +13093,8 @@ var /** @internal */ PromiseState;
13075
13093
  // Check cache
13076
13094
  var cacheObject = this._assetUrlPool[assetBaseURL];
13077
13095
  if (cacheObject) {
13078
- return new AssetPromise(function(resolve) {
13096
+ return new AssetPromise(function(resolve, _, setProgress) {
13097
+ setProgress(1);
13079
13098
  resolve(_this._getResolveResource(cacheObject, paths));
13080
13099
  });
13081
13100
  }
@@ -13092,8 +13111,10 @@ var /** @internal */ PromiseState;
13092
13111
  var loadingPromises = this._loadingPromises;
13093
13112
  var loadingPromise = loadingPromises[assetURL];
13094
13113
  if (loadingPromise) {
13095
- return new AssetPromise(function(resolve, reject) {
13096
- loadingPromise.then(function(resource) {
13114
+ return new AssetPromise(function(resolve, reject, setProgress) {
13115
+ loadingPromise.onProgress(function(v) {
13116
+ setProgress(v);
13117
+ }).then(function(resource) {
13097
13118
  resolve(resource);
13098
13119
  }).catch(function(error) {
13099
13120
  reject(error);
@@ -19276,12 +19297,20 @@ ShaderPool.init();
19276
19297
  Logger.warn("The material of sky is not defined.");
19277
19298
  return;
19278
19299
  }
19300
+ if (material.destroyed) {
19301
+ Logger.warn("The material of sky is destroyed.");
19302
+ return;
19303
+ }
19279
19304
  if (!mesh) {
19280
19305
  Logger.warn("The mesh of sky is not defined.");
19281
19306
  return;
19282
19307
  }
19283
- 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;
19284
- var sceneData = context.camera.scene.shaderData;
19308
+ if (mesh.destroyed) {
19309
+ Logger.warn("The mesh of sky is destroyed.");
19310
+ return;
19311
+ }
19312
+ 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;
19313
+ var sceneData = scene.shaderData;
19285
19314
  var viewProjMatrix = Sky._viewProjMatrix, projectionMatrix = Sky._projectionMatrix;
19286
19315
  var rhi = engine._hardwareRenderer;
19287
19316
  var materialShaderData = material.shaderData, shader = material.shader, renderState = material.renderState;
@@ -24495,7 +24524,7 @@ var BaseMaterial = /*#__PURE__*/ function(Material1) {
24495
24524
  /**
24496
24525
  * @internal
24497
24526
  */ var AnimationCurveOwner = /*#__PURE__*/ function() {
24498
- function AnimationCurveOwner(target, type, property, cureType) {
24527
+ function AnimationCurveOwner(target, type, component, property, cureType) {
24499
24528
  this.baseEvaluateData = {
24500
24529
  curKeyframeIndex: 0,
24501
24530
  value: null
@@ -24506,9 +24535,8 @@ var BaseMaterial = /*#__PURE__*/ function(Material1) {
24506
24535
  };
24507
24536
  this.updateMark = 0;
24508
24537
  this.target = target;
24509
- this.type = type;
24510
24538
  this.property = property;
24511
- this.component = target.getComponent(type);
24539
+ this.component = component;
24512
24540
  this.cureType = cureType;
24513
24541
  this._isBlendShape = _instanceof(this.component, SkinnedMeshRenderer);
24514
24542
  var assemblerType = AnimationCurveOwner.getAssemblerType(type, property);
@@ -24740,9 +24768,9 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
24740
24768
  var _proto = AnimationClipCurveBinding.prototype;
24741
24769
  /**
24742
24770
  * @internal
24743
- */ _proto._createCurveOwner = function _createCurveOwner(entity) {
24771
+ */ _proto._createCurveOwner = function _createCurveOwner(entity, component) {
24744
24772
  var curveType = this.curve.constructor;
24745
- var owner = new AnimationCurveOwner(entity, this.type, this.property, curveType);
24773
+ var owner = new AnimationCurveOwner(entity, this.type, component, this.property, curveType);
24746
24774
  curveType._initializeOwner(owner);
24747
24775
  owner.saveDefaultValue();
24748
24776
  return owner;
@@ -24760,10 +24788,10 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
24760
24788
  };
24761
24789
  /**
24762
24790
  * @internal
24763
- */ _proto._getTempCurveOwner = function _getTempCurveOwner(entity) {
24791
+ */ _proto._getTempCurveOwner = function _getTempCurveOwner(entity, component) {
24764
24792
  var instanceId = entity.instanceId;
24765
24793
  if (!this._tempCurveOwner[instanceId]) {
24766
- this._tempCurveOwner[instanceId] = this._createCurveOwner(entity);
24794
+ this._tempCurveOwner[instanceId] = this._createCurveOwner(entity, component);
24767
24795
  }
24768
24796
  return this._tempCurveOwner[instanceId];
24769
24797
  };
@@ -24851,9 +24879,15 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
24851
24879
  var curveData = curveBindings[i];
24852
24880
  var targetEntity = entity.findByPath(curveData.relativePath);
24853
24881
  if (targetEntity) {
24854
- var curveOwner = curveData._getTempCurveOwner(targetEntity);
24855
- var value = curveOwner.evaluateValue(curveData.curve, time, false);
24856
- curveOwner.applyValue(value, 1, false);
24882
+ var component = targetEntity.getComponent(curveData.type);
24883
+ if (!component) {
24884
+ continue;
24885
+ }
24886
+ var curveOwner = curveData._getTempCurveOwner(targetEntity, component);
24887
+ if (curveOwner && curveData.curve.keys.length) {
24888
+ var value = curveOwner.evaluateValue(curveData.curve, time, false);
24889
+ curveOwner.applyValue(value, 1, false);
24890
+ }
24857
24891
  }
24858
24892
  }
24859
24893
  };
@@ -26270,11 +26304,15 @@ exports.AnimatorLayerBlendingMode = void 0;
26270
26304
  var targetEntity = curve.relativePath === "" ? entity : entity.findByPath(curve.relativePath);
26271
26305
  if (targetEntity) {
26272
26306
  var _curveOwnerPool, _instanceId, _propertyOwners, _property, _layerCurveOwnerPool, _instanceId1, _layerPropertyOwners, _property1;
26307
+ var component = targetEntity.getComponent(curve.type);
26308
+ if (!component) {
26309
+ continue;
26310
+ }
26273
26311
  var property = curve.property;
26274
26312
  var instanceId = targetEntity.instanceId;
26275
26313
  // Get owner
26276
26314
  var propertyOwners = (_curveOwnerPool = curveOwnerPool)[_instanceId = instanceId] || (_curveOwnerPool[_instanceId] = Object.create(null));
26277
- var owner = (_propertyOwners = propertyOwners)[_property = property] || (_propertyOwners[_property] = curve._createCurveOwner(targetEntity));
26315
+ var owner = (_propertyOwners = propertyOwners)[_property = property] || (_propertyOwners[_property] = curve._createCurveOwner(targetEntity, component));
26278
26316
  // Get layer owner
26279
26317
  var layerPropertyOwners = (_layerCurveOwnerPool = layerCurveOwnerPool)[_instanceId1 = instanceId] || (_layerCurveOwnerPool[_instanceId1] = Object.create(null));
26280
26318
  var layerOwner = (_layerPropertyOwners = layerPropertyOwners)[_property1 = property] || (_layerPropertyOwners[_property1] = curve._createCurveLayerOwner(owner));
@@ -27452,16 +27490,7 @@ exports.ParticleStopMode = void 0;
27452
27490
  };
27453
27491
  _proto._render = function _render(context) {
27454
27492
  var generator = this.generator;
27455
- var primitive = generator._primitive;
27456
- if (generator._firstActiveElement < generator._firstFreeElement) {
27457
- primitive.instanceCount = generator._firstFreeElement - generator._firstActiveElement;
27458
- } else {
27459
- var instanceCount = generator._currentParticleCount - generator._firstActiveElement;
27460
- if (generator._firstFreeElement > 0) {
27461
- instanceCount += generator._firstFreeElement;
27462
- }
27463
- primitive.instanceCount = instanceCount;
27464
- }
27493
+ generator._primitive.instanceCount = generator._getAliveParticleCount();
27465
27494
  var material = this.getMaterial();
27466
27495
  if (!material) {
27467
27496
  return;
@@ -28246,13 +28275,13 @@ var MainModule = /*#__PURE__*/ function() {
28246
28275
  /** Override the default playback speed of the Particle Generator. */ this.simulationSpeed = 1.0;
28247
28276
  /** Control how the Particle Generator applies its Transform component to the particles it emits. */ this.scalingMode = exports.ParticleScaleMode.Local;
28248
28277
  /** If set to true, the Particle Generator automatically begins to play on startup. */ this.playOnEnabled = true;
28249
- this._maxParticles = 1000;
28250
- this._gravity = new engineMath.Vector3();
28278
+ /** @internal */ this._maxParticleBuffer = 1000;
28251
28279
  /** @internal */ this._startSpeedRand = new engineMath.Rand(0, ParticleRandomSubSeeds.StartSpeed);
28252
28280
  /** @internal */ this._startLifeTimeRand = new engineMath.Rand(0, ParticleRandomSubSeeds.StartLifetime);
28253
28281
  /** @internal */ this._startColorRand = new engineMath.Rand(0, ParticleRandomSubSeeds.StartColor);
28254
28282
  /** @internal */ this._startSizeRand = new engineMath.Rand(0, ParticleRandomSubSeeds.StartSize);
28255
28283
  /** @internal */ this._startRotationRand = new engineMath.Rand(0, ParticleRandomSubSeeds.StartRotation);
28284
+ this._gravity = new engineMath.Vector3();
28256
28285
  this._generator = generator;
28257
28286
  }
28258
28287
  var _proto = MainModule.prototype;
@@ -28330,16 +28359,10 @@ var MainModule = /*#__PURE__*/ function() {
28330
28359
  get: /**
28331
28360
  * Max particles count.
28332
28361
  */ function get() {
28333
- return this._maxParticles;
28362
+ return this._maxParticleBuffer - 1;
28334
28363
  },
28335
28364
  set: function set(value) {
28336
- if (this._maxParticles !== value) {
28337
- this._maxParticles = value;
28338
- var generator = this._generator;
28339
- if (value < generator._currentParticleCount) {
28340
- generator._resizeInstanceBuffer(value);
28341
- }
28342
- }
28365
+ this._maxParticleBuffer = value + 1;
28343
28366
  }
28344
28367
  },
28345
28368
  {
@@ -28421,13 +28444,7 @@ __decorate([
28421
28444
  ], MainModule.prototype, "gravityModifier", void 0);
28422
28445
  __decorate([
28423
28446
  ignoreClone
28424
- ], MainModule.prototype, "_maxParticles", void 0);
28425
- __decorate([
28426
- ignoreClone
28427
- ], MainModule.prototype, "_generator", void 0);
28428
- __decorate([
28429
- ignoreClone
28430
- ], MainModule.prototype, "_gravity", void 0);
28447
+ ], MainModule.prototype, "_maxParticleBuffer", void 0);
28431
28448
  __decorate([
28432
28449
  ignoreClone
28433
28450
  ], MainModule.prototype, "_startSpeedRand", void 0);
@@ -28443,6 +28460,12 @@ __decorate([
28443
28460
  __decorate([
28444
28461
  ignoreClone
28445
28462
  ], MainModule.prototype, "_startRotationRand", void 0);
28463
+ __decorate([
28464
+ ignoreClone
28465
+ ], MainModule.prototype, "_generator", void 0);
28466
+ __decorate([
28467
+ ignoreClone
28468
+ ], MainModule.prototype, "_gravity", void 0);
28446
28469
 
28447
28470
  /**
28448
28471
  * Rotate particles throughout their lifetime.
@@ -29040,7 +29063,7 @@ __decorate([
29040
29063
  subPrimitive.start = 0;
29041
29064
  this._primitive = new Primitive(renderer.engine);
29042
29065
  this._reorganizeGeometryBuffers();
29043
- this._resizeInstanceBuffer(ParticleGenerator._particleIncreaseCount);
29066
+ this._resizeInstanceBuffer(true, ParticleGenerator._particleIncreaseCount);
29044
29067
  this.emission.enabled = true;
29045
29068
  }
29046
29069
  var _proto = ParticleGenerator.prototype;
@@ -29097,9 +29120,13 @@ __decorate([
29097
29120
  /**
29098
29121
  * @internal
29099
29122
  */ _proto._emit = function _emit(time, count) {
29100
- var position = ParticleGenerator._tempVector30;
29101
- var direction = ParticleGenerator._tempVector31;
29102
29123
  if (this.emission.enabled) {
29124
+ // Wait the existing particles to be retired
29125
+ if (this.main._maxParticleBuffer < this._currentParticleCount) {
29126
+ return;
29127
+ }
29128
+ var position = ParticleGenerator._tempVector30;
29129
+ var direction = ParticleGenerator._tempVector31;
29103
29130
  var transform = this._renderer.entity.transform;
29104
29131
  var shape = this.emission.shape;
29105
29132
  for(var i = 0; i < count; i++){
@@ -29126,6 +29153,13 @@ __decorate([
29126
29153
  this._retireActiveParticles();
29127
29154
  this._freeRetiredParticles();
29128
29155
  if (emission.enabled && this._isPlaying) {
29156
+ // If maxParticles is changed dynamically, currentParticleCount may be greater than maxParticles
29157
+ if (this._currentParticleCount > main._maxParticleBuffer) {
29158
+ var notRetireParticleCount = this._getNotRetiredParticleCount();
29159
+ if (notRetireParticleCount < main._maxParticleBuffer) {
29160
+ this._resizeInstanceBuffer(false);
29161
+ }
29162
+ }
29129
29163
  emission._emit(lastPlayTime, this._playTime);
29130
29164
  if (!main.isLoop && this._playTime > duration) {
29131
29165
  this._isPlaying = false;
@@ -29197,12 +29231,12 @@ __decorate([
29197
29231
  };
29198
29232
  /**
29199
29233
  * @internal
29200
- */ _proto._resizeInstanceBuffer = function _resizeInstanceBuffer(increaseCount) {
29234
+ */ _proto._resizeInstanceBuffer = function _resizeInstanceBuffer(isIncrease, increaseCount) {
29201
29235
  var _this__instanceVertexBufferBinding;
29202
29236
  (_this__instanceVertexBufferBinding = this._instanceVertexBufferBinding) == null ? void 0 : _this__instanceVertexBufferBinding.buffer.destroy();
29203
29237
  var particleUtils = this._renderer.engine._particleBufferUtils;
29204
29238
  var stride = particleUtils.instanceVertexStride;
29205
- var newParticleCount = this._currentParticleCount + increaseCount;
29239
+ var newParticleCount = isIncrease ? this._currentParticleCount + increaseCount : this.main._maxParticleBuffer;
29206
29240
  var newByteLength = stride * newParticleCount;
29207
29241
  var engine = this._renderer.engine;
29208
29242
  var vertexInstanceBuffer = new Buffer(engine, exports.BufferBindFlag.VertexBuffer, newByteLength, exports.BufferUsage.Dynamic, false);
@@ -29213,10 +29247,37 @@ __decorate([
29213
29247
  var lastInstanceVertices = this._instanceVertices;
29214
29248
  if (lastInstanceVertices) {
29215
29249
  var floatStride = particleUtils.instanceVertexFloatStride;
29216
- var freeOffset = this._firstFreeElement * floatStride;
29217
- instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, 0, freeOffset));
29218
- var freeEndOffset = (this._firstFreeElement + increaseCount) * floatStride;
29219
- instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, freeOffset * 4), freeEndOffset);
29250
+ var firstFreeElement = this._firstFreeElement;
29251
+ var firstRetiredElement = this._firstRetiredElement;
29252
+ if (isIncrease) {
29253
+ var freeOffset = this._firstFreeElement * floatStride;
29254
+ instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, 0, freeOffset));
29255
+ var freeEndOffset = (this._firstFreeElement + increaseCount) * floatStride;
29256
+ instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, freeOffset * 4), freeEndOffset);
29257
+ // Maintain expanded pointers
29258
+ this._firstNewElement > firstFreeElement && (this._firstNewElement += increaseCount);
29259
+ this._firstActiveElement > firstFreeElement && (this._firstActiveElement += increaseCount);
29260
+ firstRetiredElement > firstFreeElement && (this._firstRetiredElement += increaseCount);
29261
+ } else {
29262
+ var migrateCount, bufferOffset;
29263
+ if (firstRetiredElement <= firstFreeElement) {
29264
+ migrateCount = firstFreeElement - firstRetiredElement;
29265
+ bufferOffset = 0;
29266
+ // Maintain expanded pointers
29267
+ this._firstFreeElement -= firstRetiredElement;
29268
+ this._firstNewElement -= firstRetiredElement;
29269
+ this._firstActiveElement -= firstRetiredElement;
29270
+ this._firstRetiredElement = 0;
29271
+ } else {
29272
+ migrateCount = this._currentParticleCount - firstRetiredElement;
29273
+ bufferOffset = firstFreeElement;
29274
+ // Maintain expanded pointers
29275
+ this._firstNewElement > firstFreeElement && (this._firstNewElement -= firstFreeElement);
29276
+ this._firstActiveElement > firstFreeElement && (this._firstActiveElement -= firstFreeElement);
29277
+ firstRetiredElement > firstFreeElement && (this._firstRetiredElement -= firstFreeElement);
29278
+ }
29279
+ instanceVertices.set(new Float32Array(lastInstanceVertices.buffer, firstRetiredElement * floatStride * 4, migrateCount * floatStride), bufferOffset * floatStride);
29280
+ }
29220
29281
  this._instanceBufferResized = true;
29221
29282
  }
29222
29283
  // Instance buffer always at last
@@ -29225,8 +29286,60 @@ __decorate([
29225
29286
  this._instanceVertexBufferBinding = vertexBufferBinding;
29226
29287
  this._currentParticleCount = newParticleCount;
29227
29288
  };
29289
+ /**
29290
+ * @internal
29291
+ */ _proto._updateShaderData = function _updateShaderData(shaderData) {
29292
+ this.main._updateShaderData(shaderData);
29293
+ this.velocityOverLifetime._updateShaderData(shaderData);
29294
+ this.textureSheetAnimation._updateShaderData(shaderData);
29295
+ this.sizeOverLifetime._updateShaderData(shaderData);
29296
+ this.rotationOverLifetime._updateShaderData(shaderData);
29297
+ this.colorOverLifetime._updateShaderData(shaderData);
29298
+ };
29299
+ /**
29300
+ * @internal
29301
+ */ _proto._resetGlobalRandSeed = function _resetGlobalRandSeed(seed) {
29302
+ this._randomSeed = seed;
29303
+ this.main._resetRandomSeed(seed);
29304
+ this.emission._resetRandomSeed(seed);
29305
+ this.textureSheetAnimation._resetRandomSeed(seed);
29306
+ this.velocityOverLifetime._resetRandomSeed(seed);
29307
+ this.rotationOverLifetime._resetRandomSeed(seed);
29308
+ this.colorOverLifetime._resetRandomSeed(seed);
29309
+ };
29310
+ /**
29311
+ * @internal
29312
+ */ _proto._getAliveParticleCount = function _getAliveParticleCount() {
29313
+ if (this._firstActiveElement <= this._firstFreeElement) {
29314
+ return this._firstFreeElement - this._firstActiveElement;
29315
+ } else {
29316
+ var instanceCount = this._currentParticleCount - this._firstActiveElement;
29317
+ if (this._firstFreeElement > 0) {
29318
+ instanceCount += this._firstFreeElement;
29319
+ }
29320
+ return instanceCount;
29321
+ }
29322
+ };
29323
+ /**
29324
+ * @internal
29325
+ */ _proto._getNotRetiredParticleCount = function _getNotRetiredParticleCount() {
29326
+ if (this._firstRetiredElement <= this._firstFreeElement) {
29327
+ return this._firstFreeElement - this._firstRetiredElement;
29328
+ } else {
29329
+ var instanceCount = this._currentParticleCount - this._firstRetiredElement;
29330
+ if (this._firstFreeElement > 0) {
29331
+ instanceCount += this._firstFreeElement;
29332
+ }
29333
+ return instanceCount;
29334
+ }
29335
+ };
29336
+ /**
29337
+ * @internal
29338
+ */ _proto._destroy = function _destroy() {
29339
+ this._instanceVertexBufferBinding.buffer.destroy();
29340
+ this._primitive.destroy();
29341
+ };
29228
29342
  _proto._addNewParticle = function _addNewParticle(position, direction, transform, time) {
29229
- var particleUtils = this._renderer.engine._particleBufferUtils;
29230
29343
  var firstFreeElement = this._firstFreeElement;
29231
29344
  var nextFreeElement = firstFreeElement + 1;
29232
29345
  if (nextFreeElement >= this._currentParticleCount) {
@@ -29235,23 +29348,20 @@ __decorate([
29235
29348
  var main = this.main;
29236
29349
  // Check if can be expanded
29237
29350
  if (nextFreeElement === this._firstRetiredElement) {
29238
- var increaseCount = Math.min(ParticleGenerator._particleIncreaseCount, main.maxParticles - this._currentParticleCount);
29351
+ var increaseCount = Math.min(ParticleGenerator._particleIncreaseCount, main._maxParticleBuffer - this._currentParticleCount);
29239
29352
  if (increaseCount === 0) {
29240
29353
  return;
29241
29354
  }
29242
- this._resizeInstanceBuffer(increaseCount);
29355
+ this._resizeInstanceBuffer(true, increaseCount);
29243
29356
  // Recalculate nextFreeElement after resize
29244
29357
  nextFreeElement = firstFreeElement + 1;
29245
- // Maintain expanded pointers
29246
- this._firstNewElement > firstFreeElement && (this._firstNewElement += increaseCount);
29247
- this._firstActiveElement > firstFreeElement && (this._firstActiveElement += increaseCount);
29248
- this._firstRetiredElement > firstFreeElement && (this._firstRetiredElement += increaseCount);
29249
29358
  }
29250
29359
  var pos, rot;
29251
29360
  if (main.simulationSpace === exports.ParticleSimulationSpace.World) {
29252
29361
  pos = transform.worldPosition;
29253
29362
  rot = transform.worldRotationQuaternion;
29254
29363
  }
29364
+ var particleUtils = this._renderer.engine._particleBufferUtils;
29255
29365
  var startSpeed = main.startSpeed.evaluate(undefined, main._startSpeedRand.random());
29256
29366
  var instanceVertices = this._instanceVertices;
29257
29367
  var offset = firstFreeElement * particleUtils.instanceVertexFloatStride;
@@ -29355,7 +29465,7 @@ __decorate([
29355
29465
  var particleUtils = engine._particleBufferUtils;
29356
29466
  var frameCount = engine.time.frameCount;
29357
29467
  var instanceVertices = this._instanceVertices;
29358
- while(this._firstActiveElement != this._firstNewElement){
29468
+ while(this._firstActiveElement !== this._firstNewElement){
29359
29469
  var activeParticleOffset = this._firstActiveElement * particleUtils.instanceVertexFloatStride;
29360
29470
  var activeParticleTimeOffset = activeParticleOffset + particleUtils.timeOffset;
29361
29471
  var particleAge = this._playTime - instanceVertices[activeParticleTimeOffset];
@@ -29372,37 +29482,10 @@ __decorate([
29372
29482
  this._waitProcessRetiredElementCount++;
29373
29483
  }
29374
29484
  };
29375
- /**
29376
- * @internal
29377
- */ _proto._updateShaderData = function _updateShaderData(shaderData) {
29378
- this.main._updateShaderData(shaderData);
29379
- this.velocityOverLifetime._updateShaderData(shaderData);
29380
- this.textureSheetAnimation._updateShaderData(shaderData);
29381
- this.sizeOverLifetime._updateShaderData(shaderData);
29382
- this.rotationOverLifetime._updateShaderData(shaderData);
29383
- this.colorOverLifetime._updateShaderData(shaderData);
29384
- };
29385
- /**
29386
- * @internal
29387
- */ _proto._resetGlobalRandSeed = function _resetGlobalRandSeed(seed) {
29388
- this._randomSeed = seed;
29389
- this.main._resetRandomSeed(seed);
29390
- this.emission._resetRandomSeed(seed);
29391
- this.textureSheetAnimation._resetRandomSeed(seed);
29392
- this.velocityOverLifetime._resetRandomSeed(seed);
29393
- this.rotationOverLifetime._resetRandomSeed(seed);
29394
- this.colorOverLifetime._resetRandomSeed(seed);
29395
- };
29396
- /**
29397
- * @internal
29398
- */ _proto._destroy = function _destroy() {
29399
- this._instanceVertexBufferBinding.buffer.destroy();
29400
- this._primitive.destroy();
29401
- };
29402
29485
  _proto._freeRetiredParticles = function _freeRetiredParticles() {
29403
29486
  var particleUtils = this._renderer.engine._particleBufferUtils;
29404
29487
  var frameCount = this._renderer.engine.time.frameCount;
29405
- while(this._firstRetiredElement != this._firstActiveElement){
29488
+ while(this._firstRetiredElement !== this._firstActiveElement){
29406
29489
  var offset = this._firstRetiredElement * particleUtils.instanceVertexFloatStride + particleUtils.startLifeTimeOffset;
29407
29490
  var age = frameCount - this._instanceVertices[offset];
29408
29491
  // WebGL don't support map buffer range, so off this optimization