diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMaterial.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMaterial.ts index f909727db..41da60f14 100644 --- a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMaterial.ts +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMaterial.ts @@ -191,11 +191,9 @@ export class DarkTintMaterial extends Shader { public update(): void { if (this._colorDirty) { this._colorDirty = false; - const baseTexture = this.texture.baseTexture; - const applyToChannels = baseTexture.alphaMode as unknown as boolean; - - Color.shared.setValue(this._tintColor).premultiply(this._alpha, applyToChannels).toArray(this.uniforms.uColor); - Color.shared.setValue(this._darkTintColor).premultiply(this._alpha, applyToChannels).toArray(this.uniforms.uDarkColor); + const missingAlphaInPMAColor = this._alpha / this._tintColor.alpha; + Color.shared.setValue(this._tintColor).premultiply(missingAlphaInPMAColor, true).premultiply(this._alpha, false).toArray(this.uniforms.uColor); + Color.shared.setValue(this._darkTintColor).premultiply(missingAlphaInPMAColor, true).premultiply(1, false).toArray(this.uniforms.uDarkColor); } if (this.uvMatrix.update()) { this.uniforms.uTextureMatrix = this.uvMatrix.mapCoord; diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMesh.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMesh.ts index 0ab3f49a1..3c283cf59 100644 --- a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMesh.ts +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintMesh.ts @@ -43,6 +43,7 @@ export interface IDarkTintElement { _tintRGB: number; // eslint-disable-next-line @typescript-eslint/naming-convention _darkTintRGB: number; + alpha: number; blendMode: BLEND_MODES; } diff --git a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintRenderer.ts b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintRenderer.ts index 1f639f341..6116206b1 100644 --- a/spine-ts/spine-pixi/src/darkTintMesh/DarkTintRenderer.ts +++ b/spine-ts/spine-pixi/src/darkTintMesh/DarkTintRenderer.ts @@ -98,14 +98,10 @@ export class DarkTintRenderer extends BatchRenderer { const indicies = element.indices; const vertexData = element.vertexData; const textureId = element._texture.baseTexture._batchLocation; - const alpha = Math.min(element.worldAlpha, 1.0); - - const alphaInt = Math.round(alpha * 255) & 0xFF; - const tintRGB = element._tintRGB & 0xFFFFFF; - const argb = (alphaInt << 24) | tintRGB; - - const darkTintRGB = element._darkTintRGB & 0xFFFFFF; - const darkargb = (0xFF << 24) | darkTintRGB; + const worldAlpha = Math.min(element.worldAlpha, 1.0); + const missingAlphaInPMAColor = worldAlpha / element.alpha; + const argb = Color.shared.setValue(element._tintRGB).premultiply(missingAlphaInPMAColor, true).toPremultiplied(worldAlpha, false); + const darkargb = Color.shared.setValue(element._darkTintRGB).premultiply(missingAlphaInPMAColor, true).toPremultiplied(1, false); // lets not worry about tint! for now.. for (let i = 0; i < vertexData.length; i += 2) {