From e7a4eb81bc4d7a989fd363ebe05d78644501344f Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Tue, 31 Oct 2023 16:40:39 +0800 Subject: [PATCH 1/2] fix: ColorOverLifetimeModule mode invalid bug --- .../modules/ColorOverLifetimeModule.ts | 60 ++++++++++--------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/packages/core/src/particle/modules/ColorOverLifetimeModule.ts b/packages/core/src/particle/modules/ColorOverLifetimeModule.ts index e895a893d3..e4815aaa9e 100644 --- a/packages/core/src/particle/modules/ColorOverLifetimeModule.ts +++ b/packages/core/src/particle/modules/ColorOverLifetimeModule.ts @@ -48,39 +48,43 @@ export class ColorOverLifetimeModule extends ParticleGeneratorModule { if (this.enabled) { const mode = this.color.mode; - if (mode === ParticleGradientMode.Gradient || mode === ParticleGradientMode.TwoGradients) { - const color = this.color; - const colorSpace = this._generator._renderer.engine.settings.colorSpace; - shaderData.setFloatArray( - ColorOverLifetimeModule._maxGradientColor, - color.gradientMax._getColorTypeArray(colorSpace) + if (mode !== ParticleGradientMode.Gradient && mode !== ParticleGradientMode.TwoGradients) { + throw new Error( + "Invalid color gradient mode, only gradient and two gradients are supported in color over lifetime." ); - shaderData.setFloatArray(ColorOverLifetimeModule._maxGradientAlpha, color.gradientMax._getAlphaTypeArray()); - - if (mode === ParticleGradientMode.Gradient) { - colorMacro = ColorOverLifetimeModule._gradientMacro; - } else { - shaderData.setFloatArray( - ColorOverLifetimeModule._minGradientColor, - color.gradientMin._getColorTypeArray(colorSpace) - ); - shaderData.setFloatArray(ColorOverLifetimeModule._minGradientAlpha, color.gradientMin._getAlphaTypeArray()); - colorMacro = ColorOverLifetimeModule._randomGradientsMacro; - } + } - const colorMinKeys = color.gradientMin.colorKeys; - const alphaMinKeys = color.gradientMin.alphaKeys; - const colorMaxKeys = color.gradientMax.colorKeys; - const alphaMaxKeys = color.gradientMax.alphaKeys; + const color = this.color; + const colorSpace = this._generator._renderer.engine.settings.colorSpace; + shaderData.setFloatArray( + ColorOverLifetimeModule._maxGradientColor, + color.gradientMax._getColorTypeArray(colorSpace) + ); + shaderData.setFloatArray(ColorOverLifetimeModule._maxGradientAlpha, color.gradientMax._getAlphaTypeArray()); - this._gradientKeysCount.set( - colorMinKeys.length ? colorMinKeys[colorMinKeys.length - 1].time : 0, - alphaMinKeys.length ? alphaMinKeys[alphaMinKeys.length - 1].time : 0, - colorMaxKeys.length ? colorMaxKeys[colorMaxKeys.length - 1].time : 0, - alphaMaxKeys.length ? alphaMaxKeys[alphaMaxKeys.length - 1].time : 0 + if (mode === ParticleGradientMode.Gradient) { + colorMacro = ColorOverLifetimeModule._gradientMacro; + } else { + shaderData.setFloatArray( + ColorOverLifetimeModule._minGradientColor, + color.gradientMin._getColorTypeArray(colorSpace) ); - shaderData.setVector4(ColorOverLifetimeModule._gradientKeysCount, this._gradientKeysCount); + shaderData.setFloatArray(ColorOverLifetimeModule._minGradientAlpha, color.gradientMin._getAlphaTypeArray()); + colorMacro = ColorOverLifetimeModule._randomGradientsMacro; } + + const colorMinKeys = color.gradientMin.colorKeys; + const alphaMinKeys = color.gradientMin.alphaKeys; + const colorMaxKeys = color.gradientMax.colorKeys; + const alphaMaxKeys = color.gradientMax.alphaKeys; + + this._gradientKeysCount.set( + colorMinKeys.length ? colorMinKeys[colorMinKeys.length - 1].time : 0, + alphaMinKeys.length ? alphaMinKeys[alphaMinKeys.length - 1].time : 0, + colorMaxKeys.length ? colorMaxKeys[colorMaxKeys.length - 1].time : 0, + alphaMaxKeys.length ? alphaMaxKeys[alphaMaxKeys.length - 1].time : 0 + ); + shaderData.setVector4(ColorOverLifetimeModule._gradientKeysCount, this._gradientKeysCount); } this._colorMacro = this._enableMacro(shaderData, this._colorMacro, colorMacro); From 77d08a17ca7e3f7aa368eecd54f113f06e34eeb6 Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Tue, 31 Oct 2023 16:44:37 +0800 Subject: [PATCH 2/2] refactor: opt code --- packages/core/src/particle/modules/ColorOverLifetimeModule.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/core/src/particle/modules/ColorOverLifetimeModule.ts b/packages/core/src/particle/modules/ColorOverLifetimeModule.ts index e4815aaa9e..7ac62ae6bc 100644 --- a/packages/core/src/particle/modules/ColorOverLifetimeModule.ts +++ b/packages/core/src/particle/modules/ColorOverLifetimeModule.ts @@ -49,9 +49,7 @@ export class ColorOverLifetimeModule extends ParticleGeneratorModule { const mode = this.color.mode; if (mode !== ParticleGradientMode.Gradient && mode !== ParticleGradientMode.TwoGradients) { - throw new Error( - "Invalid color gradient mode, only gradient and two gradients are supported in color over lifetime." - ); + throw new Error("Invalid color mode, only gradient and two gradients are supported in color over lifetime."); } const color = this.color;