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