Nicolas Cannasse 10 роки тому
батько
коміт
918ebd4230
5 змінених файлів з 60 додано та 13 видалено
  1. 2 2
      h2d/filter/Blur.hx
  2. 34 0
      h2d/filter/DropShadow.hx
  3. 2 2
      h2d/filter/Glow.hx
  4. 2 2
      h3d/pass/Blur.hx
  5. 20 7
      samples/filters/Main.hx

+ 2 - 2
h2d/filter/Blur.hx

@@ -19,9 +19,9 @@ class Blur extends Filter {
 
 	var pass : h3d.pass.Blur;
 
-	public function new( quality = 1, sigma = 1., passes = 1 ) {
+	public function new( quality = 1, passes = 1, sigma = 1. ) {
 		super();
-		pass = new h3d.pass.Blur(quality, sigma, passes);
+		pass = new h3d.pass.Blur(quality, passes, sigma);
 	}
 
 	inline function get_quality() return pass.quality;

+ 34 - 0
h2d/filter/DropShadow.hx

@@ -0,0 +1,34 @@
+package h2d.filter;
+import hxd.Math;
+
+class DropShadow extends Glow {
+
+	public var distance : Float;
+	public var angle : Float;
+
+	public function new( distance : Float = 4., angle : Float = 0.785, color : Int = 0, alpha = 1., quality = 1, passes = 1, sigma = 1. ) {
+		super(color, alpha, quality, passes, sigma);
+		this.distance = distance;
+		this.angle = angle;
+	}
+
+	override function sync(ctx, s) {
+		super.sync(ctx, s);
+		boundsExtend += Math.max(Math.abs(Math.cos(angle) * distance), Math.abs(Math.sin(angle) * distance));
+	}
+
+	override function draw( ctx : RenderContext, t : h2d.Tile ) {
+		pass.shader.fixedColor.setColor(color);
+		pass.shader.fixedColor.w = alpha;
+		var save = ctx.textures.allocTarget("glowSave", ctx, t.width, t.height, false);
+		h3d.pass.Copy.run(t.getTexture(), save, None);
+		pass.apply(t.getTexture(), ctx.textures.allocTarget("glowTmp", ctx, t.width, t.height, false));
+		var dx = Math.round(Math.cos(angle) * distance);
+		var dy = Math.round(Math.sin(angle) * distance);
+		h3d.pass.Copy.run(save, t.getTexture(), Alpha, new h3d.Vector( dx / t.width, dy / t.height) );
+		t.dx = dx;
+		t.dy = dy;
+		return t;
+	}
+
+}

+ 2 - 2
h2d/filter/Glow.hx

@@ -5,8 +5,8 @@ class Glow extends Blur {
 	public var color : Int;
 	public var alpha : Float;
 
-	public function new( color : Int = 0xFFFFFF, alpha = 1., quality = 1, sigma = 1., passes = 1 ) {
-		super(quality, sigma, passes);
+	public function new( color : Int = 0xFFFFFF, alpha = 1., quality = 1, passes = 1, sigma = 1. ) {
+		super(quality, passes, sigma);
 		this.color = color;
 		this.alpha = alpha;
 		pass.shader.hasFixedColor = true;

+ 2 - 2
h3d/pass/Blur.hx

@@ -19,11 +19,11 @@ class Blur extends ScreenFx<h3d.shader.Blur> {
 
 	var values : Array<Float>;
 
-	public function new(quality = 1, sigma = 1.,passes = 1) {
+	public function new(quality = 1, passes = 1, sigma = 1.) {
 		super(new h3d.shader.Blur());
 		this.quality = quality;
-		this.sigma = sigma;
 		this.passes = passes;
+		this.sigma = sigma;
 	}
 
 	function set_quality(q) {

+ 20 - 7
samples/filters/Main.hx

@@ -3,40 +3,53 @@ import hxd.Key in K;
 class Main extends hxd.App {
 
 	var spr : h2d.Sprite;
+	var bmp : h2d.Bitmap;
 
 	override function init() {
 		engine.backgroundColor = 0x002000;
 		var scale = 4;
+
 		spr = new h2d.Sprite(s2d);
 		spr.x = s2d.width * 0.5;
 		spr.y = s2d.height * 0.5;
 		spr.scale(scale);
-		var bmp = new h2d.Bitmap(hxd.Res.hxlogo.toTile(), spr);
+
+		bmp = new h2d.Bitmap(hxd.Res.hxlogo.toTile(), spr);
 		bmp.scale(1 / scale);
 		bmp.colorKey = 0xFFFFFF;
-		bmp.x = -bmp.tile.width * 0.5 * bmp.scaleX;
-		bmp.y = -bmp.tile.height * 0.5 * bmp.scaleY;
 
-		setFilters(2);
+		setFilters(3);
 
 		var help = new h2d.Text(hxd.Res.customFont.toFont(), s2d);
 		help.x = help.y = 5;
-		help.text = "1:Blur 2:Glow";
+		help.text = "1:Blur 2:Glow 3:DropShadow +/-:Scale";
 	}
 
 	override function update(dt:Float) {
 		spr.rotation += 0.01 * dt;
-		for( i in 1...3 )
+		for( i in 1...4 )
 			if( K.isPressed(K.NUMBER_0 + i) )
 				setFilters(i);
+		if( K.isPressed(K.NUMPAD_ADD) ) {
+			spr.scale(1.25);
+			bmp.scale(1 / 1.25);
+		}
+		if( K.isPressed(K.NUMPAD_SUB) ) {
+			spr.scale(1 / 1.25);
+			bmp.scale(1.25);
+		}
+		bmp.x = -bmp.tile.width * 0.5 * bmp.scaleX;
+		bmp.y = -bmp.tile.height * 0.5 * bmp.scaleY;
 	}
 
 	function setFilters(i) {
 		switch( i ) {
 		case 1:
-			spr.filters = [new h2d.filter.Blur(2, 100, 3)];
+			spr.filters = [new h2d.filter.Blur(2, 3, 100)];
 		case 2:
 			spr.filters = [new h2d.filter.Glow(0xFF00FF, 100, 1)];
+		case 3:
+			spr.filters = [new h2d.filter.DropShadow()];
 		}
 	}