123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
-
-
- class ASDFPIXELSORT extends Shader {
-
- ASDFPIXELSORT() {
- name = "fxASDFPixelSort";
- params.add(new Param("black", 0, 200, new int[]{SIN, LINE, RAMPUPDOWN, TAN, COS}));
- params.add(new Param("white", -20000000, -6000000, new int[]{SIN, LINE, RAMPUPDOWN, TAN, COS}));
- params.add(new Param("brightness", -15000000, 2000000, new int[]{SIN, LINE, RAMPUPDOWN, TAN, COS}));
- params.add(new Param("mode", 3, new int[]{RANDOM}));
- }
- /*
- float playSpeed = 4;
- float inc1, inc2, inc3;
-
- void animate() {
- inc1+=playSpeed/400;
- inc2+=playSpeed/300;
- inc3+=playSpeed/350;
- if ((frameCount % int(map(playSpeed, 0, 4, 15, 120))) == 0) {
- for (int i = 0; i < params.size(); i++)
- params.get(i).randomize();
- }
- params.get(0).setValue((sin(inc1)+1)/2);
- params.get(2).setValue((sin(inc2)+1)/2);
- params.get(1).setValue((sin(inc3)+1)/2);
- }
- */
- void apply() {
- row = 0;
- column = 0;
- renderer.beginDraw();
- renderer.colorMode(RGB);
- colorMode(RGB);
- while (column < renderer.width-1) {
- renderer.loadPixels();
- sortColumn();
- column++;
- renderer.updatePixels();
- }
-
- while (row < renderer.height-1) {
- renderer.loadPixels();
- sortRow();
- row++;
- renderer.updatePixels();
- }
-
- renderer.endDraw();
- }
-
- int row = 0;
- int column = 0;
- void sortRow() {
- int x = 0;
- int y = row;
- int xend = 0;
-
- while (xend < renderer.width-1) {
- switch((int)params.get(3).value) {
- case 0:
- x = getFirstNotBlackX(x, y);
- xend = getNextBlackX(x, y);
- break;
- case 1:
- x = getFirstBrightX(x, y);
- xend = getNextDarkX(x, y);
- break;
- case 2:
- x = getFirstNotWhiteX(x, y);
- xend = getNextWhiteX(x, y);
- break;
- default:
- break;
- }
-
- if (x < 0) break;
-
- int sortLength = xend-x;
-
- color[] unsorted = new color[sortLength];
- color[] sorted = new color[sortLength];
-
- for (int i=0; i<sortLength; i++) {
- unsorted[i] = renderer.pixels[x + i + y * renderer.width];
- }
-
- sorted = sort(unsorted);
-
- for (int i=0; i<sortLength; i++) {
- renderer.pixels[x + i + y * renderer.width] = sorted[i];
- }
-
- x = xend+1;
- }
- }
-
-
- void sortColumn() {
- int x = column;
- int y = 0;
- int yend = 0;
-
- while (yend < renderer.height-1) {
- switch((int)params.get(3).value) {
- case 0:
- y = getFirstNotBlackY(x, y);
- yend = getNextBlackY(x, y);
- break;
- case 1:
- y = getFirstBrightY(x, y);
- yend = getNextDarkY(x, y);
- break;
- case 2:
- y = getFirstNotWhiteY(x, y);
- yend = getNextWhiteY(x, y);
- break;
- default:
- break;
- }
-
- if (y < 0) break;
-
- int sortLength = yend-y;
- color[] unsorted = new color[sortLength];
- color[] sorted = new color[sortLength];
- for (int i=0; i<sortLength; i++) {
- unsorted[i] = renderer.pixels[x + (y+i) * renderer.width];
- }
-
- sorted = sort(unsorted);
-
-
- for (int i=0; i<sortLength; i++) {
- renderer.pixels[x + (y+i) * renderer.width] = sorted[i];
- }
-
- y = yend+1;
- }
- }
-
-
- //BLACK
- int getFirstNotBlackX(int _x, int _y) {
- int x = _x;
- int y = _y;
- color c;
- while ( (c = renderer.pixels[x + y * renderer.width]) < params.get(0).value) {
- x++;
- if (x >= renderer.width) return -1;
- }
- return x;
- }
-
- int getNextBlackX(int _x, int _y) {
- int x = _x+1;
- int y = _y;
- color c;
- while ( (c = renderer.pixels[x + y * renderer.width]) > params.get(0).value) {
- x++;
- if (x >= renderer.width) return renderer.width-1;
- }
- return x-1;
- }
-
- //BRIGHTNESS
- int getFirstBrightX(int _x, int _y) {
- int x = _x;
- int y = _y;
- color c;
- while (brightness (c = renderer.pixels[x + y * renderer.width]) < params.get(2).value) {
- x++;
- if (x >= renderer.width) return -1;
- }
- return x;
- }
-
- int getNextDarkX(int _x, int _y) {
- int x = _x+1;
- int y = _y;
- color c;
- while (brightness (c = renderer.pixels[x + y * renderer.width]) > params.get(2).value) {
- x++;
- if (x >= renderer.width) return renderer.width-1;
- }
- return x-1;
- }
-
- //WHITE
- int getFirstNotWhiteX(int _x, int _y) {
- int x = _x;
- int y = _y;
- color c;
- while ( (c = renderer.pixels[x + y * renderer.width]) > params.get(1).value) {
- x++;
- if (x >= renderer.width) return -1;
- }
- return x;
- }
-
- int getNextWhiteX(int _x, int _y) {
- int x = _x+1;
- int y = _y;
- color c;
- while ( (c = renderer.pixels[x + y * renderer.width]) < params.get(1).value) {
- x++;
- if (x >= renderer.width) return renderer.width-1;
- }
- return x-1;
- }
-
-
- //BLACK
- int getFirstNotBlackY(int _x, int _y) {
- int x = _x;
- int y = _y;
- color c;
- if (y < renderer.height) {
- while ( (c = renderer.pixels[x + y * renderer.width]) < params.get(0).value) {
- y++;
- if (y >= renderer.height) return -1;
- }
- }
- return y;
- }
-
- int getNextBlackY(int _x, int _y) {
- int x = _x;
- int y = _y+1;
- color c;
- if (y < renderer.height) {
- while ( (c = renderer.pixels[x + y * renderer.width]) > params.get(0).value) {
- y++;
- if (y >= renderer.height) return renderer.height-1;
- }
- }
- return y-1;
- }
-
- //BRIGHTNESS
- int getFirstBrightY(int _x, int _y) {
- int x = _x;
- int y = _y;
- color c;
- if (y < renderer.height) {
- while (brightness (c = renderer.pixels[x + y * renderer.width]) < params.get(2).value) {
- y++;
- if (y >= renderer.height) return -1;
- }
- }
- return y;
- }
-
- int getNextDarkY(int _x, int _y) {
- int x = _x;
- int y = _y+1;
- color c;
- if (y < renderer.height) {
- while (brightness (c = renderer.pixels[x + y * renderer.width]) > params.get(2).value) {
- y++;
- if (y >= renderer.height) return renderer.height-1;
- }
- }
- return y-1;
- }
-
- //WHITE
- int getFirstNotWhiteY(int _x, int _y) {
- int x = _x;
- int y = _y;
- color c;
- if (y < renderer.height) {
- while ( (c = renderer.pixels[x + y * renderer.width]) > params.get(2).value) {
- y++;
- if (y >= renderer.height) return -1;
- }
- }
- return y;
- }
-
- int getNextWhiteY(int _x, int _y) {
- int x = _x;
- int y = _y+1;
- color c;
- if (y < renderer.height) {
- while ( (c = renderer.pixels[x + y * renderer.width]) < params.get(1).value) {
- y++;
- if (y >= renderer.height) return renderer.height-1;
- }
- }
- return y-1;
- }
- }
|