Bloom.hx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package h2d.filter;
  2. /**
  3. Applies a bloom effect to the filtered Object.
  4. Produces feathers to light areas in the objects.
  5. **/
  6. class Bloom extends Blur {
  7. var bloom : h3d.pass.ScreenFx<h3d.shader.Bloom>;
  8. /**
  9. The bloom luminosity multiplier.
  10. **/
  11. public var amount(get, set) : Float;
  12. /**
  13. The bloom luminosity exponent.
  14. **/
  15. public var power(get, set) : Float;
  16. /**
  17. @param power The bloom luminosity exponent.
  18. @param amount The bloom luminosity multiplier.
  19. @param radius The bloom glow distance in pixels.
  20. @param gain The bloom color intensity.
  21. @param quality The sample count on each pixel as a tradeoff of speed/quality.
  22. **/
  23. public function new( power = 2., amount = 1., radius = 1., gain = 1., quality = 1. ) {
  24. super(radius,gain,quality);
  25. bloom = new h3d.pass.ScreenFx(new h3d.shader.Bloom());
  26. bloom.shader.power = power;
  27. bloom.shader.amount = amount;
  28. @:privateAccess bloom.pass.blend(One, One);
  29. }
  30. inline function get_amount() return bloom.shader.amount;
  31. inline function set_amount(v) return bloom.shader.amount = v;
  32. inline function get_power() return bloom.shader.power;
  33. inline function set_power(v) return bloom.shader.power = v;
  34. override function draw( ctx : RenderContext, t : h2d.Tile ) {
  35. var dst = ctx.textures.allocTileTarget("dest", t);
  36. h3d.pass.Copy.run(t.getTexture(), dst);
  37. var blurred = super.draw(ctx, t);
  38. bloom.shader.texture = blurred.getTexture();
  39. ctx.engine.pushTarget(dst);
  40. bloom.render();
  41. ctx.engine.popTarget();
  42. return h2d.Tile.fromTexture(dst);
  43. }
  44. }