compositor for 2d shader
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. class AUECHO extends Shader {
  2. AUECHO() {
  3. name = "fxAUecho";
  4. params.add(new Param("mode", 2, new int[]{RANDOM}));
  5. params.add(new Param("echo", 0, 255, new int[]{SIN, LINE, RAMPUPDOWN, TAN, COS}));
  6. params.add(new Param("decay", 0, 255, new int[]{SIN, LINE, RAMPUPDOWN, TAN, COS}));
  7. }
  8. /*
  9. float inc1, inc2;
  10. void animate() {
  11. inc1+=.00003;
  12. inc2+=.04;
  13. params.get(1).setValue((sin(inc1)+1)/4);
  14. params.get(2).setValue((sin(inc2)+1)/2);
  15. if (random(1) > .99) {
  16. for (int i = 0; i < params.size(); i++)
  17. params.get(i).randomize();
  18. }
  19. }
  20. */
  21. void apply() {
  22. renderer.beginDraw();
  23. if (params.get(0).value == 0) {
  24. renderer.colorMode(HSB);
  25. colorMode(HSB);
  26. } else {
  27. renderer.colorMode(RGB);
  28. colorMode(RGB);
  29. }
  30. renderer.loadPixels();
  31. float _delay = map(params.get(1).getValue(params.get(1).value, true), 0, 1, 0.001, 1.0);
  32. float decay = map(params.get(2).getValue(params.get(2).value, true), 0, 1, 0.0, 1.0);
  33. int delay = (int)(renderer.pixels.length * _delay);
  34. color[] history = new color[renderer.pixels.length];
  35. int blendMode = BLEND;
  36. for ( int i = 0, l = renderer.pixels.length; i<l; i++) {
  37. history[i] = renderer.pixels[i];
  38. }
  39. for ( int i = 0, l = renderer.pixels.length; i<l; i++) {
  40. int fromPos = i-delay < 0 ? l-abs(i-delay) : i-delay;
  41. color fromColor = history[fromPos];
  42. float r = red(fromColor) * decay;
  43. float g = green(fromColor) * decay;
  44. float b = blue(fromColor) * decay;
  45. color origColor = history[i];
  46. color toColor = color(
  47. r = r + red(origColor) > 255 ? r + red(origColor) - 255 : r + red(origColor), // simulate overflow ;)
  48. g = g + green(origColor) > 255 ? g + green(origColor) - 255 : g + green(origColor),
  49. b = b + blue(origColor) > 255 ? b + blue(origColor) - 255 : b + blue(origColor) );
  50. renderer.pixels[i] = history[i] = toColor; //blendColor(origColor, toColor, blendMode);
  51. }
  52. renderer.updatePixels();
  53. if (params.get(0).value == 0) {
  54. renderer.colorMode(RGB);
  55. colorMode(RGB);
  56. }
  57. renderer.endDraw();
  58. }
  59. }