Jelajahi Sumber

fix dark in both pma and non-pma (#993)

Ivan Popelyshev 8 tahun lalu
induk
melakukan
8506e16f2d
2 mengubah file dengan 14 tambahan dan 5 penghapusan
  1. 2 3
      spine-ts/webgl/src/Shader.ts
  2. 12 2
      spine-ts/webgl/src/SkeletonRenderer.ts

+ 2 - 3
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;
 				}
 			`;
 

+ 12 - 2
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) {