optimise drawing, only draws half the grid

This commit is contained in:
Nico 2021-08-26 20:42:59 +01:00
parent b221d60dfe
commit 75ccfcf91a
1 changed files with 234 additions and 143 deletions

377
life.pd
View File

@ -1,20 +1,20 @@
#N canvas 618 113 1180 719 12;
#X obj 97 48 grid;
#X obj 97 73 route 1;
#X msg 21 28 connect;
#N canvas 434 59 1272 948 12;
#X obj 97 94 grid;
#X obj 97 119 route 1;
#X msg 21 74 connect;
#N canvas 2 570 450 250 (subpatch) 0;
#X array life0 128 float 2;
#X coords 0 1 128 -1 200 140 1;
#X restore 582 107 graph;
#X obj 97 98 unpack f f;
#X obj 97 141 +;
#X obj 164 121 * 16;
#X obj 120 193 tabread life0;
#X obj 120 253 tabwrite life0;
#X obj 120 218 == 0;
#X obj 97 16 r grid;
#X obj 97 166 t b f f;
#X obj 97 276 s draw;
#X obj 97 144 unpack f f;
#X obj 97 187 +;
#X obj 164 167 * 16;
#X obj 120 239 tabread life0;
#X obj 120 299 tabwrite life0;
#X obj 120 264 == 0;
#X obj 97 62 r grid;
#X obj 97 212 t b f f;
#X obj 97 322 s draw;
#X obj 216 13 r draw;
#X obj 276 141 bng 15 250 50 0 empty empty reset 17 7 0 10 -262144
-1 -1;
@ -24,6 +24,84 @@
#X array life1 128 float 2;
#X coords 0 1 128 -1 200 140 1;
#X restore 784 107 graph;
#N canvas 1180 376 692 562 draw-old 0;
#X obj 44 92 until;
#X obj 44 60 t f f;
#X msg 88 92 0;
#X obj 44 129 f;
#X obj 44 155 + 1;
#X obj 44 180 - 1;
#X msg 44 35 127;
#X obj 115 252 tabread life0;
#X obj 44 204 t f f f;
#X obj 67 252 mod 16;
#X obj 18 252 div 16;
#X obj 34 315 pack f f f;
#X msg 34 340 set \$2 \$1 \$3;
#X obj 44 9 inlet;
#X obj 34 365 outlet;
#X text 88 8 TODO optimise. Could use grid/map to reduce from 128 osc
messages to 4;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 1 1 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 3 1;
#X connect 4 0 5 0;
#X connect 5 0 8 0;
#X connect 6 0 1 0;
#X connect 7 0 11 2;
#X connect 8 0 10 0;
#X connect 8 1 9 0;
#X connect 8 2 7 0;
#X connect 9 0 11 1;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 14 0;
#X connect 13 0 6 0;
#X restore 830 53 pd draw-old;
#N canvas 1180 376 692 562 draw-old 0;
#X obj 44 92 until;
#X obj 44 60 t f f;
#X msg 88 92 0;
#X obj 44 129 f;
#X obj 44 155 + 1;
#X obj 44 180 - 1;
#X msg 44 35 127;
#X obj 115 252 tabread life0;
#X obj 44 204 t f f f;
#X obj 67 252 mod 16;
#X obj 18 252 div 16;
#X obj 34 315 pack f f f;
#X msg 34 340 set \$2 \$1 \$3;
#X obj 44 9 inlet;
#X obj 34 365 outlet;
#X text 88 8 TODO optimise. Could use grid/map to reduce from 128 osc
messages to 4;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 1 1 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 3 1;
#X connect 4 0 5 0;
#X connect 5 0 8 0;
#X connect 6 0 1 0;
#X connect 7 0 11 2;
#X connect 8 0 10 0;
#X connect 8 1 9 0;
#X connect 8 2 7 0;
#X connect 9 0 11 1;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 14 0;
#X connect 13 0 6 0;
#X restore 216 40 pd draw-old;
#X text 307 11 this could all be optimised \, but I went for a "simple"
solution \, and I'm bad at patching. TODO optimise drawing \, implement
sample triggers;
#N canvas 301 417 965 550 life-frame 0;
#N canvas 413 342 714 757 neighbors 0;
#X obj 152 41 inlet;
#X obj 152 176 until;
@ -89,109 +167,104 @@ start neighbor search (which should be correct);
#X connect 27 0 28 0;
#X connect 27 1 10 0;
#X connect 28 0 22 0;
#X restore 336 422 pd neighbors;
#N canvas 1180 376 692 562 draw-old 0;
#X obj 44 92 until;
#X obj 44 60 t f f;
#X msg 88 92 0;
#X obj 44 129 f;
#X obj 44 155 + 1;
#X obj 44 180 - 1;
#X msg 44 35 127;
#X obj 115 252 tabread life0;
#X obj 44 204 t f f f;
#X obj 67 252 mod 16;
#X obj 18 252 div 16;
#X obj 34 315 pack f f f;
#X msg 34 340 set \$2 \$1 \$3;
#X obj 44 9 inlet;
#X obj 34 365 outlet;
#X text 88 8 TODO optimise. Could use grid/map to reduce from 128 osc
messages to 4;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 1 1 2 0;
#X restore 333 229 pd neighbors;
#X msg 302 39 128;
#X obj 301 94 until;
#X obj 301 119 f;
#X obj 301 144 + 1;
#X obj 302 64 t f b;
#X msg 353 98 0;
#X obj 301 169 - 1;
#X obj 333 254 sel 4 3, f 9;
#X msg 393 285 0;
#X msg 363 285 1;
#X obj 357 379 tabwrite life1;
#X obj 233 286 spigot;
#X obj 265 338 tabread life0;
#X obj 301 194 t f f f f, f 22;
#X obj 25 214 sel 127;
#X obj 57 265 array get life1 0 128;
#X obj 25 239 t b b;
#X obj 57 290 array set life0 0 128;
#X obj 25 319 s draw;
#X obj 233 311 t b f;
#X msg 314 280 1;
#X msg 233 340 0;
#X obj 302 9 inlet;
#X connect 0 0 8 0;
#X connect 1 0 5 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 3 1;
#X connect 4 0 5 0;
#X connect 5 0 8 0;
#X connect 6 0 1 0;
#X connect 7 0 11 2;
#X connect 8 0 10 0;
#X connect 8 1 9 0;
#X connect 8 2 7 0;
#X connect 9 0 11 1;
#X connect 5 0 2 0;
#X connect 5 1 6 0;
#X connect 6 0 3 1;
#X connect 7 0 14 0;
#X connect 8 0 21 0;
#X connect 8 1 10 0;
#X connect 8 2 9 0;
#X connect 9 0 11 0;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 14 0;
#X connect 13 0 6 0;
#X restore 830 53 pd draw-old;
#X msg 305 232 128;
#X obj 304 287 until;
#X obj 304 312 f;
#X obj 304 337 + 1;
#X obj 305 257 t f b;
#N canvas 1180 376 692 562 draw-old 0;
#X obj 44 92 until;
#X obj 44 60 t f f;
#X msg 88 92 0;
#X obj 44 129 f;
#X obj 44 155 + 1;
#X obj 44 180 - 1;
#X msg 44 35 127;
#X obj 115 252 tabread life0;
#X obj 44 204 t f f f;
#X obj 67 252 mod 16;
#X obj 18 252 div 16;
#X obj 34 315 pack f f f;
#X msg 34 340 set \$2 \$1 \$3;
#X obj 44 9 inlet;
#X obj 34 365 outlet;
#X text 88 8 TODO optimise. Could use grid/map to reduce from 128 osc
messages to 4;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 1 1 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 3 1;
#X connect 4 0 5 0;
#X connect 5 0 8 0;
#X connect 6 0 1 0;
#X connect 7 0 11 2;
#X connect 8 0 10 0;
#X connect 8 1 9 0;
#X connect 8 2 7 0;
#X connect 9 0 11 1;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 14 0;
#X connect 13 0 6 0;
#X restore 216 40 pd draw-old;
#X msg 356 291 0;
#X obj 304 362 - 1;
#X obj 336 447 sel 4 3, f 9;
#X msg 396 478 0;
#X msg 366 478 1;
#X obj 360 572 tabwrite life1;
#X obj 236 479 spigot;
#X obj 268 531 tabread life0;
#X obj 304 387 t f f f f, f 22;
#X obj 28 407 sel 127;
#X obj 60 458 array get life1 0 128;
#X obj 28 432 t b b;
#X obj 60 483 array set life0 0 128;
#X text 307 11 this could all be optimised \, but I went for a "simple"
solution \, and I'm bad at patching. TODO optimise drawing \, implement
sample triggers;
#X obj 28 512 s draw;
#N canvas 0 50 450 250 (subpatch) 0;
#X coords 0 1 100 -1 200 140 1;
#X restore 100 20 graph;
#X obj 236 504 t b f;
#X msg 317 473 1;
#X msg 236 533 0;
#X connect 12 0 20 0;
#X connect 13 0 11 0;
#X connect 14 0 15 0;
#X connect 14 1 12 0;
#X connect 14 2 0 0;
#X connect 14 3 11 1;
#X connect 15 0 17 0;
#X connect 16 0 18 0;
#X connect 17 0 19 0;
#X connect 17 1 16 0;
#X connect 20 0 22 0;
#X connect 20 1 13 0;
#X connect 21 0 12 1;
#X connect 22 0 12 1;
#X connect 23 0 1 0;
#X restore 275 227 pd life-frame;
#X obj 275 203 bng 15 250 50 0 empty empty tick 17 7 0 10 -262144 -1
-1;
#X obj 297 416 t f b;
#X obj 297 441 until;
#X obj 297 466 f;
#X obj 297 491 + 1;
#X obj 297 516 - 1;
#X msg 340 442 0;
#X msg 297 391 8;
#X obj 249 562 sel 7;
#X obj 297 541 t f f f, f 14;
#X obj 295 594 tabread life0;
#X obj 374 625 <<;
#X text 32 34 grid I/O;
#X obj 374 650 +;
#X obj 374 675 t f f;
#X obj 356 703 f;
#X obj 356 728 t f b;
#X msg 401 728 0;
#X text 406 651 accumulator by IOhannes on #dataflow;
#X obj 298 265 r draw;
#X msg 297 290 8;
#X obj 297 315 t f b;
#X obj 297 340 until;
#X msg 340 340 0;
#X obj 297 365 t b b, f 26;
#X obj 476 394 f;
#X obj 476 419 + 1;
#X obj 476 444 - 1;
#X obj 476 469 * 16;
#X obj 344 566 +;
#X obj 356 778 list;
#X obj 356 753 list prepend;
#X obj 356 803 spigot;
#X obj 469 591 == 7;
#X obj 356 828 t b a;
#X msg 319 829 0;
#X obj 389 875 list trim;
#X obj 389 850 list prepend map 0;
#X obj 389 900 s grid;
#X text 344 265 PROTOTYPING faster drawing. This is spaghetti \, but
basically we read out of the array and convert into a bitmap to send
to the grid in one osc message.;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 0 0;
@ -205,35 +278,53 @@ sample triggers;
#X connect 11 0 12 0;
#X connect 11 1 7 0;
#X connect 11 2 8 1;
#X connect 13 0 25 0;
#X connect 14 0 15 0;
#X connect 18 0 28 0;
#X connect 20 0 24 0;
#X connect 21 0 22 0;
#X connect 22 0 23 0;
#X connect 23 0 27 0;
#X connect 23 0 22 1;
#X connect 24 0 21 0;
#X connect 24 1 26 0;
#X connect 25 0 16 0;
#X connect 26 0 22 1;
#X connect 27 0 34 0;
#X connect 28 0 43 0;
#X connect 28 1 30 0;
#X connect 28 2 29 0;
#X connect 29 0 31 0;
#X connect 30 0 31 0;
#X connect 32 0 42 0;
#X connect 33 0 31 0;
#X connect 34 0 35 0;
#X connect 34 1 32 0;
#X connect 34 2 18 0;
#X connect 34 3 31 1;
#X connect 35 0 37 0;
#X connect 36 0 38 0;
#X connect 37 0 40 0;
#X connect 37 1 36 0;
#X connect 42 0 44 0;
#X connect 42 1 33 0;
#X connect 43 0 32 1;
#X connect 44 0 32 1;
#X connect 19 0 16 0;
#X connect 22 0 21 0;
#X connect 23 0 24 0;
#X connect 23 1 28 0;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X connect 26 0 25 1;
#X connect 26 0 27 0;
#X connect 27 0 31 0;
#X connect 28 0 25 1;
#X connect 29 0 23 0;
#X connect 30 0 37 0;
#X connect 31 0 30 0;
#X connect 31 1 51 0;
#X connect 31 2 33 1;
#X connect 32 0 33 0;
#X connect 33 0 35 0;
#X connect 35 0 36 0;
#X connect 36 0 37 1;
#X connect 36 1 35 1;
#X connect 37 0 38 0;
#X connect 38 0 53 0;
#X connect 38 1 39 0;
#X connect 39 0 36 0;
#X connect 41 0 42 0;
#X connect 42 0 43 0;
#X connect 43 0 44 0;
#X connect 43 1 45 0;
#X connect 44 0 46 0;
#X connect 45 0 47 1;
#X connect 46 0 29 0;
#X connect 46 1 47 0;
#X connect 47 0 48 0;
#X connect 48 0 49 0;
#X connect 48 0 47 1;
#X connect 49 0 50 0;
#X connect 49 0 55 0;
#X connect 50 0 51 1;
#X connect 51 0 32 0;
#X connect 52 0 53 1;
#X connect 52 0 54 0;
#X connect 53 0 52 0;
#X connect 54 0 56 0;
#X connect 55 0 54 1;
#X connect 56 0 57 0;
#X connect 56 1 59 0;
#X connect 57 0 53 1;
#X connect 58 0 60 0;
#X connect 59 0 58 0;