Distortion.hx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package hrt.prefab.rfx;
  2. class DistortionTonemap extends hxsl.Shader {
  3. static var SRC = {
  4. var calculatedUV : Vec2;
  5. @param var distortionMap : Sampler2D;
  6. @param var amount : Float;
  7. function fragment() {
  8. var distortionVal = distortionMap.get(calculatedUV).rg * amount;
  9. calculatedUV += distortionVal;
  10. }
  11. }
  12. }
  13. class Distortion extends RendererFX {
  14. var tonemap = new DistortionTonemap();
  15. @:s public var amount : Float = 1;
  16. override function end( r:h3d.scene.Renderer, step:h3d.impl.RendererFX.Step ) {
  17. if( step == BeforeTonemapping ) {
  18. r.mark("Distortion");
  19. var distortionMap = r.allocTarget("distortion", true, 1.0, RG16F);
  20. r.ctx.setGlobal("distortion", distortionMap);
  21. r.setTarget(distortionMap);
  22. r.clear(0);
  23. r.draw("distortion");
  24. tonemap.amount = amount;
  25. tonemap.distortionMap = distortionMap;
  26. r.addShader(tonemap);
  27. }
  28. }
  29. #if editor
  30. override function edit( ctx : hide.prefab.EditContext ) {
  31. ctx.properties.add(new hide.Element('
  32. <div class="group" name="Distortion">
  33. <dl>
  34. <dt>Amount</dt><dd><input type="range" min="0" max="1" field="amount"/></dd>
  35. </dl>
  36. </div>
  37. '),this);
  38. }
  39. #end
  40. static var _ = Library.register("rfx.distortion", Distortion);
  41. }