Răsfoiți Sursa

prevent shaders from being applied twice when both shaders+filters on same element

ncannasse 6 ani în urmă
părinte
comite
fc7a4d7aac
2 a modificat fișierele cu 15 adăugiri și 2 ștergeri
  1. 7 0
      h2d/Drawable.hx
  2. 8 2
      h2d/Object.hx

+ 7 - 0
h2d/Drawable.hx

@@ -69,6 +69,13 @@ class Drawable extends Object {
 		return c;
 	}
 
+	override function drawFiltered(ctx:RenderContext, tile:Tile) {
+		var old = shaders;
+		shaders = null;
+		super.drawFiltered(ctx, tile);
+		shaders = old;
+	}
+
 	function set_colorKey(v:Null<Int>) {
 		var s = getShader(h3d.shader.ColorKey);
 		if( s == null ) {

+ 8 - 2
h2d/Object.hx

@@ -733,11 +733,17 @@ class Object {
 		if( finalTile == null )
 			return;
 
+		ctx.globalAlpha = oldAlpha;
+		drawFiltered(ctx, finalTile);
+	}
+
+	function drawFiltered( ctx : RenderContext, tile : h2d.Tile ) {
 		@:privateAccess {
+			var oldAlpha = ctx.globalAlpha;
 			ctx.currentBlend = null;
 			ctx.inFilterBlend = blendMode;
-			ctx.globalAlpha = oldAlpha * alpha;
-			emitTile(ctx, finalTile);
+			ctx.globalAlpha *= alpha;
+			emitTile(ctx, tile);
 			ctx.globalAlpha = oldAlpha;
 			ctx.flush();
 			ctx.inFilterBlend = null;