Sfoglia il codice sorgente

added filter + AbstractMask invert

ncannasse 10 anni fa
parent
commit
871566769c

+ 1 - 0
h2d/filter/AbstractMask.hx

@@ -58,6 +58,7 @@ class AbstractMask extends Filter {
 		maskMatrix.y /= tile.height;
 
 		maskMatrix.scale(tile.width / t.width, tile.height / t.height);
+		t.filter = filter ? Linear : Nearest;
 
 		return t;
 	}

+ 3 - 0
h2d/filter/Ambient.hx

@@ -3,6 +3,7 @@ package h2d.filter;
 class Ambient extends AbstractMask {
 
 	public var power(get, set) : Float;
+	public var invert(get, set) : Bool;
 	var pass : h3d.pass.ColorMatrix;
 
 	public function new( mask, ?m : h3d.Matrix ) {
@@ -12,6 +13,8 @@ class Ambient extends AbstractMask {
 
 	inline function get_power() return pass.maskPower;
 	inline function set_power(v) return pass.maskPower = v;
+	inline function get_invert() return pass.shader.maskInvert;
+	inline function set_invert(v) return pass.shader.maskInvert = v;
 
 	override function draw( ctx : RenderContext, t : h2d.Tile ) {
 		var out = ctx.textures.allocTarget("ambientTmp", ctx, t.width, t.height, false);

+ 1 - 0
h2d/filter/Filter.hx

@@ -4,6 +4,7 @@ class Filter {
 
 	public var autoBounds = true;
 	public var boundsExtend : Float = 0.;
+	public var filter = false;
 
 	function new() {
 	}

+ 1 - 1
h3d/mat/Pass.hx

@@ -85,7 +85,7 @@ class Pass {
 		case Multiply:
 			blend(DstColor, Zero);
 		case Erase:
-			blend(Zero, OneMinusSrcAlpha);
+			blend(Zero, OneMinusSrcColor);
 		case Screen:
 			blend(One, OneMinusSrcColor);
 		}

+ 2 - 1
h3d/pass/ColorMatrix.hx

@@ -8,6 +8,7 @@ class ColorMatrixShader extends h3d.shader.ScreenShader {
 		@param var matrix : Mat4;
 
 		@const var useMask : Bool;
+		@const var maskInvert : Bool;
 		@param var mask : Sampler2D;
 		@param var maskMatA : Vec3;
 		@param var maskMatB : Vec3;
@@ -19,7 +20,7 @@ class ColorMatrixShader extends h3d.shader.ScreenShader {
 				var color = texture.get(input.uv);
 				var uv = vec3(input.uv, 1);
 				var k = pow(mask.get( vec2(uv.dot(maskMatA), uv.dot(maskMatB)) ).dot(maskChannel), maskPower);
-				output.color = mix(color * matrix, color, k);
+				output.color = maskInvert ? mix(color, color * matrix, k) : mix(color * matrix, color, k);
 			} else
 				output.color = texture.get(input.uv) * matrix;
 		}