#N canvas 505 74 983 713 10;
#X declare -lib Gem;
#N canvas 1 89 450 300 fps 0;
#X obj 46 -61 gemhead;
#X obj 46 -21 realtime;
#X obj 46 -41 t b b;
#X obj 46 41 /;
#X msg 46 21 1000 \$1;
#X obj 46 106 outlet;
#X obj 46 63 + 0.5;
#X obj 46 85 i;
#X connect 0 0 2 0;
#X connect 1 0 4 0;
#X connect 2 0 1 0;
#X connect 2 1 1 1;
#X connect 3 0 6 0;
#X connect 4 0 3 0;
#X connect 6 0 7 0;
#X connect 7 0 5 0;
#X restore 470 199 pd fps;
#X floatatom 470 222 5 0 0 1 fps - - 0;
#X obj 6 76 cnv 15 450 100 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#X obj 7 236 cnv 15 450 375 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#X obj 7 181 cnv 15 450 50 empty empty empty 20 12 0 14 #bcbcbc #404040 0;
#X text 59 27 Class: geometric object;
#X text 467 7 GEM object;
#X text 61 7 Synopsis: [gemvertexbuffer];
#X obj 462 76 cnv 15 100 80 empty empty empty 20 12 0 14 #bcbcbc #404040 0;
#X text 465 75 Create window:;
#X text 6 80 Description: Renders a vertexbuffer.;
#X text 11 179 Arguments:;
#X text 9 241 Inlets:;
#X text 27 253 Inlet 1: gemlist;
#X text 9 580 Outlets:;
#X text 21 593 Outlet 1: gemlist;
#X obj 569 7 cnv 15 400 700 empty empty empty 20 12 0 14 #dce4fc #404040 0;
#X obj 576 668 cnv 15 150 30 empty empty empty 20 12 0 14 #14e814 #404040 0;
#X msg 792 593 draw line;
#X msg 802 614 draw points;
#X msg 692 384 color_enable \$1;
#X obj 673 384 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 816 638 loadbang;
#X obj 579 76 translateXYZ 0 0 -2;
#X obj 579 114 rotateXYZ -45 0 -50;
#X obj 579 54 gemhead;
#X text 594 254 update VBO using table value;
#X obj 643 366 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X msg 665 364 position_enable \$1;
#X obj 729 424 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 699 406 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X msg 721 404 texture_enable \$1;
#X msg 748 424 normal_enable \$1;
#X obj 579 234 pix_texture;
#X text 671 349 enable / disable specific VBO;
#X obj 579 32 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X text 577 14 Example:;
#X msg 816 658 resize 128;
#X floatatom 636 96 5 0 0 0 - - - 0;
#X obj 579 95 scale 3;
#X msg 593 271 position blablax blablay blablaz;
#X msg 604 290 color colorr colorg colorb colora;
#X msg 614 310 texture colorr colorg;
#X msg 627 331 normal colorr blablay blablaz;
#X obj 696 169 bng 15 250 50 0 empty \$0-init100 empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 841 56 cnv 15 120 160 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#N canvas 615 145 657 666 lorenz 0;
#X floatatom 82 248 5 0 0 0 - - - 0;
#X floatatom 124 248 5 0 0 0 - - - 0;
#X floatatom 83 201 5 0 0 0 - - - 0;
#X floatatom 125 201 5 0 0 0 - - - 0;
#X floatatom 81 156 5 0 0 0 - - - 0;
#X floatatom 124 156 5 0 0 0 - - - 0;
#N canvas 145 116 1131 666 table 0;
#X obj 266 31 loadbang;
#X msg 266 53 dsp 1;
#X obj 266 75 s pd;
#X obj 38 33 loadbang;
#X obj 89 68 sig~ 1;
#X obj 89 140 osc~ 1;
#X obj 88 160 abs~;
#X obj 87 223 osc~ 11;
#X obj 86 243 abs~;
#X obj 38 58 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 87 310 sig~ 0.7;
#X obj 392 275 v pr;
#X obj 523 276 v r;
#X obj 449 277 v b;
#X floatatom 392 246 5 0 0 0 - - - 0;
#X floatatom 523 248 5 0 0 0 - - - 0;
#X msg 393 221 10;
#X obj 447 218 expr 8./3;
#X msg 344 344 set 1.2 2.3 4.4;
#X floatatom 449 247 7 0 0 0 - - - 0;
#X msg 321 308 stop;
#X msg 291 275 start;
#X floatatom 615 248 5 0 0 0 - - - 0;
#X obj 615 277 v dt;
#X msg 526 220 18;
#X msg 611 221 0.01;
#X obj 344 167 bng 15 250 50 0 empty empty empty 20 8 0 8 #fcfcfc #000000 #000000;
#X text 679 250 <- experiment with these numbers;
#X obj 705 223 line;
#X obj 344 449 /~ 20;
#X obj 450 446 /~ 20;
#X obj 556 445 /~ 20;
#X msg 706 198 0.01 \, 0.04 5000;
#X obj 344 393 fexpr~ $y1+(pr*$y2-pr*$y1)*dt \; $y2 +(-$y1*$y3 + r*$y1-$y2)*dt \; $y3+($y1*$y2 - b*$y3)*dt;
#X obj 276 164 loadbang;
#X text 329 108 This is an example of how fexpr~ could be used for solving differential equations \, in this case the lorenz equations which generate chaotic signals;
#X text 577 390 Note the following shorthands:;
#X text 576 406 $y1 -> $y1[-1] \, $y2 -> $y2[-1] \, .....;
#X text 464 344 the 'set' commands sets the initial previous values;
#X obj 639 442 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 673 437 loadbang;
#X obj 572 473 sig~ -1;
#X obj 673 467 metro 1000;
#X obj 89 391 table \$0blablax2 100000;
#X obj 87 411 table \$0blablay2 100000;
#X obj 87 431 table \$0blablaz2 100000;
#X obj 86 356 table \$0colora2 100000;
#X obj 86 335 tabwrite~ \$0colora2;
#X obj 87 287 table \$0colorb2 100000;
#X obj 86 265 tabwrite~ \$0colorb2;
#X obj 88 203 table \$0colorg2 100000;
#X obj 87 180 tabwrite~ \$0colorg2;
#X obj 87 112 table \$0colorr2 100000;
#X obj 88 91 tabwrite~ \$0colorr2;
#X obj 344 537 tabwrite~ \$0blablax2;
#X obj 451 517 tabwrite~ \$0blablay2;
#X obj 555 497 tabwrite~ \$0blablaz2;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 3 0 9 0;
#X connect 4 0 53 0;
#X connect 5 0 6 0;
#X connect 6 0 51 0;
#X connect 7 0 8 0;
#X connect 8 0 49 0;
#X connect 9 0 47 0;
#X connect 9 0 49 0;
#X connect 9 0 51 0;
#X connect 9 0 53 0;
#X connect 10 0 47 0;
#X connect 14 0 11 0;
#X connect 15 0 12 0;
#X connect 16 0 14 0;
#X connect 17 0 19 0;
#X connect 18 0 33 0;
#X connect 19 0 13 0;
#X connect 20 0 33 0;
#X connect 21 0 33 0;
#X connect 22 0 23 0;
#X connect 24 0 15 0;
#X connect 25 0 22 0;
#X connect 26 0 16 0;
#X connect 26 0 17 0;
#X connect 26 0 24 0;
#X connect 26 0 25 0;
#X connect 26 0 18 0;
#X connect 26 0 21 0;
#X connect 28 0 22 0;
#X connect 29 0 54 0;
#X connect 30 0 55 0;
#X connect 31 0 56 0;
#X connect 32 0 28 0;
#X connect 33 0 29 0;
#X connect 33 1 30 0;
#X connect 33 2 31 0;
#X connect 34 0 26 0;
#X connect 39 0 54 0;
#X connect 39 0 55 0;
#X connect 39 0 56 0;
#X connect 40 0 42 0;
#X connect 41 0 56 0;
#X connect 42 0 39 0;
#X restore 259 348 pd table;
#X obj 38 136 alpha;
#X msg 118 577 draw line;
#X msg 184 575 draw points;
#X floatatom 147 288 5 0 0 0 - - - 0;
#X msg 82 449 color_enable \$1;
#X obj 82 430 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 38 222 scaleXYZ 3 3 3;
#X obj 38 305 GEMglPointSize 1;
#X obj 38 174 translateXYZ 0 0 -2;
#X obj 38 267 rotateXYZ -45 0 -50;
#X obj 38 114 gemhead;
#X obj 56 346 gemhead 10;
#X obj 56 327 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 56 367 t b;
#X obj 98 115 switch~;
#X obj 38 43 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 116 10 loadbang;
#X obj 90 497 delay 1000;
#X obj 90 475 sel 1;
#X obj 38 13 inlet;
#X obj 218 469 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 218 444 loadbang;
#X obj 38 614 gemvertexbuffer 100000;
#X msg 116 32 0;
#X obj 91 516 i \$0;
#X msg 90 538 colorR \$1colorr2 \, colorG \$1colorg2 \, colorB \$1colorb2 \, colorA \$1colora2;
#X obj 38 69 t f f f f;
#X obj 56 387 i \$0;
#X msg 56 407 posX \$1blablax2 \, posY \$1blablay2 \, posZ \$1blablaz2;
#X connect 0 0 16 1;
#X connect 1 0 16 2;
#X connect 2 0 13 1;
#X connect 3 0 13 2;
#X connect 4 0 15 1;
#X connect 5 0 15 2;
#X connect 7 0 15 0;
#X connect 8 0 29 0;
#X connect 9 0 29 0;
#X connect 10 0 14 1;
#X connect 11 0 29 0;
#X connect 12 0 11 0;
#X connect 13 0 16 0;
#X connect 14 0 29 0;
#X connect 15 0 13 0;
#X connect 16 0 14 0;
#X connect 17 0 7 0;
#X connect 18 0 20 0;
#X connect 19 0 18 0;
#X connect 20 0 34 0;
#X connect 22 0 33 0;
#X connect 23 0 30 0;
#X connect 24 0 31 0;
#X connect 25 0 24 0;
#X connect 26 0 22 0;
#X connect 27 0 31 0;
#X connect 28 0 27 0;
#X connect 30 0 22 0;
#X connect 31 0 32 0;
#X connect 32 0 29 0;
#X connect 33 0 17 0;
#X connect 33 1 19 0;
#X connect 33 2 25 0;
#X connect 33 3 21 0;
#X connect 34 0 35 0;
#X connect 35 0 29 0;
#X restore 849 100 pd lorenz;
#X obj 849 80 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#N canvas 285 255 805 628 wave 0;
#X floatatom 87 237 5 0 0 0 - - - 0;
#X floatatom 129 237 5 0 0 0 - - - 0;
#X floatatom 172 237 5 0 0 0 - - - 0;
#X floatatom 88 190 5 0 0 0 - - - 0;
#X floatatom 130 190 5 0 0 0 - - - 0;
#X floatatom 173 190 5 0 0 0 - - - 0;
#X floatatom 86 145 5 0 0 0 - - - 0;
#X floatatom 129 145 5 0 0 0 - - - 0;
#X floatatom 173 145 5 0 0 0 - - - 0;
#X obj 43 592 gemvertexbuffer;
#N canvas 145 161 1131 747 table 0;
#X obj 36 59 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 583 129 until;
#X msg 583 110 100;
#N canvas 0 50 450 300 count 0;
#X obj 47 31 inlet;
#X obj 47 126 f;
#X obj 157 30 inlet;
#X obj 65 104 + 1;
#X obj 47 154 t f f;
#X msg 157 58 0;
#X obj 47 187 outlet;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 1 1;
#X connect 4 0 6 0;
#X connect 4 1 3 0;
#X connect 5 0 1 1;
#X restore 583 148 pd count;
#X obj 440 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 583 91 t b b;
#X obj 583 264 until;
#X msg 583 245 100;
#N canvas 0 50 450 300 count 0;
#X obj 47 31 inlet;
#X obj 47 126 f;
#X obj 157 30 inlet;
#X obj 65 104 + 1;
#X obj 47 154 t f f;
#X msg 157 58 0;
#X obj 47 187 outlet;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 1 1;
#X connect 4 0 6 0;
#X connect 4 1 3 0;
#X connect 5 0 1 1;
#X restore 583 283 pd count;
#X obj 583 224 t b b f;
#X obj 583 359 pack f f;
#X obj 583 321 - 0.5;
#X obj 583 302 / 99;
#X obj 583 340 * 2;
#X obj 583 186 - 0.5;
#X obj 583 167 / 99;
#X obj 583 205 * 2;
#X obj 583 383 t a a a a a a;
#X obj 671 404 unpack f f;
#X obj 583 509 + 0.01;
#X obj 796 513 + 0.01;
#N canvas 0 50 450 300 count 0;
#X obj 47 31 inlet;
#X obj 47 126 f;
#X obj 157 30 inlet;
#X obj 65 104 + 1;
#X obj 47 154 t f f;
#X msg 157 58 0;
#X obj 47 187 outlet;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 1 1;
#X connect 4 0 6 0;
#X connect 4 1 3 0;
#X connect 5 0 1 1;
#X restore 692 582 pd count;
#X obj 583 551 t f b;
#N canvas 0 50 450 300 count 0;
#X obj 47 31 inlet;
#X obj 47 126 f;
#X obj 157 30 inlet;
#X obj 65 104 + 1;
#X obj 47 154 t f f;
#X msg 157 58 0;
#X obj 47 187 outlet;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 1 1;
#X connect 4 0 6 0;
#X connect 4 1 3 0;
#X connect 5 0 1 1;
#X restore 905 585 pd count;
#X obj 796 554 t f b;
#X obj 640 508 - 0.01;
#X obj 851 513 - 0.01;
#X obj 653 423 unpack f f;
#X obj 635 442 unpack f f;
#X obj 583 461 unpack f f;
#X obj 440 92 t b b;
#X obj 440 134 until;
#N canvas 0 50 450 300 count 0;
#X obj 47 31 inlet;
#X obj 47 126 f;
#X obj 157 30 inlet;
#X obj 65 104 + 1;
#X obj 47 154 t f f;
#X msg 157 58 0;
#X obj 47 187 outlet;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 1 1;
#X connect 4 0 6 0;
#X connect 4 1 3 0;
#X connect 5 0 1 1;
#X restore 440 153 pd count;
#X obj 440 176 t f f f;
#X obj 440 239 t f f;
#X obj 440 261 *;
#X obj 485 240 t f f;
#X obj 485 262 *;
#X obj 440 292 +;
#X obj 440 335 sqrt;
#X obj 440 416 cos;
#X obj 440 313 t f f;
#X obj 477 377 exp;
#X obj 440 442 /;
#X msg 440 115 60000;
#X obj 477 355 * 2;
#X obj 341 46 gemhead 10;
#X obj 341 72 t b b;
#X obj 349 318 f;
#X obj 440 380 +;
#X floatatom 903 395 5 0 0 0 - - - 0;
#X obj 583 71 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 87 310 sig~ 0.3;
#X obj 903 371 / 99;
#X msg 903 347 1;
#X obj 383 322 - 0.1;
#X obj 440 354 * 7;
#X obj 440 31 t b b b;
#X text 162 619 color and position are updated at every frame. you just have to change array value....;
#X text 156 504 replace this with iem_tab_* stuff in order to increase performance if you wish to update point positions at every frame;
#X obj 36 -2 inlet;
#X obj 123 122 f;
#X obj 279 120 f;
#X obj 438 6 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 123 56 sin;
#X obj 123 78 + 1;
#X obj 123 100 * 0.5;
#X obj 123 35 * 110;
#X obj 87 244 table \$0colorg3 60000;
#X obj 85 266 table \$0colorr3 60000;
#X obj 86 286 table \$0colorb3 60000;
#X obj 142 196 tabwrite \$0colorg3;
#X obj 141 172 tabwrite \$0colorb3;
#X obj 142 150 tabwrite \$0colorr3;
#X obj 86 335 tabwrite~ \$0colora3;
#X obj 86 356 table \$0colora3 60000;
#X obj 87 393 table \$0blablax3 60000;
#X obj 86 412 table \$0blablay3 60000;
#X obj 87 431 table \$0blablaz3 60000;
#X obj 440 466 tabwrite \$0blablaz3;
#X obj 463 198 tabread \$0blablay3;
#X obj 440 218 tabread \$0blablax3;
#X obj 582 605 tabwrite \$0blablax3;
#X obj 796 607 tabwrite \$0blablay3;
#X connect 0 0 74 0;
#X connect 1 0 3 0;
#X connect 2 0 1 0;
#X connect 3 0 15 0;
#X connect 4 0 30 0;
#X connect 5 0 2 0;
#X connect 5 1 3 1;
#X connect 5 1 21 1;
#X connect 5 1 23 1;
#X connect 6 0 8 0;
#X connect 7 0 6 0;
#X connect 8 0 12 0;
#X connect 9 0 7 0;
#X connect 9 1 8 1;
#X connect 9 2 10 1;
#X connect 10 0 17 0;
#X connect 11 0 13 0;
#X connect 12 0 11 0;
#X connect 13 0 10 0;
#X connect 14 0 16 0;
#X connect 15 0 14 0;
#X connect 16 0 9 0;
#X connect 17 0 29 0;
#X connect 17 1 18 0;
#X connect 17 2 27 0;
#X connect 17 3 28 0;
#X connect 17 4 27 0;
#X connect 17 5 18 0;
#X connect 18 0 25 0;
#X connect 18 1 20 0;
#X connect 19 0 22 0;
#X connect 20 0 24 0;
#X connect 21 0 82 1;
#X connect 22 0 82 0;
#X connect 22 1 21 0;
#X connect 23 0 83 1;
#X connect 24 0 83 0;
#X connect 24 1 23 0;
#X connect 25 0 22 0;
#X connect 26 0 24 0;
#X connect 27 0 19 0;
#X connect 27 1 26 0;
#X connect 28 0 25 0;
#X connect 28 1 26 0;
#X connect 29 0 19 0;
#X connect 29 1 20 0;
#X connect 30 0 44 0;
#X connect 30 1 32 1;
#X connect 31 0 32 0;
#X connect 32 0 33 0;
#X connect 33 0 81 0;
#X connect 33 1 80 0;
#X connect 33 2 62 0;
#X connect 33 2 79 1;
#X connect 34 0 35 0;
#X connect 34 1 35 1;
#X connect 35 0 38 0;
#X connect 36 0 37 0;
#X connect 36 1 37 1;
#X connect 37 0 38 1;
#X connect 38 0 41 0;
#X connect 39 0 56 0;
#X connect 39 0 67 0;
#X connect 40 0 43 0;
#X connect 41 0 39 0;
#X connect 41 1 45 0;
#X connect 42 0 43 1;
#X connect 43 0 79 0;
#X connect 44 0 31 0;
#X connect 45 0 42 0;
#X connect 47 0 30 0;
#X connect 47 1 48 0;
#X connect 48 0 49 1;
#X connect 48 0 55 0;
#X connect 49 0 40 0;
#X connect 50 0 19 1;
#X connect 50 0 25 1;
#X connect 50 0 20 1;
#X connect 50 0 26 1;
#X connect 51 0 5 0;
#X connect 52 0 74 0;
#X connect 53 0 50 0;
#X connect 54 0 53 0;
#X connect 55 0 48 1;
#X connect 56 0 49 0;
#X connect 57 0 4 0;
#X connect 57 1 51 0;
#X connect 57 2 54 0;
#X connect 60 0 0 0;
#X connect 60 0 57 0;
#X connect 61 0 71 0;
#X connect 61 0 72 0;
#X connect 61 0 73 0;
#X connect 62 0 71 1;
#X connect 62 0 72 1;
#X connect 62 0 73 1;
#X connect 63 0 57 0;
#X connect 64 0 65 0;
#X connect 65 0 66 0;
#X connect 66 0 61 0;
#X connect 67 0 64 0;
#X connect 80 0 36 0;
#X connect 81 0 34 0;
#X restore 298 556 pd table;
#X obj 43 125 alpha;
#X msg 98 518 draw points;
#X obj 43 211 scaleXYZ 3 3 3;
#X obj 106 549 loadbang;
#X obj 43 163 translateXYZ 0 0 -2;
#X obj 43 63 gemhead;
#X obj 61 306 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 61 346 t b;
#X msg 106 572 resize 60000;
#X msg 94 495 draw triangle;
#X msg 57 102 auto 1;
#X obj 61 325 gemhead 20;
#X obj 43 285 GEMglShadeModel GL_SMOOTH;
#X obj 94 474 loadbang;
#X obj 43 256 rotateXYZ -65 0 35;
#X obj 57 82 loadbang;
#X obj 43 12 inlet;
#X obj 298 68 sel 1;
#X obj 61 366 i \$0;
#X obj 61 386 t f f;
#X msg 61 416 position \$1blablax3 \$1blablay3 \$1blablaz3;
#X msg 77 438 color \$1colorr3 \$1colorg3 \$1colorb3 \$1colora3;
#X obj 148 18 loadbang;
#X msg 148 40 0;
#X connect 0 0 25 1;
#X connect 1 0 25 2;
#X connect 2 0 25 3;
#X connect 3 0 13 1;
#X connect 4 0 13 2;
#X connect 5 0 13 3;
#X connect 6 0 15 1;
#X connect 7 0 15 2;
#X connect 8 0 15 3;
#X connect 11 0 15 0;
#X connect 12 0 9 0;
#X connect 13 0 25 0;
#X connect 14 0 19 0;
#X connect 15 0 13 0;
#X connect 16 0 11 0;
#X connect 17 0 22 0;
#X connect 18 0 29 0;
#X connect 19 0 9 0;
#X connect 20 0 9 0;
#X connect 21 0 11 0;
#X connect 22 0 18 0;
#X connect 23 0 9 0;
#X connect 24 0 20 0;
#X connect 25 0 23 0;
#X connect 26 0 21 0;
#X connect 27 0 16 0;
#X connect 27 0 28 0;
#X connect 28 0 10 0;
#X connect 29 0 30 0;
#X connect 30 0 31 0;
#X connect 30 1 32 0;
#X connect 31 0 9 0;
#X connect 32 0 9 0;
#X connect 33 0 34 0;
#X connect 34 0 16 0;
#X restore 849 184 pd wave;
#X obj 849 162 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#N canvas 786 231 654 435 oscillo~ 0;
#X obj 47 78 gemhead;
#X obj 122 116 adc~;
#X obj 218 63 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 218 41 loadbang;
#X obj 47 5 inlet;
#X obj 123 152 *~ 3;
#X obj 47 279 t a b;
#X obj 47 406 gemvertexbuffer 8192;
#X obj 218 82 metro 200;
#X obj 298 167 until;
#X obj 298 191 f;
#X obj 329 192 + 1;
#X msg 348 163 0;
#X obj 298 213 t f f;
#X obj 298 277 * 7;
#X obj 298 256 - 0.5;
#X msg 82 384 draw linestrip;
#X obj 82 363 loadbang;
#X obj 63 30 loadbang;
#X msg 63 52 0;
#X obj 155 55 osc~ 10;
#X obj 155 75 *~ 0.1;
#X obj 122 178 tabwrite~ \$0sound;
#X obj 121 199 table \$0sound 8192;
#X obj 298 298 tabwrite \$0phasor;
#X obj 118 231 table \$0phasor 8192;
#X obj 79 306 i \$0;
#X msg 79 342 posX \$1phasor \, posY \$1sound;
#X floatatom 155 34 5 0 0 0 - - - 0;
#X obj 15 157 scale 1;
#X floatatom 52 115 5 0 0 0 - - - 0;
#X msg 227 395 draw points;
#X msg 298 73 8192;
#X floatatom 298 95 5 0 0 0 - - - 0;
#X obj 298 234 /;
#X obj 298 118 t f b f f;
#X msg 414 154 resize \$1;
#X obj 414 176 t a a a;
#X obj 437 216 s \$0sound;
#X obj 460 196 s \$0phasor;
#X connect 0 0 29 0;
#X connect 1 0 5 0;
#X connect 1 1 5 0;
#X connect 2 0 8 0;
#X connect 3 0 2 0;
#X connect 3 0 32 0;
#X connect 4 0 0 0;
#X connect 5 0 22 0;
#X connect 6 0 7 0;
#X connect 6 1 26 0;
#X connect 8 0 22 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 10 0 13 0;
#X connect 11 0 10 1;
#X connect 12 0 10 1;
#X connect 13 0 34 0;
#X connect 13 1 24 1;
#X connect 14 0 24 0;
#X connect 15 0 14 0;
#X connect 16 0 7 0;
#X connect 17 0 16 0;
#X connect 18 0 19 0;
#X connect 19 0 0 0;
#X connect 20 0 21 0;
#X connect 21 0 5 0;
#X connect 26 0 27 0;
#X connect 27 0 7 0;
#X connect 28 0 20 0;
#X connect 29 0 6 0;
#X connect 30 0 29 1;
#X connect 31 0 7 0;
#X connect 32 0 33 0;
#X connect 33 0 35 0;
#X connect 34 0 15 0;
#X connect 35 0 9 0;
#X connect 35 1 12 0;
#X connect 35 2 34 1;
#X connect 35 3 36 0;
#X connect 36 0 37 0;
#X connect 37 0 7 0;
#X connect 37 1 38 0;
#X connect 37 2 39 0;
#X restore 849 141 pd oscillo~;
#X obj 849 121 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X text 846 60 other examples;
#X text 27 327 Inlet 1: message: texture / textureU / textureV: update vertex texcoords from tables;
#X text 27 357 Inlet 1: message: normal / normalX / normalY / normalZ: update vertex normals from tables;
#X text 27 297 Inlet 1: message: color / colorR / colorG / colorB / colorA: update vertex colors from tables;
#X text 27 267 Inlet 1: message: position / posX / posY / posZ: update vertex positions from tables;
#N canvas 428 155 679 574 tabledata 0;
#X text 65 43 applying table data as vertex data;
#X msg 30 100 position tabX tabY tabZ 0;
#X msg 30 130 position tabXYZ 0;
#X text 200 102 will read X \, Y & Z values from the 3 tables as position data \, starting at offset=0 (offset can be omitted);
#X text 200 132 will read interleaved X \, Y & Z values from the table tabXYZ \, starting at offset=0 (offset can be omitted);
#X text 200 172 will update only X values from given table (starting at offset=10);
#X msg 31 169 posX tabX 10;
#X msg 31 209 posY tabY;
#X text 200 212 will update only Y values from given table (starting at default offset=0);
#X text 39 290 the same applies to the other vertex data types:;
#X msg 234 346 colorR r;
#X msg 294 346 colorG g;
#X msg 354 346 colorB b;
#X msg 415 346 colorA a;
#X msg 36 376 texture U V;
#X msg 140 376 texture UV;
#X msg 234 376 textureU U;
#X msg 304 376 textureV V;
#X msg 36 406 normal x y z;
#X msg 36 346 color r g b a;
#X msg 141 346 color rgba;
#X msg 140 406 normal xyz;
#X msg 234 406 normalX x;
#X msg 304 406 normalY y;
#X msg 374 406 normalZ z;
#X msg 36 316 position X Y Z;
#X msg 140 316 position XYZ;
#X msg 234 316 positionX X;
#X msg 314 316 positionY Y;
#X msg 394 316 positionZ Z;
#X text 51 453 offset is always optional (default:0) \, and comes after the table names;
#X text 50 507 unset table data is initialized to 0.f;
#X restore 471 266 pd tabledata;
#X text 27 384 Inlet 1: message: resize float : change the number of vertex to use;
#X text 23 98 Vertex position \, color etc can be copy from pd table to the vertex buffer (VBO = Vertex Buffer Object). This object can draw lot's of points very efficiently.;
#X obj 696 191 t b b b;
#N canvas 990 92 450 459 load_tables 0;
#X obj 31 71 noise~;
#X obj 32 94 tabwrite~ colorr;
#X obj 32 114 noise~;
#X obj 33 158 noise~;
#X obj 33 137 tabwrite~ colorg;
#X obj 34 181 tabwrite~ colorb;
#X obj 33 209 noise~;
#X obj 34 252 noise~;
#X obj 35 296 noise~;
#X obj 34 232 tabwrite~ blablax;
#X obj 36 319 tabwrite~ blablaz;
#X obj 35 275 tabwrite~ blablay;
#X msg 288 48 dsp 1;
#X obj 288 68 s pd;
#X obj 288 28 loadbang;
#X obj 119 34 t b;
#X obj 119 13 loadbang;
#X msg 152 34 bang;
#X obj 215 10 inlet;
#X obj 266 152 table colorr 2000;
#X obj 266 172 table colorg 2000;
#X obj 266 194 table colorb 2000;
#X obj 266 216 table colora 2000;
#X obj 267 237 table blablax 2000;
#X obj 266 256 table blablay 2000;
#X obj 266 276 table blablaz 2000;
#X connect 0 0 1 0;
#X connect 2 0 4 0;
#X connect 3 0 5 0;
#X connect 6 0 9 0;
#X connect 7 0 11 0;
#X connect 8 0 10 0;
#X connect 12 0 13 0;
#X connect 14 0 12 0;
#X connect 15 0 1 0;
#X connect 15 0 4 0;
#X connect 15 0 5 0;
#X connect 15 0 9 0;
#X connect 15 0 11 0;
#X connect 15 0 10 0;
#X connect 16 0 15 0;
#X connect 17 0 15 0;
#X connect 18 0 15 0;
#X restore 735 222 pd load_tables;
#X obj 579 675 gemvertexbuffer;
#X msg 728 569 draw_range \$1 \$2;
#X obj 728 549 pack 0 0;
#X floatatom 728 507 5 0 0 0 - - - 0;
#X floatatom 774 507 5 0 0 0 - - - 0;
#X obj 774 526 t b f;
#X text 27 452 Inlet 1: message: draw_range float float : set the range for partial draw.;
#X text 726 480 set start and end indexes to draw only a range of VBO, f 33;
#X text 668 458 as soon as they are updated;
#X text 598 443 default : all VBO are disabled \, but they are enabled;
#X floatatom 699 135 5 1 64 0 - - - 0;
#X floatatom 719 113 5 0 0 0 - - - 0;
#X text 27 479 Inlet 1: message: program float : set the id for glsl program.;
#X text 27 409 Inlet 1: message: position_enable float \, color_enable float \, texture_enable float \, normal_enable float \, attribute_enable float : enable/disable the use of this data;
#X text 27 507 Inlet 1: message: attribute name table (offset) : add attribute / update attribute from table;
#X text 27 537 Inlet 1: message: reset_attributes : clear attribute data;
#X text 27 552 Inlet 1: message: print_attributes : print active attributes;
#X text 14 646 see examples/10.glsl/16.vertexbuffer_attributes.pd on how to;
#X text 15 661 use attribute tables with the vertex buffer.;
#X text 57 190 number of vertices to be used. if this is a power of two (2^n) \, you might have some performance gain.;
#N canvas 484 243 450 300 META 0;
#X obj 10 25 declare -lib Gem;
#X text 10 45 DESCRIPTION Renders a vertexbuffer.;
#X text 10 65 KEYWORDS Gem openGL shape;
#X text 20 85 INLET_0 gemlist position color texture normal resize position_enable draw_range program attribute reset_attributes print_attributes;
#X text 20 105 OUTLET_0 gemlist;
#X text 10 125 AUTHOR IOhannes m zmölnig;
#X text 10 145 LICENSE GPL-2.0-or-later;
#X restore 868 8 pd META;
#N canvas 735 418 450 300 startDSP 0;
#X obj 46 30 inlet;
#X obj 46 97 select 1;
#X obj 46 120 t b b;
#X obj 46 143 delay 100;
#X obj 46 166 s \$0-init100;
#X msg 137 166 \; pd dsp 1;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 1 5 0;
#X connect 3 0 4 0;
#X restore 469 154 pd startDSP;
#X obj 469 96 _gemwin 100;
#X obj 579 195 pix_test \; noise 0;
#X obj 579 134 GEMglPointSize 10;
#X connect 0 0 1 0;
#X connect 18 0 62 0;
#X connect 19 0 62 0;
#X connect 20 0 62 0;
#X connect 21 0 20 0;
#X connect 22 0 37 0;
#X connect 23 0 39 0;
#X connect 24 0 86 0;
#X connect 25 0 23 0;
#X connect 27 0 28 0;
#X connect 28 0 62 0;
#X connect 29 0 32 0;
#X connect 30 0 31 0;
#X connect 31 0 62 0;
#X connect 32 0 62 0;
#X connect 33 0 62 0;
#X connect 35 0 25 0;
#X connect 37 0 62 0;
#X connect 38 0 39 1;
#X connect 39 0 24 0;
#X connect 40 0 62 0;
#X connect 41 0 62 0;
#X connect 42 0 62 0;
#X connect 43 0 62 0;
#X connect 44 0 60 0;
#X connect 47 0 46 0;
#X connect 49 0 48 0;
#X connect 51 0 50 0;
#X connect 60 0 40 0;
#X connect 60 1 41 0;
#X connect 60 2 61 0;
#X connect 63 0 62 0;
#X connect 64 0 63 0;
#X connect 65 0 64 0;
#X connect 66 0 67 0;
#X connect 67 0 64 0;
#X connect 67 1 64 1;
#X connect 72 0 86 1;
#X connect 73 0 24 3;
#X connect 84 0 83 0;
#X connect 85 0 33 0;
#X connect 86 0 85 0;
