Quellcode durchsuchen

fix incorrect alpha channel operation for Alpha blend mode & cleanup

trethaller vor 2 Jahren
Ursprung
Commit
2cdbffd088
1 geänderte Dateien mit 10 neuen und 34 gelöschten Zeilen
  1. 10 34
      h3d/mat/Pass.hx

+ 10 - 34
h3d/mat/Pass.hx

@@ -95,66 +95,42 @@ class Pass {
 	}
 
 	public function setBlendMode( b : BlendMode ) {
+		blendOp = Add;
+		blendAlphaOp = Add;
+
 		switch( b ) {
 		case None: // Out = 1 * Src + 0 * Dst
 			blend(One, Zero);
-			blendOp = Add;
-			blendAlphaOp = Add;
 		case Alpha: // Out = SrcA * Src + (1 - SrcA) * Dst
 			blend(SrcAlpha, OneMinusSrcAlpha);
-			blendOp = Add;
-			blendAlphaOp = Add;
+			blendAlphaSrc = One;
 		case Add: // Out = SrcA * Src + 1 * Dst
 			blend(SrcAlpha, One);
-			blendOp = Add;
-			blendAlphaOp = Add;
+			blendAlphaSrc = One;
 		case AlphaAdd: // Out = Src + (1 - SrcA) * Dst
 			blend(One, OneMinusSrcAlpha);
-			blendOp = Add;
-			blendAlphaOp = Add;
 		case SoftAdd: // Out = (1 - Dst) * Src + 1 * Dst
 			blend(OneMinusDstColor, One);
-			blendOp = Add;
-			blendAlphaOp = Add;
+			blendAlphaSrc = One;
 		case Multiply: // Out = Dst * Src + 0 * Dst
-			blend(DstColor, Zero);
-			blendOp = Add;
-			blendAlphaOp = Add;
+			blend(DstColor, One);
+			blendAlphaSrc = One;
 		case AlphaMultiply: // Out = Dst * Src + (1 - SrcA) * Dst
 			blend(DstColor, OneMinusSrcAlpha);
-			blendOp = Add;
-			blendAlphaOp = Add;
 		case Erase: // Out = 0 * Src + (1 - Srb) * Dst
 			blend(Zero, OneMinusSrcColor);
-			blendOp = Add;
-			blendAlphaOp = Add;
 		case Screen: // Out = 1 * Src + (1 - Srb) * Dst
 			blend(One, OneMinusSrcColor);
-			blendOp = Add;
-			blendAlphaOp = Add;
 		case Sub: // Out = 1 * Dst - SrcA * Src
 			blend(SrcAlpha, One);
 			blendOp = ReverseSub;
 			blendAlphaOp = ReverseSub;
-
-		// The output color min/max of the source and dest colors.
-		// The blend parameters Src and Dst are ignored for this equation.
 		case Max: // Out = MAX( Src, Dst )
-			blendSrc = Zero;
-			blendAlphaSrc = Zero;
-			blendDst = Zero;
-			blendAlphaDst = Zero;
-			blendAlphaSrc = Zero;
-			blendAlphaDst = Zero;
+			blend(One, One);
 			blendAlphaOp = Max;
 			blendOp = Max;
 		case Min: // Out = MIN( Src, Dst )
-			blendSrc = Zero;
-			blendAlphaSrc = Zero;
-			blendDst = Zero;
-			blendAlphaDst = Zero;
-			blendAlphaSrc = Zero;
-			blendAlphaDst = Zero;
+			blend(One, One);
 			blendAlphaOp = Min;
 			blendOp = Min;
 		}