aboutsummaryrefslogtreecommitdiff
path: root/Gem/examples/12.multi_screen_projection
diff options
context:
space:
mode:
Diffstat (limited to 'Gem/examples/12.multi_screen_projection')
-rw-r--r--Gem/examples/12.multi_screen_projection/01.flat_projection-help.pd30
-rw-r--r--Gem/examples/12.multi_screen_projection/02.nfp-help.pd46
-rw-r--r--Gem/examples/12.multi_screen_projection/config.txt70
-rw-r--r--Gem/examples/12.multi_screen_projection/flat_projection.pd454
-rw-r--r--Gem/examples/12.multi_screen_projection/grid.jpgbin0 -> 211659 bytes
-rw-r--r--Gem/examples/12.multi_screen_projection/load_save.pd40
-rw-r--r--Gem/examples/12.multi_screen_projection/nfp_22.frag18
-rw-r--r--Gem/examples/12.multi_screen_projection/nfp_22.vert26
-rw-r--r--Gem/examples/12.multi_screen_projection/nfp_33.frag18
-rw-r--r--Gem/examples/12.multi_screen_projection/nfp_33.vert37
-rw-r--r--Gem/examples/12.multi_screen_projection/nfp_curved_wall.pd413
-rw-r--r--Gem/examples/12.multi_screen_projection/nfp_flat_wall.pd313
-rw-r--r--Gem/examples/12.multi_screen_projection/save_system-help.pd20
-rw-r--r--Gem/examples/12.multi_screen_projection/saved.pd24
-rw-r--r--Gem/examples/12.multi_screen_projection/soft_edge.frag62
15 files changed, 1571 insertions, 0 deletions
diff --git a/Gem/examples/12.multi_screen_projection/01.flat_projection-help.pd b/Gem/examples/12.multi_screen_projection/01.flat_projection-help.pd
new file mode 100644
index 0000000..eb5b2fc
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/01.flat_projection-help.pd
@@ -0,0 +1,30 @@
+#N canvas 365 180 996 500 10;
+#X obj 39 307 r render;
+#X obj 39 437 pix_texture;
+#X obj 110 353 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 110 373 openpanel;
+#X msg 110 394 open \$1;
+#X obj 39 458 square 25;
+#X text 99 307 <- this object must be present in your patch to start
+the gemchain like in this example.;
+#X floatatom 109 462 5 0 0 0 - - -;
+#X obj 39 49 flat_projection 20;
+#X text 304 191 <- abstraction [flat_projection];
+#X obj 39 416 pix_image ../data/fractal.JPG;
+#X msg 51 24 offset 1024 0;
+#X text 176 23 other messages to the gemwin;
+#X text 305 133 This define the way screen are physically connected
+to the computer.;
+#X text 306 93 This define the way screen are positioned in space to
+create a single image.;
+#X text 305 159 geometry screen and geometry computer can be diferents
+\, but should define the same number of screen.;
+#X connect 0 0 10 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 10 0;
+#X connect 7 0 5 1;
+#X connect 10 0 1 0;
+#X connect 11 0 8 0;
diff --git a/Gem/examples/12.multi_screen_projection/02.nfp-help.pd b/Gem/examples/12.multi_screen_projection/02.nfp-help.pd
new file mode 100644
index 0000000..6a8404d
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/02.nfp-help.pd
@@ -0,0 +1,46 @@
+#N canvas 321 188 996 584 10;
+#X obj 27 231 gemhead;
+#X obj 27 298 gemframebuffer;
+#X obj 27 348 translateXYZ 0 0 -4;
+#X msg 43 275 dimen 1024 768;
+#X obj 43 255 loadbang;
+#X obj 27 442 pix_texture;
+#X obj 27 464 rectangle 5.333 4;
+#X msg 42 397 thread 0 \, open grid.jpg;
+#X obj 42 377 loadbang;
+#X text 24 211 creation of a big framebuffer;
+#X msg 171 274 rectangle 1;
+#X obj 171 255 loadbang;
+#X obj 27 420 pix_image;
+#X obj 30 177 gemwin;
+#X msg 30 129 create \, 1;
+#X msg 43 149 0 \, destroy;
+#X obj 122 320 s nfp_fb;
+#X obj 35 61 load_save;
+#X obj 86 43 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 35 43 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 280 43 nfp_flat_wall 1;
+#X obj 35 19 loadbang;
+#X obj 490 43 nfp_flat_wall 2;
+#X obj 703 44 nfp_curved_wall 3;
+#X text 52 43 load;
+#X text 104 42 save;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 16 0;
+#X connect 2 0 12 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 10 0 1 0;
+#X connect 11 0 10 0;
+#X connect 12 0 5 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
+#X connect 18 0 17 1;
+#X connect 19 0 17 0;
+#X connect 21 0 19 0;
diff --git a/Gem/examples/12.multi_screen_projection/config.txt b/Gem/examples/12.multi_screen_projection/config.txt
new file mode 100644
index 0000000..8e10bbb
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/config.txt
@@ -0,0 +1,70 @@
+VP_CR_Y-3 2.34;
+VP_CR_X-3 1.79;
+VP_CC_Y-3 -0.34;
+VP_CC_X-3 0.55;
+VP_CL_Y-3 0.76;
+VP_CL_X-3 -0.730001;
+VP_BC_Y-3 -4.01001;
+VP_BC_X-3 0.2;
+VP_TC_Y-3 3.7;
+VP_TC_X-3 0.00999991;
+Shade_B-3 0;
+Shade_T-3 0;
+Shade_R-3 0.0829032;
+Shade_L-3 0.0693548;
+TP_BR_Y-3 265;
+TP_BR_X-3 416;
+TP_TR_Y-3 0;
+TP_TR_X-3 367;
+TP_BL_Y-3 227;
+TP_BL_X-3 0;
+TP_TL_Y-3 13;
+TP_TL_X-3 105;
+VP_BR_Y-3 -3.37;
+VP_BR_X-3 1.52;
+VP_TR_Y-3 3.95;
+VP_TR_X-3 1.31;
+VP_BL_Y-3 -2.83;
+VP_BL_X-3 -1.21;
+VP_TL_Y-3 3.35;
+VP_TL_X-3 -1.16;
+Shade_B-2 0;
+Shade_T-2 0;
+Shade_R-2 0;
+Shade_L-2 0;
+TP_BR_Y-2 538;
+TP_BR_X-2 975;
+TP_TR_Y-2 0;
+TP_TR_X-2 889;
+TP_BL_Y-2 449;
+TP_BL_X-2 625;
+TP_TL_Y-2 117;
+TP_TL_X-2 605;
+VP_BR_Y-2 -3.53;
+VP_BR_X-2 3.44;
+VP_TR_Y-2 2.64;
+VP_TR_X-2 3;
+VP_BL_Y-2 -2.53;
+VP_BL_X-2 1.33;
+VP_TL_Y-2 1.18;
+VP_TL_X-2 1.17;
+Shade_B-1 0;
+Shade_T-1 0;
+Shade_R-1 0;
+Shade_L-1 0;
+TP_BR_Y-1 448;
+TP_BR_X-1 453;
+TP_TR_Y-1 110;
+TP_TR_X-1 543;
+TP_BL_Y-1 484;
+TP_BL_X-1 95;
+TP_TL_Y-1 0;
+TP_TL_X-1 0;
+VP_BR_Y-1 -3.01999;
+VP_BR_X-1 -0.18;
+VP_TR_Y-1 1.94;
+VP_TR_X-1 0.54;
+VP_BL_Y-1 -3.75;
+VP_BL_X-1 -2.9;
+VP_TL_Y-1 3.84;
+VP_TL_X-1 -3.66001;
diff --git a/Gem/examples/12.multi_screen_projection/flat_projection.pd b/Gem/examples/12.multi_screen_projection/flat_projection.pd
new file mode 100644
index 0000000..9f81653
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/flat_projection.pd
@@ -0,0 +1,454 @@
+#N canvas 75 144 1376 699 10;
+#X obj 263 277 gemhead;
+#X obj 263 351 gemframebuffer;
+#X obj 263 402 s render;
+#X msg 285 326 rectangle 0;
+#X obj 285 307 loadbang;
+#X obj 263 376 translateXYZ 0 0 -4;
+#N canvas 190 83 1090 559 size 0;
+#X obj 29 20 inlet;
+#X obj 29 91 unpack f f;
+#X obj 142 91 unpack f f;
+#X obj 336 91 unpack f f;
+#X obj 142 122 - 1;
+#X obj 199 124 - 1;
+#X obj 142 187 *;
+#X obj 155 163 t b f;
+#X obj 199 187 *;
+#X obj 212 163 t b f;
+#X obj 42 233 t b f;
+#X obj 126 233 t b f;
+#X obj 29 330 pack f f;
+#X obj 441 160 t b b f;
+#X obj 29 494 outlet;
+#X obj 29 147 *;
+#X obj 42 123 t b f;
+#X obj 86 147 *;
+#X obj 99 123 t b f;
+#X obj 257 329 pack f f;
+#X obj 257 407 outlet;
+#X obj 29 257 -;
+#X obj 113 257 -;
+#X obj 113 285 f;
+#X obj 29 285 f;
+#N canvas 260 83 450 300 change2 0;
+#X obj 41 24 inlet;
+#X obj 41 47 unpack f f;
+#X obj 80 176 pack f f;
+#X obj 98 132 t b f;
+#X obj 80 201 outlet;
+#X obj 41 149 moses 2;
+#X obj 41 89 change;
+#X obj 98 89 change;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 1 1 7 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 1 2 0;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X restore 257 366 pd change2;
+#N canvas 260 83 450 300 change2 0;
+#X obj 41 24 inlet;
+#X obj 41 47 unpack f f;
+#X obj 80 176 pack f f;
+#X obj 98 132 t b f;
+#X obj 80 201 outlet;
+#X obj 41 149 moses 2;
+#X obj 41 89 change;
+#X obj 98 89 change;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 1 1 7 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 1 2 0;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X restore 29 350 pd change2;
+#X obj 581 311 pack f f;
+#X obj 594 265 t b f;
+#X obj 651 265 t b f;
+#X obj 581 289 /;
+#X obj 638 289 /;
+#X obj 579 171 pack f f;
+#X obj 305 428 /;
+#X obj 305 448 * 4;
+#X msg 305 468 \$1 4;
+#X msg 29 369 dimen \$1 \$2;
+#X obj 57 392 /;
+#X msg 57 472 perspec \$1 \$2 -1 1 1 20;
+#X obj 57 452 pack f f;
+#X obj 57 411 t f f;
+#X obj 57 431 * -1;
+#X obj 441 91 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 467 90 basic FSAA;
+#X obj 29 46 route screen_size geometry_screen geometry_computer overlap
+FSAA;
+#X obj 239 91 unpack f f;
+#X obj 239 137 *;
+#X obj 252 113 t b f;
+#X obj 296 137 *;
+#X obj 309 113 t b f;
+#X obj 579 191 s \$0-glsl_geometry_screen;
+#X obj 578 224 s \$0-glsl_geometry_computer;
+#X obj 581 331 s \$0-glsl_overlap;
+#X obj 305 490 s \$0-size_gemwin;
+#X obj 388 255 r \$0-altern;
+#X obj 407 311 list;
+#X obj 388 276 sel 0 1;
+#X obj 388 341 list;
+#X obj 29 307 + 0;
+#X obj 113 308 + 0;
+#X text 480 108 not full implemented yet!;
+#X connect 0 0 44 0;
+#X connect 1 0 15 0;
+#X connect 1 0 28 0;
+#X connect 1 0 46 0;
+#X connect 1 1 17 0;
+#X connect 1 1 29 0;
+#X connect 1 1 48 0;
+#X connect 2 0 4 0;
+#X connect 2 0 16 0;
+#X connect 2 0 32 0;
+#X connect 2 1 5 0;
+#X connect 2 1 18 0;
+#X connect 2 1 32 1;
+#X connect 3 0 7 0;
+#X connect 3 0 30 0;
+#X connect 3 1 9 0;
+#X connect 3 1 31 0;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 7 1 6 1;
+#X connect 8 0 11 0;
+#X connect 9 0 8 0;
+#X connect 9 1 8 1;
+#X connect 10 0 21 0;
+#X connect 10 1 21 1;
+#X connect 11 0 22 0;
+#X connect 11 1 22 1;
+#X connect 12 0 26 0;
+#X connect 12 0 37 0;
+#X connect 13 0 24 0;
+#X connect 13 1 23 0;
+#X connect 13 2 58 1;
+#X connect 13 2 59 1;
+#X connect 15 0 21 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 17 0 22 0;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 19 0 25 0;
+#X connect 21 0 24 0;
+#X connect 22 0 23 0;
+#X connect 23 0 59 0;
+#X connect 24 0 58 0;
+#X connect 25 0 20 0;
+#X connect 25 0 33 0;
+#X connect 26 0 36 0;
+#X connect 27 0 52 0;
+#X connect 28 0 30 0;
+#X connect 28 1 30 1;
+#X connect 29 0 31 0;
+#X connect 29 1 31 1;
+#X connect 30 0 27 0;
+#X connect 31 0 27 1;
+#X connect 32 0 50 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 40 0;
+#X connect 38 0 14 0;
+#X connect 39 0 38 0;
+#X connect 40 0 41 0;
+#X connect 40 1 39 1;
+#X connect 41 0 39 0;
+#X connect 42 0 13 0;
+#X connect 44 0 1 0;
+#X connect 44 1 2 0;
+#X connect 44 1 55 1;
+#X connect 44 2 45 0;
+#X connect 44 2 51 0;
+#X connect 44 2 57 1;
+#X connect 44 3 3 0;
+#X connect 44 4 42 0;
+#X connect 45 0 47 0;
+#X connect 45 1 49 0;
+#X connect 46 0 19 0;
+#X connect 47 0 46 0;
+#X connect 47 1 46 1;
+#X connect 48 0 19 1;
+#X connect 49 0 48 0;
+#X connect 49 1 48 1;
+#X connect 54 0 56 0;
+#X connect 55 0 45 0;
+#X connect 55 0 51 0;
+#X connect 56 0 57 0;
+#X connect 56 1 55 0;
+#X connect 57 0 45 0;
+#X connect 57 0 51 0;
+#X connect 58 0 12 0;
+#X connect 59 0 12 1;
+#X restore 528 320 pd size;
+#X msg 605 523 0 \, destroy;
+#X obj 594 551 gemwin;
+#X obj 428 489 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 281 601 rectangle;
+#X obj 306 559 unpack f f;
+#X floatatom 380 580 5 0 0 0 - - -;
+#X floatatom 319 582 5 0 0 0 - - -;
+#N canvas 0 0 743 323 init_glsl 0;
+#X obj 129 184 outlet;
+#X msg 129 120 overlap \$1 \$2;
+#X obj 129 95 pack f f;
+#X obj 249 98 pack f f;
+#X obj 434 99 pack f f;
+#X msg 249 119 geometry_screen \$1 \$2;
+#X msg 434 120 geometry_computer \$1 \$2;
+#X obj 434 76 r \$0-glsl_geometry_computer;
+#X obj 249 75 r \$0-glsl_geometry_screen;
+#X obj 129 72 r \$0-glsl_overlap;
+#X obj 38 27 r \$0-init_glsl;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
+#X connect 7 0 4 0;
+#X connect 8 0 3 0;
+#X connect 9 0 2 0;
+#X connect 10 0 3 0;
+#X connect 10 0 2 0;
+#X connect 10 0 4 0;
+#X restore 418 467 pd init_glsl;
+#X obj 292 470 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 281 509 pix_texture;
+#X obj 281 448 gemhead 60;
+#X obj 528 343 print framebuffer;
+#X obj 604 415 print gem_window;
+#N canvas 0 0 669 667 glsl_frag 0;
+#X obj 78 598 glsl_program;
+#X msg 35 325 print;
+#X obj 172 387 change;
+#X msg 34 545 print;
+#X obj 78 367 glsl_fragment;
+#X floatatom 172 413 2 0 0 0 ID - -;
+#X obj 190 459 print linking;
+#X text 97 546 after linking \, click "print" to get some info about
+the compiled shader program;
+#X obj 13 52 inlet;
+#X obj 78 634 outlet;
+#X obj 577 95 inlet;
+#X obj 13 75 route bang;
+#X obj 141 87 gemhead 1;
+#X msg 141 109 1;
+#X obj 141 133 change;
+#X obj 141 157 t b;
+#X obj 157 619 change;
+#X obj 157 640 t b;
+#X obj 157 661 outlet;
+#X msg 172 438 link \$1;
+#X msg 87 324 open soft_edge.frag;
+#X connect 0 0 9 0;
+#X connect 0 1 16 0;
+#X connect 1 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X connect 4 1 2 0;
+#X connect 5 0 19 0;
+#X connect 8 0 11 0;
+#X connect 10 0 0 0;
+#X connect 11 0 20 0;
+#X connect 11 1 4 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 20 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 19 0 0 0;
+#X connect 19 0 6 0;
+#X connect 20 0 4 0;
+#X restore 281 488 pd glsl_frag _______;
+#X obj 605 470 sel 0 1;
+#X msg 624 500 border 0 \, create \, 1;
+#X obj 528 67 pack f f;
+#X obj 638 48 t b f;
+#X obj 831 65 pack f f;
+#X obj 941 46 t b f;
+#X msg 528 97 screen_size \$1 \$2;
+#X msg 831 92 geometry_screen \$1 \$2;
+#X obj 1151 65 pack f f;
+#X obj 1281 46 t b f;
+#X msg 746 93 2 2;
+#X msg 746 67 set \$1 \$2;
+#X obj 683 67 loadbang;
+#X msg 1151 92 geometry_computer \$1 \$2;
+#X msg 1066 67 set \$1 \$2;
+#X obj 1003 67 loadbang;
+#X msg 1066 93 4 1;
+#X msg 446 67 set \$1 \$2;
+#X obj 383 67 loadbang;
+#X msg 446 93 160 120;
+#X obj 446 114 unpack f f;
+#X obj 746 114 unpack f f;
+#X obj 1066 114 unpack f f;
+#X obj 1003 236 loadbang;
+#X msg 1066 262 0 0;
+#X msg 1151 282 overlap \$1 \$1;
+#X msg 567 576 0;
+#X msg 594 392 dimen \$1 \$2;
+#X obj 567 369 t b l;
+#X obj 100 235 cnv 15 250 20 empty empty PUT_AN_OBJECT_[r_render]_IN_YOUR_PATCH
+10 10 0 10 -258113 -66577 0;
+#X obj 100 20 cnv 15 250 215 empty empty empty 20 12 0 14 -260097 -66577
+0;
+#X obj 108 163 nbx 5 14 0 5000 0 0 \$0-overlap \$0-overlap empty 0
+-8 0 10 -99865 -1 -1 0 256;
+#X obj 108 187 tgl 15 0 \$0-createDestroy \$0-createDestroy empty 17
+7 0 10 -1 -262144 -1 0 1;
+#X text 128 187 Create/Destroy Gem window;
+#X obj 108 29 nbx 4 12 -1e+37 1e+37 0 0 \$0-sizeScreenX \$0-sizeScreenX
+empty 0 -8 0 10 -1 -262144 -1 160 256;
+#X text 166 163 Overlap X and Y (pixels);
+#X obj 108 45 nbx 4 12 -1e+37 1e+37 0 0 \$0-sizeScreenY \$0-sizeScreenY
+empty 0 -8 0 10 -1 -262144 -1 120 256;
+#X obj 108 83 nbx 4 12 -1e+37 1e+37 0 0 \$0-Geom-screenY \$0-Geom-screenY
+empty 0 -8 0 10 -257985 -1 -1 2 256;
+#X obj 108 67 nbx 4 12 -1e+37 1e+37 0 0 \$0-Geom-screenX \$0-Geom-screenX
+empty 0 -8 0 10 -257985 -1 -1 2 256;
+#X obj 108 143 tgl 10 0 \$0-altern \$0-altern empty 17 7 0 10 -1 -262144
+-1 0 1;
+#X obj 108 121 nbx 4 12 -1e+37 1e+37 0 0 \$0-Geom-computerY \$0-Geom-computerY
+empty 0 -8 0 10 -257985 -1 -1 1 256;
+#X obj 108 105 nbx 4 12 -1e+37 1e+37 0 0 \$0-Geom-computerX \$0-Geom-computerX
+empty 0 -8 0 10 -257985 -1 -1 4 256;
+#X text 158 65 Geometry screen (X);
+#X text 158 81 Geometry screen (Y);
+#X text 158 103 Geometry computer (X);
+#X text 158 119 Geometry computer (Y);
+#X text 158 28 Screens size (X);
+#X text 158 44 Screens size (Y);
+#X obj 108 212 bng 15 250 50 0 \$0-save \$0-receiveNothing empty 17
+7 0 10 -258113 -1 -1;
+#X text 128 212 Save parameters;
+#X obj 446 156 s \$0-sizeScreenX;
+#X obj 503 136 s \$0-sizeScreenY;
+#X obj 746 155 s \$0-Geom-screenX;
+#X obj 803 135 s \$0-Geom-screenY;
+#X obj 1123 135 s \$0-Geom-computerY;
+#X obj 1066 155 s \$0-Geom-computerX;
+#X obj 1066 304 s \$0-overlap;
+#X obj 605 449 r \$0-createDestroy;
+#X obj 567 596 s \$0-createDestroy;
+#X obj 418 510 s \$0-init_glsl;
+#X obj 306 539 r \$0-size_gemwin;
+#X obj 528 27 r \$0-sizeScreenX;
+#X obj 638 27 r \$0-sizeScreenY;
+#X obj 831 25 r \$0-Geom-screenX;
+#X obj 941 25 r \$0-Geom-screenY;
+#X obj 1281 25 r \$0-Geom-computerY;
+#X obj 1151 25 r \$0-Geom-computerX;
+#X obj 1151 215 r \$0-overlap;
+#X obj 100 271 r \$0-save;
+#X msg 1066 236 set \$1 \$1;
+#X obj 100 317 s pd-soft_edge.pd;
+#X msg 100 292 menusave;
+#X text 856 481 'soft-edge.pd' by Cyrille Henry (GUI by Jack/RYBN)
+;
+#X text 121 140 View computer(0)/screen(1);
+#X obj 388 16 inlet;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 16 1;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 2 0;
+#X connect 6 0 1 0;
+#X connect 6 0 18 0;
+#X connect 6 1 49 0;
+#X connect 7 0 8 0;
+#X connect 9 0 80 0;
+#X connect 11 0 10 1;
+#X connect 11 0 13 0;
+#X connect 11 1 10 2;
+#X connect 11 1 12 0;
+#X connect 14 0 20 1;
+#X connect 15 0 20 0;
+#X connect 16 0 10 0;
+#X connect 17 0 20 0;
+#X connect 20 0 16 0;
+#X connect 20 1 80 0;
+#X connect 21 0 7 0;
+#X connect 21 1 22 0;
+#X connect 22 0 8 0;
+#X connect 23 0 27 0;
+#X connect 23 0 38 0;
+#X connect 24 0 23 0;
+#X connect 24 1 23 1;
+#X connect 25 0 28 0;
+#X connect 25 0 32 0;
+#X connect 26 0 25 0;
+#X connect 26 1 25 1;
+#X connect 27 0 6 0;
+#X connect 28 0 6 0;
+#X connect 29 0 34 0;
+#X connect 29 0 35 0;
+#X connect 30 0 29 0;
+#X connect 30 1 29 1;
+#X connect 31 0 28 0;
+#X connect 31 0 42 0;
+#X connect 32 0 31 0;
+#X connect 33 0 31 0;
+#X connect 34 0 6 0;
+#X connect 35 0 37 0;
+#X connect 36 0 37 0;
+#X connect 37 0 34 0;
+#X connect 37 0 43 0;
+#X connect 38 0 40 0;
+#X connect 39 0 40 0;
+#X connect 40 0 27 0;
+#X connect 40 0 41 0;
+#X connect 41 0 71 0;
+#X connect 41 1 72 0;
+#X connect 42 0 73 0;
+#X connect 42 1 74 0;
+#X connect 43 0 76 0;
+#X connect 43 1 75 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 45 0 77 0;
+#X connect 46 0 6 0;
+#X connect 47 0 79 0;
+#X connect 48 0 8 0;
+#X connect 48 0 19 0;
+#X connect 49 0 47 0;
+#X connect 49 1 48 0;
+#X connect 78 0 21 0;
+#X connect 81 0 11 0;
+#X connect 82 0 23 0;
+#X connect 83 0 24 0;
+#X connect 84 0 25 0;
+#X connect 85 0 26 0;
+#X connect 86 0 30 0;
+#X connect 87 0 29 0;
+#X connect 88 0 46 0;
+#X connect 88 0 90 0;
+#X connect 89 0 92 0;
+#X connect 90 0 45 0;
+#X connect 92 0 91 0;
+#X connect 95 0 8 0;
+#X coords 0 -1 1 1 250 235 2 100 20;
diff --git a/Gem/examples/12.multi_screen_projection/grid.jpg b/Gem/examples/12.multi_screen_projection/grid.jpg
new file mode 100644
index 0000000..3f84359
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/grid.jpg
Binary files differ
diff --git a/Gem/examples/12.multi_screen_projection/load_save.pd b/Gem/examples/12.multi_screen_projection/load_save.pd
new file mode 100644
index 0000000..8037857
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/load_save.pd
@@ -0,0 +1,40 @@
+#N canvas 140 207 521 345 10;
+#X obj 258 43 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699 -1
+-1;
+#X msg 287 139 clear;
+#X obj 248 227 textfile;
+#X obj 308 185 list prepend add;
+#X obj 308 206 list trim;
+#X obj 54 59 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 38 125 until;
+#X text 75 61 load;
+#X text 279 43 save;
+#X obj 38 80 t b a;
+#X obj 248 24 inlet;
+#X obj 38 29 inlet;
+#X msg 248 116 write config.txt;
+#X msg 65 100 read config.txt \, rewind;
+#X obj 308 164 r save_system_data;
+#X obj 38 173 s save_system_saved;
+#X obj 248 71 t b b b;
+#X obj 267 92 s save_system_save;
+#X obj 38 149 textfile;
+#X connect 0 0 16 0;
+#X connect 1 0 2 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 9 0;
+#X connect 6 0 18 0;
+#X connect 9 0 6 0;
+#X connect 9 1 13 0;
+#X connect 10 0 16 0;
+#X connect 11 0 9 0;
+#X connect 12 0 2 0;
+#X connect 13 0 18 0;
+#X connect 14 0 3 0;
+#X connect 16 0 12 0;
+#X connect 16 1 17 0;
+#X connect 16 2 1 0;
+#X connect 18 0 15 0;
+#X connect 18 1 6 1;
diff --git a/Gem/examples/12.multi_screen_projection/nfp_22.frag b/Gem/examples/12.multi_screen_projection/nfp_22.frag
new file mode 100644
index 0000000..e3ce36c
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/nfp_22.frag
@@ -0,0 +1,18 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect MyTex;
+uniform float Sl,Sr,St,Sb; // shade size
+varying vec2 pos;
+
+
+void main (void)
+{
+ vec4 color = texture2DRect(MyTex, gl_TexCoord[0].st);
+
+ color.a *=min(1.,pos.x/Sl);
+ color.a *=min(1.,(1.-pos.x)/Sr);
+ color.a *=min(1.,pos.y/St);
+ color.a *=min(1.,(1.-pos.y)/Sb);
+
+ gl_FragColor = color;
+}
diff --git a/Gem/examples/12.multi_screen_projection/nfp_22.vert b/Gem/examples/12.multi_screen_projection/nfp_22.vert
new file mode 100644
index 0000000..ab8f107
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/nfp_22.vert
@@ -0,0 +1,26 @@
+uniform vec2 Vtl,Vbl,Vtr,Vbr; // Vertex position
+uniform vec2 Ttl,Tbl,Ttr,Tbr; // texture coordinate
+uniform vec2 center;
+
+varying vec2 pos;
+
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+
+ vec4 position = gl_Vertex;
+ position.xy += 1.;
+ position.xy /= 2.;
+ pos = position.xy;
+ position.xy = pow(position.xy,center);
+
+ vec2 tex_top = mix(Ttl,Ttr,pos.x);
+ vec2 tex_bottom = mix(Tbl,Tbr,pos.x);
+ gl_TexCoord[0].st = mix(tex_top,tex_bottom, pos.y);
+
+ vec2 pos_top = mix(Vtl,Vtr,position.x);
+ vec2 pos_bottom = mix(Vbl,Vbr,position.x);
+ position.xy = mix(pos_top,pos_bottom, position.y);
+
+ gl_Position = gl_ModelViewProjectionMatrix * position;
+}
diff --git a/Gem/examples/12.multi_screen_projection/nfp_33.frag b/Gem/examples/12.multi_screen_projection/nfp_33.frag
new file mode 100644
index 0000000..e3ce36c
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/nfp_33.frag
@@ -0,0 +1,18 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect MyTex;
+uniform float Sl,Sr,St,Sb; // shade size
+varying vec2 pos;
+
+
+void main (void)
+{
+ vec4 color = texture2DRect(MyTex, gl_TexCoord[0].st);
+
+ color.a *=min(1.,pos.x/Sl);
+ color.a *=min(1.,(1.-pos.x)/Sr);
+ color.a *=min(1.,pos.y/St);
+ color.a *=min(1.,(1.-pos.y)/Sb);
+
+ gl_FragColor = color;
+}
diff --git a/Gem/examples/12.multi_screen_projection/nfp_33.vert b/Gem/examples/12.multi_screen_projection/nfp_33.vert
new file mode 100644
index 0000000..68066b0
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/nfp_33.vert
@@ -0,0 +1,37 @@
+uniform vec2 Vtl,Vbl,Vtr,Vbr,Vtc,Vbc,Vcl,Vcr,Vcc; // Vertex position
+uniform vec2 Ttl,Tbl,Ttr,Tbr; // texture coordinate
+uniform vec2 center;
+
+varying vec2 pos;
+
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+
+ vec4 position = gl_Vertex;
+ position.xy += 1.;
+ position.xy /= 2.;
+ pos = position.xy;
+
+ vec2 tex_top = mix(Ttl,Ttr,pos.x);
+ vec2 tex_bottom = mix(Tbl,Tbr,pos.x);
+ gl_TexCoord[0].st = mix(tex_top,tex_bottom, pos.y);
+
+ vec2 pos_top1 = mix(Vtl,Vtc,position.x);
+ vec2 pos_top2 = mix(Vtc,Vtr,position.x);
+ vec2 pos_top = mix(pos_top1,pos_top2,position.x);
+
+ vec2 pos_center1 = mix(Vcl,Vcc,position.x);
+ vec2 pos_center2 = mix(Vcc,Vcr,position.x);
+ vec2 pos_center = mix(pos_center1,pos_center2,position.x);
+
+ vec2 pos_bottom1 = mix(Vbl,Vbc,position.x);
+ vec2 pos_bottom2 = mix(Vbc,Vbr,position.x);
+ vec2 pos_bottom = mix(pos_bottom1,pos_bottom2,position.x);
+
+ vec2 position1 = mix(pos_top,pos_center,position.y);
+ vec2 position2 = mix(pos_center,pos_bottom,position.y);
+ position.xy = mix(position1,position2, position.y);
+
+ gl_Position = gl_ModelViewProjectionMatrix * position;
+}
diff --git a/Gem/examples/12.multi_screen_projection/nfp_curved_wall.pd b/Gem/examples/12.multi_screen_projection/nfp_curved_wall.pd
new file mode 100644
index 0000000..2222a6a
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/nfp_curved_wall.pd
@@ -0,0 +1,413 @@
+#N canvas 32 138 1230 634 10;
+#X obj 46 203 pix_texture;
+#X obj 55 113 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 46 78 alpha;
+#X obj 46 224 mesh_square 50 50;
+#N canvas 160 123 480 574 glsl 0;
+#X obj 78 179 glsl_vertex;
+#X msg 32 178 print;
+#X obj 78 466 glsl_program;
+#X obj 163 395 pack 0 0;
+#X msg 30 316 print;
+#X obj 163 351 change;
+#X obj 150 198 change;
+#X msg 163 419 link \$1 \$2;
+#X msg 32 460 print;
+#X obj 77 330 glsl_fragment;
+#X floatatom 163 375 2 0 0 0 ID - -;
+#X floatatom 150 221 2 0 0 0 ID - -;
+#X obj 181 440 print linking;
+#X obj 15 21 inlet;
+#X obj 78 502 outlet;
+#X obj 418 21 inlet;
+#X obj 15 44 route bang;
+#X obj 255 11 gemhead 1;
+#X msg 255 33 1;
+#X obj 255 57 change;
+#X obj 255 81 t b;
+#X obj 157 487 change;
+#X obj 157 508 t b;
+#X obj 158 530 outlet;
+#X obj 90 266 symbol;
+#X obj 90 241 t b;
+#X msg 287 438 0;
+#X obj 15 65 t b b b;
+#X msg 118 147 open nfp_33.vert;
+#X msg 91 292 open nfp_33.frag;
+#X connect 0 0 9 0;
+#X connect 0 1 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 14 0;
+#X connect 2 1 21 0;
+#X connect 3 0 7 0;
+#X connect 4 0 9 0;
+#X connect 5 0 10 0;
+#X connect 6 0 11 0;
+#X connect 6 0 25 0;
+#X connect 7 0 2 0;
+#X connect 7 0 12 0;
+#X connect 8 0 2 0;
+#X connect 9 0 2 0;
+#X connect 9 1 5 0;
+#X connect 10 0 3 0;
+#X connect 11 0 3 1;
+#X connect 13 0 16 0;
+#X connect 15 0 2 0;
+#X connect 16 0 27 0;
+#X connect 16 1 0 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 28 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 24 0 29 0;
+#X connect 25 0 24 0;
+#X connect 26 0 21 0;
+#X connect 27 0 26 0;
+#X connect 27 1 10 0;
+#X connect 27 2 28 0;
+#X connect 28 0 0 0;
+#X connect 29 0 9 0;
+#X restore 46 130 pd glsl;
+#X obj 46 51 gemhead \$1;
+#X obj 501 216 cnv 15 238 130 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X text 522 219 Texture position (Pixel);
+#X obj 519 247 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 105 256;
+#X obj 519 267 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 13 256;
+#X obj 619 247 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 367 256;
+#X obj 619 267 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 0 256;
+#X obj 519 297 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 0 256;
+#X obj 519 317 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 227 256;
+#X obj 619 297 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 416 256;
+#X obj 619 317 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 265 256;
+#X obj 501 349 cnv 15 238 180 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X obj 608 370 vsl 15 63 1 0 0 0 empty empty top 18 6 0 10 -262130
+-1 -1 6200 1;
+#X obj 608 453 vsl 15 63 0 1 0 0 empty empty bottom 18 60 0 10 -262130
+-1 -1 0 1;
+#X obj 626 436 hsl 63 15 1 0 0 0 empty empty right 30 -8 0 10 -262130
+-1 -1 5686 1;
+#X obj 543 436 hsl 63 15 0 1 0 0 empty empty left 2 -8 0 10 -262130
+-1 -1 430 1;
+#X text 509 367 Shade size;
+#X obj 501 33 cnv 15 238 180 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 514 64 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 -1.16 256;
+#X obj 514 84 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 3.35 256;
+#X obj 675 64 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 1.31 256;
+#X obj 675 84 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 3.95 256;
+#X obj 514 164 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 -1.21 256;
+#X obj 514 184 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 -2.83 256;
+#X obj 675 164 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 1.52 256;
+#X obj 675 184 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 -3.37 256;
+#X text 522 36 Vertex position;
+#X obj 99 105 r \$0-glsl;
+#X obj 98 152 s \$0-init;
+#X obj 754 20 r \$0-init;
+#X obj 203 372 pack f f;
+#X obj 249 347 t b f;
+#X obj 309 373 pack f f;
+#X obj 355 348 t b f;
+#X obj 233 419 pack f f;
+#X obj 279 394 t b f;
+#X obj 339 420 pack f f;
+#X obj 385 395 t b f;
+#X msg 203 439 Ttl \$1 \$2;
+#X msg 309 441 Ttr \$1 \$2;
+#X msg 323 461 Tbr \$1 \$2;
+#X msg 216 459 Tbl \$1 \$2;
+#X obj 203 484 s \$0-glsl;
+#X msg 204 515 Sl \$1;
+#X msg 253 515 Sr \$1;
+#X msg 300 515 St \$1;
+#X msg 346 515 Sb \$1;
+#X obj 204 539 s \$0-glsl;
+#X obj 120 182 r nfp_fb;
+#X obj 806 61 saved VP_TL_X-\$1;
+#X obj 806 81 saved VP_TL_Y-\$1;
+#X obj 806 161 saved VP_BL_X-\$1;
+#X obj 806 181 saved VP_BL_Y-\$1;
+#X obj 1036 61 saved VP_TR_X-\$1;
+#X obj 1036 81 saved VP_TR_Y-\$1;
+#X obj 1036 161 saved VP_BR_X-\$1;
+#X obj 1036 181 saved VP_BR_Y-\$1;
+#X obj 756 247 saved TP_TL_X-\$1;
+#X obj 756 267 saved TP_TL_Y-\$1;
+#X obj 756 297 saved TP_BL_X-\$1;
+#X obj 756 317 saved TP_BL_Y-\$1;
+#X obj 866 247 saved TP_TR_X-\$1;
+#X obj 866 267 saved TP_TR_Y-\$1;
+#X obj 866 297 saved TP_BR_X-\$1;
+#X obj 866 317 saved TP_BR_Y-\$1;
+#X obj 758 420 saved Shade_L-\$1;
+#X obj 759 444 saved Shade_R-\$1;
+#X obj 755 384 saved Shade_T-\$1;
+#X obj 761 473 saved Shade_B-\$1;
+#X obj 754 216 r \$0-init;
+#X obj 754 356 r \$0-init;
+#X obj 106 131 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 185 118 pack f f;
+#X obj 231 93 t b f;
+#X obj 391 119 pack f f;
+#X obj 437 94 t b f;
+#X obj 215 168 pack f f;
+#X obj 261 143 t b f;
+#X obj 421 169 pack f f;
+#X obj 467 144 t b f;
+#X msg 405 268 Vbr \$1 \$2;
+#X msg 198 266 Vbl \$1 \$2;
+#X obj 289 119 pack f f;
+#X obj 335 94 t b f;
+#X obj 319 169 pack f f;
+#X obj 365 144 t b f;
+#X msg 303 268 Vbc \$1 \$2;
+#X obj 205 68 pack f f;
+#X obj 251 43 t b f;
+#X obj 411 69 pack f f;
+#X obj 457 44 t b f;
+#X obj 309 69 pack f f;
+#X obj 355 44 t b f;
+#X obj 185 301 s \$0-glsl;
+#X obj 594 64 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 0.00999991 256;
+#X obj 594 84 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 3.7 256;
+#X obj 594 164 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 0.2 256;
+#X obj 594 184 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 -3.96001 256;
+#X obj 916 61 saved VP_TC_X-\$1;
+#X obj 916 81 saved VP_TC_Y-\$1;
+#X obj 916 161 saved VP_BC_X-\$1;
+#X obj 916 181 saved VP_BC_Y-\$1;
+#X obj 514 114 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 -0.730001 256;
+#X obj 514 134 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 0.76 256;
+#X obj 675 114 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 1.79 256;
+#X obj 675 134 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 2.34 256;
+#X obj 594 114 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 0.55 256;
+#X obj 594 134 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 -0.35 256;
+#X obj 806 111 saved VP_CL_X-\$1;
+#X obj 806 131 saved VP_CL_Y-\$1;
+#X obj 916 111 saved VP_CC_X-\$1;
+#X obj 916 131 saved VP_CC_Y-\$1;
+#X obj 1036 111 saved VP_CR_X-\$1;
+#X obj 1036 131 saved VP_CR_Y-\$1;
+#X msg 195 206 Vtl \$1 \$2;
+#X msg 299 210 Vtc \$1 \$2;
+#X msg 401 210 Vtr \$1 \$2;
+#X msg 185 236 Vcl \$1 \$2;
+#X msg 289 240 Vcc \$1 \$2;
+#X msg 391 240 Vcr \$1 \$2;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 1 33 0;
+#X connect 5 0 2 0;
+#X connect 8 0 62 0;
+#X connect 8 0 35 0;
+#X connect 9 0 63 0;
+#X connect 9 0 36 0;
+#X connect 10 0 66 0;
+#X connect 10 0 37 0;
+#X connect 11 0 67 0;
+#X connect 11 0 38 0;
+#X connect 12 0 64 0;
+#X connect 12 0 39 0;
+#X connect 13 0 65 0;
+#X connect 13 0 40 0;
+#X connect 14 0 68 0;
+#X connect 14 0 41 0;
+#X connect 15 0 69 0;
+#X connect 15 0 42 0;
+#X connect 17 0 72 0;
+#X connect 17 0 50 0;
+#X connect 18 0 73 0;
+#X connect 18 0 51 0;
+#X connect 19 0 71 0;
+#X connect 19 0 49 0;
+#X connect 20 0 70 0;
+#X connect 20 0 48 0;
+#X connect 23 0 54 0;
+#X connect 23 0 92 0;
+#X connect 24 0 55 0;
+#X connect 24 0 93 0;
+#X connect 25 0 58 0;
+#X connect 25 0 94 0;
+#X connect 26 0 59 0;
+#X connect 26 0 95 0;
+#X connect 27 0 56 0;
+#X connect 27 0 81 0;
+#X connect 28 0 57 0;
+#X connect 28 0 82 0;
+#X connect 29 0 60 0;
+#X connect 29 0 83 0;
+#X connect 30 0 61 0;
+#X connect 30 0 84 0;
+#X connect 32 0 4 1;
+#X connect 34 0 25 0;
+#X connect 34 0 26 0;
+#X connect 34 0 23 0;
+#X connect 34 0 24 0;
+#X connect 34 0 29 0;
+#X connect 34 0 30 0;
+#X connect 34 0 27 0;
+#X connect 34 0 28 0;
+#X connect 34 0 99 0;
+#X connect 34 0 100 0;
+#X connect 34 0 101 0;
+#X connect 34 0 102 0;
+#X connect 34 0 107 0;
+#X connect 34 0 108 0;
+#X connect 34 0 111 0;
+#X connect 34 0 112 0;
+#X connect 34 0 109 0;
+#X connect 34 0 110 0;
+#X connect 35 0 43 0;
+#X connect 36 0 35 0;
+#X connect 36 1 35 1;
+#X connect 37 0 44 0;
+#X connect 38 0 37 0;
+#X connect 38 1 37 1;
+#X connect 39 0 46 0;
+#X connect 40 0 39 0;
+#X connect 40 1 39 1;
+#X connect 41 0 45 0;
+#X connect 42 0 41 0;
+#X connect 42 1 41 1;
+#X connect 43 0 47 0;
+#X connect 44 0 47 0;
+#X connect 45 0 47 0;
+#X connect 46 0 47 0;
+#X connect 48 0 52 0;
+#X connect 49 0 52 0;
+#X connect 50 0 52 0;
+#X connect 51 0 52 0;
+#X connect 53 0 0 1;
+#X connect 54 0 23 0;
+#X connect 55 0 24 0;
+#X connect 56 0 27 0;
+#X connect 57 0 28 0;
+#X connect 58 0 25 0;
+#X connect 59 0 26 0;
+#X connect 60 0 29 0;
+#X connect 61 0 30 0;
+#X connect 62 0 8 0;
+#X connect 63 0 9 0;
+#X connect 64 0 12 0;
+#X connect 65 0 13 0;
+#X connect 66 0 10 0;
+#X connect 67 0 11 0;
+#X connect 68 0 14 0;
+#X connect 69 0 15 0;
+#X connect 70 0 20 0;
+#X connect 71 0 19 0;
+#X connect 72 0 17 0;
+#X connect 73 0 18 0;
+#X connect 74 0 8 0;
+#X connect 74 0 10 0;
+#X connect 74 0 9 0;
+#X connect 74 0 11 0;
+#X connect 74 0 12 0;
+#X connect 74 0 14 0;
+#X connect 74 0 13 0;
+#X connect 74 0 15 0;
+#X connect 75 0 17 0;
+#X connect 75 0 19 0;
+#X connect 75 0 20 0;
+#X connect 75 0 18 0;
+#X connect 76 0 33 0;
+#X connect 77 0 122 0;
+#X connect 78 0 77 0;
+#X connect 78 1 77 1;
+#X connect 79 0 124 0;
+#X connect 80 0 79 0;
+#X connect 80 1 79 1;
+#X connect 81 0 86 0;
+#X connect 82 0 81 0;
+#X connect 82 1 81 1;
+#X connect 83 0 85 0;
+#X connect 84 0 83 0;
+#X connect 84 1 83 1;
+#X connect 85 0 98 0;
+#X connect 86 0 98 0;
+#X connect 87 0 123 0;
+#X connect 88 0 87 0;
+#X connect 88 1 87 1;
+#X connect 89 0 91 0;
+#X connect 90 0 89 0;
+#X connect 90 1 89 1;
+#X connect 91 0 98 0;
+#X connect 92 0 119 0;
+#X connect 93 0 92 0;
+#X connect 93 1 92 1;
+#X connect 94 0 121 0;
+#X connect 95 0 94 0;
+#X connect 95 1 94 1;
+#X connect 96 0 120 0;
+#X connect 97 0 96 0;
+#X connect 97 1 96 1;
+#X connect 99 0 103 0;
+#X connect 99 0 96 0;
+#X connect 100 0 104 0;
+#X connect 100 0 97 0;
+#X connect 101 0 105 0;
+#X connect 101 0 89 0;
+#X connect 102 0 106 0;
+#X connect 102 0 90 0;
+#X connect 103 0 99 0;
+#X connect 104 0 100 0;
+#X connect 105 0 101 0;
+#X connect 106 0 102 0;
+#X connect 107 0 113 0;
+#X connect 107 0 77 0;
+#X connect 108 0 114 0;
+#X connect 108 0 78 0;
+#X connect 109 0 117 0;
+#X connect 109 0 79 0;
+#X connect 110 0 118 0;
+#X connect 110 0 80 0;
+#X connect 111 0 115 0;
+#X connect 111 0 87 0;
+#X connect 112 0 116 0;
+#X connect 112 0 88 0;
+#X connect 113 0 107 0;
+#X connect 114 0 108 0;
+#X connect 115 0 111 0;
+#X connect 116 0 112 0;
+#X connect 117 0 109 0;
+#X connect 118 0 110 0;
+#X connect 119 0 98 0;
+#X connect 120 0 98 0;
+#X connect 121 0 98 0;
+#X connect 122 0 98 0;
+#X connect 123 0 98 0;
+#X connect 124 0 98 0;
+#X coords 0 -1 1 1 240 520 1 500 10;
diff --git a/Gem/examples/12.multi_screen_projection/nfp_flat_wall.pd b/Gem/examples/12.multi_screen_projection/nfp_flat_wall.pd
new file mode 100644
index 0000000..d3a9146
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/nfp_flat_wall.pd
@@ -0,0 +1,313 @@
+#N canvas 329 146 948 576 10;
+#X obj 46 203 pix_texture;
+#X obj 55 113 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 46 78 alpha;
+#X obj 46 224 mesh_square 50 50;
+#N canvas 162 116 480 574 glsl 0;
+#X obj 78 179 glsl_vertex;
+#X msg 32 178 print;
+#X obj 78 466 glsl_program;
+#X obj 163 395 pack 0 0;
+#X msg 30 316 print;
+#X obj 163 351 change;
+#X obj 150 198 change;
+#X msg 163 419 link \$1 \$2;
+#X msg 32 460 print;
+#X obj 77 330 glsl_fragment;
+#X floatatom 163 375 2 0 0 0 ID - -;
+#X floatatom 150 221 2 0 0 0 ID - -;
+#X obj 181 440 print linking;
+#X obj 15 21 inlet;
+#X obj 78 502 outlet;
+#X obj 418 21 inlet;
+#X obj 15 44 route bang;
+#X obj 255 11 gemhead 1;
+#X msg 255 33 1;
+#X obj 255 57 change;
+#X obj 255 81 t b;
+#X obj 157 487 change;
+#X obj 157 508 t b;
+#X obj 158 530 outlet;
+#X obj 90 266 symbol;
+#X obj 90 241 t b;
+#X msg 287 438 0;
+#X obj 15 65 t b b b;
+#X msg 118 147 open nfp_22.vert;
+#X msg 90 293 open nfp_22.frag;
+#X connect 0 0 9 0;
+#X connect 0 1 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 14 0;
+#X connect 2 1 21 0;
+#X connect 3 0 7 0;
+#X connect 4 0 9 0;
+#X connect 5 0 10 0;
+#X connect 6 0 11 0;
+#X connect 6 0 25 0;
+#X connect 7 0 2 0;
+#X connect 7 0 12 0;
+#X connect 8 0 2 0;
+#X connect 9 0 2 0;
+#X connect 9 1 5 0;
+#X connect 10 0 3 0;
+#X connect 11 0 3 1;
+#X connect 13 0 16 0;
+#X connect 15 0 2 0;
+#X connect 16 0 27 0;
+#X connect 16 1 0 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 28 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 24 0 29 0;
+#X connect 25 0 24 0;
+#X connect 26 0 21 0;
+#X connect 27 0 26 0;
+#X connect 27 1 10 0;
+#X connect 27 2 28 0;
+#X connect 28 0 0 0;
+#X connect 29 0 9 0;
+#X restore 46 130 pd glsl;
+#X obj 46 51 gemhead \$1;
+#X obj 501 166 cnv 15 198 130 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X text 522 169 Texture position (Pixel);
+#X obj 519 197 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 12 256;
+#X obj 519 217 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 13 256;
+#X obj 619 197 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 316 256;
+#X obj 619 217 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 11 256;
+#X obj 519 247 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 16 256;
+#X obj 519 267 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 181 256;
+#X obj 619 247 nbx 5 16 0 20000 0 0 empty empty x -10 7 0 12 -203904
+-1 -1 307 256;
+#X obj 619 267 nbx 5 16 0 20000 0 0 empty empty y -10 7 0 12 -203904
+-1 -1 195 256;
+#X obj 501 299 cnv 15 198 180 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X obj 608 320 vsl 15 63 1 0 0 0 empty empty top 18 6 0 10 -262130
+-1 -1 0 1;
+#X obj 608 403 vsl 15 63 0 1 0 0 empty empty bottom 18 60 0 10 -262130
+-1 -1 0 1;
+#X obj 626 386 hsl 63 15 1 0 0 0 empty empty right 30 -8 0 10 -262130
+-1 -1 0 1;
+#X obj 543 386 hsl 63 15 0 1 0 0 empty empty left 2 -8 0 10 -262130
+-1 -1 0 1;
+#X text 509 317 Shade size;
+#X obj 501 33 cnv 15 198 130 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 519 64 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 -3.66001 256;
+#X obj 519 84 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 1.52 256;
+#X obj 619 64 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 0.62 256;
+#X obj 619 84 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 1.92 256;
+#X obj 519 114 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 -2.9 256;
+#X obj 519 134 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 -1.61 256;
+#X obj 619 114 nbx 5 16 -1000 1000 0 0 empty empty x -10 7 0 12 -261234
+-1 -1 0.49 256;
+#X obj 619 134 nbx 5 16 -1000 1000 0 0 empty empty y -10 7 0 12 -261234
+-1 -1 -1.69 256;
+#X text 522 36 Vertex position;
+#X obj 201 206 pack f f;
+#X obj 247 181 t b f;
+#X obj 307 207 pack f f;
+#X obj 353 182 t b f;
+#X obj 231 256 pack f f;
+#X obj 277 231 t b f;
+#X obj 337 257 pack f f;
+#X obj 383 232 t b f;
+#X msg 201 277 Vtl \$1 \$2;
+#X msg 337 299 Vbr \$1 \$2;
+#X msg 230 297 Vbl \$1 \$2;
+#X msg 307 279 Vtr \$1 \$2;
+#X obj 99 105 r \$0-glsl;
+#X obj 98 152 s \$0-init;
+#X obj 704 36 r \$0-init;
+#X obj 203 372 pack f f;
+#X obj 249 347 t b f;
+#X obj 309 373 pack f f;
+#X obj 355 348 t b f;
+#X obj 233 419 pack f f;
+#X obj 279 394 t b f;
+#X obj 339 420 pack f f;
+#X obj 385 395 t b f;
+#X msg 203 439 Ttl \$1 \$2;
+#X msg 309 441 Ttr \$1 \$2;
+#X msg 323 461 Tbr \$1 \$2;
+#X msg 216 459 Tbl \$1 \$2;
+#X obj 201 325 s \$0-glsl;
+#X obj 203 484 s \$0-glsl;
+#X msg 204 515 Sl \$1;
+#X msg 253 515 Sr \$1;
+#X msg 300 515 St \$1;
+#X msg 346 515 Sb \$1;
+#X obj 204 539 s \$0-glsl;
+#X obj 120 182 r nfp_fb;
+#X obj 706 61 saved VP_TL_X-\$1;
+#X obj 706 81 saved VP_TL_Y-\$1;
+#X obj 706 111 saved VP_BL_X-\$1;
+#X obj 706 131 saved VP_BL_Y-\$1;
+#X obj 816 61 saved VP_TR_X-\$1;
+#X obj 816 81 saved VP_TR_Y-\$1;
+#X obj 816 111 saved VP_BR_X-\$1;
+#X obj 816 131 saved VP_BR_Y-\$1;
+#X obj 706 197 saved TP_TL_X-\$1;
+#X obj 706 217 saved TP_TL_Y-\$1;
+#X obj 706 247 saved TP_BL_X-\$1;
+#X obj 706 267 saved TP_BL_Y-\$1;
+#X obj 816 197 saved TP_TR_X-\$1;
+#X obj 816 217 saved TP_TR_Y-\$1;
+#X obj 816 247 saved TP_BR_X-\$1;
+#X obj 816 267 saved TP_BR_Y-\$1;
+#X obj 708 370 saved Shade_L-\$1;
+#X obj 709 394 saved Shade_R-\$1;
+#X obj 705 334 saved Shade_T-\$1;
+#X obj 711 423 saved Shade_B-\$1;
+#X obj 704 166 r \$0-init;
+#X obj 704 306 r \$0-init;
+#X obj 106 131 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 226 44 r \$0-init;
+#X obj 226 85 s \$0-glsl;
+#X msg 226 65 center 1 1;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 1 45 0;
+#X connect 5 0 2 0;
+#X connect 8 0 75 0;
+#X connect 8 0 47 0;
+#X connect 9 0 76 0;
+#X connect 9 0 48 0;
+#X connect 10 0 79 0;
+#X connect 10 0 49 0;
+#X connect 11 0 80 0;
+#X connect 11 0 50 0;
+#X connect 12 0 77 0;
+#X connect 12 0 51 0;
+#X connect 13 0 78 0;
+#X connect 13 0 52 0;
+#X connect 14 0 81 0;
+#X connect 14 0 53 0;
+#X connect 15 0 82 0;
+#X connect 15 0 54 0;
+#X connect 17 0 85 0;
+#X connect 17 0 63 0;
+#X connect 18 0 86 0;
+#X connect 18 0 64 0;
+#X connect 19 0 84 0;
+#X connect 19 0 62 0;
+#X connect 20 0 83 0;
+#X connect 20 0 61 0;
+#X connect 23 0 32 0;
+#X connect 23 0 67 0;
+#X connect 24 0 33 0;
+#X connect 24 0 68 0;
+#X connect 25 0 34 0;
+#X connect 25 0 71 0;
+#X connect 26 0 35 0;
+#X connect 26 0 72 0;
+#X connect 27 0 36 0;
+#X connect 27 0 69 0;
+#X connect 28 0 37 0;
+#X connect 28 0 70 0;
+#X connect 29 0 38 0;
+#X connect 29 0 73 0;
+#X connect 30 0 39 0;
+#X connect 30 0 74 0;
+#X connect 32 0 40 0;
+#X connect 33 0 32 0;
+#X connect 33 1 32 1;
+#X connect 34 0 43 0;
+#X connect 35 0 34 0;
+#X connect 35 1 34 1;
+#X connect 36 0 42 0;
+#X connect 37 0 36 0;
+#X connect 37 1 36 1;
+#X connect 38 0 41 0;
+#X connect 39 0 38 0;
+#X connect 39 1 38 1;
+#X connect 40 0 59 0;
+#X connect 41 0 59 0;
+#X connect 42 0 59 0;
+#X connect 43 0 59 0;
+#X connect 44 0 4 1;
+#X connect 46 0 25 0;
+#X connect 46 0 26 0;
+#X connect 46 0 23 0;
+#X connect 46 0 24 0;
+#X connect 46 0 29 0;
+#X connect 46 0 30 0;
+#X connect 46 0 27 0;
+#X connect 46 0 28 0;
+#X connect 47 0 55 0;
+#X connect 48 0 47 0;
+#X connect 48 1 47 1;
+#X connect 49 0 56 0;
+#X connect 50 0 49 0;
+#X connect 50 1 49 1;
+#X connect 51 0 58 0;
+#X connect 52 0 51 0;
+#X connect 52 1 51 1;
+#X connect 53 0 57 0;
+#X connect 54 0 53 0;
+#X connect 54 1 53 1;
+#X connect 55 0 60 0;
+#X connect 56 0 60 0;
+#X connect 57 0 60 0;
+#X connect 58 0 60 0;
+#X connect 61 0 65 0;
+#X connect 62 0 65 0;
+#X connect 63 0 65 0;
+#X connect 64 0 65 0;
+#X connect 66 0 0 1;
+#X connect 67 0 23 0;
+#X connect 68 0 24 0;
+#X connect 69 0 27 0;
+#X connect 70 0 28 0;
+#X connect 71 0 25 0;
+#X connect 72 0 26 0;
+#X connect 73 0 29 0;
+#X connect 74 0 30 0;
+#X connect 75 0 8 0;
+#X connect 76 0 9 0;
+#X connect 77 0 12 0;
+#X connect 78 0 13 0;
+#X connect 79 0 10 0;
+#X connect 80 0 11 0;
+#X connect 81 0 14 0;
+#X connect 82 0 15 0;
+#X connect 83 0 20 0;
+#X connect 84 0 19 0;
+#X connect 85 0 17 0;
+#X connect 86 0 18 0;
+#X connect 87 0 8 0;
+#X connect 87 0 10 0;
+#X connect 87 0 9 0;
+#X connect 87 0 11 0;
+#X connect 87 0 12 0;
+#X connect 87 0 14 0;
+#X connect 87 0 13 0;
+#X connect 87 0 15 0;
+#X connect 88 0 17 0;
+#X connect 88 0 19 0;
+#X connect 88 0 20 0;
+#X connect 88 0 18 0;
+#X connect 89 0 45 0;
+#X connect 90 0 92 0;
+#X connect 92 0 91 0;
+#X coords 0 -1 1 1 200 470 1 500 10;
diff --git a/Gem/examples/12.multi_screen_projection/save_system-help.pd b/Gem/examples/12.multi_screen_projection/save_system-help.pd
new file mode 100644
index 0000000..9345cbe
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/save_system-help.pd
@@ -0,0 +1,20 @@
+#N canvas 219 286 450 300 10;
+#X obj 19 67 load_save;
+#X obj 19 9 loadbang;
+#X obj 27 47 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 84 47 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 277 88 5 0 0 0 - - -;
+#X floatatom 277 108 5 0 0 0 - - -;
+#X obj 171 86 saved data1;
+#X obj 171 106 saved data2;
+#X text 103 48 save;
+#X text 43 49 load;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 1;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 6 0 4 0;
+#X connect 7 0 5 0;
diff --git a/Gem/examples/12.multi_screen_projection/saved.pd b/Gem/examples/12.multi_screen_projection/saved.pd
new file mode 100644
index 0000000..499c0bd
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/saved.pd
@@ -0,0 +1,24 @@
+#N canvas 545 325 474 372 10;
+#X obj 268 0 t b;
+#X obj 53 124 f;
+#X obj 268 220 f;
+#X obj 53 -21 inlet;
+#X obj 53 284 outlet;
+#X obj 268 266 list trim;
+#X obj 268 247 list prepend \$1;
+#X obj 268 285 s save_system_data;
+#X obj 268 -26 r save_system_save;
+#X obj 105 10 r save_system_saved;
+#X obj 105 36 route \$1;
+#X msg 53 263 set \$1;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 1 0 11 0;
+#X connect 2 0 6 0;
+#X connect 3 0 1 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 8 0 0 0;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X connect 11 0 4 0;
diff --git a/Gem/examples/12.multi_screen_projection/soft_edge.frag b/Gem/examples/12.multi_screen_projection/soft_edge.frag
new file mode 100644
index 0000000..1c2e35f
--- /dev/null
+++ b/Gem/examples/12.multi_screen_projection/soft_edge.frag
@@ -0,0 +1,62 @@
+// Cyrille Henry 2010
+
+//#extension GL_ARB_texture_rectangle : enable
+//uniform sampler2DRect MyTex;
+uniform sampler2D MyTex;
+uniform vec2 overlap, geometry_screen, geometry_computer;
+
+void main (void)
+{
+// FSAA
+
+// change coord from computer matrix to screen matrice
+ vec2 coord = (gl_TextureMatrix[0] * gl_TexCoord[0]).st;
+ vec2 pos_new = coord;
+ pos_new *= geometry_computer;
+ float screen_num = floor(pos_new.x)+floor(pos_new.y)*geometry_computer.x; // number of the screen
+ pos_new = fract(pos_new); // coord in 1 screen (from 0 to 1)
+ pos_new.x += fract(screen_num/geometry_screen.x)*geometry_screen.x;
+ pos_new.y += floor(screen_num/geometry_screen.x);
+ pos_new /= geometry_screen;
+
+// compute position regarding to the overlap
+ vec2 pos = pos_new;
+ pos *= geometry_screen;
+
+ vec2 pos_over = fract(pos);
+ pos_over *= overlap;
+ pos_over -= overlap/2.;
+ pos += pos_over;
+ pos += overlap/2.;
+ pos /= geometry_screen + overlap;
+ vec4 color = texture2D(MyTex, pos);
+
+// compute fade on Top and Right
+ vec2 black = pos_new;
+ black *= geometry_screen;
+ black = fract(black);
+ black *= 1. + (overlap/ (geometry_screen/2.));
+ black -= 1.;
+ black = max(black,0.);
+ black *= (geometry_screen / 2.) / overlap;
+ if ( ( floor(pos_new.x*geometry_screen.x) < geometry_screen.x-1. ) && (overlap.x != 0.) )
+ color *= (1.-black.x);
+ if ( ( floor(pos_new.y*geometry_screen.y) < geometry_screen.y-1. ) && (overlap.x != 0.) )
+ color *= (1.-black.y);
+
+// compute fade on Left and bottom
+ black = pos_new;
+ black *= geometry_screen;
+ black = fract(black);
+ black = vec2(1.) - black;
+ black *= 1. + (overlap/ (geometry_screen/2.));
+ black -= 1.;
+ black = max(black,0.);
+ black *= (geometry_screen / 2.) / overlap;
+ if ( ( floor(pos_new.x*geometry_screen.x) > 0. ) && (overlap.x != 0.) )
+ color *= (1.-black.x);
+ if ( ( floor(pos_new.y*geometry_screen.y) > 0. ) && (overlap.x != 0.) )
+ color *= (1.-black.y);
+
+ gl_FragColor = color;
+}