From 8506e16f2dbc1e224e5cb47960f6ebc153363254 Mon Sep 17 00:00:00 2001 From: Ivan Popelyshev Date: Thu, 28 Sep 2017 12:22:48 +0300 Subject: [PATCH] fix dark in both pma and non-pma (#993) --- spine-ts/webgl/src/Shader.ts | 5 ++--- spine-ts/webgl/src/SkeletonRenderer.ts | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/spine-ts/webgl/src/Shader.ts b/spine-ts/webgl/src/Shader.ts index d9fe2b5d5..07a55963e 100644 --- a/spine-ts/webgl/src/Shader.ts +++ b/spine-ts/webgl/src/Shader.ts @@ -253,9 +253,8 @@ module spine.webgl { void main () { vec4 texColor = texture2D(u_texture, v_texCoords); - float alpha = texColor.a * v_light.a; - gl_FragColor.a = alpha; - gl_FragColor.rgb = (1.0 - texColor.rgb) * v_dark.rgb * alpha + texColor.rgb * v_light.rgb; + gl_FragColor.a = texColor.a * v_light.a; + gl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb; } `; diff --git a/spine-ts/webgl/src/SkeletonRenderer.ts b/spine-ts/webgl/src/SkeletonRenderer.ts index 574e0b09e..2d3fb67c6 100644 --- a/spine-ts/webgl/src/SkeletonRenderer.ts +++ b/spine-ts/webgl/src/SkeletonRenderer.ts @@ -122,8 +122,18 @@ module spine.webgl { finalColor.b *= finalColor.a; } let darkColor = this.tempColor2; - if (slot.darkColor == null) darkColor.set(0, 0, 0, 1); - else darkColor.setFromColor(slot.darkColor); + if (slot.darkColor == null) + darkColor.set(0, 0, 0, 1.0); + else { + if (premultipliedAlpha) { + darkColor.r = slot.darkColor.r * finalColor.a; + darkColor.g = slot.darkColor.g * finalColor.a; + darkColor.b = slot.darkColor.b * finalColor.a; + } else { + darkColor.setFromColor(slot.darkColor); + } + darkColor.a = premultipliedAlpha ? 1.0 : 0.0; + } let slotBlendMode = slot.data.blendMode; if (slotBlendMode != blendMode) {