class AUECHO extends Shader { AUECHO() { name = "fxAUecho"; params.add(new Param("mode", 2, new int[]{RANDOM})); params.add(new Param("echo", 0, 255, new int[]{SIN, LINE, RAMPUPDOWN, TAN, COS})); params.add(new Param("decay", 0, 255, new int[]{SIN, LINE, RAMPUPDOWN, TAN, COS})); } /* float inc1, inc2; void animate() { inc1+=.00003; inc2+=.04; params.get(1).setValue((sin(inc1)+1)/4); params.get(2).setValue((sin(inc2)+1)/2); if (random(1) > .99) { for (int i = 0; i < params.size(); i++) params.get(i).randomize(); } } */ void apply() { renderer.beginDraw(); if (params.get(0).value == 0) { renderer.colorMode(HSB); colorMode(HSB); } else { renderer.colorMode(RGB); colorMode(RGB); } renderer.loadPixels(); float _delay = map(params.get(1).getValue(params.get(1).value, true), 0, 1, 0.001, 1.0); float decay = map(params.get(2).getValue(params.get(2).value, true), 0, 1, 0.0, 1.0); int delay = (int)(renderer.pixels.length * _delay); color[] history = new color[renderer.pixels.length]; int blendMode = BLEND; for ( int i = 0, l = renderer.pixels.length; i 255 ? r + red(origColor) - 255 : r + red(origColor), // simulate overflow ;) g = g + green(origColor) > 255 ? g + green(origColor) - 255 : g + green(origColor), b = b + blue(origColor) > 255 ? b + blue(origColor) - 255 : b + blue(origColor) ); renderer.pixels[i] = history[i] = toColor; //blendColor(origColor, toColor, blendMode); } renderer.updatePixels(); if (params.get(0).value == 0) { renderer.colorMode(RGB); colorMode(RGB); } renderer.endDraw(); } }