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