From 2c45dd2f1ede29e396f7b46087349b25c91a37fe Mon Sep 17 00:00:00 2001 From: badlogic Date: Sat, 30 Sep 2017 09:27:08 +0200 Subject: [PATCH] [libgdx] Ported new tint black shader. See #1003. @nathansweet please have a look. --- .../src/com/esotericsoftware/spine/SkeletonRenderer.java | 7 ++++--- .../esotericsoftware/spine/utils/TwoColorPolygonBatch.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java index 44dc992b1..f0c55c3df 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java @@ -240,6 +240,7 @@ public class SkeletonRenderer { if (vertexEffect != null) vertexEffect.begin(skeleton); boolean premultipliedAlpha = this.premultipliedAlpha; + int darkPremultipliedAlpha = (premultipliedAlpha ? 255 : 0) << 24; BlendMode blendMode = null; int verticesLength = 0; float[] vertices = null, uvs = null; @@ -293,9 +294,9 @@ public class SkeletonRenderer { | (int)(r * lightColor.r * color.r * multiplier)); Color darkColor = slot.getDarkColor(); if (darkColor == null) darkColor = Color.BLACK; - float dark = NumberUtils.intToFloatColor( // - ((int)(b * darkColor.b * color.b * multiplier) << 16) // - | ((int)(g * darkColor.g * color.g * multiplier) << 8) // + float dark = darkColor == null ? 0 : NumberUtils.intToFloatColor(darkPremultipliedAlpha // + | (int)(b * darkColor.b * color.b * multiplier) << 16 // + | (int)(g * darkColor.g * color.g * multiplier) << 8 // | (int)(r * darkColor.r * color.r * multiplier)); BlendMode slotBlendMode = slot.data.getBlendMode(); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java index bdea26bac..9c82e7282 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TwoColorPolygonBatch.java @@ -219,7 +219,7 @@ public class TwoColorPolygonBatch { + "{\n" // + " vec4 texColor = texture2D(u_texture, v_texCoords);\n" // + " gl_FragColor.a = texColor.a * v_light.a;\n" // - + " gl_FragColor.rgb = (1.0 - texColor.rgb) * v_dark * gl_FragColor.a + texColor.rgb * v_light.rgb;\n" // + + " gl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n" // + "}"; ShaderProgram shader = new ShaderProgram(vertexShader, fragmentShader);