ncannasse преди 10 години
родител
ревизия
5374d0b971
променени са 2 файла, в които са добавени 45 реда и са изтрити 0 реда
  1. 27 0
      h2d/filter/Bloom.hx
  2. 18 0
      h3d/shader/Bloom.hx

+ 27 - 0
h2d/filter/Bloom.hx

@@ -0,0 +1,27 @@
+package h2d.filter;
+
+class Bloom extends Blur {
+
+	var bloom : h3d.pass.ScreenFx<h3d.shader.Bloom>;
+
+	public function new( power = 2, amount = 1., quality = 2, passes = 1, sigma = 1 ) {
+		super(quality, passes, sigma);
+		bloom = new h3d.pass.ScreenFx(new h3d.shader.Bloom());
+		bloom.shader.power = power;
+		bloom.shader.amount = amount;
+		@:privateAccess bloom.pass.blend(One, One);
+	}
+
+	override function draw( ctx : RenderContext, t : h2d.Tile ) {
+		var dst = ctx.textures.allocTarget("dest", ctx, t.width, t.height, false);
+		dst.clear(0, 0);
+		h3d.pass.Copy.run(t.getTexture(), dst);
+		var blurred = super.draw(ctx, t);
+		bloom.shader.texture = blurred.getTexture();
+		ctx.engine.setTarget(dst);
+		bloom.render();
+		return h2d.Tile.fromTexture(dst);
+	}
+
+
+}

+ 18 - 0
h3d/shader/Bloom.hx

@@ -0,0 +1,18 @@
+package h3d.shader;
+
+class Bloom extends ScreenShader {
+
+	static var SRC = {
+
+		@param var texture : Sampler2D;
+		@param var power : Float;
+		@param var amount : Float;
+
+		function fragment() {
+			var c = texture.get(input.uv);
+			var lum = c.rgb.dot(vec3(0.2126, 0.7152, 0.0722));
+			output.color = vec4(c.rgb * lum.pow(power) * amount * c.a, c.a);
+		}
+	}
+
+}