aboutsummaryrefslogtreecommitdiff
path: root/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'opengl')
-rw-r--r--opengl/doc/examples/arm.pd40
-rw-r--r--opengl/doc/examples/example01.pd257
-rw-r--r--opengl/doc/examples/example02.pd46
-rw-r--r--opengl/doc/examples/example03.pd65
-rw-r--r--opengl/doc/examples/example04.pd25
-rw-r--r--opengl/doc/examples/example05.pd41
-rw-r--r--opengl/doc/examples/example06.pd85
-rw-r--r--opengl/doc/examples/example07.pd25
-rw-r--r--opengl/doc/examples/example08.pd94
-rw-r--r--opengl/doc/examples/example09.pd90
-rw-r--r--opengl/doc/examples/example10.pd39
-rw-r--r--opengl/doc/examples/example11.pd77
-rw-r--r--opengl/doc/examples/example12.pd90
-rw-r--r--opengl/doc/examples/example13.pd81
-rw-r--r--opengl/doc/examples/example14.pd66
-rw-r--r--opengl/doc/examples/example15.pd126
-rw-r--r--opengl/doc/examples/example16.pd107
-rw-r--r--opengl/doc/objects/3dp_for.pd91
18 files changed, 1445 insertions, 0 deletions
diff --git a/opengl/doc/examples/arm.pd b/opengl/doc/examples/arm.pd
new file mode 100644
index 0000000..36a8f48
--- /dev/null
+++ b/opengl/doc/examples/arm.pd
@@ -0,0 +1,40 @@
+#N canvas 475 534 572 380 10;
+#X obj 43 10 inlet;
+#X obj 43 227 outlet;
+#X obj 43 141 3dp_push;
+#X obj 208 200 3dp_view transx 0.5;
+#X obj 43 113 3dp_view rotz;
+#X obj 260 11 inlet;
+#X obj 208 174 3dp_view scalex \$1;
+#X obj 43 186 3dp_view transx \$1;
+#X obj 260 275 r texture;
+#X obj 43 83 3dp_view roty;
+#X obj 129 61 r roty;
+#X obj 329 91 r scale;
+#X obj 43 37 3dp_draw cube 1;
+#X obj 143 11 r cubesize;
+#X obj 208 334 3dp_draw torus 0.25 0.5 6;
+#X obj 208 256 spigot;
+#X obj 245 232 r drawtorus;
+#X obj 276 307 r torusr1;
+#X obj 353 307 r torusr2;
+#X text 375 27 draw one arm segment;
+#X connect 0 0 12 0;
+#X connect 2 0 7 0;
+#X connect 2 1 6 0;
+#X connect 3 0 15 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 1;
+#X connect 6 0 3 0;
+#X connect 7 0 1 0;
+#X connect 8 0 14 1;
+#X connect 9 0 4 0;
+#X connect 10 0 9 1;
+#X connect 11 0 6 1;
+#X connect 11 0 7 1;
+#X connect 12 0 9 0;
+#X connect 13 0 12 2;
+#X connect 15 0 14 0;
+#X connect 16 0 15 1;
+#X connect 17 0 14 2;
+#X connect 18 0 14 3;
diff --git a/opengl/doc/examples/example01.pd b/opengl/doc/examples/example01.pd
new file mode 100644
index 0000000..969ee17
--- /dev/null
+++ b/opengl/doc/examples/example01.pd
@@ -0,0 +1,257 @@
+#N canvas 426 142 799 779 10;
+#X floatatom 126 37 5 0 0 0 - - -;
+#X obj 56 20 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 83 19 stop;
+#X floatatom 360 431 5 0 0 0 - - -;
+#X obj 59 103 3dp_push;
+#X floatatom 672 189 5 0 0 0 - - -;
+#X obj 546 244 3dp_view transx 3;
+#X obj 546 270 3dp_light;
+#X obj 612 97 f;
+#X floatatom 641 98 5 0 0 0 - - -;
+#X floatatom 669 370 5 0 0 0 - - -;
+#X obj 182 491 arm 3;
+#X obj 182 514 arm 3;
+#X obj 182 537 arm 3;
+#X obj 182 467 arm 3;
+#X floatatom 360 455 5 0 0 0 - - -;
+#X floatatom 359 478 5 0 0 0 - - -;
+#X floatatom 358 501 5 0 0 0 - - -;
+#X floatatom 358 524 5 0 0 0 - - -;
+#X obj 182 584 arm 3;
+#X obj 182 607 arm 3;
+#X obj 182 630 arm 3;
+#X obj 182 560 arm 3;
+#X floatatom 358 548 5 0 0 0 - - -;
+#X floatatom 358 571 5 0 0 0 - - -;
+#X floatatom 358 594 5 0 0 0 - - -;
+#X obj 59 224 3dp_view roty;
+#X obj 284 449 * 1;
+#X obj 284 589 * -1;
+#X obj 182 653 arm 3;
+#X floatatom 358 617 5 0 0 0 - - -;
+#X obj 284 635 * -1.5;
+#X obj 663 686 s roty;
+#X floatatom 615 611 5 0 0 0 - - -;
+#X floatatom 671 585 5 0 0 0 - - -;
+#X obj 673 616 s scale;
+#X floatatom 359 388 5 0 0 0 - - -;
+#X obj 284 473 * -1.01;
+#X obj 284 496 * 0.99;
+#X obj 284 519 * -1.01;
+#X obj 284 542 * 2.1;
+#X obj 284 566 * -1.7;
+#X obj 182 425 3dp_draw cube 1.4;
+#X obj 182 809 3dp_draw cube 1.4;
+#X msg 597 536 4;
+#X obj 59 151 3dp_view transz -3;
+#X obj 546 216 3dp_view roty 54;
+#X obj 669 392 s cubesize;
+#X msg 360 345 3.15;
+#X msg 126 17 20;
+#X obj 284 612 * 0.11;
+#X floatatom 672 220 5 0 0 0 - - -;
+#X msg 612 72 0;
+#X obj 342 311 * 1;
+#X obj 59 201 3dp_view rotx;
+#X floatatom 164 187 5 0 0 0 - - -;
+#X floatatom 358 641 5 0 0 0 - - -;
+#X obj 182 700 arm 3;
+#X obj 182 724 arm 3;
+#X obj 182 748 arm 3;
+#X obj 182 677 arm 3;
+#X floatatom 359 664 5 0 0 0 - - -;
+#X floatatom 359 688 5 0 0 0 - - -;
+#X floatatom 360 712 5 0 0 0 - - -;
+#X obj 284 706 * -1;
+#X obj 182 771 arm 3;
+#X floatatom 360 735 5 0 0 0 - - -;
+#X obj 283 753 * -1.5;
+#X obj 284 659 * 2.1;
+#X obj 284 682 * -1.7;
+#X obj 283 730 * 0.11;
+#X obj 9 334 3dp_push;
+#X obj 182 399 3dp_view transz;
+#X floatatom 282 369 5 0 0 0 - - -;
+#X obj 131 371 3dp_view transz;
+#X obj 231 338 * -1;
+#X msg 282 341 2;
+#X obj 564 401 s drawtorus;
+#X obj 564 374 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 674 496 s torusr1;
+#X floatatom 672 473 5 0 0 0 - - -;
+#X floatatom 667 419 5 0 0 0 - - -;
+#X obj 669 442 s torusr2;
+#X msg 564 349 1;
+#X obj 597 645 *;
+#X obj 59 126 3dp_push;
+#X obj 9 364 3dp_push;
+#X obj 9 437 3dp_view rotx;
+#X floatatom 96 416 5 0 0 0 - - -;
+#X obj 9 471 3dp_draw sphere 30 40;
+#X obj 9 593 3dp_snap;
+#X obj 473 487 / 1000;
+#X floatatom 473 461 5 0 0 0 - - -;
+#X obj 430 8 loadbang;
+#X obj 430 31 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 59 77 3dp_windowcontext;
+#X obj 59 274 3dp_push;
+#X obj 110 303 pdp_t p b;
+#X obj 9 307 pdp_t p b;
+#X msg 349 252 400;
+#X msg 311 252 -400;
+#X obj 342 287 +;
+#X msg 473 434 3;
+#X text 544 189 light source;
+#X obj 59 248 3dp_view scale 0.4;
+#X obj 640 157 s counter;
+#X obj 245 169 r counter;
+#X text 694 98 speed;
+#X obj 59 54 metro 20;
+#X obj 238 207 * 0.05;
+#X obj 9 570 spigot;
+#X obj 76 546 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 612 122 + 1;
+#X text 28 521 texture feedback;
+#X text 486 751 "no-bots in no-sphere";
+#X text 459 768 a double dance of 13 segments;
+#X text 549 734 ---;
+#X text 549 787 ---;
+#X obj 59 176 3dp_mouserotate;
+#X connect 0 0 108 1;
+#X connect 1 0 108 0;
+#X connect 2 0 108 0;
+#X connect 3 0 27 1;
+#X connect 4 0 85 0;
+#X connect 4 1 46 0;
+#X connect 5 0 46 1;
+#X connect 6 0 7 0;
+#X connect 8 0 112 0;
+#X connect 9 0 112 1;
+#X connect 10 0 47 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 22 0;
+#X connect 14 0 11 0;
+#X connect 15 0 37 1;
+#X connect 16 0 38 1;
+#X connect 17 0 39 1;
+#X connect 18 0 40 1;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 29 0;
+#X connect 22 0 19 0;
+#X connect 23 0 41 1;
+#X connect 24 0 28 1;
+#X connect 25 0 50 1;
+#X connect 26 0 104 0;
+#X connect 27 0 37 0;
+#X connect 27 0 14 1;
+#X connect 28 0 50 0;
+#X connect 28 0 20 1;
+#X connect 29 0 60 0;
+#X connect 30 0 31 1;
+#X connect 31 0 29 1;
+#X connect 31 0 68 0;
+#X connect 33 0 84 1;
+#X connect 34 0 35 0;
+#X connect 36 0 42 2;
+#X connect 36 0 43 2;
+#X connect 37 0 38 0;
+#X connect 37 0 11 1;
+#X connect 38 0 39 0;
+#X connect 38 0 12 1;
+#X connect 39 0 40 0;
+#X connect 39 0 13 1;
+#X connect 40 0 41 0;
+#X connect 40 0 22 1;
+#X connect 41 0 28 0;
+#X connect 41 0 19 1;
+#X connect 42 0 14 0;
+#X connect 44 0 34 0;
+#X connect 45 0 118 0;
+#X connect 46 0 6 0;
+#X connect 48 0 36 0;
+#X connect 48 0 102 0;
+#X connect 48 0 76 0;
+#X connect 48 0 83 0;
+#X connect 49 0 0 0;
+#X connect 50 0 31 0;
+#X connect 50 0 21 1;
+#X connect 51 0 6 1;
+#X connect 52 0 8 0;
+#X connect 53 0 27 0;
+#X connect 54 0 26 0;
+#X connect 55 0 54 1;
+#X connect 56 0 68 1;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 65 0;
+#X connect 60 0 57 0;
+#X connect 61 0 69 1;
+#X connect 62 0 64 1;
+#X connect 63 0 70 1;
+#X connect 64 0 70 0;
+#X connect 64 0 58 1;
+#X connect 65 0 43 0;
+#X connect 66 0 67 1;
+#X connect 67 0 65 1;
+#X connect 68 0 69 0;
+#X connect 68 0 60 1;
+#X connect 69 0 64 0;
+#X connect 69 0 57 1;
+#X connect 70 0 67 0;
+#X connect 70 0 59 1;
+#X connect 71 0 86 0;
+#X connect 71 1 74 0;
+#X connect 72 0 42 0;
+#X connect 73 0 72 1;
+#X connect 73 0 75 0;
+#X connect 74 0 42 0;
+#X connect 75 0 74 1;
+#X connect 76 0 73 0;
+#X connect 78 0 77 0;
+#X connect 80 0 79 0;
+#X connect 81 0 82 0;
+#X connect 83 0 78 0;
+#X connect 84 0 32 0;
+#X connect 85 0 45 0;
+#X connect 86 0 87 0;
+#X connect 87 0 89 0;
+#X connect 88 0 87 1;
+#X connect 89 0 110 0;
+#X connect 90 1 89 1;
+#X connect 91 0 33 0;
+#X connect 92 0 91 0;
+#X connect 93 0 94 0;
+#X connect 94 0 1 0;
+#X connect 94 0 48 0;
+#X connect 95 0 4 0;
+#X connect 95 1 118 1;
+#X connect 96 0 98 0;
+#X connect 96 1 97 0;
+#X connect 97 0 72 0;
+#X connect 97 1 100 0;
+#X connect 98 0 71 0;
+#X connect 98 1 99 0;
+#X connect 99 0 101 0;
+#X connect 100 0 101 0;
+#X connect 101 0 53 0;
+#X connect 102 0 92 0;
+#X connect 102 0 44 0;
+#X connect 104 0 96 0;
+#X connect 106 0 109 0;
+#X connect 108 0 95 0;
+#X connect 108 0 8 0;
+#X connect 109 0 26 1;
+#X connect 110 0 90 0;
+#X connect 111 0 110 1;
+#X connect 112 0 8 1;
+#X connect 112 0 84 0;
+#X connect 112 0 101 1;
+#X connect 112 0 105 0;
+#X connect 118 0 54 0;
diff --git a/opengl/doc/examples/example02.pd b/opengl/doc/examples/example02.pd
new file mode 100644
index 0000000..d5023d9
--- /dev/null
+++ b/opengl/doc/examples/example02.pd
@@ -0,0 +1,46 @@
+#N canvas 696 306 480 535 10;
+#X obj 102 73 3dp_windowcontext;
+#X obj 102 36 metro 20;
+#X obj 102 122 3dp_push;
+#X obj 102 11 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 56 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 253 32 cursor \$1;
+#X obj 253 12 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 102 209 3dp_mouserotate;
+#X obj 153 322 3dp_draw cube 1;
+#X obj 265 139 3dp_view transxyz -4 3 4;
+#X obj 102 270 3dp_push;
+#X obj 102 348 3dp_push;
+#X obj 102 425 3dp_push;
+#X obj 153 296 3dp_view transx 2;
+#X obj 153 374 3dp_view transy 2;
+#X obj 153 451 3dp_view transz 2;
+#X obj 153 400 3dp_draw cube 1;
+#X obj 153 477 3dp_draw cube 1;
+#X obj 102 506 3dp_draw dodeca 1;
+#X text 25 231 use the mouse to rotate the model (but not the light
+source since it is rendered before the rotation is applied.);
+#X obj 265 161 3dp_light;
+#X connect 0 0 2 0;
+#X connect 0 1 7 1;
+#X connect 1 0 0 0;
+#X connect 2 0 7 0;
+#X connect 2 1 9 0;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 0;
+#X connect 6 0 5 0;
+#X connect 7 0 10 0;
+#X connect 9 0 20 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 11 1 14 0;
+#X connect 12 0 18 0;
+#X connect 12 1 15 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 15 0 17 0;
diff --git a/opengl/doc/examples/example03.pd b/opengl/doc/examples/example03.pd
new file mode 100644
index 0000000..48d714b
--- /dev/null
+++ b/opengl/doc/examples/example03.pd
@@ -0,0 +1,65 @@
+#N canvas 382 102 480 535 10;
+#X obj 102 73 3dp_windowcontext;
+#X obj 102 36 metro 20;
+#X obj 102 139 3dp_push;
+#X obj 261 185 3dp_light;
+#X obj 102 11 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 56 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 253 32 cursor \$1;
+#X obj 253 12 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 102 209 3dp_mouserotate;
+#X obj 261 163 3dp_view transxyz -4 3 4;
+#X obj 102 427 arm 3;
+#X obj 371 230 loadbang;
+#X obj 102 333 pdp_t p p p p;
+#X obj 102 304 pdp_t p p p p;
+#X floatatom 199 386 5 0 0;
+#X obj 318 378 s roty;
+#X floatatom 318 327 5 0 0;
+#X obj 371 378 s drawtorus;
+#X obj 371 355 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 102 256 pdp_t p b;
+#X obj 212 273 f 0;
+#X obj 302 352 *;
+#X obj 183 409 *;
+#X obj 212 307 + 0.1;
+#X obj 102 105 3dp_view transz -5;
+#X text 41 471 it is possible to send the rendercontext to the same
+rendering/transforming chain multiple times. (in other words: 3dp objects
+do not support fanout \, but they do support fanin.);
+#X connect 0 0 24 0;
+#X connect 0 1 8 1;
+#X connect 1 0 0 0;
+#X connect 2 0 8 0;
+#X connect 2 1 9 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 8 0 19 0;
+#X connect 9 0 3 0;
+#X connect 11 0 18 0;
+#X connect 12 0 10 0;
+#X connect 12 1 10 0;
+#X connect 12 2 10 0;
+#X connect 12 3 10 0;
+#X connect 13 0 12 0;
+#X connect 13 1 12 0;
+#X connect 13 2 12 0;
+#X connect 13 3 12 0;
+#X connect 14 0 22 1;
+#X connect 16 0 21 1;
+#X connect 18 0 17 0;
+#X connect 19 0 13 0;
+#X connect 19 1 20 0;
+#X connect 20 0 23 0;
+#X connect 21 0 15 0;
+#X connect 22 0 10 1;
+#X connect 23 0 20 1;
+#X connect 23 0 22 0;
+#X connect 23 0 21 0;
+#X connect 24 0 2 0;
diff --git a/opengl/doc/examples/example04.pd b/opengl/doc/examples/example04.pd
new file mode 100644
index 0000000..5d22270
--- /dev/null
+++ b/opengl/doc/examples/example04.pd
@@ -0,0 +1,25 @@
+#N canvas 288 311 566 284 10;
+#X obj 54 156 3dp_windowcontext;
+#X obj 54 43 metro 40;
+#X obj 54 19 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 54 76 t b b;
+#X obj 134 120 pdp_convert texture/*/*;
+#X obj 54 183 3dp_mouserotate;
+#X floatatom 180 202 5 0 0 0 - - -;
+#X msg 134 68 open /dev/video1;
+#X obj 54 227 3dp_draw sphere 5;
+#X text 132 18 convert pdp image packets to textures and map them on
+a sphere;
+#X obj 134 93 pdp_v4l;
+#X connect 0 0 5 0;
+#X connect 0 1 5 1;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 0 0;
+#X connect 3 1 10 0;
+#X connect 4 0 8 1;
+#X connect 5 0 8 0;
+#X connect 6 0 8 2;
+#X connect 7 0 10 0;
+#X connect 10 0 4 0;
diff --git a/opengl/doc/examples/example05.pd b/opengl/doc/examples/example05.pd
new file mode 100644
index 0000000..7996355
--- /dev/null
+++ b/opengl/doc/examples/example05.pd
@@ -0,0 +1,41 @@
+#N canvas 352 162 732 325 10;
+#X obj 54 43 metro 40;
+#X obj 54 19 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 314 120 pdp_convert texture/*/*;
+#X floatatom 343 212 5 0 0;
+#X obj 286 247 3dp_draw sphere 5;
+#X obj 314 95 pdp_plasma;
+#X obj 408 48 loadbang;
+#X msg 408 70 dim 512 256;
+#X obj 314 65 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 181 144 3dp_windowcontext;
+#X obj 181 203 3dp_view roty;
+#X floatatom 267 176 5 0 0;
+#X obj 31 144 3dp_windowcontext;
+#X obj 31 203 3dp_view roty;
+#X floatatom 117 176 5 0 0;
+#X obj 286 278 3dp_draw cube 2;
+#X obj 336 164 pdp_del 3;
+#X text 414 164 <- textures can be stored in a delay line;
+#X text 133 9 convert pdp image packets to textures and map them on
+a sphere and cube. create 2 independent viewing windows.;
+#X connect 0 0 9 0;
+#X connect 0 0 12 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 1;
+#X connect 2 0 16 0;
+#X connect 3 0 4 2;
+#X connect 4 0 15 0;
+#X connect 5 0 2 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 5 0;
+#X connect 9 0 10 0;
+#X connect 10 0 4 0;
+#X connect 11 0 10 1;
+#X connect 12 0 13 0;
+#X connect 13 0 4 0;
+#X connect 14 0 13 1;
+#X connect 16 0 15 1;
diff --git a/opengl/doc/examples/example06.pd b/opengl/doc/examples/example06.pd
new file mode 100644
index 0000000..8d8595a
--- /dev/null
+++ b/opengl/doc/examples/example06.pd
@@ -0,0 +1,85 @@
+#N canvas 516 361 634 497 10;
+#X obj 23 119 metro 40;
+#X obj 23 89 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 360 397 pdp_convert texture/*/*;
+#X obj 23 387 3dp_mouserotate;
+#X obj 155 255 3dp_light 0;
+#X obj 23 193 3dp_push;
+#X floatatom 269 198 5 0 0;
+#X obj 23 161 3dp_windowcontext;
+#X obj 360 299 pdp_convert image/grey/*;
+#X obj 360 184 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 478 163 random;
+#X msg 479 186 rule gameoflife;
+#X msg 478 114 rule fire;
+#X obj 360 270 pdp_ca;
+#X obj 360 371 pdp_motion_phase;
+#X floatatom 479 343 5 0 0;
+#X obj 478 88 loadbang;
+#X msg 479 322 0.33;
+#X obj 328 473 3dp_draw sphere 2.6;
+#X floatatom 463 434 5 0 0;
+#X obj 155 227 3dp_view transz 5;
+#X floatatom 480 237 5 0 0;
+#X msg 517 322 1;
+#X obj 360 347 pdp_gain;
+#X floatatom 411 323 5 0 0;
+#X msg 478 139 dim 256 128;
+#X obj 179 393 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 328 419 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 23 416 3dp_toggle depth_test 0;
+#X obj 179 445 3dp_toggle blend_add 1;
+#X msg 480 213 1;
+#X obj 23 316 3dp_mode texture;
+#X floatatom 281 310 5 0 0;
+#X obj 156 339 3dp_view scale 1;
+#X floatatom 280 340 5 0 0;
+#X obj 156 366 3dp_view rotz;
+#X text 141 197 move light source;
+#X text 143 294 transform texture coords;
+#X text 31 12 blending with depth test disabled using 3dp_toggle object.
+together with a cellular automata texture (you need pdp_scaf for this)
+and texture coordinate transformation.;
+#X connect 0 0 7 0;
+#X connect 0 0 9 0;
+#X connect 1 0 0 0;
+#X connect 2 0 18 1;
+#X connect 3 0 28 0;
+#X connect 5 0 31 0;
+#X connect 5 1 20 0;
+#X connect 6 0 20 1;
+#X connect 7 0 5 0;
+#X connect 7 1 3 1;
+#X connect 8 0 23 0;
+#X connect 9 0 13 0;
+#X connect 10 0 13 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 0;
+#X connect 12 0 25 0;
+#X connect 13 0 8 0;
+#X connect 14 0 2 0;
+#X connect 15 0 14 1;
+#X connect 16 0 12 0;
+#X connect 17 0 15 0;
+#X connect 19 0 18 2;
+#X connect 20 0 4 0;
+#X connect 21 0 13 2;
+#X connect 22 0 15 0;
+#X connect 23 0 14 0;
+#X connect 24 0 23 1;
+#X connect 25 0 13 0;
+#X connect 25 0 10 0;
+#X connect 26 0 28 1;
+#X connect 27 0 29 1;
+#X connect 28 1 29 0;
+#X connect 29 1 18 0;
+#X connect 30 0 21 0;
+#X connect 31 0 3 0;
+#X connect 31 1 33 0;
+#X connect 32 0 33 1;
+#X connect 33 0 35 0;
+#X connect 34 0 35 1;
diff --git a/opengl/doc/examples/example07.pd b/opengl/doc/examples/example07.pd
new file mode 100644
index 0000000..cd3618c
--- /dev/null
+++ b/opengl/doc/examples/example07.pd
@@ -0,0 +1,25 @@
+#N canvas 400 454 637 428 10;
+#X obj 18 131 3dp_windowcontext;
+#X obj 18 159 3dp_push;
+#X obj 201 70 metro 40;
+#X obj 201 42 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 201 99 pdp_v4l;
+#X obj 201 131 pdp_convert texture/*/*;
+#X floatatom 258 265 5 0 0;
+#X obj 18 218 3dp_view scalex 1.33333;
+#X obj 18 187 3dp_mouserotate;
+#X text 15 10 using a square scaled by an aspect ratio to construct
+an an alternative pdp_glx;
+#X obj 144 290 3dp_draw square 8;
+#X connect 0 0 1 0;
+#X connect 0 1 8 1;
+#X connect 1 0 8 0;
+#X connect 2 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 10 1;
+#X connect 6 0 10 2;
+#X connect 7 0 10 0;
+#X connect 8 0 7 0;
diff --git a/opengl/doc/examples/example08.pd b/opengl/doc/examples/example08.pd
new file mode 100644
index 0000000..a5f7e9d
--- /dev/null
+++ b/opengl/doc/examples/example08.pd
@@ -0,0 +1,94 @@
+#N canvas 96 78 756 667 10;
+#X obj 18 131 3dp_windowcontext;
+#X obj 18 159 3dp_push;
+#X obj 327 80 metro 40;
+#X obj 327 52 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 327 224 pdp_v4l;
+#X obj 431 463 pdp_convert texture/*/*;
+#X floatatom 488 554 5 0 0;
+#X obj 18 215 3dp_view scalex 1.33333;
+#X obj 18 189 3dp_mouserotate;
+#X floatatom 83 308 5 0 0;
+#X msg 83 287 10;
+#X obj 69 428 3dp_view rotx;
+#X obj 69 475 3dp_view roty;
+#X obj 69 523 3dp_view rotz;
+#X obj 155 398 random 360;
+#X obj 155 453 random 360;
+#X obj 155 500 random 360;
+#X obj 155 371 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 18 366 3dp_push;
+#X text 132 305 nb of squares;
+#X floatatom 220 369 5 0 0;
+#X obj 431 309 pdp_plasma;
+#X obj 431 256 loadbang;
+#X obj 327 192 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 397 279 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 417 55 200;
+#X floatatom 510 364 5 0 0;
+#X msg 378 55 40;
+#X obj 327 126 spigot;
+#X obj 385 106 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 431 395 pdp_gain 0.3;
+#X obj 18 333 3dp_for 10;
+#X text 21 12 another example of accumulated blending combined with
+a 3dp_for object to render multiple randomly rotated squares.;
+#X msg 386 186 open /dev/video1;
+#X obj 18 246 3dp_blend;
+#X text 411 106 switch between video textures and stills;
+#X msg 386 160 open /dev/video0;
+#X text 87 246 <-- click for more info;
+#X msg 431 281 dim 64 64 \, bang;
+#X obj 548 228 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 548 256 metro 2000;
+#X obj 374 583 3dp_draw square 8;
+#X connect 0 0 1 0;
+#X connect 0 1 8 1;
+#X connect 1 0 8 0;
+#X connect 2 0 0 0;
+#X connect 2 0 28 0;
+#X connect 3 0 2 0;
+#X connect 4 0 30 0;
+#X connect 5 0 41 1;
+#X connect 6 0 41 2;
+#X connect 7 0 34 0;
+#X connect 8 0 7 0;
+#X connect 9 0 31 1;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 41 0;
+#X connect 14 0 11 1;
+#X connect 15 0 12 1;
+#X connect 16 0 13 1;
+#X connect 17 0 14 0;
+#X connect 17 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 1 11 0;
+#X connect 20 0 14 1;
+#X connect 20 0 15 1;
+#X connect 20 0 16 1;
+#X connect 21 0 30 0;
+#X connect 22 0 38 0;
+#X connect 23 0 4 0;
+#X connect 24 0 21 0;
+#X connect 25 0 2 1;
+#X connect 26 0 30 1;
+#X connect 27 0 2 1;
+#X connect 28 0 23 0;
+#X connect 29 0 28 1;
+#X connect 30 0 5 0;
+#X connect 31 0 18 0;
+#X connect 31 1 17 0;
+#X connect 33 0 4 0;
+#X connect 34 0 31 0;
+#X connect 36 0 4 0;
+#X connect 38 0 21 0;
+#X connect 39 0 40 0;
+#X connect 40 0 21 0;
diff --git a/opengl/doc/examples/example09.pd b/opengl/doc/examples/example09.pd
new file mode 100644
index 0000000..3333d3a
--- /dev/null
+++ b/opengl/doc/examples/example09.pd
@@ -0,0 +1,90 @@
+#N canvas 96 78 756 667 10;
+#X obj 18 111 3dp_windowcontext;
+#X obj 18 139 3dp_push;
+#X obj 18 169 3dp_mouserotate;
+#X floatatom 141 370 5 0 0;
+#X msg 141 349 10;
+#X obj 127 490 3dp_view rotx;
+#X obj 127 537 3dp_view roty;
+#X obj 127 585 3dp_view rotz;
+#X obj 213 460 random 360;
+#X obj 213 515 random 360;
+#X obj 213 562 random 360;
+#X obj 213 433 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 76 428 3dp_push;
+#X floatatom 278 431 5 0 0;
+#X obj 76 395 3dp_for 10;
+#X obj 18 226 3dp_blend;
+#X text 87 226 <-- click for more info;
+#X obj 18 365 3dp_color;
+#X floatatom 32 311 5 0 0;
+#X floatatom 78 311 5 0 0;
+#X floatatom 123 311 5 0 0;
+#X floatatom 167 311 5 0 0;
+#X obj 415 193 3dp_view transz 5;
+#X obj 415 217 3dp_light;
+#X obj 18 78 metro 40;
+#X obj 18 50 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X floatatom 529 166 5 0 0;
+#X obj 32 252 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 2200 1;
+#X obj 78 251 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 2100 1;
+#X obj 123 251 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 3800 1;
+#X obj 169 250 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 1100 1;
+#X text 209 275 in this blending mode \, alpha is interpreted as a
+color gain;
+#X floatatom 515 137 5 0 0;
+#X floatatom 144 178 5 0 0;
+#X obj 127 633 3dp_draw tetra 4;
+#X text 14 13 similar to as example08.;
+#X obj 415 168 3dp_view roty 5;
+#X obj 18 199 3dp_view scale 4;
+#X msg 278 406 18;
+#X msg 515 112 75;
+#X connect 0 0 1 0;
+#X connect 0 1 2 1;
+#X connect 1 0 2 0;
+#X connect 1 1 36 0;
+#X connect 2 0 37 0;
+#X connect 3 0 14 1;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 34 0;
+#X connect 8 0 5 1;
+#X connect 9 0 6 1;
+#X connect 10 0 7 1;
+#X connect 11 0 8 0;
+#X connect 11 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 1 5 0;
+#X connect 13 0 8 1;
+#X connect 13 0 9 1;
+#X connect 13 0 10 1;
+#X connect 14 0 12 0;
+#X connect 14 1 11 0;
+#X connect 15 0 17 0;
+#X connect 17 1 14 0;
+#X connect 18 0 17 1;
+#X connect 19 0 17 2;
+#X connect 20 0 17 3;
+#X connect 21 0 17 4;
+#X connect 22 0 23 0;
+#X connect 24 0 0 0;
+#X connect 25 0 24 0;
+#X connect 26 0 22 1;
+#X connect 27 0 18 0;
+#X connect 28 0 19 0;
+#X connect 29 0 20 0;
+#X connect 30 0 21 0;
+#X connect 32 0 36 1;
+#X connect 33 0 37 1;
+#X connect 36 0 22 0;
+#X connect 37 0 15 0;
+#X connect 38 0 13 0;
+#X connect 39 0 32 0;
diff --git a/opengl/doc/examples/example10.pd b/opengl/doc/examples/example10.pd
new file mode 100644
index 0000000..2216fb3
--- /dev/null
+++ b/opengl/doc/examples/example10.pd
@@ -0,0 +1,39 @@
+#N canvas 592 340 647 499 10;
+#X obj 231 344 pdp_xv;
+#X obj 54 72 metro 40;
+#X obj 54 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 54 140 3dp_push;
+#X obj 248 158 3dp_view transz 5;
+#X floatatom 362 126 5 0 0;
+#X obj 248 182 3dp_light 0;
+#X obj 54 169 3dp_mouserotate;
+#X obj 54 111 3dp_windowcontext;
+#X obj 231 311 pdp_blur;
+#X obj 285 291 hsl 128 15 0 1 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 8100 1;
+#X text 104 7 connect 3dp and basic pdp image processing with 3dp_snap
+;
+#X text 105 26 3dp_snap defaults to texture packets \, but you can
+specify the desired type as a creation argument;
+#X obj 107 377 pdp_convert texture/*/*;
+#X obj 54 412 3dp_draw cube 10;
+#X text 247 233 <- specify packet type and capture area;
+#X obj 54 200 3dp_draw cube 2;
+#X obj 54 234 3dp_snap image/*/* 320 240;
+#X connect 1 0 8 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 3 1 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 1;
+#X connect 7 0 16 0;
+#X connect 8 0 3 0;
+#X connect 8 1 7 1;
+#X connect 9 0 13 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 1;
+#X connect 13 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 14 0;
+#X connect 17 1 9 0;
diff --git a/opengl/doc/examples/example11.pd b/opengl/doc/examples/example11.pd
new file mode 100644
index 0000000..c902408
--- /dev/null
+++ b/opengl/doc/examples/example11.pd
@@ -0,0 +1,77 @@
+#N canvas 542 122 669 675 10;
+#X obj 23 70 metro 40;
+#X obj 23 40 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 23 517 3dp_mouserotate;
+#X obj 171 520 3dp_light 0;
+#X obj 23 444 3dp_push;
+#X obj 171 492 3dp_view transz 5;
+#X obj 23 112 3dp_windowcontext;
+#X obj 205 311 3dp_snap;
+#X obj 205 213 3dp_draw clear;
+#X obj 23 406 3dp_draw clear;
+#X obj 60 347 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 23 157 3dp_subcontext 64 64;
+#X obj 23 380 spigot;
+#X text 384 210 <- clear it;
+#X text 380 309 <- snap to texture;
+#X obj 205 261 3dp_view rota 1 1 0;
+#X floatatom 333 236 5 0 0;
+#X text 69 10 multipass rendering to texture using a subcontext (subwindow)
+;
+#X text 381 285 <- draw a wireframe sphere;
+#X text 383 235 <- rotate around (1 \, 1 \, 0);
+#X text 135 406 <- clear the window;
+#X obj 205 286 3dp_draw wsphere 3 10 10;
+#X obj 323 429 3dp_draw clear;
+#X obj 323 405 3dp_view reset;
+#X obj 323 507 3dp_draw wdodeca;
+#X obj 323 532 3dp_snap;
+#X obj 22 613 3dp_draw cube 10;
+#X obj 360 348 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 323 381 spigot;
+#X text 381 346 <- enable/disable second pass;
+#X text 87 345 <- enable/disable third pass;
+#X text 443 404 <- reset context;
+#X text 442 427 <- clear context;
+#X text 442 507 <- draw wire dodecahedron;
+#X text 441 532 <- snap to texture;
+#X obj 323 483 3dp_view rota 1 1 0;
+#X floatatom 451 458 5 0 0;
+#X text 501 457 <- rotate around (1 \, 1 \, 0);
+#X obj 23 562 3dp_draw cube 2;
+#X text 204 142 NOTE: the part you use as a subcontext must be visible
+for the texture snap to work.;
+#X text 203 91 use the lower left 64x64 part of the window as a subcontext
+(right outlet) the left outlet is a new full window context reset to
+default.;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 38 0;
+#X connect 4 0 2 0;
+#X connect 4 1 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 11 0;
+#X connect 6 1 2 1;
+#X connect 7 0 28 0;
+#X connect 7 1 38 1;
+#X connect 8 0 15 0;
+#X connect 9 0 4 0;
+#X connect 10 0 12 1;
+#X connect 11 0 12 0;
+#X connect 11 1 8 0;
+#X connect 12 0 9 0;
+#X connect 15 0 21 0;
+#X connect 16 0 15 4;
+#X connect 21 0 7 0;
+#X connect 22 0 35 0;
+#X connect 23 0 22 0;
+#X connect 24 0 25 0;
+#X connect 25 1 26 1;
+#X connect 27 0 28 1;
+#X connect 28 0 23 0;
+#X connect 35 0 24 0;
+#X connect 36 0 35 4;
+#X connect 38 0 26 0;
diff --git a/opengl/doc/examples/example12.pd b/opengl/doc/examples/example12.pd
new file mode 100644
index 0000000..14f8afd
--- /dev/null
+++ b/opengl/doc/examples/example12.pd
@@ -0,0 +1,90 @@
+#N canvas 529 191 669 751 10;
+#X obj 55 68 metro 40;
+#X obj 55 38 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 55 515 3dp_mouserotate;
+#X obj 184 514 3dp_light 0;
+#X obj 55 442 3dp_push;
+#X obj 184 486 3dp_view transz 5;
+#X obj 55 110 3dp_windowcontext;
+#X obj 343 481 3dp_snap;
+#X obj 55 404 3dp_draw clear;
+#X obj 436 272 3dp_light 0;
+#X obj 436 244 3dp_view transxyz 5 5 0;
+#X obj 285 226 3dp_push;
+#X obj 343 449 3dp_draw sphere 7 10 10;
+#X text 69 10 another multipass rendering example;
+#X obj 55 576 3dp_draw cube 7;
+#X obj 55 155 3dp_subcontext 256 256;
+#X obj 285 260 3dp_mouserotate;
+#X obj 343 413 3dp_draw icosa 1;
+#X obj 285 342 3dp_color;
+#X obj 343 387 3dp_view scale 1;
+#X floatatom 450 358 5 0 0;
+#N canvas 0 0 291 420 coord_to_color 0;
+#X obj 97 85 route drag;
+#X obj 97 147 *;
+#X obj 134 146 *;
+#X obj 97 174 +;
+#X obj 97 281 sqrt;
+#X obj 97 225 - 1;
+#X obj 97 249 * -1;
+#X obj 97 114 unpack 0 0;
+#X obj 98 45 inlet;
+#X obj 53 337 outlet;
+#X obj 181 332 outlet;
+#X obj 116 336 outlet;
+#X connect 0 0 7 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 1;
+#X connect 3 0 5 0;
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 7 0 1 1;
+#X connect 7 0 1 0;
+#X connect 7 0 9 0;
+#X connect 7 1 2 1;
+#X connect 7 1 2 0;
+#X connect 7 1 10 0;
+#X connect 8 0 0 0;
+#X restore 304 305 pd coord_to_color;
+#X obj 453 337 hsl 128 15 1 3 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 7900 1;
+#X obj 285 196 3dp_draw clear;
+#X obj 92 622 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 55 662 3dp_screenshot /tmp/screenshot.png;
+#X msg 227 71 dim 1023 768;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 14 0;
+#X connect 4 0 2 0;
+#X connect 4 1 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 15 0;
+#X connect 6 1 2 1;
+#X connect 6 1 21 0;
+#X connect 6 1 16 1;
+#X connect 7 1 12 1;
+#X connect 7 1 14 1;
+#X connect 8 0 4 0;
+#X connect 10 0 9 0;
+#X connect 11 0 16 0;
+#X connect 11 1 10 0;
+#X connect 12 0 7 0;
+#X connect 14 0 25 0;
+#X connect 15 0 8 0;
+#X connect 15 1 23 0;
+#X connect 16 0 18 0;
+#X connect 17 0 12 0;
+#X connect 18 1 19 0;
+#X connect 19 0 17 0;
+#X connect 20 0 19 1;
+#X connect 21 0 18 1;
+#X connect 21 1 18 2;
+#X connect 21 2 18 3;
+#X connect 22 0 20 0;
+#X connect 23 0 11 0;
+#X connect 24 0 25 0;
+#X connect 26 0 6 0;
diff --git a/opengl/doc/examples/example13.pd b/opengl/doc/examples/example13.pd
new file mode 100644
index 0000000..a8c5f75
--- /dev/null
+++ b/opengl/doc/examples/example13.pd
@@ -0,0 +1,81 @@
+#N canvas 478 168 669 751 10;
+#X obj 55 68 metro 40;
+#X obj 55 38 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 55 110 3dp_windowcontext;
+#X obj 262 479 3dp_snap;
+#X obj 355 270 3dp_light 0;
+#X obj 355 242 3dp_view transxyz 5 5 0;
+#X obj 204 224 3dp_push;
+#X obj 262 447 3dp_draw sphere 7 10 10;
+#X obj 204 258 3dp_mouserotate;
+#X obj 262 411 3dp_draw icosa 1;
+#X obj 204 340 3dp_color;
+#X obj 262 385 3dp_view scale 1;
+#X floatatom 369 356 5 0 0;
+#N canvas 0 0 291 420 coord_to_color 0;
+#X obj 97 85 route drag;
+#X obj 97 147 *;
+#X obj 134 146 *;
+#X obj 97 174 +;
+#X obj 97 281 sqrt;
+#X obj 97 225 - 1;
+#X obj 97 249 * -1;
+#X obj 97 114 unpack 0 0;
+#X obj 98 45 inlet;
+#X obj 53 337 outlet;
+#X obj 181 332 outlet;
+#X obj 116 336 outlet;
+#X connect 0 0 7 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 1;
+#X connect 3 0 5 0;
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 7 0 1 1;
+#X connect 7 0 1 0;
+#X connect 7 0 9 0;
+#X connect 7 1 2 1;
+#X connect 7 1 2 0;
+#X connect 7 1 10 0;
+#X connect 8 0 0 0;
+#X restore 223 303 pd coord_to_color;
+#X obj 372 335 hsl 128 15 1 3 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 7900 1;
+#X obj 204 194 3dp_draw clear;
+#X text 209 658 <- stretch the texture to cover the entire window (click
+for info);
+#X text 119 13 fixed resolution processing (independent of the display
+window size) using multipass rendering;
+#X floatatom 210 631 5 0 0;
+#X obj 55 658 3dp_display_texture;
+#X text 338 480 <- snap the result to a texture;
+#X text 228 154 <- create a subcontext to do some drawing;
+#X text 402 76 see also;
+#X obj 405 97 3dp_fixedsizewindowcontext 64 64;
+#X obj 55 155 3dp_subcontext 320 240;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 24 0;
+#X connect 2 1 13 0;
+#X connect 2 1 8 1;
+#X connect 3 1 7 1;
+#X connect 3 1 19 1;
+#X connect 5 0 4 0;
+#X connect 6 0 8 0;
+#X connect 6 1 5 0;
+#X connect 7 0 3 0;
+#X connect 8 0 10 0;
+#X connect 9 0 7 0;
+#X connect 10 1 11 0;
+#X connect 11 0 9 0;
+#X connect 12 0 11 1;
+#X connect 13 0 10 1;
+#X connect 13 1 10 2;
+#X connect 13 2 10 3;
+#X connect 14 0 12 0;
+#X connect 15 0 6 0;
+#X connect 18 0 19 2;
+#X connect 24 0 19 0;
+#X connect 24 1 15 0;
diff --git a/opengl/doc/examples/example14.pd b/opengl/doc/examples/example14.pd
new file mode 100644
index 0000000..fa0cabb
--- /dev/null
+++ b/opengl/doc/examples/example14.pd
@@ -0,0 +1,66 @@
+#N canvas 586 145 669 674 10;
+#X obj 67 71 3dp_windowcontext;
+#X obj 67 46 metro 40;
+#X obj 67 23 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 67 155 3dp_blend;
+#X obj 176 423 3dp_view transxyz;
+#X msg 226 296 reset;
+#X obj 197 374 *;
+#X obj 304 375 *;
+#X floatatom 320 347 5 0 0;
+#X obj 274 154 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 700 1;
+#X obj 316 154 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 1100 1;
+#X obj 295 154 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 1200 1;
+#X obj 337 154 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 400 1;
+#X obj 125 253 3dp_push;
+#X obj 67 95 3dp_mouserotate;
+#X obj 67 124 3dp_view scale 1;
+#X floatatom 206 99 5 0 0;
+#X obj 209 79 hsl 128 15 0.2 5 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 7000 1;
+#X obj 323 326 hsl 128 15 0.1 2 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 2100 1;
+#X obj 67 187 3dp_color;
+#X obj 226 223 route press3;
+#X text 329 223 <- right click mouse to reset;
+#X text 211 253 <- remove 3dp_push object to accumulate the translations
+;
+#X obj 197 326 randomwalk2D 100;
+#X obj 125 224 3dp_for 100;
+#X text 287 130 R G B I;
+#X obj 176 460 3dp_draw cube 1;
+#X text 227 13 using 3dp_for and the randomwalk2D abstraction to create
+random walking blended cubes.;
+#X connect 0 0 14 0;
+#X connect 0 1 14 1;
+#X connect 0 1 20 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 19 0;
+#X connect 4 0 26 0;
+#X connect 5 0 23 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 7 1;
+#X connect 8 0 6 1;
+#X connect 9 0 19 1;
+#X connect 10 0 19 3;
+#X connect 11 0 19 2;
+#X connect 12 0 19 4;
+#X connect 13 1 4 0;
+#X connect 14 0 15 0;
+#X connect 15 0 3 0;
+#X connect 16 0 15 1;
+#X connect 17 0 16 0;
+#X connect 18 0 8 0;
+#X connect 19 1 24 0;
+#X connect 20 0 5 0;
+#X connect 23 0 6 0;
+#X connect 23 1 7 0;
+#X connect 24 0 13 0;
+#X connect 24 1 23 0;
diff --git a/opengl/doc/examples/example15.pd b/opengl/doc/examples/example15.pd
new file mode 100644
index 0000000..281c91a
--- /dev/null
+++ b/opengl/doc/examples/example15.pd
@@ -0,0 +1,126 @@
+#N canvas 269 234 933 697 10;
+#X obj 67 46 metro 40;
+#X obj 67 23 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 67 224 3dp_blend;
+#X obj 176 673 3dp_view transxyz;
+#X msg 260 342 reset;
+#X obj 197 497 *;
+#X obj 304 498 *;
+#X obj 272 218 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 1000 1;
+#X obj 314 218 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 293 218 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 100 1;
+#X obj 335 218 vsl 15 30 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 200 1;
+#X obj 125 304 3dp_push;
+#X obj 67 119 3dp_mouserotate;
+#X obj 67 176 3dp_view scale 1;
+#X floatatom 241 145 5 0 0 0 - - -;
+#X obj 244 125 hsl 128 15 0.2 5 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 3800 1;
+#X obj 523 456 hsl 128 15 0.01 2 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 7900 1;
+#X obj 67 251 3dp_color;
+#X obj 402 231 route press3;
+#X text 211 304 <- remove 3dp_push object to accumulate the translations
+;
+#X obj 197 392 randomwalk2D 100;
+#X obj 125 275 3dp_for 100;
+#X text 285 185 R G B I;
+#X obj 197 533 smoothupdate 100;
+#X obj 304 567 smoothupdate 100;
+#X obj 524 490 hsl 128 15 0.01 1 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 1300 1;
+#X obj 67 93 3dp_push;
+#X obj 476 111 3dp_view transz 5;
+#X obj 476 171 3dp_light;
+#X obj 219 351 s i;
+#X obj 250 511 r i;
+#X obj 357 543 r i;
+#X obj 419 716 smoothupdate 100;
+#X obj 472 692 r i;
+#X obj 197 325 t f f b;
+#X obj 419 639 random 100;
+#X obj 419 662 - 50;
+#X obj 529 675 hsl 128 15 0.01 1 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 600 1;
+#X obj 419 688 / 10;
+#X msg 418 424 reset;
+#X obj 148 201 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 67 200 pdp_route;
+#X obj 176 765 3dp_draw torus 1 2 5 5;
+#X obj 176 709 pdp_route;
+#X obj 265 711 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 194 741 3dp_draw cube 2;
+#X text 315 344 <- reset random walk;
+#X text 532 554 <- reset smoothed points to origin;
+#X text 227 13 like example14 but with coordinate smoothing and lighting
+;
+#X text 505 246 <- route mouse buttons;
+#X obj 481 265 route press2;
+#X text 666 453 <- walk radius;
+#X text 667 488 <- walk smoothing;
+#X obj 67 70 3dp_fixedsizewindowcontext 320 240;
+#X floatatom 199 250 5 0 0 0 - - -;
+#X connect 0 0 53 0;
+#X connect 1 0 0 0;
+#X connect 2 0 17 0;
+#X connect 3 0 43 0;
+#X connect 4 0 20 0;
+#X connect 5 0 23 0;
+#X connect 6 0 24 0;
+#X connect 7 0 17 1;
+#X connect 8 0 17 3;
+#X connect 9 0 17 2;
+#X connect 10 0 17 4;
+#X connect 11 1 3 0;
+#X connect 12 0 13 0;
+#X connect 13 0 41 0;
+#X connect 14 0 13 1;
+#X connect 15 0 14 0;
+#X connect 16 0 6 1;
+#X connect 16 0 5 1;
+#X connect 17 1 21 0;
+#X connect 18 0 4 0;
+#X connect 18 1 50 0;
+#X connect 20 0 5 0;
+#X connect 20 1 6 0;
+#X connect 21 0 11 0;
+#X connect 21 1 34 0;
+#X connect 23 0 3 1;
+#X connect 24 0 3 2;
+#X connect 25 0 23 2;
+#X connect 25 0 24 2;
+#X connect 26 0 12 0;
+#X connect 26 1 27 0;
+#X connect 27 0 28 0;
+#X connect 30 0 23 1;
+#X connect 31 0 24 1;
+#X connect 32 0 3 3;
+#X connect 33 0 32 1;
+#X connect 34 0 20 0;
+#X connect 34 1 29 0;
+#X connect 34 2 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 38 0;
+#X connect 37 0 32 2;
+#X connect 38 0 32 0;
+#X connect 39 0 23 0;
+#X connect 39 0 24 0;
+#X connect 39 0 32 0;
+#X connect 40 0 41 1;
+#X connect 41 0 2 0;
+#X connect 41 1 17 0;
+#X connect 43 0 42 0;
+#X connect 43 1 45 0;
+#X connect 44 0 43 1;
+#X connect 50 0 39 0;
+#X connect 53 0 26 0;
+#X connect 53 1 12 1;
+#X connect 53 1 18 0;
+#X connect 54 0 21 1;
diff --git a/opengl/doc/examples/example16.pd b/opengl/doc/examples/example16.pd
new file mode 100644
index 0000000..e9495aa
--- /dev/null
+++ b/opengl/doc/examples/example16.pd
@@ -0,0 +1,107 @@
+#N canvas 196 0 772 525 10;
+#X obj 57 25 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 57 153 3dp_blend;
+#X floatatom 101 237 5 0 0 0 - - -;
+#X floatatom 149 237 5 0 0 0 - - -;
+#X floatatom 199 236 5 0 0 0 - - -;
+#X floatatom 247 236 5 0 0 0 - - -;
+#X obj 167 364 3dp_push;
+#X obj 218 434 3dp_view transxyz;
+#X msg 276 354 normal;
+#X obj 422 255 f;
+#X floatatom 484 264 5 0 0 0 - - -;
+#X msg 422 220 0;
+#X obj 57 177 pdp_t p b;
+#X obj 392 185 t b b;
+#X msg 591 238 0.2;
+#X msg 484 239 0;
+#X obj 57 72 3dp_windowcontext;
+#X obj 392 112 route press3;
+#X obj 57 49 metro 40;
+#X obj 167 328 3dp_for 100;
+#X obj 227 125 3dp_view transz 5;
+#X obj 227 159 3dp_light;
+#X obj 57 96 3dp_push;
+#X obj 422 289 + 0.2;
+#X obj 497 112 loadbang;
+#X msg 519 238 0.01;
+#N canvas 0 0 577 190 coordinates 0;
+#X obj 51 100 *;
+#X obj 51 72 elbat 100;
+#X obj 165 99 *;
+#X obj 165 71 elbat 100;
+#X obj 276 97 *;
+#X obj 276 69 elbat 100;
+#X obj 51 19 inlet;
+#X obj 125 18 inlet;
+#X text 354 69 <- table read abstraction;
+#X obj 51 130 outlet;
+#X obj 165 127 outlet;
+#X obj 276 125 outlet;
+#X connect 0 0 9 0;
+#X connect 1 0 0 0;
+#X connect 2 0 10 0;
+#X connect 3 0 2 0;
+#X connect 4 0 11 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 6 0 3 0;
+#X connect 6 0 5 0;
+#X connect 7 0 0 1;
+#X connect 7 0 2 1;
+#X connect 7 0 4 1;
+#X restore 239 403 pd coordinates;
+#X msg 392 136 bang;
+#X text 459 219 <- reset scaling to 0 (infinite density);
+#X text 469 290 <- increment scaling for each new frame;
+#X text 340 354 <- compute a new normal distributed set of points;
+#X text 506 371 (velocity vectors);
+#X text 545 264 <- diffusion speed;
+#X msg 559 238 0.1;
+#X text 182 12 explosion using 100 spheres with normal distributed
+velocity vectors;
+#X floatatom 367 441 5 0 0 0 - - -;
+#X obj 57 125 3dp_mouserotate;
+#X obj 57 278 3dp_color 0.1 0.1 0.1 0.27;
+#X obj 218 478 3dp_draw sphere 1 8 8;
+#X connect 0 0 18 0;
+#X connect 1 0 12 0;
+#X connect 2 0 37 1;
+#X connect 3 0 37 2;
+#X connect 4 0 37 3;
+#X connect 5 0 37 4;
+#X connect 6 1 7 0;
+#X connect 7 0 38 0;
+#X connect 8 0 26 0;
+#X connect 9 0 23 0;
+#X connect 10 0 23 1;
+#X connect 11 0 9 0;
+#X connect 12 0 37 0;
+#X connect 12 1 9 0;
+#X connect 13 0 8 0;
+#X connect 13 1 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 10 0;
+#X connect 16 0 22 0;
+#X connect 16 1 17 0;
+#X connect 16 1 36 1;
+#X connect 17 0 27 0;
+#X connect 18 0 16 0;
+#X connect 19 0 6 0;
+#X connect 19 1 26 0;
+#X connect 20 0 21 0;
+#X connect 22 0 36 0;
+#X connect 22 1 20 0;
+#X connect 23 0 9 1;
+#X connect 23 0 26 1;
+#X connect 24 0 13 0;
+#X connect 25 0 10 0;
+#X connect 26 0 7 1;
+#X connect 26 1 7 2;
+#X connect 26 2 7 3;
+#X connect 27 0 13 0;
+#X connect 33 0 10 0;
+#X connect 35 0 38 2;
+#X connect 36 0 1 0;
+#X connect 37 1 19 0;
diff --git a/opengl/doc/objects/3dp_for.pd b/opengl/doc/objects/3dp_for.pd
new file mode 100644
index 0000000..ccaf22d
--- /dev/null
+++ b/opengl/doc/objects/3dp_for.pd
@@ -0,0 +1,91 @@
+#N canvas 545 167 607 718 10;
+#X obj 22 40 3dp_windowcontext;
+#X obj 22 15 metro 40;
+#X obj 22 -5 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 22 67 3dp_push;
+#X obj 180 126 3dp_light;
+#X floatatom 301 85 5 0 0 0 - - -;
+#X obj 22 97 3dp_mouserotate;
+#X floatatom 151 228 5 0 0 0 - - -;
+#X obj 180 104 3dp_view transz 10;
+#X floatatom 81 165 5 0 0 0 - - -;
+#X obj 23 191 3dp_for 3;
+#X obj 23 251 3dp_view transx 1.5;
+#X floatatom 130 280 5 0 0 0 - - -;
+#X obj 23 302 3dp_view roty 45;
+#X obj 23 389 3dp_draw sphere 1;
+#X obj 81 365 + 1;
+#X obj 81 343 *;
+#X floatatom 129 327 5 0 0 0 - - -;
+#X text 135 159 3dp_for sends a rendering context trough a chain multiple
+times. the second outlet is the current number \, starting from zero
+\, and can be used to change the parameters parameters of the chain.
+(i.e. by reading from a table);
+#X text 222 252 all the geometry operations are accumulative \,;
+#X text 222 266 if you don't want that \, insert a 3dp_push object:
+;
+#X obj 314 313 3dp_for 3;
+#X obj 314 336 3dp_push;
+#X obj 365 400 3dp_draw cube 0.5;
+#X obj 23 140 3dp_push;
+#X obj 365 374 3dp_view transy;
+#X obj 465 343 * 1;
+#X floatatom 481 319 5 0 0 0 - - -;
+#X obj 86 569 pdp_t p p p;
+#X obj 86 606 3dp_view transy 1;
+#X obj 86 630 3dp_draw cube 0.5;
+#X obj 177 465 3dp_for 3;
+#X text 72 492 so \, in short \,;
+#X text 313 492 is equivalent to;
+#X obj 177 491 3dp_view transy 1;
+#X obj 177 515 3dp_draw cube 0.5;
+#X obj 354 539 3dp_view transy 1;
+#X obj 354 563 3dp_draw cube 0.5;
+#X obj 354 589 3dp_view transy 1;
+#X obj 354 613 3dp_draw cube 0.5;
+#X obj 354 638 3dp_view transy 1;
+#X obj 354 662 3dp_draw cube 0.5;
+#X text 256 596 and;
+#X obj 180 84 3dp_view roty;
+#X floatatom 266 66 5 0 0 0 - - -;
+#X connect 0 0 3 0;
+#X connect 0 1 6 1;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 6 0;
+#X connect 3 1 43 0;
+#X connect 5 0 8 1;
+#X connect 6 0 24 0;
+#X connect 7 0 11 1;
+#X connect 8 0 4 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 10 1 16 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 1;
+#X connect 13 0 14 0;
+#X connect 15 0 14 2;
+#X connect 16 0 15 0;
+#X connect 17 0 16 1;
+#X connect 21 0 22 0;
+#X connect 21 1 26 0;
+#X connect 22 1 25 0;
+#X connect 24 0 10 0;
+#X connect 24 1 21 0;
+#X connect 25 0 23 0;
+#X connect 26 0 25 1;
+#X connect 27 0 26 1;
+#X connect 28 0 29 0;
+#X connect 28 1 29 0;
+#X connect 28 2 29 0;
+#X connect 29 0 30 0;
+#X connect 31 0 34 0;
+#X connect 34 0 35 0;
+#X connect 36 0 37 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 43 0 8 0;
+#X connect 44 0 43 1;