aboutsummaryrefslogtreecommitdiff
path: root/Gem/examples/10.glsl
diff options
context:
space:
mode:
authorTravis CI <zmoelnig@travis-ci.umlaeute.mur.at>2015-03-14 20:32:26 +0000
committerTravis CI <zmoelnig@travis-ci.umlaeute.mur.at>2015-03-14 20:32:26 +0000
commitc6030846f5c1e34048774d60ca4c15e804bee839 (patch)
treefb75f89275a78ea383c0fd64e8fe5b3ae57cc898 /Gem/examples/10.glsl
Gem linux/amd64
built '' for linux/amd64
Diffstat (limited to 'Gem/examples/10.glsl')
-rw-r--r--Gem/examples/10.glsl/01.simple_texture.pd124
-rw-r--r--Gem/examples/10.glsl/02.primitive_distortion.pd125
-rw-r--r--Gem/examples/10.glsl/03.texture_distortion.pd144
-rw-r--r--Gem/examples/10.glsl/04.game_of_life.pd138
-rw-r--r--Gem/examples/10.glsl/05.multitexture.pd201
-rw-r--r--Gem/examples/10.glsl/05.multitexture_bis.pd200
-rw-r--r--Gem/examples/10.glsl/06.rectangle_multitexture.pd199
-rw-r--r--Gem/examples/10.glsl/07.framebuffer_and_shader.pd418
-rw-r--r--Gem/examples/10.glsl/08.multi_pass_rendering.pd341
-rw-r--r--Gem/examples/10.glsl/09.vertex_texture_fetching.pd142
-rw-r--r--Gem/examples/10.glsl/10.GPGPU_Physical_model.pd1246
-rw-r--r--Gem/examples/10.glsl/11.geometry.pd123
-rw-r--r--Gem/examples/10.glsl/12.tri2fan.pd157
-rw-r--r--Gem/examples/10.glsl/13.panoramique.pd525
-rw-r--r--Gem/examples/10.glsl/14.blur.pd177
-rw-r--r--Gem/examples/10.glsl/15.bicubic_image_interpolation.pd63
-rw-r--r--Gem/examples/10.glsl/GLSL_mix.frag35
-rw-r--r--Gem/examples/10.glsl/GLSL_mix.vert9
-rw-r--r--Gem/examples/10.glsl/P_distord.frag19
-rw-r--r--Gem/examples/10.glsl/P_distord.vert21
-rw-r--r--Gem/examples/10.glsl/T_distord.frag31
-rw-r--r--Gem/examples/10.glsl/T_distord.vert9
-rw-r--r--Gem/examples/10.glsl/_glsl.pd73
-rw-r--r--Gem/examples/10.glsl/bicubic_interpolation.frag90
-rw-r--r--Gem/examples/10.glsl/bicubic_interpolation.vert8
-rw-r--r--Gem/examples/10.glsl/blur.frag18
-rw-r--r--Gem/examples/10.glsl/blur.vert9
-rw-r--r--Gem/examples/10.glsl/cam1.jpgbin0 -> 311441 bytes
-rw-r--r--Gem/examples/10.glsl/cam2.jpgbin0 -> 395309 bytes
-rw-r--r--Gem/examples/10.glsl/cam3.jpgbin0 -> 323041 bytes
-rw-r--r--Gem/examples/10.glsl/cam4.jpgbin0 -> 326880 bytes
-rw-r--r--Gem/examples/10.glsl/fetching.frag8
-rw-r--r--Gem/examples/10.glsl/fetching.vert15
-rw-r--r--Gem/examples/10.glsl/fetching2.frag56
-rw-r--r--Gem/examples/10.glsl/fetching2.vert21
-rw-r--r--Gem/examples/10.glsl/game.frag30
-rw-r--r--Gem/examples/10.glsl/game.vert14
-rw-r--r--Gem/examples/10.glsl/geo.frag8
-rw-r--r--Gem/examples/10.glsl/geo.geom28
-rw-r--r--Gem/examples/10.glsl/geo.vert7
-rw-r--r--Gem/examples/10.glsl/img1.jpgbin0 -> 156747 bytes
-rw-r--r--Gem/examples/10.glsl/img2.jpgbin0 -> 152179 bytes
-rw-r--r--Gem/examples/10.glsl/img3.jpgbin0 -> 193808 bytes
-rw-r--r--Gem/examples/10.glsl/interpol.frag13
-rw-r--r--Gem/examples/10.glsl/link.frag164
-rw-r--r--Gem/examples/10.glsl/link.vert10
-rw-r--r--Gem/examples/10.glsl/mass.frag34
-rw-r--r--Gem/examples/10.glsl/mass.vert10
-rw-r--r--Gem/examples/10.glsl/multitexture.frag13
-rw-r--r--Gem/examples/10.glsl/multitexture.vert11
-rw-r--r--Gem/examples/10.glsl/multitexture_rect.frag15
-rw-r--r--Gem/examples/10.glsl/multitexture_rect.vert11
-rw-r--r--Gem/examples/10.glsl/normal.frag37
-rw-r--r--Gem/examples/10.glsl/normal.vert10
-rw-r--r--Gem/examples/10.glsl/panoramique.frag28
-rw-r--r--Gem/examples/10.glsl/panoramique.vert5
-rw-r--r--Gem/examples/10.glsl/single_blur.pd55
-rw-r--r--Gem/examples/10.glsl/texture.frag16
-rw-r--r--Gem/examples/10.glsl/texture.vert8
-rw-r--r--Gem/examples/10.glsl/texture_rect.frag16
-rw-r--r--Gem/examples/10.glsl/tri2fan.frag6
-rw-r--r--Gem/examples/10.glsl/tri2fan.geom51
-rw-r--r--Gem/examples/10.glsl/tri2fan.vert6
-rw-r--r--Gem/examples/10.glsl/vague.frag23
-rw-r--r--Gem/examples/10.glsl/wave.frag40
65 files changed, 5414 insertions, 0 deletions
diff --git a/Gem/examples/10.glsl/01.simple_texture.pd b/Gem/examples/10.glsl/01.simple_texture.pd
new file mode 100644
index 0000000..2d1c6ba
--- /dev/null
+++ b/Gem/examples/10.glsl/01.simple_texture.pd
@@ -0,0 +1,124 @@
+#N canvas 486 82 722 633 10;
+#X obj 76 22 gemhead;
+#X obj 76 367 glsl_program;
+#X obj 169 329 print linking;
+#X obj 76 411 rotateXYZ;
+#X floatatom 96 389 5 0 0 0 - - -;
+#X floatatom 140 389 5 0 0 0 - - -;
+#X floatatom 182 389 5 0 0 0 - - -;
+#X obj 76 580 pix_texture;
+#X msg 548 116 color 1 0 0;
+#X obj 106 69 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 106 154 open texture.frag;
+#X obj 76 197 glsl_fragment;
+#X text 215 459 <- load texture;
+#X obj 106 535 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 76 489 pix_image img1.jpg;
+#X msg 103 460 open img2.jpg;
+#X msg 243 154 open texture_rect.frag;
+#X msg 114 114 0;
+#X obj 243 72 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 275 70 <-load an other shader;
+#X text 279 84 (using rectangular texturing);
+#X msg 254 113 1;
+#X msg 351 258 B \$1;
+#X msg 364 297 C \$1;
+#X floatatom 351 241 5 0 0 0 - - -;
+#X floatatom 364 280 5 0 0 0 - - -;
+#X text 408 280 <- adjust Contrast;
+#X text 400 240 <- adjust Brightness;
+#X text 138 67 <- load shader;
+#X obj 76 604 square 3;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 566 142 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 548 163 pd gemwin;
+#X msg 106 555 rectangle \$1;
+#X obj 254 134 s rectangle;
+#X obj 114 135 s rectangle;
+#X obj 106 512 r rectangle;
+#X msg 32 167 print;
+#X msg 39 340 print;
+#X floatatom 192 372 0 0 0 0 - - -;
+#X msg 151 308 link \$1;
+#X obj 151 259 change;
+#X connect 0 0 11 0;
+#X connect 1 0 3 0;
+#X connect 1 1 38 0;
+#X connect 3 0 14 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 6 0 3 3;
+#X connect 7 0 29 0;
+#X connect 8 0 31 0;
+#X connect 9 0 10 0;
+#X connect 9 0 17 0;
+#X connect 10 0 11 0;
+#X connect 11 0 1 0;
+#X connect 11 1 40 0;
+#X connect 13 0 32 0;
+#X connect 14 0 7 0;
+#X connect 15 0 14 0;
+#X connect 16 0 11 0;
+#X connect 17 0 34 0;
+#X connect 18 0 16 0;
+#X connect 18 0 21 0;
+#X connect 21 0 33 0;
+#X connect 22 0 1 0;
+#X connect 23 0 1 0;
+#X connect 24 0 22 0;
+#X connect 25 0 23 0;
+#X connect 30 0 31 0;
+#X connect 32 0 7 0;
+#X connect 35 0 13 0;
+#X connect 36 0 11 0;
+#X connect 37 0 1 0;
+#X connect 39 0 1 0;
+#X connect 39 0 2 0;
+#X connect 40 0 39 0;
diff --git a/Gem/examples/10.glsl/02.primitive_distortion.pd b/Gem/examples/10.glsl/02.primitive_distortion.pd
new file mode 100644
index 0000000..9a5280a
--- /dev/null
+++ b/Gem/examples/10.glsl/02.primitive_distortion.pd
@@ -0,0 +1,125 @@
+#N canvas 462 82 520 667 10;
+#X obj 74 -1 gemhead;
+#X msg 29 80 print;
+#X obj 74 262 glsl_program;
+#X obj 146 121 change;
+#X msg 98 233 print;
+#X floatatom 146 144 2 0 0 0 ID - -;
+#X obj 164 212 print linking;
+#X obj 74 102 glsl_vertex;
+#X obj 74 451 pix_texture;
+#X obj 124 59 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 74 24 alpha;
+#X obj 101 397 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X floatatom 292 202 5 0 0 0 - - -;
+#X msg 101 375 0;
+#X msg 292 223 K \$1;
+#X obj 74 494 sphere 2 30;
+#N canvas 0 50 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 124 38 pd load_shader;
+#N canvas 50 82 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 153 286 pd init_shader;
+#X obj 101 354 loadbang;
+#X text 347 201 <- 2;
+#X text 395 670 ch 20007;
+#X msg 103 305 open texture.jpg;
+#X obj 74 471 rotateXYZ -90 0 0;
+#X msg 292 177 0.1;
+#X obj 74 328 pix_image img3.jpg;
+#X msg 88 80 open P_distord.vert;
+#X text 69 527 this shader create a dirty pseudo random value \, and
+move all vertices separatly;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 389 41 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 359 58 pd gemwin;
+#X msg 101 417 rectangle \$1;
+#X msg 146 191 link \$1;
+#X connect 0 0 10 0;
+#X connect 1 0 7 0;
+#X connect 2 0 24 0;
+#X connect 2 1 17 0;
+#X connect 3 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 30 0;
+#X connect 7 0 2 0;
+#X connect 7 1 3 0;
+#X connect 8 0 22 0;
+#X connect 9 0 25 0;
+#X connect 10 0 7 0;
+#X connect 11 0 29 0;
+#X connect 12 0 14 0;
+#X connect 13 0 11 0;
+#X connect 14 0 2 0;
+#X connect 16 0 9 0;
+#X connect 17 0 23 0;
+#X connect 18 0 13 0;
+#X connect 21 0 24 0;
+#X connect 22 0 15 0;
+#X connect 23 0 12 0;
+#X connect 24 0 8 0;
+#X connect 25 0 7 0;
+#X connect 27 0 28 0;
+#X connect 29 0 8 0;
+#X connect 30 0 2 0;
+#X connect 30 0 6 0;
diff --git a/Gem/examples/10.glsl/03.texture_distortion.pd b/Gem/examples/10.glsl/03.texture_distortion.pd
new file mode 100644
index 0000000..be30c96
--- /dev/null
+++ b/Gem/examples/10.glsl/03.texture_distortion.pd
@@ -0,0 +1,144 @@
+#N canvas 10 10 552 667 10;
+#X text 381 660 ch 20007;
+#X obj 74 -1 gemhead;
+#X msg 29 80 print;
+#X obj 74 382 glsl_program;
+#X obj 147 281 pack 0 0;
+#X msg 31 162 print;
+#X obj 168 261 t b f;
+#X obj 168 216 change;
+#X obj 146 121 change;
+#X msg 147 304 link \$1 \$2;
+#X msg 98 353 print;
+#X floatatom 168 242 2 0 0 0 ID - -;
+#X floatatom 146 144 2 0 0 0 ID - -;
+#X obj 165 325 print linking;
+#X obj 74 196 glsl_fragment;
+#X obj 74 102 glsl_vertex;
+#X obj 74 571 pix_texture;
+#X obj 124 59 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 74 24 alpha;
+#X obj 124 522 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X floatatom 361 352 5 0 0 0 - - -;
+#X floatatom 476 353 5 0 0 0 - - -;
+#X msg 124 500 0;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 124 38 pd load_shader;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 155 405 pd init_shader;
+#X obj 124 479 loadbang;
+#X text 416 351 <- 2;
+#X msg 92 431 open texture.jpg;
+#X msg 361 373 K1 \$1;
+#X msg 361 327 1;
+#X msg 476 375 seed \$1;
+#X msg 88 80 open T_distord.vert;
+#X msg 85 166 open T_distord.frag;
+#X obj 74 458 pix_image img3.jpg;
+#X obj 74 596 rectangle 4 4;
+#X text 73 627 This shader compute a dirty pseudo random number \,
+and distort the texture this with value;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 384 41 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 354 58 pd gemwin;
+#X msg 124 542 rectangle \$1;
+#X connect 1 0 18 0;
+#X connect 2 0 15 0;
+#X connect 3 0 33 0;
+#X connect 3 1 24 0;
+#X connect 4 0 9 0;
+#X connect 5 0 14 0;
+#X connect 6 0 4 0;
+#X connect 6 1 4 1;
+#X connect 7 0 11 0;
+#X connect 8 0 12 0;
+#X connect 9 0 3 0;
+#X connect 9 0 13 0;
+#X connect 10 0 3 0;
+#X connect 11 0 6 0;
+#X connect 12 0 4 0;
+#X connect 14 0 3 0;
+#X connect 14 1 7 0;
+#X connect 15 0 14 0;
+#X connect 15 1 8 0;
+#X connect 16 0 34 0;
+#X connect 17 0 31 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 38 0;
+#X connect 20 0 28 0;
+#X connect 21 0 30 0;
+#X connect 22 0 19 0;
+#X connect 23 0 17 0;
+#X connect 24 0 29 0;
+#X connect 25 0 22 0;
+#X connect 27 0 33 0;
+#X connect 28 0 3 0;
+#X connect 29 0 20 0;
+#X connect 30 0 3 0;
+#X connect 31 0 15 0;
+#X connect 32 0 14 0;
+#X connect 33 0 16 0;
+#X connect 36 0 37 0;
+#X connect 38 0 16 0;
diff --git a/Gem/examples/10.glsl/04.game_of_life.pd b/Gem/examples/10.glsl/04.game_of_life.pd
new file mode 100644
index 0000000..16ccb57
--- /dev/null
+++ b/Gem/examples/10.glsl/04.game_of_life.pd
@@ -0,0 +1,138 @@
+#N canvas 10 10 599 681 10;
+#X obj 316 488 pix_snap2tex;
+#X msg 356 461 0 0;
+#X msg 402 460 500 500;
+#X obj 356 438 t b b;
+#X obj 316 513 alpha;
+#X obj 316 563 square 4;
+#X msg 52 75 frame \$1;
+#X floatatom 52 57 5 0 0 0 - - -;
+#X obj 356 419 loadbang;
+#X msg 271 95 print;
+#X obj 316 370 glsl_program;
+#X obj 389 296 pack 0 0;
+#X msg 273 177 print;
+#X obj 410 276 t b f;
+#X obj 410 231 change;
+#X obj 388 136 change;
+#X msg 389 321 link \$1 \$2;
+#X msg 272 333 print;
+#X floatatom 410 257 2 0 0 0 ID - -;
+#X floatatom 388 159 2 0 0 0 ID - -;
+#X obj 407 342 print linking;
+#X obj 316 211 glsl_fragment;
+#X obj 316 117 glsl_vertex;
+#X obj 338 68 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 316 37 gemhead -1;
+#X obj 316 537 colorRGB 1 1 1 1;
+#X msg 330 95 open game.vert;
+#X msg 327 181 open game.frag;
+#X obj 39 259 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 39 281 gemhead 50;
+#X obj 39 311 translateXYZ 0 0 1;
+#X obj 39 409 rectangle;
+#X obj 39 216 loadbang;
+#X msg 39 237 0;
+#X text 157 261 <- 3;
+#X text 375 69 <- 2 : load shader;
+#X obj 316 392 t b a;
+#X floatatom 69 362 5 0 0 0 - - -;
+#X floatatom 124 363 5 0 0 0 - - -;
+#X obj 69 381 / 100;
+#X obj 124 384 / 100;
+#X text 13 634 This is an example of iterative process : the output
+of the shader is used for next frame input;
+#X text 145 140 <----- 1;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 82 100 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 0 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 52 117 pd gemwin;
+#X connect 0 0 4 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 2;
+#X connect 3 0 1 0;
+#X connect 3 1 2 0;
+#X connect 4 0 25 0;
+#X connect 6 0 44 0;
+#X connect 7 0 6 0;
+#X connect 8 0 3 0;
+#X connect 9 0 22 0;
+#X connect 10 0 36 0;
+#X connect 11 0 16 0;
+#X connect 12 0 21 0;
+#X connect 13 0 11 0;
+#X connect 13 1 11 1;
+#X connect 14 0 18 0;
+#X connect 15 0 19 0;
+#X connect 16 0 10 0;
+#X connect 16 0 20 0;
+#X connect 17 0 10 0;
+#X connect 18 0 13 0;
+#X connect 19 0 11 0;
+#X connect 21 0 10 0;
+#X connect 21 1 14 0;
+#X connect 22 0 21 0;
+#X connect 22 1 15 0;
+#X connect 23 0 26 0;
+#X connect 23 0 27 0;
+#X connect 24 0 22 0;
+#X connect 25 0 5 0;
+#X connect 26 0 22 0;
+#X connect 27 0 21 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 30 0 31 0;
+#X connect 32 0 33 0;
+#X connect 33 0 28 0;
+#X connect 36 0 0 0;
+#X connect 36 1 0 0;
+#X connect 37 0 39 0;
+#X connect 38 0 40 0;
+#X connect 39 0 31 1;
+#X connect 40 0 31 2;
+#X connect 43 0 44 0;
diff --git a/Gem/examples/10.glsl/05.multitexture.pd b/Gem/examples/10.glsl/05.multitexture.pd
new file mode 100644
index 0000000..d80c9a4
--- /dev/null
+++ b/Gem/examples/10.glsl/05.multitexture.pd
@@ -0,0 +1,201 @@
+#N canvas 10 10 930 667 10;
+#X obj 76 5 gemhead;
+#X obj 75 429 glsl_program;
+#X obj 149 268 pack 0 0;
+#X obj 170 248 t b f;
+#X obj 164 203 change;
+#X msg 149 294 link \$1 \$2;
+#X floatatom 170 229 2 0 0 0 ID - -;
+#X floatatom 148 121 2 0 0 0 ID - -;
+#X obj 167 315 print linking;
+#X msg 365 23 color 1 0 0;
+#X obj 142 27 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 76 79 glsl_vertex;
+#X obj 76 183 glsl_fragment;
+#X obj 463 464 pix_texture;
+#X obj 546 271 openpanel;
+#X obj 546 248 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 90 57 open multitexture.vert;
+#X msg 86 153 open multitexture.frag;
+#X obj 463 230 gemhead 11;
+#X obj 463 204 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 463 90 1) turn on rendering;
+#X msg 503 432 texunit 1;
+#X obj 687 467 pix_texture;
+#X obj 768 271 openpanel;
+#X obj 768 250 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 687 204 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 725 430 texunit 0;
+#X obj 462 488 translateXYZ -2 0 0;
+#X obj 685 490 translateXYZ 2 0 0;
+#X msg 187 406 MyTex 0;
+#X obj 75 644 pix_texture;
+#X obj 218 498 openpanel;
+#X obj 218 477 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 254 381 MyTex1 1;
+#X msg 255 406 MyTex 1;
+#X msg 186 381 MyTex1 0;
+#X msg 321 382 MyTex1 2;
+#X msg 326 407 MyTex 2;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 142 5 pd load_shader;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 156 450 pd init_shader;
+#X msg 546 296 set open \$1 \, bang;
+#X obj 491 387 loadbang;
+#X msg 218 519 set open \$1 \, bang;
+#X msg 768 294 set open \$1 \, bang;
+#X obj 482 295 loadbang;
+#X obj 153 519 loadbang;
+#X obj 704 294 loadbang;
+#X obj 220 569 loadbang;
+#X obj 716 388 loadbang;
+#X obj 687 229 gemhead 22;
+#X text 187 360 2) change shader texuinit;
+#X msg 482 320 open img2.jpg;
+#X obj 463 349 pix_image img2.jpg;
+#X obj 687 346 pix_image img3.jpg;
+#X msg 704 318 open img3.jpg;
+#X msg 153 544 open img1.jpg;
+#X obj 75 613 pix_image img1.jpg;
+#X obj 148 98 change;
+#X text 343 147 This is an example of multitexturing \, this shader
+mixes 2 textures;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 395 47 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 365 64 pd gemwin;
+#X obj 75 670 rectangle 3 3;
+#X obj 462 514 square 2;
+#X obj 685 516 square 2;
+#X msg 220 591 texunit 2 \, rectangle 0;
+#X msg 491 409 texunit 0 \, rectangle 0;
+#X msg 716 409 texunit 1 \, rectangle 0;
+#X connect 0 0 11 0;
+#X connect 1 0 56 0;
+#X connect 1 1 39 0;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 6 0;
+#X connect 5 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 7 0 2 0;
+#X connect 9 0 60 0;
+#X connect 10 0 16 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 11 1 57 0;
+#X connect 12 0 1 0;
+#X connect 12 1 4 0;
+#X connect 13 0 27 0;
+#X connect 14 0 40 0;
+#X connect 15 0 14 0;
+#X connect 16 0 11 0;
+#X connect 17 0 12 0;
+#X connect 18 0 52 0;
+#X connect 19 0 18 0;
+#X connect 21 0 13 0;
+#X connect 22 0 28 0;
+#X connect 23 0 43 0;
+#X connect 24 0 23 0;
+#X connect 25 0 49 0;
+#X connect 26 0 22 0;
+#X connect 29 0 1 0;
+#X connect 30 0 61 0;
+#X connect 31 0 42 0;
+#X connect 32 0 31 0;
+#X connect 33 0 1 0;
+#X connect 34 0 1 0;
+#X connect 35 0 1 0;
+#X connect 36 0 1 0;
+#X connect 37 0 1 0;
+#X connect 38 0 10 0;
+#X connect 39 0 33 0;
+#X connect 39 0 29 0;
+#X connect 40 0 51 0;
+#X connect 41 0 65 0;
+#X connect 42 0 55 0;
+#X connect 43 0 54 0;
+#X connect 44 0 51 0;
+#X connect 45 0 55 0;
+#X connect 46 0 54 0;
+#X connect 47 0 64 0;
+#X connect 48 0 66 0;
+#X connect 49 0 53 0;
+#X connect 51 0 52 0;
+#X connect 52 0 13 0;
+#X connect 53 0 22 0;
+#X connect 54 0 53 0;
+#X connect 55 0 56 0;
+#X connect 56 0 30 0;
+#X connect 57 0 7 0;
+#X connect 59 0 60 0;
+#X connect 64 0 30 0;
+#X connect 65 0 13 0;
+#X connect 66 0 22 0;
diff --git a/Gem/examples/10.glsl/05.multitexture_bis.pd b/Gem/examples/10.glsl/05.multitexture_bis.pd
new file mode 100644
index 0000000..63652ff
--- /dev/null
+++ b/Gem/examples/10.glsl/05.multitexture_bis.pd
@@ -0,0 +1,200 @@
+#N canvas 207 200 1100 637 10;
+#X obj 76 5 gemhead;
+#X obj 75 429 glsl_program;
+#X obj 149 268 pack 0 0;
+#X obj 170 248 t b f;
+#X obj 164 203 change;
+#X msg 149 294 link \$1 \$2;
+#X floatatom 170 229 2 0 0 0 ID - -;
+#X floatatom 148 121 2 0 0 0 ID - -;
+#X obj 167 315 print linking;
+#X msg 365 23 color 1 0 0;
+#X obj 142 27 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 76 79 glsl_vertex;
+#X obj 76 183 glsl_fragment;
+#X obj 749 262 openpanel;
+#X obj 749 239 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 90 57 open multitexture.vert;
+#X msg 86 153 open multitexture.frag;
+#X obj 666 221 gemhead 11;
+#X obj 666 195 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 463 90 1) turn on rendering;
+#X obj 971 262 openpanel;
+#X obj 971 241 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 890 195 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 187 406 MyTex 0;
+#X msg 254 381 MyTex1 1;
+#X msg 255 406 MyTex 1;
+#X msg 186 381 MyTex1 0;
+#X msg 321 382 MyTex1 2;
+#X msg 326 407 MyTex 2;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 142 5 pd load_shader;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 156 450 pd init_shader;
+#X msg 749 287 set open \$1 \, bang;
+#X obj 694 378 loadbang;
+#X msg 971 285 set open \$1 \, bang;
+#X obj 685 286 loadbang;
+#X obj 907 285 loadbang;
+#X obj 919 379 loadbang;
+#X obj 890 220 gemhead 22;
+#X text 187 360 2) change shader texuinit;
+#X msg 685 311 open img2.jpg;
+#X obj 666 340 pix_image img2.jpg;
+#X obj 890 337 pix_image img3.jpg;
+#X msg 907 309 open img3.jpg;
+#X obj 148 98 change;
+#X text 343 147 This is an example of multitexturing \, this shader
+mixes 2 textures;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 395 47 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 365 64 pd gemwin;
+#X obj 75 550 rectangle 3 3;
+#X obj 75 520 pix_multitexture 3;
+#X obj 666 425 pix_texture;
+#X obj 890 428 pix_texture;
+#X msg 694 400 rectangle 0;
+#X msg 919 400 rectangle 0;
+#X obj 526 264 openpanel;
+#X obj 526 241 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 443 223 gemhead 11;
+#X obj 443 197 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 526 289 set open \$1 \, bang;
+#X obj 471 380 loadbang;
+#X obj 462 288 loadbang;
+#X obj 443 427 pix_texture;
+#X msg 471 402 rectangle 0;
+#X msg 462 313 open img1.jpg;
+#X obj 443 342 pix_image img1.jpg;
+#X connect 0 0 11 0;
+#X connect 1 0 48 0;
+#X connect 1 1 30 0;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 6 0;
+#X connect 5 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 7 0 2 0;
+#X connect 9 0 46 0;
+#X connect 10 0 15 0;
+#X connect 10 0 16 0;
+#X connect 11 0 12 0;
+#X connect 11 1 43 0;
+#X connect 12 0 1 0;
+#X connect 12 1 4 0;
+#X connect 13 0 31 0;
+#X connect 14 0 13 0;
+#X connect 15 0 11 0;
+#X connect 16 0 12 0;
+#X connect 17 0 40 0;
+#X connect 18 0 17 0;
+#X connect 20 0 33 0;
+#X connect 21 0 20 0;
+#X connect 22 0 37 0;
+#X connect 23 0 1 0;
+#X connect 24 0 1 0;
+#X connect 25 0 1 0;
+#X connect 26 0 1 0;
+#X connect 27 0 1 0;
+#X connect 28 0 1 0;
+#X connect 29 0 10 0;
+#X connect 30 0 24 0;
+#X connect 30 0 23 0;
+#X connect 31 0 39 0;
+#X connect 32 0 51 0;
+#X connect 33 0 42 0;
+#X connect 34 0 39 0;
+#X connect 35 0 42 0;
+#X connect 36 0 52 0;
+#X connect 37 0 41 0;
+#X connect 39 0 40 0;
+#X connect 40 0 49 0;
+#X connect 41 0 50 0;
+#X connect 42 0 41 0;
+#X connect 43 0 7 0;
+#X connect 45 0 46 0;
+#X connect 48 0 47 0;
+#X connect 49 1 48 2;
+#X connect 50 1 48 3;
+#X connect 51 0 49 0;
+#X connect 52 0 50 0;
+#X connect 53 0 57 0;
+#X connect 54 0 53 0;
+#X connect 55 0 63 0;
+#X connect 56 0 55 0;
+#X connect 57 0 62 0;
+#X connect 58 0 61 0;
+#X connect 59 0 62 0;
+#X connect 60 1 48 1;
+#X connect 61 0 60 0;
+#X connect 62 0 63 0;
+#X connect 63 0 60 0;
diff --git a/Gem/examples/10.glsl/06.rectangle_multitexture.pd b/Gem/examples/10.glsl/06.rectangle_multitexture.pd
new file mode 100644
index 0000000..48e6600
--- /dev/null
+++ b/Gem/examples/10.glsl/06.rectangle_multitexture.pd
@@ -0,0 +1,199 @@
+#N canvas 511 97 648 675 10;
+#X obj 279 76 gemhead;
+#X obj 295 208 loadbang;
+#X obj 279 251 pix_texture;
+#X msg 295 231 rectangle 1 \, texunit 1;
+#X obj 334 97 openpanel;
+#X msg 334 118 open \$1;
+#X obj 334 76 bng 15 250 50 0 empty empty empty 17 7 0 10 -257985 -1
+-1;
+#X obj 459 76 gemhead;
+#X obj 475 208 loadbang;
+#X obj 459 251 pix_texture;
+#X obj 514 97 openpanel;
+#X msg 514 118 open \$1;
+#X obj 514 76 bng 15 250 50 0 empty empty empty 17 7 0 10 -257985 -1
+-1;
+#X msg 475 231 rectangle 1 \, texunit 2;
+#X obj 279 275 cnv 15 100 60 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 450 300 gemwin 0;
+#X obj 132 136 gemwin;
+#X obj 67 89 outlet;
+#X obj 67 10 inlet;
+#X obj 67 41 route create;
+#X msg 67 70 set destroy;
+#X msg 142 68 set create;
+#X msg 132 112 create \, 1;
+#X msg 198 112 destroy;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 3 1 5 0;
+#X connect 3 1 7 0;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X restore 284 314 pd gemwin;
+#X msg 284 295 create;
+#X text 280 274 Create window:;
+#X obj 101 358 cnv 15 100 120 empty empty empty 20 12 0 14 -4034 -66577
+0;
+#X obj 37 538 glsl_program;
+#X obj 100 259 pack 0 0;
+#X obj 118 236 t b f;
+#X obj 118 194 change;
+#X msg 100 285 link \$1 \$2;
+#X floatatom 118 217 2 0 0 0 ID - -;
+#X floatatom 100 133 2 0 0 0 ID - -;
+#X obj 105 309 print linking;
+#X obj 124 43 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 37 88 glsl_vertex;
+#X obj 37 174 glsl_fragment;
+#N canvas 0 0 450 300 load_shader 0;
+#X msg 116 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X obj 89 100 t b b;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 1 0 0;
+#X restore 124 21 pd load_shader;
+#X obj 100 110 change;
+#X obj 106 581 loadbang;
+#X obj 37 21 gemhead 51;
+#X msg 109 371 add;
+#X msg 109 431 multiply;
+#X msg 109 451 mix;
+#N canvas 0 0 450 300 route 0;
+#X obj 113 53 inlet;
+#X msg 113 95 0;
+#X msg 155 95 1;
+#X msg 198 95 2;
+#X msg 240 95 3;
+#X obj 113 126 outlet;
+#X msg 283 95 4;
+#X obj 113 74 route add subtract diff multiply mix;
+#X connect 0 0 7 0;
+#X connect 1 0 5 0;
+#X connect 2 0 5 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 0;
+#X connect 7 1 2 0;
+#X connect 7 2 3 0;
+#X connect 7 3 4 0;
+#X connect 7 4 6 0;
+#X restore 72 486 pd route;
+#X msg 184 540 Ttex1 1;
+#X msg 240 540 Ttex2 2;
+#X msg 72 507 style \$1;
+#X obj 109 337 loadbang;
+#X obj 37 625 pix_texture;
+#X msg 106 603 rectangle 1 \, texunit 0;
+#X obj 37 598 pix_set;
+#X obj 142 457 hsl 50 10 0 1 0 0 empty empty MIX_FACTOR -2 -4 0 7 -262144
+-1 -1 0 1;
+#X msg 51 66 open GLSL_mix.vert;
+#X msg 51 151 open GLSL_mix.frag;
+#X msg 109 411 diff;
+#X text 383 295 <- 1 : create GEM window;
+#X text 248 375 add : add two texture together (it is easy to get a
+white out);
+#X msg 109 391 subtract;
+#X text 277 16 This shader program give you the possibility to mix
+two sources of different size. You can add \, subtract \, diff \, multiply
+and mix the two sources.;
+#X text 248 401 subtract : subtract two texture together (it is easy
+to get a black out);
+#X text 248 427 diff : subtract two texture together (get absolute
+value);
+#X text 248 441 multiply : multiply two texture together;
+#X text 248 455 mix : mix two texture together (use the mix factor
+for crossfading);
+#N canvas 242 260 450 300 onebang 0;
+#X obj 120 71 inlet;
+#X obj 120 151 outlet;
+#X obj 120 120 t b;
+#X obj 120 100 change;
+#X msg 161 71 set -1;
+#X obj 161 11 gemhead;
+#X obj 161 51 route 0;
+#X obj 161 31 route gem_state;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 5 0 7 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X restore 106 559 pd onebang;
+#X text 206 357 <- 2 : test differents mix;
+#X obj 459 167 pix_resize 512 512;
+#X obj 279 167 pix_resize 234 543;
+#X obj 279 147 pix_image img3.jpg;
+#X obj 459 147 pix_image img2.jpg;
+#X text 292 186 images have diferents sizes;
+#X msg 139 507 mix_factor \$1;
+#X obj 37 646 square 4;
+#X connect 0 0 61 0;
+#X connect 1 0 3 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 61 0;
+#X connect 6 0 4 0;
+#X connect 7 0 62 0;
+#X connect 8 0 13 0;
+#X connect 10 0 11 0;
+#X connect 11 0 62 0;
+#X connect 12 0 10 0;
+#X connect 13 0 9 0;
+#X connect 15 0 16 0;
+#X connect 16 0 15 0;
+#X connect 19 0 44 0;
+#X connect 19 1 57 0;
+#X connect 20 0 23 0;
+#X connect 21 0 20 0;
+#X connect 21 1 20 1;
+#X connect 22 0 24 0;
+#X connect 23 0 19 0;
+#X connect 23 0 26 0;
+#X connect 24 0 21 0;
+#X connect 25 0 20 0;
+#X connect 27 0 46 0;
+#X connect 27 0 47 0;
+#X connect 28 0 29 0;
+#X connect 28 1 31 0;
+#X connect 29 0 19 0;
+#X connect 29 1 22 0;
+#X connect 30 0 27 0;
+#X connect 31 0 25 0;
+#X connect 32 0 43 0;
+#X connect 33 0 28 0;
+#X connect 34 0 37 0;
+#X connect 35 0 37 0;
+#X connect 36 0 37 0;
+#X connect 37 0 40 0;
+#X connect 38 0 19 0;
+#X connect 39 0 19 0;
+#X connect 40 0 19 0;
+#X connect 41 0 34 0;
+#X connect 42 0 65 0;
+#X connect 43 0 42 0;
+#X connect 44 0 42 0;
+#X connect 45 0 64 0;
+#X connect 46 0 28 0;
+#X connect 47 0 29 0;
+#X connect 48 0 37 0;
+#X connect 51 0 37 0;
+#X connect 57 0 38 0;
+#X connect 57 0 39 0;
+#X connect 59 0 9 0;
+#X connect 60 0 2 0;
+#X connect 61 0 60 0;
+#X connect 62 0 59 0;
+#X connect 64 0 19 0;
diff --git a/Gem/examples/10.glsl/07.framebuffer_and_shader.pd b/Gem/examples/10.glsl/07.framebuffer_and_shader.pd
new file mode 100644
index 0000000..c829e8f
--- /dev/null
+++ b/Gem/examples/10.glsl/07.framebuffer_and_shader.pd
@@ -0,0 +1,418 @@
+#N canvas 1 25 1126 659 10;
+#X obj 9 470 translateXYZ 0 0 -4;
+#X obj 9 234 ortho;
+#X floatatom 83 538 5 0 0 0 - - -;
+#X msg 83 515 \$1;
+#X obj 9 365 gemframebuffer;
+#X obj 9 494 pix_texture;
+#X obj 218 474 translateXYZ 0 0 -4;
+#X obj 218 501 pix_texture;
+#X floatatom 484 153 5 0 0 0 - - -;
+#X msg 484 131 \$1;
+#X floatatom 325 550 5 0 0 0 - - -;
+#X msg 325 528 \$1;
+#X floatatom 104 412 5 0 0 0 - - -;
+#X msg 104 389 \$1;
+#X floatatom 294 411 5 0 0 0 - - -;
+#X msg 294 388 \$1;
+#X obj 435 58 loadbang;
+#X obj 199 364 gemframebuffer;
+#N canvas 573 206 496 427 shader 0;
+#X obj 32 294 glsl_program;
+#X obj 126 137 change;
+#X obj 126 183 print linking;
+#X obj 32 117 glsl_fragment;
+#X floatatom 130 239 5 0 0 0 - - -;
+#X floatatom 232 239 5 0 0 0 - - -;
+#X floatatom 181 239 5 0 0 0 - - -;
+#X msg 130 260 K1 \$1;
+#X msg 181 260 K3 \$1;
+#X msg 232 260 D1 \$1;
+#X msg 130 214 0.25;
+#X msg 126 158 link \$1;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 42 70 pd load_shader;
+#X obj 32 36 inlet;
+#X obj 32 363 outlet;
+#X obj 304 38 inlet;
+#X obj 139 343 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 113 318 pd init_shader;
+#X obj 112 341 t b;
+#X obj 395 43 inlet;
+#X msg 181 213 0;
+#X msg 232 215 0;
+#X msg 193 151 text 0;
+#X msg 42 93 open wave.frag;
+#X connect 0 0 14 0;
+#X connect 0 1 17 0;
+#X connect 1 0 11 0;
+#X connect 3 0 0 0;
+#X connect 3 1 1 0;
+#X connect 4 0 7 0;
+#X connect 5 0 9 0;
+#X connect 6 0 8 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 0 0;
+#X connect 10 0 4 0;
+#X connect 11 0 0 0;
+#X connect 11 0 2 0;
+#X connect 12 0 23 0;
+#X connect 13 0 3 0;
+#X connect 15 0 23 0;
+#X connect 16 0 18 0;
+#X connect 17 0 18 0;
+#X connect 18 0 10 0;
+#X connect 18 0 20 0;
+#X connect 18 0 21 0;
+#X connect 18 0 22 0;
+#X connect 19 0 16 0;
+#X connect 20 0 6 0;
+#X connect 21 0 5 0;
+#X connect 22 0 0 0;
+#X connect 23 0 3 0;
+#X restore 9 274 pd shader;
+#X obj 137 289 t a;
+#X obj 137 197 t b;
+#X obj 147 177 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 137 156 loadbang;
+#X obj 218 421 t a a;
+#X obj 402 518 separator;
+#X obj 218 447 separator;
+#X obj 218 537 color 1 1 1;
+#X obj 218 563 rectangle 4 4;
+#X obj 9 563 rectangle 4 4;
+#X obj 66 250 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 93 251 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 390 472 t a;
+#N canvas 0 0 857 562 border 0;
+#X obj 14 10 inlet;
+#X obj 13 46 separator;
+#X obj 13 68 translateXYZ 0 4 -3.9;
+#X obj 13 115 rectangle 5 0.12;
+#X obj 182 46 separator;
+#X obj 182 115 rectangle 5 0.12;
+#X obj 351 45 separator;
+#X obj 182 68 translateXYZ 0 -4 -3.9;
+#X obj 351 67 translateXYZ 4 0 -3.9;
+#X obj 351 114 rectangle 0.12 5;
+#X obj 528 39 separator;
+#X obj 528 108 rectangle 0.12 5;
+#X obj 528 61 translateXYZ -4 0 -3.9;
+#X obj 528 85 color 0.5 0.5 0.5;
+#X obj 351 91 color 0.5 0.5 0.5;
+#X obj 181 93 color 0.5 0.5 0.5;
+#X obj 13 92 color 0.5 0.5 0.5;
+#X connect 0 0 1 0;
+#X connect 0 0 4 0;
+#X connect 0 0 6 0;
+#X connect 0 0 10 0;
+#X connect 1 0 2 0;
+#X connect 2 0 16 0;
+#X connect 4 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 15 0;
+#X connect 8 0 14 0;
+#X connect 10 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 11 0;
+#X connect 14 0 9 0;
+#X connect 15 0 5 0;
+#X connect 16 0 3 0;
+#X restore 390 569 pd border;
+#X obj 774 148 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 774 172 gemhead 40;
+#X floatatom 825 519 5 0 0 0 - - -;
+#X obj 774 484 pix_texture;
+#X floatatom 876 520 5 0 0 0 - - -;
+#X obj 442 357 pix_texture;
+#X floatatom 867 236 5 0 0 0 - - -;
+#X obj 653 216 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 454 308 loadbang;
+#X obj 786 442 loadbang;
+#N canvas 693 153 804 667 _glsl 0;
+#X obj 80 426 glsl_program;
+#X obj 261 238 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 0 22 450 300 open 0;
+#X obj 75 103 openpanel;
+#X obj 75 173 outlet;
+#X obj 75 127 t b s;
+#X msg 105 152 set open \$1;
+#X obj 75 80 inlet;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X connect 2 1 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X restore 204 237 pd open;
+#X msg 33 296 print;
+#X obj 166 331 change;
+#X msg 34 420 print;
+#X obj 80 310 glsl_fragment;
+#X floatatom 166 355 2 0 0 0 ID - -;
+#X obj 184 400 print linking;
+#X obj 13 52 inlet;
+#X obj 80 462 outlet;
+#X msg 93 273 open \$1.frag;
+#X msg 204 261 open \$1;
+#X obj 422 77 inlet;
+#X obj 13 75 route bang;
+#X obj 140 83 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 140 109 t b b;
+#X msg 140 202 symbol \$1/\$2;
+#X obj 255 11 gemhead 1;
+#X msg 255 33 1;
+#X obj 255 57 change;
+#X obj 255 81 t b;
+#X obj 159 447 change;
+#X obj 159 468 t b;
+#X obj 159 491 outlet;
+#X msg 166 379 link \$1;
+#X obj 140 133 symbol vague;
+#X connect 0 0 10 0;
+#X connect 0 1 22 0;
+#X connect 1 0 2 0;
+#X connect 2 0 12 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
+#X connect 6 1 4 0;
+#X connect 7 0 25 0;
+#X connect 9 0 14 0;
+#X connect 11 0 6 0;
+#X connect 12 0 6 0;
+#X connect 13 0 0 0;
+#X connect 14 0 16 0;
+#X connect 14 1 6 0;
+#X connect 15 0 16 0;
+#X connect 16 0 26 0;
+#X connect 17 0 11 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 16 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 25 0 0 0;
+#X connect 25 0 8 0;
+#X connect 26 0 11 0;
+#X restore 774 326 pd _glsl;
+#X obj 743 302 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 435 82 texunit 3;
+#X obj 410 108 pix_texture;
+#X obj 181 299 t a;
+#N canvas 0 0 450 300 gouttes 0;
+#X obj 27 79 translateXYZ 0 0 -4;
+#X obj 27 101 t a b b;
+#X obj 27 195 translateXYZ 0 0 0.1;
+#X obj 50 123 random 1000;
+#X obj 50 147 - 500;
+#X obj 136 123 random 1000;
+#X obj 136 147 - 500;
+#X obj 50 171 / 130;
+#X obj 136 171 / 130;
+#X obj 27 242 circle 0.02;
+#X obj 27 218 color 0.3 0.3 0.3;
+#X obj 28 51 inlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 1 2 5 0;
+#X connect 2 0 10 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 7 0 2 1;
+#X connect 8 0 2 2;
+#X connect 10 0 9 0;
+#X connect 11 0 0 0;
+#X restore 402 542 pd gouttes;
+#X msg 244 284 quality 0;
+#X obj 774 541 rectangle -4 -4;
+#X obj 9 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
+;
+#X obj 220 180 delay 1000;
+#N canvas 0 0 450 300 init 0;
+#X obj 89 154 outlet;
+#X obj 89 100 change;
+#X obj 89 127 t b;
+#X obj 91 52 gemhead;
+#X msg 91 73 1;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 220 157 pd init;
+#X obj 410 34 gemhead 16;
+#X obj 199 342 gemhead 12;
+#X obj 442 214 gemhead 17;
+#X obj 9 177 gemhead 10;
+#X obj 442 240 pix_image img2.jpg;
+#X msg 867 215 111;
+#X text 33 612 This shader is rendered into a framebuffer \, in order
+to use it in the next frame for a simple physical modeling simulation
+;
+#X text 345 168 This creates a texture (texunit 3) from the shaders'
+output;
+#X text 437 386 this loads a texture (texunit 2);
+#X text 691 411 not used \, just to set texture coordinate;
+#X text 633 594 This uses the two textures (texunit 2 and 3) in order
+to render the final images;
+#X text 201 9 This is an example of rendering to texture (using framebuffer)
+and multitextures;
+#X obj 402 497 t a a a a a;
+#X obj 774 393 pix_set 512 512;
+#N canvas 87 154 452 208 Gem.init 0;
+#X obj 118 46 loadbang;
+#X obj 118 113 outlet;
+#X msg 118 81 reset \, dimen 800 600;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 760 47 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 730 64 pd gemwin;
+#X msg 786 463 rectangle 1;
+#X msg 454 331 texunit 2 \, quality 1 \, rectangle 1;
+#X msg 137 222 type FLOAT \, dimen 512 512 \, rectangle 1;
+#X msg 220 202 quality 1 \, rectangle 1;
+#X msg 867 255 K \$1 \, texture1 2 \, texture2 3;
+#X text 880 276 texture1==base;
+#X text 882 294 texture2==deformation;
+#X connect 0 0 5 0;
+#X connect 1 0 18 0;
+#X connect 3 0 2 0;
+#X connect 4 0 0 0;
+#X connect 4 1 7 1;
+#X connect 4 1 13 0;
+#X connect 5 0 28 0;
+#X connect 5 1 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 26 0;
+#X connect 7 1 11 0;
+#X connect 7 1 46 1;
+#X connect 9 0 8 0;
+#X connect 11 0 10 0;
+#X connect 13 0 12 0;
+#X connect 15 0 14 0;
+#X connect 16 0 45 0;
+#X connect 17 0 23 0;
+#X connect 17 1 5 1;
+#X connect 17 1 15 0;
+#X connect 18 0 4 0;
+#X connect 19 0 4 0;
+#X connect 19 0 17 0;
+#X connect 20 0 72 0;
+#X connect 21 0 20 0;
+#X connect 22 0 20 0;
+#X connect 23 0 25 0;
+#X connect 23 1 31 0;
+#X connect 24 0 48 0;
+#X connect 25 0 6 0;
+#X connect 26 0 27 0;
+#X connect 29 0 18 1;
+#X connect 30 0 18 2;
+#X connect 31 0 66 0;
+#X connect 33 0 34 0;
+#X connect 34 0 43 0;
+#X connect 35 0 50 1;
+#X connect 36 0 50 0;
+#X connect 37 0 50 2;
+#X connect 39 0 74 0;
+#X connect 40 0 59 0;
+#X connect 41 0 71 0;
+#X connect 42 0 70 0;
+#X connect 43 0 67 0;
+#X connect 43 1 40 0;
+#X connect 44 0 43 0;
+#X connect 45 0 46 0;
+#X connect 46 1 9 0;
+#X connect 47 0 5 0;
+#X connect 47 0 46 0;
+#X connect 47 0 7 0;
+#X connect 49 0 47 0;
+#X connect 51 0 57 0;
+#X connect 52 0 73 0;
+#X connect 53 0 52 0;
+#X connect 54 0 46 0;
+#X connect 55 0 17 0;
+#X connect 56 0 58 0;
+#X connect 57 0 1 0;
+#X connect 58 0 38 0;
+#X connect 59 0 39 0;
+#X connect 66 0 24 0;
+#X connect 66 1 24 0;
+#X connect 66 2 24 0;
+#X connect 66 3 24 0;
+#X connect 66 4 24 0;
+#X connect 67 0 36 0;
+#X connect 68 0 69 0;
+#X connect 70 0 36 0;
+#X connect 71 0 38 0;
+#X connect 72 0 19 0;
+#X connect 73 0 47 0;
+#X connect 74 0 43 1;
diff --git a/Gem/examples/10.glsl/08.multi_pass_rendering.pd b/Gem/examples/10.glsl/08.multi_pass_rendering.pd
new file mode 100644
index 0000000..5ada6be
--- /dev/null
+++ b/Gem/examples/10.glsl/08.multi_pass_rendering.pd
@@ -0,0 +1,341 @@
+#N canvas 208 184 980 477 10;
+#X obj 42 315 square 4;
+#X obj 42 199 translateXYZ 0 0 -4;
+#X obj 671 399 pix_texture;
+#X obj 671 419 square 4;
+#N canvas 370 126 407 295 init 0;
+#X obj 106 175 outlet;
+#X msg 125 89 type FLOAT;
+#X obj 124 68 loadbang;
+#X msg 146 109 dimen 1024 1024;
+#X msg 211 147 rectangle 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X restore 56 157 pd init;
+#X obj 650 230 pix_texture;
+#X obj 650 252 square 4;
+#X floatatom 724 255 5 0 0 0 - - -;
+#N canvas 157 111 392 206 init 0;
+#X obj 93 68 t b;
+#X obj 93 47 loadbang;
+#X obj 93 159 outlet;
+#X msg 93 118 type FLOAT \, dimen 1024 1024 \, rectangle 0;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 3 0 2 0;
+#X restore 669 120 pd init;
+#X obj 353 199 translateXYZ 0 0 -4;
+#N canvas 700 0 407 295 init 0;
+#X obj 106 175 outlet;
+#X obj 106 68 loadbang;
+#X msg 106 118 type FLOAT \, dimen 1024 1024 \, rectangle 0;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X restore 373 156 pd init;
+#X text 6 4 first input \, render whatever in a frambuffer;
+#X obj 691 357 loadbang;
+#X obj 42 222 pix_image img1.jpg;
+#X obj 42 54 gemhead 11;
+#X obj 666 187 loadbang;
+#X obj 650 166 translateXYZ 0 0 -4;
+#X obj 650 142 gemframebuffer;
+#X obj 353 177 gemframebuffer;
+#N canvas 330 106 589 635 shader1 0;
+#X obj 94 500 glsl_program;
+#X obj 94 340 glsl_fragment;
+#X obj 94 160 glsl_vertex;
+#X obj 172 400 pack 0 0;
+#X obj 162 200 change;
+#X obj 182 375 change;
+#X msg 172 420 link \$1 \$2;
+#X obj 162 220 t b f;
+#X obj 176 444 print linking;
+#X obj 94 66 inlet;
+#X obj 94 530 outlet;
+#X obj 464 245 inlet;
+#X floatatom 182 179 0 0 0 0 - - -;
+#X floatatom 234 377 0 0 0 0 - - -;
+#X msg 56 472 print;
+#X msg 246 65 1;
+#X obj 246 106 t b;
+#X obj 246 46 gemhead 1;
+#X obj 175 548 t b;
+#X obj 175 571 outlet;
+#X msg 246 135 open T_distord.vert;
+#X msg 289 160 open T_distord.frag;
+#X obj 246 86 change -1;
+#X obj 175 524 change;
+#X connect 0 0 10 0;
+#X connect 0 1 23 0;
+#X connect 1 0 0 0;
+#X connect 1 1 5 0;
+#X connect 1 1 13 0;
+#X connect 2 0 1 0;
+#X connect 2 1 4 0;
+#X connect 2 1 12 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 3 0;
+#X connect 7 1 3 1;
+#X connect 9 0 2 0;
+#X connect 11 0 0 0;
+#X connect 14 0 0 0;
+#X connect 15 0 22 0;
+#X connect 16 0 20 0;
+#X connect 16 0 21 0;
+#X connect 17 0 15 0;
+#X connect 18 0 19 0;
+#X connect 20 0 2 0;
+#X connect 21 0 1 0;
+#X connect 22 0 16 0;
+#X connect 23 0 18 0;
+#X restore 42 81 pd shader1;
+#N canvas 476 68 589 635 shader2 0;
+#X obj 94 500 glsl_program;
+#X obj 94 340 glsl_fragment;
+#X obj 94 160 glsl_vertex;
+#X obj 172 400 pack 0 0;
+#X obj 162 200 change;
+#X obj 182 375 change;
+#X msg 172 420 link \$1 \$2;
+#X obj 162 220 t b f;
+#X obj 176 444 print linking;
+#X obj 94 66 inlet;
+#X obj 94 530 outlet;
+#X obj 464 245 inlet;
+#X floatatom 182 179 0 0 0 0 - - -;
+#X floatatom 234 377 0 0 0 0 - - -;
+#X msg 56 472 print;
+#X msg 246 65 1;
+#X obj 246 106 t b;
+#X obj 246 46 gemhead 1;
+#X obj 175 548 t b;
+#X obj 175 571 outlet;
+#X msg 246 135 open P_distord.vert;
+#X msg 289 160 open P_distord.frag;
+#X obj 246 86 change -1;
+#X obj 175 524 change;
+#X connect 0 0 10 0;
+#X connect 0 1 23 0;
+#X connect 1 0 0 0;
+#X connect 1 1 5 0;
+#X connect 1 1 13 0;
+#X connect 2 0 1 0;
+#X connect 2 1 4 0;
+#X connect 2 1 12 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 3 0;
+#X connect 7 1 3 1;
+#X connect 9 0 2 0;
+#X connect 11 0 0 0;
+#X connect 14 0 0 0;
+#X connect 15 0 22 0;
+#X connect 16 0 20 0;
+#X connect 16 0 21 0;
+#X connect 17 0 15 0;
+#X connect 18 0 19 0;
+#X connect 20 0 2 0;
+#X connect 21 0 1 0;
+#X connect 22 0 16 0;
+#X connect 23 0 18 0;
+#X restore 353 78 pd shader2;
+#N canvas 660 91 589 635 shader3 0;
+#X obj 94 500 glsl_program;
+#X obj 94 340 glsl_fragment;
+#X obj 94 160 glsl_vertex;
+#X obj 172 400 pack 0 0;
+#X obj 162 200 change;
+#X obj 182 375 change;
+#X msg 172 420 link \$1 \$2;
+#X obj 162 220 t b f;
+#X obj 176 444 print linking;
+#X obj 94 66 inlet;
+#X obj 94 530 outlet;
+#X obj 464 245 inlet;
+#X floatatom 182 179 0 0 0 0 - - -;
+#X floatatom 234 377 0 0 0 0 - - -;
+#X msg 56 472 print;
+#X msg 246 65 1;
+#X obj 246 106 t b;
+#X obj 246 46 gemhead 1;
+#X obj 175 548 t b;
+#X obj 175 571 outlet;
+#X msg 326 429 MyTex 1;
+#X msg 336 451 MyTex1 2;
+#X msg 247 135 open multitexture.vert;
+#X msg 291 160 open multitexture.frag;
+#X obj 246 86 change -1;
+#X obj 175 524 change;
+#X connect 0 0 10 0;
+#X connect 0 1 25 0;
+#X connect 1 0 0 0;
+#X connect 1 1 5 0;
+#X connect 1 1 13 0;
+#X connect 2 0 1 0;
+#X connect 2 1 4 0;
+#X connect 2 1 12 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 3 0;
+#X connect 7 1 3 1;
+#X connect 9 0 2 0;
+#X connect 11 0 0 0;
+#X connect 14 0 0 0;
+#X connect 15 0 24 0;
+#X connect 16 0 22 0;
+#X connect 16 0 23 0;
+#X connect 17 0 15 0;
+#X connect 18 0 19 0;
+#X connect 18 0 20 0;
+#X connect 18 0 21 0;
+#X connect 20 0 0 0;
+#X connect 21 0 0 0;
+#X connect 22 0 2 0;
+#X connect 23 0 1 0;
+#X connect 24 0 16 0;
+#X connect 25 0 18 0;
+#X restore 650 79 pd shader3;
+#X obj 650 54 gemhead 31;
+#X obj 671 314 gemhead 32;
+#X obj 56 248 loadbang;
+#X obj 367 245 loadbang;
+#X msg 56 270 rectangle 0;
+#X msg 367 267 rectangle 0;
+#X obj 42 295 pix_texture;
+#X msg 55 135 texunit 1;
+#X obj 55 113 loadbang;
+#X obj 366 115 loadbang;
+#X msg 366 136 texunit 2;
+#X msg 141 48 1;
+#X floatatom 141 69 5 0 0 0 - - -;
+#X msg 141 88 K1 \$1;
+#X text 183 69 change effect;
+#X text 347 1 second input : same as 1st.;
+#X text 7 22 put framebuffer as texunit 1 \, for futur use;
+#X text 348 17 render an image in framebuffer.;
+#X text 350 31 put framebuffer in texunit 2;
+#X text 632 8 finally :;
+#X text 631 23 shader mixing 2 textures in a framebuffer;
+#X floatatom 449 79 5 0 0 0 - - -;
+#X text 491 79 change effect;
+#X msg 449 98 K \$1;
+#X msg 449 58 0.1;
+#X text 161 433 <-------------------;
+#X text 569 442 draw the final frambuffer (without shader);
+#X obj 671 335 rotateXYZ -20 0 0;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 58 46 loadbang;
+#X obj 58 113 outlet;
+#X msg 58 80 reset \, dimen 320 240;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 99 394 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 69 411 pd gemwin;
+#X obj 42 177 gemframebuffer;
+#X obj 353 332 mesh_square 10 10;
+#X obj 353 311 scaleXYZ 4 4 1;
+#X obj 353 57 gemhead 21;
+#X obj 353 222 pix_image img2.jpg;
+#X obj 353 291 pix_texture;
+#X msg 666 209 rectangle 0;
+#X msg 691 378 rectangle 0;
+#X connect 1 0 13 0;
+#X connect 2 0 3 0;
+#X connect 4 0 52 0;
+#X connect 5 0 6 0;
+#X connect 5 1 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 56 0;
+#X connect 10 0 18 0;
+#X connect 12 0 59 0;
+#X connect 13 0 28 0;
+#X connect 14 0 19 0;
+#X connect 15 0 58 0;
+#X connect 16 0 5 0;
+#X connect 17 0 16 0;
+#X connect 17 1 2 1;
+#X connect 18 0 9 0;
+#X connect 19 0 52 0;
+#X connect 19 1 33 0;
+#X connect 20 0 18 0;
+#X connect 20 1 46 0;
+#X connect 21 0 17 0;
+#X connect 22 0 21 0;
+#X connect 23 0 49 0;
+#X connect 24 0 26 0;
+#X connect 25 0 27 0;
+#X connect 26 0 28 0;
+#X connect 27 0 57 0;
+#X connect 28 0 0 0;
+#X connect 29 0 52 0;
+#X connect 30 0 29 0;
+#X connect 31 0 32 0;
+#X connect 32 0 18 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 19 1;
+#X connect 43 0 45 0;
+#X connect 45 0 20 1;
+#X connect 46 0 43 0;
+#X connect 49 0 2 0;
+#X connect 50 0 51 0;
+#X connect 52 0 1 0;
+#X connect 54 0 53 0;
+#X connect 55 0 20 0;
+#X connect 56 0 57 0;
+#X connect 57 0 54 0;
+#X connect 58 0 5 0;
+#X connect 59 0 2 0;
diff --git a/Gem/examples/10.glsl/09.vertex_texture_fetching.pd b/Gem/examples/10.glsl/09.vertex_texture_fetching.pd
new file mode 100644
index 0000000..e1439c4
--- /dev/null
+++ b/Gem/examples/10.glsl/09.vertex_texture_fetching.pd
@@ -0,0 +1,142 @@
+#N canvas 239 0 785 526 10;
+#X obj 504 69 gemhead;
+#X obj 576 346 pack 0 0;
+#X obj 597 326 t b f;
+#X msg 576 369 link \$1 \$2;
+#X floatatom 597 307 2 0 0 0 ID - -;
+#X floatatom 576 206 2 0 0 0 ID - -;
+#X obj 594 390 print linking;
+#X obj 504 480 pix_texture;
+#X obj 540 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 28 199 gemhead 1;
+#X obj 28 311 gemframebuffer;
+#X obj 28 485 pix_texture;
+#X obj 28 336 translateXYZ 0 0 -4;
+#X obj 28 510 square 4;
+#X obj 504 261 glsl_fragment;
+#X obj 504 164 glsl_vertex;
+#X obj 576 183 change;
+#X obj 597 281 change;
+#X obj 504 409 glsl_program;
+#X floatatom 542 505 5 0 0 0 - - -;
+#X obj 49 231 loadbang;
+#X obj 44 419 loadbang;
+#X msg 520 456 quality 0;
+#N canvas 703 231 450 300 load_glsl 0;
+#X obj 51 22 gemhead;
+#X obj 51 98 outlet;
+#X obj 51 50 route gem_state;
+#X obj 51 74 route 1;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X restore 540 93 pd load_glsl;
+#X msg 514 231 open fetching.frag;
+#X msg 518 142 open fetching.vert;
+#X obj 504 525 rotateXYZ -30 0 0;
+#X obj 504 551 scaleXYZ 3 3 1;
+#X obj 28 388 pix_image img1.jpg;
+#X msg 46 363 open img2.jpg;
+#X text 137 11 This patch need a glsl 3 compliant hardware;
+#X text 26 535 draw an image in a frambuffer;
+#X text 49 274 this configuration is very important to have full hardware
+support for vertex texture fetching;
+#X text 306 603 this example uses the framebuffer image in the vertex
+shader in the same way you can do in the pixel shader. This is only
+possible in this specific configuration (it's a hardware limitation)
+;
+#X text 137 56 (nvidia 7000 and 8000 serie should work \, ati X1000
+serie does not \, but later should);
+#X obj 504 579 mesh_square 200;
+#X text 138 28 As in 2007 \, only good (and new) graphic cards are
+able to run this patch.;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 56 77 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 0 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 26 94 pd gemwin;
+#X msg 49 255 rectangle 0 \, type BYTE \, format RGB32 \, dimen 1024
+1024;
+#X msg 44 439 rectangle 0 \, quality 0;
+#X obj 520 437 loadbang;
+#X connect 0 0 15 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 1 1;
+#X connect 3 0 6 0;
+#X connect 3 0 18 0;
+#X connect 4 0 2 0;
+#X connect 5 0 1 0;
+#X connect 7 0 26 0;
+#X connect 8 0 25 0;
+#X connect 8 0 24 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 10 1 7 1;
+#X connect 11 0 13 0;
+#X connect 12 0 28 0;
+#X connect 14 0 18 0;
+#X connect 14 1 17 0;
+#X connect 15 0 14 0;
+#X connect 15 1 16 0;
+#X connect 16 0 5 0;
+#X connect 17 0 4 0;
+#X connect 18 0 7 0;
+#X connect 19 0 26 1;
+#X connect 20 0 39 0;
+#X connect 21 0 40 0;
+#X connect 22 0 7 0;
+#X connect 23 0 8 0;
+#X connect 24 0 14 0;
+#X connect 25 0 15 0;
+#X connect 26 0 27 0;
+#X connect 27 0 35 0;
+#X connect 28 0 11 0;
+#X connect 29 0 28 0;
+#X connect 37 0 38 0;
+#X connect 39 0 10 0;
+#X connect 40 0 11 0;
+#X connect 41 0 22 0;
diff --git a/Gem/examples/10.glsl/10.GPGPU_Physical_model.pd b/Gem/examples/10.glsl/10.GPGPU_Physical_model.pd
new file mode 100644
index 0000000..6d44970
--- /dev/null
+++ b/Gem/examples/10.glsl/10.GPGPU_Physical_model.pd
@@ -0,0 +1,1246 @@
+#N struct 1002-xy-pad-knob-1 float x0 float y0 float id;
+#N canvas 875 218 764 482 10;
+#X obj 27 380 hradio 15 1 0 5 empty empty empty 0 -8 0 10 -262144 -1
+-1 0;
+#X floatatom 185 212 5 0 0 0 - - -;
+#N canvas 4 106 187 219 fps 0;
+#X obj 22 62 realtime;
+#X obj 22 41 t b b;
+#X obj 22 19 gemhead;
+#X obj 22 170 outlet;
+#X msg 22 84 1000 \$1;
+#X obj 22 105 /;
+#X obj 22 126 + 0.5;
+#X obj 22 147 i;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 3 0;
+#X restore 185 192 pd fps;
+#N canvas 93 66 1183 666 shaders_PM 0;
+#X obj 718 34 gemhead;
+#X obj 718 57 route gem_state;
+#X obj 718 79 route 1 0;
+#X obj 24 477 translateXYZ 0 0 -4;
+#X obj 24 609 square 4;
+#X msg 50 399 texunit 1;
+#X obj 50 378 loadbang;
+#N canvas 573 206 607 627 shader 0;
+#X obj 126 247 change;
+#X obj 126 323 print linking;
+#X obj 32 227 glsl_fragment;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 148 49 pd load_shader;
+#X obj 32 36 inlet;
+#X obj 32 423 outlet;
+#X obj 155 18 inlet;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 113 378 pd init_shader;
+#X obj 278 25 inlet;
+#X obj 113 408 outlet;
+#X msg 42 203 open mass.frag;
+#X obj 32 354 glsl_program;
+#X obj 32 137 glsl_vertex;
+#X msg 42 113 open mass.vert;
+#X obj 94 74 t b b;
+#X obj 126 272 pack f f;
+#X msg 126 296 link \$1 \$2;
+#X connect 0 0 15 0;
+#X connect 2 0 11 0;
+#X connect 2 1 0 0;
+#X connect 3 0 14 0;
+#X connect 4 0 12 0;
+#X connect 6 0 14 0;
+#X connect 7 0 9 0;
+#X connect 8 0 11 0;
+#X connect 10 0 2 0;
+#X connect 11 0 5 0;
+#X connect 11 1 7 0;
+#X connect 12 0 2 0;
+#X connect 12 1 15 1;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 14 1 13 0;
+#X connect 15 0 16 0;
+#X connect 16 0 1 0;
+#X connect 16 0 11 0;
+#X restore 24 257 pd shader;
+#X obj 53 234 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 506 468 translateXYZ 0 0 -4;
+#X obj 506 610 square 4;
+#X obj 261 477 translateXYZ 0 0 -4;
+#X obj 290 368 loadbang;
+#N canvas 1062 27 528 709 shader 0;
+#X obj 32 384 glsl_program;
+#X obj 32 36 inlet;
+#X obj 32 453 outlet;
+#X obj 155 18 inlet;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 113 408 pd init_shader;
+#X obj 278 25 inlet;
+#X obj 113 438 outlet;
+#X obj 126 247 change;
+#X obj 126 323 print linking;
+#X obj 32 227 glsl_fragment;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 1;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 148 49 pd load_shader;
+#X obj 32 137 glsl_vertex;
+#X obj 94 74 t b b;
+#X obj 126 272 pack f f;
+#X msg 126 296 link \$1 \$2;
+#X msg 42 113 open link.vert;
+#X msg 42 203 open link.frag;
+#X connect 0 0 2 0;
+#X connect 0 1 4 0;
+#X connect 1 0 11 0;
+#X connect 3 0 12 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X connect 7 0 13 0;
+#X connect 9 0 0 0;
+#X connect 9 1 7 0;
+#X connect 10 0 12 0;
+#X connect 11 0 9 0;
+#X connect 11 1 13 1;
+#X connect 12 0 16 0;
+#X connect 12 1 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 8 0;
+#X connect 14 0 0 0;
+#X connect 15 0 11 0;
+#X connect 16 0 9 0;
+#X restore 261 256 pd shader;
+#X obj 292 231 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 280 539 loadbang;
+#X obj 119 448 s texture_mass;
+#X obj 359 444 s texture_link;
+#X obj 530 373 loadbang;
+#X msg 530 394 texunit 2;
+#X msg 286 390 texunit 3;
+#X obj 601 440 s texture_mass2;
+#X obj 321 229 r shader_link;
+#X obj 321 277 s init_shader_link;
+#X obj 261 612 square 4;
+#X obj 613 34 inlet;
+#X obj 24 201 gemhead 2;
+#X obj 261 185 gemhead 11;
+#X obj 506 236 gemhead 21;
+#X msg 41 561 rectangle 1 \, quality 0;
+#X msg 280 560 rectangle 1 \, quality 0;
+#X obj 615 58 t b b;
+#X obj 658 36 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 621 113 s init_shader_link;
+#X obj 84 233 r shader_mass;
+#X obj 84 281 s init_shader_mass;
+#X obj 601 140 s init_shader_mass;
+#X obj 261 589 pix_texture;
+#X obj 261 418 gemframebuffer;
+#X obj 24 588 pix_texture;
+#X obj 24 425 gemframebuffer;
+#X obj 65 310 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 506 418 gemframebuffer;
+#X obj 524 513 loadbang;
+#X msg 524 532 rectangle 1 \, quality 0;
+#X obj 506 588 pix_texture;
+#X obj 580 565 r texture_mass;
+#X obj 103 260 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 341 251 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 616 79 delay 500;
+#N canvas 0 0 446 324 init_fb 0;
+#X msg 100 173 type BYTE;
+#X msg 78 151 format RGB32;
+#X obj 46 121 t b b;
+#X obj 78 261 t a;
+#X obj 78 285 outlet;
+#X msg 137 215 rectangle 1;
+#X msg 46 196 dimen 128 128;
+#X obj 46 11 inlet;
+#X msg 137 42 0;
+#X obj 46 49 spigot 1;
+#X obj 46 72 t a b;
+#X connect 0 0 3 0;
+#X connect 1 0 3 0;
+#X connect 2 0 6 0;
+#X connect 2 1 1 0;
+#X connect 2 1 0 0;
+#X connect 2 1 5 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
+#X connect 7 0 9 0;
+#X connect 8 0 9 1;
+#X connect 9 0 10 0;
+#X connect 10 0 2 0;
+#X connect 10 1 8 0;
+#X restore 56 337 pd init_fb;
+#X obj 24 306 t a b;
+#X obj 302 300 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 450 300 init_fb 0;
+#X msg 100 153 type BYTE;
+#X msg 78 131 format RGB32;
+#X obj 46 101 t b b;
+#X obj 78 241 t a;
+#X obj 78 265 outlet;
+#X msg 137 195 rectangle 1;
+#X msg 46 176 dimen 128 128;
+#X obj 46 11 inlet;
+#X msg 137 42 0;
+#X obj 46 49 spigot 1;
+#X obj 46 72 t a b;
+#X connect 0 0 3 0;
+#X connect 1 0 3 0;
+#X connect 2 0 6 0;
+#X connect 2 1 1 0;
+#X connect 2 1 0 0;
+#X connect 2 1 5 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
+#X connect 7 0 9 0;
+#X connect 8 0 9 1;
+#X connect 9 0 10 0;
+#X connect 10 0 2 0;
+#X connect 10 1 8 0;
+#X restore 293 327 pd init_fb;
+#X obj 261 296 t a b;
+#X obj 547 298 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 450 300 init_fb 0;
+#X msg 100 153 type BYTE;
+#X msg 78 131 format RGB32;
+#X obj 46 101 t b b;
+#X obj 78 241 t a;
+#X obj 78 265 outlet;
+#X msg 137 195 rectangle 1;
+#X msg 46 176 dimen 128 128;
+#X obj 46 11 inlet;
+#X msg 137 42 0;
+#X obj 46 49 spigot 1;
+#X obj 46 72 t a b;
+#X connect 0 0 3 0;
+#X connect 1 0 3 0;
+#X connect 2 0 6 0;
+#X connect 2 1 1 0;
+#X connect 2 1 0 0;
+#X connect 2 1 5 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
+#X connect 7 0 9 0;
+#X connect 8 0 9 1;
+#X connect 9 0 10 0;
+#X connect 10 0 2 0;
+#X connect 10 1 8 0;
+#X restore 538 325 pd init_fb;
+#X obj 506 294 t a b;
+#X obj 32 29 gemhead 2;
+#X msg 271 106 0;
+#X obj 271 82 loadbang;
+#X msg 33 59 20;
+#X obj 32 90 until;
+#X obj 44 540 loadbang;
+#X msg 804 378 init \$1;
+#X floatatom 804 360 5 0 1 0 - - -;
+#X obj 762 371 t b;
+#X obj 762 254 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 762 407 texture_link 3;
+#X msg 804 338 1;
+#X msg 950 229 gravite \$1;
+#X floatatom 948 189 5 0 0 0 - - -;
+#X floatatom 1012 190 5 0 0 0 - - -;
+#X msg 1012 206 D \$1;
+#X msg 1063 208 K1 \$1;
+#X floatatom 1062 189 5 0 0 0 - - -;
+#X obj 948 207 / 100;
+#X obj 950 251 t a;
+#X obj 950 526 s shader_link;
+#X obj 952 90 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 952 70 r init_shader_link;
+#X obj 950 146 t b;
+#X obj 952 127 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 1059 168 0.05;
+#X msg 950 169 -0.0025;
+#X msg 1009 170 0.004;
+#X obj 842 314 delay 1000;
+#X msg 842 337 0;
+#X obj 762 454 s shader_mass;
+#X obj 762 225 r init_shader_mass;
+#X obj 804 286 t b;
+#X msg 992 362 init \$1;
+#X floatatom 992 344 5 0 1 0 - - -;
+#X msg 992 322 1;
+#X obj 1030 298 delay 1000;
+#X msg 1030 321 0;
+#X obj 991 270 t b;
+#X msg 1049 470 texture_mass 1;
+#X msg 1040 496 texture_mass_old 2;
+#X obj 1040 419 t b;
+#X msg 771 426 texture_mass_old 2;
+#X msg 1071 391 N \$1;
+#X msg 1071 367 0.01;
+#X msg 1121 368 0;
+#X obj 1078 340 delay 100;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 31 0;
+#X connect 3 0 39 0;
+#X connect 5 0 40 0;
+#X connect 6 0 5 0;
+#X connect 7 0 51 0;
+#X connect 7 1 35 0;
+#X connect 8 0 7 1;
+#X connect 9 0 45 0;
+#X connect 11 0 37 0;
+#X connect 12 0 20 0;
+#X connect 13 0 54 0;
+#X connect 13 1 23 0;
+#X connect 14 0 13 1;
+#X connect 15 0 30 0;
+#X connect 18 0 19 0;
+#X connect 19 0 42 0;
+#X connect 20 0 38 0;
+#X connect 22 0 13 2;
+#X connect 25 0 31 0;
+#X connect 26 0 7 0;
+#X connect 27 0 13 0;
+#X connect 28 0 57 0;
+#X connect 29 0 39 0;
+#X connect 30 0 37 0;
+#X connect 31 0 49 0;
+#X connect 31 1 8 0;
+#X connect 31 1 14 0;
+#X connect 32 0 31 0;
+#X connect 34 0 7 2;
+#X connect 37 0 24 0;
+#X connect 38 0 11 0;
+#X connect 38 1 17 0;
+#X connect 38 1 37 1;
+#X connect 39 0 4 0;
+#X connect 40 0 3 0;
+#X connect 40 1 16 0;
+#X connect 40 1 39 1;
+#X connect 41 0 50 0;
+#X connect 42 0 9 0;
+#X connect 42 1 21 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 45 0 10 0;
+#X connect 46 0 45 1;
+#X connect 47 0 35 0;
+#X connect 48 0 23 0;
+#X connect 49 0 33 0;
+#X connect 49 0 36 0;
+#X connect 50 0 40 0;
+#X connect 51 0 40 0;
+#X connect 51 1 50 0;
+#X connect 52 0 53 0;
+#X connect 53 0 38 0;
+#X connect 54 0 38 0;
+#X connect 54 1 53 0;
+#X connect 55 0 56 0;
+#X connect 56 0 42 0;
+#X connect 57 0 42 0;
+#X connect 57 1 56 0;
+#X connect 58 0 61 0;
+#X connect 59 0 26 0;
+#X connect 59 0 27 0;
+#X connect 59 0 28 0;
+#X connect 60 0 59 0;
+#X connect 61 0 62 0;
+#X connect 62 0 26 0;
+#X connect 62 0 27 0;
+#X connect 62 0 28 0;
+#X connect 63 0 29 0;
+#X connect 64 0 88 0;
+#X connect 65 0 64 0;
+#X connect 66 0 68 0;
+#X connect 66 0 100 0;
+#X connect 67 0 66 0;
+#X connect 67 0 90 0;
+#X connect 68 0 88 0;
+#X connect 69 0 65 0;
+#X connect 70 0 77 0;
+#X connect 71 0 76 0;
+#X connect 72 0 73 0;
+#X connect 73 0 77 0;
+#X connect 74 0 77 0;
+#X connect 75 0 74 0;
+#X connect 76 0 70 0;
+#X connect 77 0 78 0;
+#X connect 79 0 82 0;
+#X connect 79 0 96 0;
+#X connect 80 0 79 0;
+#X connect 81 0 84 0;
+#X connect 81 0 85 0;
+#X connect 81 0 83 0;
+#X connect 82 0 81 0;
+#X connect 83 0 75 0;
+#X connect 84 0 71 0;
+#X connect 85 0 72 0;
+#X connect 86 0 87 0;
+#X connect 87 0 65 0;
+#X connect 89 0 67 0;
+#X connect 90 0 69 0;
+#X connect 90 0 86 0;
+#X connect 91 0 78 0;
+#X connect 92 0 91 0;
+#X connect 93 0 92 0;
+#X connect 94 0 95 0;
+#X connect 94 0 102 0;
+#X connect 94 0 104 0;
+#X connect 95 0 92 0;
+#X connect 96 0 93 0;
+#X connect 96 0 94 0;
+#X connect 96 0 99 0;
+#X connect 97 0 78 0;
+#X connect 98 0 78 0;
+#X connect 99 0 97 0;
+#X connect 99 0 98 0;
+#X connect 100 0 88 0;
+#X connect 101 0 78 0;
+#X connect 102 0 101 0;
+#X connect 103 0 101 0;
+#X connect 104 0 103 0;
+#X restore 27 323 pd shaders_PM _________________;
+#N canvas 267 495 450 300 config 0;
+#X msg 16 75 W \$1;
+#X floatatom 225 101 5 0 0 0 - - -;
+#X msg 225 120 f \$1;
+#X obj 133 155 t a;
+#X msg 133 83 N \$1;
+#X text 141 101 bruit;
+#X obj 16 53 / 11000;
+#X obj 225 78 + 5;
+#X obj 225 55 * 5;
+#X obj 133 61 / 5000;
+#X msg 338 120 t \$1;
+#X obj 338 31 gemhead 77;
+#X obj 338 56 t b;
+#X obj 338 79 f;
+#X obj 338 99 + 0.3;
+#X obj 338 141 s shader_link;
+#X obj 133 181 s shader_link;
+#X obj 16 29 r oscillation1;
+#X obj 133 31 r qqt_noise;
+#X obj 225 31 r force_wind;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 16 0;
+#X connect 4 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 8 0 7 0;
+#X connect 9 0 4 0;
+#X connect 10 0 15 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 13 1;
+#X connect 14 0 10 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 8 0;
+#X restore 27 361 pd config _____________________;
+#N canvas 0 0 450 300 render 0;
+#X obj 43 137 pix_texture;
+#X obj 43 181 square 4;
+#X obj 43 115 gemhead 66;
+#X obj 241 120 != 0;
+#X obj 210 119 == 0;
+#X obj 133 58 r texture_link;
+#X obj 146 77 r texture_interpol;
+#X obj 210 146 s aff_drapeau;
+#X obj 120 39 r texture_mass;
+#X msg 43 94 0;
+#X obj 43 73 loadbang;
+#N canvas 0 0 656 297 spigot4 0;
+#X obj 40 21 inlet;
+#X obj 458 22 inlet;
+#X obj 40 179 outlet;
+#X obj 113 24 inlet;
+#X obj 112 91 spigot 0;
+#X obj 196 24 inlet;
+#X obj 195 91 spigot 0;
+#X obj 86 68 == 1;
+#X obj 159 71 == 2;
+#X obj 240 71 == 3;
+#X obj 40 88 spigot 0;
+#X obj 283 29 inlet;
+#X obj 282 96 spigot 0;
+#X obj 327 76 == 4;
+#X obj 361 32 inlet;
+#X obj 360 99 spigot 0;
+#X obj 405 79 == 5;
+#X connect 0 0 10 0;
+#X connect 1 0 7 0;
+#X connect 1 0 8 0;
+#X connect 1 0 9 0;
+#X connect 1 0 13 0;
+#X connect 1 0 16 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 2 0;
+#X connect 7 0 10 1;
+#X connect 8 0 4 1;
+#X connect 9 0 6 1;
+#X connect 10 0 2 0;
+#X connect 11 0 12 0;
+#X connect 12 0 2 0;
+#X connect 13 0 12 1;
+#X connect 14 0 15 0;
+#X connect 15 0 2 0;
+#X connect 16 0 15 1;
+#X restore 120 115 pd spigot4;
+#X obj 160 96 r texture_normal;
+#X obj 43 160 translateXYZ 0 0 -40;
+#X obj 240 27 f;
+#X obj 238 5 inlet;
+#X connect 0 0 13 0;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 4 0 7 0;
+#X connect 5 0 11 1;
+#X connect 6 0 11 2;
+#X connect 8 0 11 0;
+#X connect 9 0 2 0;
+#X connect 10 0 9 0;
+#X connect 11 0 0 1;
+#X connect 12 0 11 3;
+#X connect 13 0 1 0;
+#X connect 14 0 3 0;
+#X connect 14 0 4 0;
+#X connect 14 0 11 5;
+#X connect 15 0 14 0;
+#X restore 27 398 pd render _____________________;
+#X text 288 6 Made by Cyrille Henry 2008 10 24;
+#N canvas 452 305 812 549 shader_render 0;
+#X obj 315 429 pix_texture;
+#X obj 67 256 gemframebuffer;
+#X obj 67 443 pix_texture;
+#X obj 67 305 translateXYZ 0 0 -4;
+#X obj 67 462 square 4;
+#X obj 85 369 loadbang;
+#N canvas 224 312 1052 398 init 0;
+#X obj 14 130 outlet;
+#X obj 14 30 inlet;
+#X obj 14 53 spigot 1;
+#X obj 31 81 t b;
+#X msg 67 31 0;
+#X msg 14 104 rectangle 1 \, type BYTE \, format RGB32 \, dim 256 256
+;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 1;
+#X connect 5 0 0 0;
+#X restore 99 223 pd init;
+#N canvas 573 206 496 427 shader 0;
+#X obj 32 264 glsl_program;
+#X obj 126 187 change;
+#X obj 126 233 print linking;
+#X obj 32 167 glsl_fragment;
+#X msg 126 208 link \$1;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 30;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 120 89 pd load_shader;
+#X obj 32 36 inlet;
+#X obj 32 333 outlet;
+#X obj 155 18 inlet;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 113 288 pd init_shader;
+#X obj 278 25 inlet;
+#X obj 113 318 outlet;
+#X msg 43 143 open interpol.frag;
+#X msg 135 265 set -1;
+#X connect 0 0 7 0;
+#X connect 0 1 9 0;
+#X connect 1 0 4 0;
+#X connect 3 0 0 0;
+#X connect 3 1 1 0;
+#X connect 4 0 0 0;
+#X connect 4 0 2 0;
+#X connect 5 0 12 0;
+#X connect 6 0 3 0;
+#X connect 8 0 12 0;
+#X connect 8 0 13 0;
+#X connect 9 0 11 0;
+#X connect 10 0 0 0;
+#X connect 12 0 3 0;
+#X connect 13 0 9 0;
+#X restore 67 175 pd shader;
+#X obj 92 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 146 134 t b;
+#X msg 146 155 texture_mass 1;
+#N canvas 668 405 301 465 shader 0;
+#X obj 110 298 pack 0 0;
+#X obj 131 278 t b f;
+#X msg 110 321 link \$1 \$2;
+#X floatatom 131 259 2 0 0 0 ID - -;
+#X floatatom 110 158 2 0 0 0 ID - -;
+#X obj 128 342 print linking;
+#X obj 74 70 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 38 213 glsl_fragment;
+#X obj 38 116 glsl_vertex;
+#X obj 110 135 change;
+#X obj 131 233 change;
+#X obj 38 371 glsl_program;
+#N canvas 703 231 450 300 load_glsl 0;
+#X obj 51 22 gemhead;
+#X obj 51 98 outlet;
+#X obj 51 50 route gem_state;
+#X obj 51 74 route 1;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X restore 74 45 pd load_glsl;
+#X obj 41 13 inlet;
+#X obj 37 397 outlet;
+#X obj 150 10 inlet;
+#X obj 265 14 inlet;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 107 399 pd init_shader;
+#X obj 107 429 outlet;
+#X msg 52 94 open fetching2.vert;
+#X msg 48 183 open fetching2.frag;
+#X msg 132 373 set -1;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 5 0;
+#X connect 2 0 11 0;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 19 0;
+#X connect 6 0 20 0;
+#X connect 7 0 11 0;
+#X connect 7 1 10 0;
+#X connect 8 0 7 0;
+#X connect 8 1 9 0;
+#X connect 9 0 4 0;
+#X connect 10 0 3 0;
+#X connect 11 0 14 0;
+#X connect 11 1 17 0;
+#X connect 12 0 6 0;
+#X connect 13 0 8 0;
+#X connect 15 0 6 0;
+#X connect 15 0 21 0;
+#X connect 16 0 11 0;
+#X connect 17 0 18 0;
+#X connect 19 0 8 0;
+#X connect 20 0 7 0;
+#X connect 21 0 17 0;
+#X restore 315 208 pd shader;
+#X obj 345 185 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 387 229 t b;
+#X obj 315 116 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 147 114 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 163 278 s texture_interpol;
+#X obj 315 96 r aff_drapeau;
+#X obj 67 102 gemhead 31;
+#X obj 315 135 gemhead 51;
+#X obj 410 25 inlet;
+#X obj 410 156 delay 1000;
+#X obj 315 461 mesh_square 92 64;
+#X obj 315 156 alpha;
+#X obj 315 316 scaleXYZ 15 15 15;
+#X obj 315 286 translateXYZ 0 0.55 -8;
+#X msg 327 399 quality 0;
+#X msg 521 258 draw line;
+#X msg 521 238 draw default;
+#X msg 522 279 draw point;
+#X floatatom 485 203 5 0 0 0 - - -;
+#X obj 485 28 inlet;
+#X obj 327 365 loadbang;
+#X obj 67 198 t a b;
+#X msg 410 185 texture 4;
+#X msg 85 396 rectangle 1 \, quality 0;
+#X obj 637 140 loadbang;
+#X msg 637 162 15;
+#X obj 637 184 s \$0-scale;
+#X connect 0 0 22 0;
+#X connect 1 0 3 0;
+#X connect 1 1 0 1;
+#X connect 1 1 2 1;
+#X connect 1 1 16 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 35 0;
+#X connect 6 0 1 0;
+#X connect 7 0 33 0;
+#X connect 7 1 15 0;
+#X connect 8 0 7 1;
+#X connect 9 0 10 0;
+#X connect 10 0 7 2;
+#X connect 11 0 25 0;
+#X connect 11 1 13 0;
+#X connect 12 0 11 1;
+#X connect 13 0 34 0;
+#X connect 14 0 19 0;
+#X connect 15 0 9 0;
+#X connect 17 0 14 0;
+#X connect 18 0 7 0;
+#X connect 19 0 23 0;
+#X connect 20 0 21 0;
+#X connect 20 0 12 0;
+#X connect 20 0 8 0;
+#X connect 21 0 34 0;
+#X connect 23 0 11 0;
+#X connect 24 0 0 0;
+#X connect 25 0 24 0;
+#X connect 26 0 0 0;
+#X connect 27 0 22 0;
+#X connect 28 0 22 0;
+#X connect 29 0 22 0;
+#X connect 30 0 24 1;
+#X connect 30 0 24 2;
+#X connect 30 0 24 3;
+#X connect 31 0 30 0;
+#X connect 32 0 26 0;
+#X connect 33 0 1 0;
+#X connect 33 1 6 0;
+#X connect 34 0 11 2;
+#X connect 35 0 2 0;
+#X connect 36 0 37 0;
+#X connect 37 0 38 0;
+#X restore 27 304 pd shader_render ______________;
+#X text 12 6 "Potential Flag" \, by Samuel Bianchini;
+#X floatatom 606 304 5 0 0 0 - - -;
+#X obj 606 324 * 10;
+#N canvas 830 53 450 300 Gem.init 0;
+#X obj 26 3 loadbang;
+#X msg 26 26 perspec -1 1 -1 1 10 100;
+#X obj 26 124 t a;
+#X obj 25 153 outlet;
+#X msg 55 77 dimen 800 600;
+#X msg 37 51 FSAA 5;
+#X connect 0 0 1 0;
+#X connect 0 0 5 0;
+#X connect 0 0 4 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
+#X connect 5 0 2 0;
+#X restore 66 188 pd Gem.init;
+#N canvas 341 104 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 1 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X obj 318 255 gemwin 30;
+#X msg 441 219 color 0.2 0.3 0.5;
+#X msg 443 257 dimen 1024 768;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 0;
+#X connect 7 0 17 0;
+#X connect 7 1 9 0;
+#X connect 9 0 10 0;
+#X connect 9 1 12 0;
+#X connect 10 0 11 0;
+#X connect 11 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 0 0;
+#X connect 17 0 8 0;
+#X connect 18 0 17 0;
+#X connect 19 0 17 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 47 209 pd gemwin 30;
+#X floatatom 210 282 5 0 0 0 scale-> #0-scale -;
+#X obj 6 325 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#N canvas 290 239 395 502 shader_normal 0;
+#X obj 51 233 gemframebuffer;
+#X obj 51 347 pix_texture;
+#X obj 51 276 translateXYZ 0 0 -4;
+#X obj 51 366 square 4;
+#X obj 67 304 loadbang;
+#N canvas 0 0 1052 398 init 0;
+#X obj 14 140 outlet;
+#X obj 14 30 inlet;
+#X obj 14 55 spigot 1;
+#X obj 24 76 b;
+#X msg 67 31 0;
+#X msg 14 114 rectangle 1 \, type BYTE \, format RGB32 \, dim 128 128
+;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 1;
+#X connect 5 0 0 0;
+#X restore 83 160 pd init;
+#N canvas 555 24 496 709 shader 0;
+#X obj 32 474 glsl_program;
+#X obj 126 357 change;
+#X obj 126 443 print linking;
+#X obj 32 337 glsl_fragment;
+#N canvas 0 0 450 300 load_shader 0;
+#X obj 89 99 t b b;
+#X msg 119 126 0;
+#X obj 89 154 outlet;
+#X obj 89 71 gemhead 30;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X restore 134 96 pd load_shader;
+#X obj 32 36 inlet;
+#X obj 32 543 outlet;
+#X obj 175 28 inlet;
+#N canvas 0 0 450 300 init_shader 0;
+#X obj 89 154 outlet;
+#X obj 89 45 inlet;
+#X obj 89 73 change;
+#X obj 89 100 t b;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X restore 113 498 pd init_shader;
+#X obj 278 25 inlet;
+#X obj 113 528 outlet;
+#X msg 43 313 open normal.frag;
+#X obj 32 185 glsl_vertex;
+#X obj 96 122 t b b;
+#X obj 126 393 pack f f;
+#X msg 126 418 link \$1 \$2;
+#X msg 42 161 open normal.vert;
+#X connect 0 0 6 0;
+#X connect 0 1 8 0;
+#X connect 1 0 14 0;
+#X connect 3 0 0 0;
+#X connect 3 1 1 0;
+#X connect 4 0 13 0;
+#X connect 5 0 12 0;
+#X connect 7 0 13 0;
+#X connect 8 0 10 0;
+#X connect 9 0 0 0;
+#X connect 11 0 3 0;
+#X connect 12 0 3 0;
+#X connect 12 1 14 1;
+#X connect 13 0 11 0;
+#X connect 13 1 16 0;
+#X connect 14 0 15 0;
+#X connect 15 0 0 0;
+#X connect 15 0 2 0;
+#X connect 16 0 12 0;
+#X restore 51 112 pd shader;
+#X obj 76 93 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 143 65 t b;
+#X obj 146 45 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 157 252 s texture_normal;
+#X obj 51 39 gemhead 32;
+#X obj 78 189 loadbang;
+#X msg 78 208 texunit 4;
+#X msg 141 88 texture_mass 1;
+#X obj 51 136 t a b;
+#X msg 67 323 rectangle 1 \, quality 1;
+#X connect 0 0 2 0;
+#X connect 0 1 10 0;
+#X connect 0 1 1 1;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 4 0 16 0;
+#X connect 5 0 0 0;
+#X connect 6 0 15 0;
+#X connect 6 1 9 0;
+#X connect 7 0 6 1;
+#X connect 8 0 14 0;
+#X connect 9 0 8 0;
+#X connect 11 0 6 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 6 2;
+#X connect 15 0 0 0;
+#X connect 15 1 5 0;
+#X connect 16 0 1 0;
+#X restore 27 342 pd shader_normal ______________;
+#X obj 6 304 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#N canvas 1468 153 767 700 \$0-pad 0;
+#X msg 158 309 clear;
+#N canvas 6 50 590 367 clear-all 0;
+#X obj 89 46 inlet;
+#X obj 89 122 s pd-\$0-work;
+#X msg 89 99 clear;
+#X obj 89 72 t b;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X restore 158 331 pd clear-all;
+#X obj 92 646 outlet;
+#X obj 72 171 loadbang;
+#X obj 191 411 metro 50;
+#N canvas 581 163 695 660 pointer-parser 0;
+#X obj 129 165 pointer;
+#X text 276 46 from metro;
+#X obj 282 346 t b f;
+#X obj 117 49 inlet;
+#X obj 237 48 inlet;
+#X obj 129 541 outlet;
+#X obj 129 398 pack 0 0;
+#X obj 129 193 get \$0-xy-pad-knob-1 x0 y0;
+#X obj 129 320 change -1;
+#X obj 282 325 change -1;
+#X obj 129 238 / 90;
+#X obj 282 236 / 90;
+#X obj 129 420 unpack 0 0;
+#X obj 129 442 * 2;
+#X obj 129 464 - 1;
+#X obj 129 516 pack;
+#X obj 169 442 * 2;
+#X obj 169 464 - 1;
+#X obj 384 202 set \$0-xy-pad-knob-1 x0 y0;
+#X obj 384 43 inlet set;
+#X obj 384 65 unpack;
+#X text 432 67 -1..+1;
+#X obj 384 112 + 1;
+#X obj 384 134 / 2;
+#X obj 384 156 * 90;
+#X obj 424 112 + 1;
+#X obj 424 134 / 2;
+#X floatatom 173 241 5 0 0 0 - - -;
+#X obj 424 156 * 90;
+#X connect 0 0 18 2;
+#X connect 0 0 7 0;
+#X connect 2 0 6 0;
+#X connect 2 1 6 1;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X connect 6 0 12 0;
+#X connect 7 0 10 0;
+#X connect 7 0 27 0;
+#X connect 7 1 11 0;
+#X connect 8 0 6 0;
+#X connect 9 0 2 0;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 12 0 13 0;
+#X connect 12 1 16 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 5 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 1;
+#X connect 19 0 20 0;
+#X connect 20 0 22 0;
+#X connect 20 1 25 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 18 0;
+#X connect 25 0 26 0;
+#X connect 26 0 28 0;
+#X connect 28 0 18 1;
+#X restore 72 448 pd pointer-parser;
+#N canvas 419 563 751 371 add-controller 0;
+#X msg 520 189 traverse \$1 \, bang;
+#X obj 520 216 pointer;
+#X obj 405 322 outlet;
+#X obj 405 21 inlet;
+#X obj 405 50 t f b;
+#X obj 520 132 symbol pd-\$0-work;
+#X obj 405 285 append \$0-xy-pad-knob-1 x0 y0 id;
+#X obj 23 35 struct \$0-xy-pad-knob-1 float x0 float y0 float id;
+#X obj 22 81 filledpolygon id 999 1 x0(0:90)(0:90) y0(0:90)(0:90) x0(0:90)(10:100)
+y0(0:90)(0:90) x0(0:90)(10:100) y0(0:90)(10:100) x0(0:90)(0:90) y0(0:90)(10:100)
+;
+#X msg 405 261 45 45 \$1;
+#X connect 0 0 1 0;
+#X connect 1 0 6 3;
+#X connect 3 0 4 0;
+#X connect 4 0 9 0;
+#X connect 4 1 5 0;
+#X connect 5 0 0 0;
+#X connect 6 0 2 0;
+#X connect 9 0 6 0;
+#X restore 72 379 pd add-controller;
+#X obj 192 391 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X msg 193 370 1;
+#X obj 72 303 t f b b;
+#X text 111 233 5/10 red;
+#X text 111 248 3/10 green;
+#X text 111 263 2/10 blue;
+#X text 522 76 (c) 2010 Thomas Musil;
+#X text 521 58 (c) -2010 Frank Barknecht;
+#X msg 72 233 900;
+#X obj 162 646 outlet;
+#X text 486 42 based on: xy-pad;
+#N canvas 1444 366 450 300 xy2rphi 0;
+#X obj 46 35 inlet x y;
+#X obj 46 272 outlet r;
+#X obj 136 266 outlet phi;
+#X text 244 77 r=sqrt(x^2+y^2);
+#X text 246 97 phi=atan2(y \, x);
+#X obj 102 106 t f f f;
+#X obj 102 129 *;
+#X obj 46 169 +;
+#X obj 46 106 t f f f;
+#X obj 46 129 *;
+#X obj 46 201 sqrt;
+#X obj 136 157 pack;
+#X obj 136 196 atan2;
+#X msg 136 177 \$2 \$1;
+#X obj 46 61 unpack 0 0;
+#X text 147 282 in rad;
+#X connect 0 0 14 0;
+#X connect 5 0 6 0;
+#X connect 5 1 6 1;
+#X connect 5 2 11 1;
+#X connect 6 0 7 1;
+#X connect 7 0 10 0;
+#X connect 8 0 9 0;
+#X connect 8 1 9 1;
+#X connect 8 2 11 0;
+#X connect 9 0 7 0;
+#X connect 10 0 1 0;
+#X connect 11 0 13 0;
+#X connect 12 0 2 0;
+#X connect 13 0 12 0;
+#X connect 14 0 8 0;
+#X connect 14 1 5 0;
+#X restore 394 485 pd xy2rphi;
+#X obj 92 530 t l l;
+#X obj 92 552 unpack 0 0;
+#X obj 387 102 inlet r;
+#X obj 456 103 inlet phi;
+#X obj 444 333 t f f;
+#X obj 444 357 cos;
+#X obj 387 354 t f f;
+#X obj 387 390 * 1;
+#X obj 417 389 * 0;
+#X obj 387 277 unpack 0 0;
+#X obj 387 254 pack;
+#X obj 456 225 t b f;
+#X obj 471 356 sin;
+#X obj 387 412 pack;
+#X obj 387 204 t f;
+#X obj 387 226 clip 0 1;
+#X obj 304 74 cnv 10 12 12 empty empty empty 20 12 0 14 -99865 -66577
+0;
+#N canvas 493 264 450 300 \$0-work 0;
+#X scalar 1002-xy-pad-knob-1 71.2205 45 900 \;;
+#X coords 0 100 100 0 100 100 1;
+#X restore 260 30 pd \$0-work;
+#X obj 451 532 wrap;
+#X obj 72 193 t b b;
+#X obj 608 163 atan2;
+#X msg 608 138 1 0;
+#X obj 608 185 * 4;
+#X obj 608 207 t f f;
+#X obj 378 612 s \$0-force;
+#X obj 451 632 s \$0-direction;
+#X msg 451 554 set \$1;
+#X msg 378 564 set \$1;
+#X obj 451 507 / 6.28;
+#X obj 444 309 * -6.28;
+#X obj 394 507 t f f;
+#X obj 337 537 s force_wind;
+#X obj 160 611 * -1;
+#X connect 0 0 1 0;
+#X connect 3 0 38 0;
+#X connect 4 0 5 1;
+#X connect 5 0 19 0;
+#X connect 6 0 5 0;
+#X connect 7 0 4 0;
+#X connect 8 0 7 0;
+#X connect 9 0 6 0;
+#X connect 9 1 8 0;
+#X connect 9 2 0 0;
+#X connect 15 0 9 0;
+#X connect 18 0 49 0;
+#X connect 18 1 47 0;
+#X connect 19 0 20 0;
+#X connect 19 1 18 0;
+#X connect 20 0 2 0;
+#X connect 20 1 51 0;
+#X connect 21 0 33 0;
+#X connect 22 0 30 0;
+#X connect 23 0 24 0;
+#X connect 23 1 31 0;
+#X connect 24 0 26 1;
+#X connect 25 0 26 0;
+#X connect 25 1 27 0;
+#X connect 26 0 32 0;
+#X connect 27 0 32 1;
+#X connect 28 0 25 0;
+#X connect 28 1 48 0;
+#X connect 29 0 28 0;
+#X connect 30 0 29 0;
+#X connect 30 1 29 1;
+#X connect 31 0 27 1;
+#X connect 32 0 5 2;
+#X connect 33 0 34 0;
+#X connect 34 0 29 0;
+#X connect 37 0 45 0;
+#X connect 38 0 15 0;
+#X connect 38 1 40 0;
+#X connect 39 0 41 0;
+#X connect 40 0 39 0;
+#X connect 41 0 42 0;
+#X connect 42 0 48 1;
+#X connect 42 1 47 1;
+#X connect 45 0 44 0;
+#X connect 46 0 43 0;
+#X connect 47 0 37 0;
+#X connect 48 0 23 0;
+#X connect 49 0 50 0;
+#X connect 49 1 46 0;
+#X connect 51 0 16 0;
+#X coords 0 -1 1 1 100 100 2 260 30;
+#X restore 445 290 pd \$0-pad;
+#X obj 445 151 vsl 15 128 0 1 0 0 empty \$0-force force 0 -9 0 10 -262144
+-1 -1 7400 1;
+#X obj 538 152 vsl 15 128 0 1 0 0 empty \$0-direction direction 0 -9
+0 10 -262144 -1 -1 0 1;
+#N canvas 424 571 337 368 wind-control. 0;
+#X obj 41 82 pack f f;
+#X msg 41 104 wind \$1 \$2;
+#X obj 41 126 s shader_link;
+#X obj 41 30 inlet;
+#X obj 105 32 inlet;
+#X obj 181 304 s oscillation1;
+#X obj 41 58 / 11000;
+#X obj 105 58 / 11000;
+#X obj 181 187 *;
+#X obj 181 164 t f f;
+#X obj 181 212 +;
+#X obj 181 236 sqrt;
+#X obj 231 187 *;
+#X obj 231 164 t f f;
+#X obj 181 259 * 600;
+#X obj 181 281 min 300;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 3 0 6 0;
+#X connect 3 0 9 0;
+#X connect 4 0 7 0;
+#X connect 4 0 13 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 1;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 11 0 14 0;
+#X connect 12 0 10 1;
+#X connect 13 0 12 0;
+#X connect 13 1 12 1;
+#X connect 14 0 15 0;
+#X connect 15 0 5 0;
+#X restore 445 397 pd wind-control.;
+#X text 28 20 Simple version for Gem examples;
+#X text 29 34 Did work under Linux \, with Nvidia driver. I don't know
+on other OS/hardware.;
+#X text 29 72 This patch is quite huge. the GPU compute the position
+of 64x92 masses \, and 64x92x12 links at 50x20 Hz. (about 7e+07 links/sec
+\, so about 100 time faster than what is curently possible with MSD
+on a CPU) (My GPU is old \, this patch performs 10 to 50 times faster
+on a good GPU);
+#X obj 606 346 s qqt_noise;
+#X connect 0 0 5 0;
+#X connect 2 0 1 0;
+#X connect 9 0 10 0;
+#X connect 10 0 24 0;
+#X connect 11 0 12 0;
+#X connect 13 0 7 1;
+#X connect 14 0 3 0;
+#X connect 16 0 7 0;
+#X connect 17 0 20 0;
+#X connect 17 1 20 1;
+#X connect 18 0 17 0;
+#X connect 19 0 17 1;
diff --git a/Gem/examples/10.glsl/11.geometry.pd b/Gem/examples/10.glsl/11.geometry.pd
new file mode 100644
index 0000000..1851c8a
--- /dev/null
+++ b/Gem/examples/10.glsl/11.geometry.pd
@@ -0,0 +1,123 @@
+#N canvas 197 25 552 632 10;
+#X floatatom 132 447 9 0 0 0 ID - -;
+#X floatatom 132 279 9 0 0 0 ID - -;
+#X obj 150 506 print linking;
+#X obj 132 465 pack 0 0 0;
+#X floatatom 126 364 9 0 0 0 ID - -;
+#X obj 44 139 gemhead;
+#X msg 132 485 link \$1 \$2 \$3;
+#X obj 44 319 glsl_vertex;
+#X obj 44 403 glsl_fragment;
+#X obj 44 237 glsl_geometry;
+#X obj 44 158 alpha;
+#X floatatom 122 531 5 0 0 0 - - -;
+#X floatatom 164 531 5 0 0 0 - - -;
+#X floatatom 209 532 5 0 0 0 - - -;
+#X obj 44 512 glsl_program;
+#X msg 182 200 -1;
+#X obj 182 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 132 258 change;
+#X obj 126 341 change;
+#X obj 132 426 change;
+#X obj 44 552 translateXYZ 0 0 0;
+#X obj 44 197 colorRGB 1 1 1;
+#X floatatom 128 174 5 0 0 0 - - -;
+#X obj 44 177 depth 1;
+#X obj 44 576 circle;
+#X obj 182 176 t b b;
+#X text 184 7 geometry shader;
+#X text 48 28 The geometry shader is usefull to create new geometry
+;
+#X text 51 47 Here is an example where 40 circles are draw with 1 single
+primitive.;
+#X text 49 87 Be aware that the geometry shader is computed after the
+vertex shader. coordinate are in 2d.;
+#X msg 58 217 open geo.geom;
+#X msg 56 299 open geo.vert;
+#X msg 57 384 open geo.frag;
+#X obj 182 136 loadbang;
+#X text 205 155 load shaders;
+#N canvas 87 154 247 179 Gem.init 0;
+#X obj 118 46 loadbang;
+#X msg 118 81 reset;
+#X obj 118 113 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 366 247 pd Gem.init;
+#N canvas 340 107 682 322 gemwin 0;
+#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
+-1 -1 0 1;
+#X obj 102 161 r \$0-gemstart;
+#X obj 102 182 select 1 0;
+#X msg 102 214 create \, 1;
+#X msg 177 215 destroy;
+#X obj 102 239 t a;
+#X obj 318 54 inlet;
+#X obj 318 255 gemwin;
+#X obj 318 100 t a a;
+#X obj 318 287 outlet;
+#X obj 350 128 route create destroy;
+#X obj 350 150 t b;
+#X msg 350 172 1;
+#X obj 390 150 t b;
+#X msg 390 172 0;
+#X obj 350 195 t f;
+#X msg 350 219 set \$1;
+#X text 118 122 rendering;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X coords 0 -1 1 1 85 40 1 100 100;
+#X restore 336 264 pd gemwin;
+#X connect 0 0 3 0;
+#X connect 1 0 3 2;
+#X connect 3 0 6 0;
+#X connect 4 0 3 1;
+#X connect 5 0 10 0;
+#X connect 6 0 2 0;
+#X connect 6 0 14 0;
+#X connect 7 0 8 0;
+#X connect 7 1 18 0;
+#X connect 8 0 14 0;
+#X connect 8 1 19 0;
+#X connect 9 0 7 0;
+#X connect 9 1 17 0;
+#X connect 10 0 23 0;
+#X connect 11 0 20 1;
+#X connect 12 0 20 2;
+#X connect 13 0 20 3;
+#X connect 14 0 20 0;
+#X connect 15 0 19 0;
+#X connect 16 0 25 0;
+#X connect 17 0 1 0;
+#X connect 18 0 4 0;
+#X connect 19 0 0 0;
+#X connect 20 0 24 0;
+#X connect 21 0 9 0;
+#X connect 22 0 21 2;
+#X connect 23 0 21 0;
+#X connect 25 0 15 0;
+#X connect 25 1 32 0;
+#X connect 25 1 30 0;
+#X connect 25 1 31 0;
+#X connect 30 0 9 0;
+#X connect 31 0 7 0;
+#X connect 32 0 8 0;
+#X connect 33 0 16 0;
+#X connect 35 0 36 0;
diff --git a/Gem/examples/10.glsl/12.tri2fan.pd b/Gem/examples/10.glsl/12.tri2fan.pd
new file mode 100644
index 0000000..5437d4b
--- /dev/null
+++ b/Gem/examples/10.glsl/12.tri2fan.pd
@@ -0,0 +1,157 @@
+#N canvas 1775 56 785 745 10;
+#X floatatom 286 440 9 0 0 0 ID - -;
+#X floatatom 249 264 9 0 0 0 ID - -;
+#X obj 296 500 print linking;
+#X obj 286 458 pack 0 0 0;
+#X floatatom 244 350 9 0 0 0 ID - -;
+#X obj 161 78 gemhead;
+#X msg 286 479 link \$1 \$2 \$3;
+#X obj 161 151 alpha;
+#X floatatom 202 578 5 0 0 0 - - -;
+#X floatatom 244 578 5 0 0 0 - - -;
+#X floatatom 289 579 5 0 0 0 - - -;
+#X obj 161 526 glsl_program;
+#X obj 42 117 t b b b b;
+#X msg 42 147 -1;
+#X obj 42 98 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 249 242 change;
+#X obj 244 329 change;
+#X obj 286 419 change;
+#X obj 161 650 t a b;
+#X obj 209 650 loadbang;
+#X msg 340 672 2;
+#X obj 161 217 glsl_geometry;
+#X obj 161 307 glsl_vertex;
+#X obj 161 394 glsl_fragment;
+#X obj 42 76 loadbang;
+#X text 65 97 reload;
+#X msg 422 113 create \, 1;
+#X msg 431 135 destroy;
+#X obj 402 654 triangle;
+#X msg 473 202 lighting 1;
+#X obj 161 627 spigot 1;
+#X obj 230 628 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 470 633 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 402 631 spigot 0;
+#X msg 460 180 perspec -0.1 0.1 -0.1 0.1 1 110;
+#X obj 422 229 gemwin;
+#X obj 460 159 loadbang;
+#N canvas 0 0 877 520 light 0;
+#X obj 225 45 gemhead 10;
+#X floatatom 258 78 5 0 0 0 - - -;
+#X floatatom 299 77 5 0 0 0 - - -;
+#X floatatom 341 78 5 0 0 0 - - -;
+#X obj 225 227 world_light;
+#X obj 250 151 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X msg 250 172 debug \$1;
+#X obj 225 103 rotateXYZ 0 30 0;
+#X obj 27 51 gemhead 10;
+#X floatatom 60 84 5 0 0 0 - - -;
+#X floatatom 101 83 5 0 0 0 - - -;
+#X floatatom 143 84 5 0 0 0 - - -;
+#X obj 27 233 world_light;
+#X obj 48 158 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 48 179 debug \$1;
+#X obj 27 109 rotateXYZ 0 -90 0;
+#X msg 297 207 0.8 0.8 0.8;
+#X msg 100 210 0.7 0.7 0.7;
+#X obj 408 73 loadbang;
+#X connect 0 0 7 0;
+#X connect 1 0 7 1;
+#X connect 2 0 7 2;
+#X connect 3 0 7 3;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 7 0 4 0;
+#X connect 8 0 15 0;
+#X connect 9 0 15 1;
+#X connect 10 0 15 2;
+#X connect 11 0 15 3;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
+#X connect 15 0 12 0;
+#X connect 16 0 4 1;
+#X connect 17 0 12 1;
+#X connect 18 0 17 0;
+#X connect 18 0 16 0;
+#X restore 421 253 pd light;
+#X obj 161 595 rotateXYZ -55 20 0;
+#X floatatom 298 537 5 0 0 0 - - -;
+#X text 235 13 replace triangle with 3 triangles thoses orientation
+depend on the normal of the original primitive;
+#X obj 161 554 scaleXYZ 0.2 0.2 0.2;
+#X msg 172 129 auto 1;
+#X obj 172 108 loadbang;
+#X msg 176 195 open tri2fan.geom;
+#X msg 177 286 open tri2fan.vert;
+#X msg 178 370 open tri2fan.frag;
+#X obj 161 724 newWave 25 25;
+#X msg 209 671 D1 0.01 \, D2 0.1;
+#X floatatom 520 593 5 0 25 0 - - -;
+#X obj 552 635 pack f f;
+#X obj 520 611 t f f;
+#X msg 552 655 force \$1 \$2 0.3;
+#X connect 0 0 3 0;
+#X connect 1 0 3 2;
+#X connect 3 0 6 0;
+#X connect 4 0 3 1;
+#X connect 5 0 7 0;
+#X connect 6 0 2 0;
+#X connect 6 0 11 0;
+#X connect 7 0 21 0;
+#X connect 8 0 38 1;
+#X connect 9 0 38 2;
+#X connect 10 0 38 3;
+#X connect 11 0 41 0;
+#X connect 12 0 13 0;
+#X connect 12 1 46 0;
+#X connect 12 2 45 0;
+#X connect 12 3 44 0;
+#X connect 13 0 17 0;
+#X connect 14 0 12 0;
+#X connect 15 0 1 0;
+#X connect 16 0 4 0;
+#X connect 17 0 0 0;
+#X connect 18 0 47 0;
+#X connect 18 1 47 0;
+#X connect 19 0 48 0;
+#X connect 20 0 47 3;
+#X connect 21 0 22 0;
+#X connect 21 1 15 0;
+#X connect 22 0 23 0;
+#X connect 22 1 16 0;
+#X connect 23 0 11 0;
+#X connect 23 1 17 0;
+#X connect 24 0 14 0;
+#X connect 26 0 35 0;
+#X connect 27 0 35 0;
+#X connect 29 0 35 0;
+#X connect 30 0 18 0;
+#X connect 31 0 30 1;
+#X connect 32 0 33 1;
+#X connect 33 0 28 0;
+#X connect 34 0 35 0;
+#X connect 36 0 34 0;
+#X connect 36 0 29 0;
+#X connect 38 0 30 0;
+#X connect 38 0 33 0;
+#X connect 39 0 41 2;
+#X connect 39 0 41 3;
+#X connect 39 0 41 1;
+#X connect 41 0 38 0;
+#X connect 42 0 7 0;
+#X connect 43 0 42 0;
+#X connect 44 0 21 0;
+#X connect 45 0 22 0;
+#X connect 46 0 23 0;
+#X connect 48 0 47 0;
+#X connect 49 0 51 0;
+#X connect 50 0 52 0;
+#X connect 51 0 50 1;
+#X connect 51 1 50 0;
+#X connect 52 0 47 0;
diff --git a/Gem/examples/10.glsl/13.panoramique.pd b/Gem/examples/10.glsl/13.panoramique.pd
new file mode 100644
index 0000000..c483a4c
--- /dev/null
+++ b/Gem/examples/10.glsl/13.panoramique.pd
@@ -0,0 +1,525 @@
+#N canvas 189 90 1107 660 10;
+#X msg 17 91 create \, 1;
+#X msg 30 114 0 \, destroy;
+#X obj 160 405 pix_texture;
+#X obj 169 165 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 1338 29 792 790 glsl 0;
+#X obj 78 339 glsl_vertex;
+#X msg 32 338 print;
+#X obj 78 626 glsl_program;
+#X obj 163 555 pack 0 0;
+#X msg 30 476 print;
+#X obj 163 511 change;
+#X obj 150 358 change;
+#X msg 163 579 link \$1 \$2;
+#X msg 32 620 print;
+#X obj 77 490 glsl_fragment;
+#X floatatom 163 535 2 0 0 0 ID - -;
+#X floatatom 150 381 2 0 0 0 ID - -;
+#X obj 181 600 print linking;
+#X obj 15 21 inlet;
+#X obj 78 662 outlet;
+#X obj 577 95 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 647 change;
+#X obj 157 668 t b;
+#X obj 158 690 outlet;
+#X obj 90 426 symbol;
+#X obj 90 401 t b;
+#X msg 287 598 0;
+#X obj 15 65 t b b b;
+#X msg 118 307 open panoramique.vert;
+#X msg 90 453 open panoramique.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 160 182 pd glsl;
+#X obj 175 245 loadbang;
+#X obj 160 288 pix_image;
+#X msg 174 379 rectangle 1;
+#X obj 174 358 loadbang;
+#X obj 160 317 pix_info 0 0 0;
+#X msg 238 148 sizeX \$1;
+#X msg 253 169 sizeY \$1;
+#X obj 353 406 pix_texture;
+#X obj 362 166 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 1338 29 792 790 glsl 0;
+#X obj 78 339 glsl_vertex;
+#X msg 32 338 print;
+#X obj 78 626 glsl_program;
+#X obj 163 555 pack 0 0;
+#X msg 30 476 print;
+#X obj 163 511 change;
+#X obj 150 358 change;
+#X msg 163 579 link \$1 \$2;
+#X msg 32 620 print;
+#X obj 77 490 glsl_fragment;
+#X floatatom 163 535 2 0 0 0 ID - -;
+#X floatatom 150 381 2 0 0 0 ID - -;
+#X obj 181 600 print linking;
+#X obj 15 21 inlet;
+#X obj 78 662 outlet;
+#X obj 577 95 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 647 change;
+#X obj 157 668 t b;
+#X obj 158 690 outlet;
+#X obj 90 426 symbol;
+#X obj 90 401 t b;
+#X msg 287 598 0;
+#X obj 15 65 t b b b;
+#X msg 118 307 open panoramique.vert;
+#X msg 90 453 open panoramique.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 353 183 pd glsl;
+#X obj 368 246 loadbang;
+#X obj 353 289 pix_image;
+#X msg 367 378 rectangle 1;
+#X obj 367 359 loadbang;
+#X obj 353 318 pix_info 0 0 0;
+#X msg 431 144 sizeX \$1;
+#X msg 446 170 sizeY \$1;
+#X obj 552 407 pix_texture;
+#X obj 561 167 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 1338 29 792 790 glsl 0;
+#X obj 78 339 glsl_vertex;
+#X msg 32 338 print;
+#X obj 78 626 glsl_program;
+#X obj 163 555 pack 0 0;
+#X msg 30 476 print;
+#X obj 163 511 change;
+#X obj 150 358 change;
+#X msg 163 579 link \$1 \$2;
+#X msg 32 620 print;
+#X obj 77 490 glsl_fragment;
+#X floatatom 163 535 2 0 0 0 ID - -;
+#X floatatom 150 381 2 0 0 0 ID - -;
+#X obj 181 600 print linking;
+#X obj 15 21 inlet;
+#X obj 78 662 outlet;
+#X obj 577 95 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 647 change;
+#X obj 157 668 t b;
+#X obj 158 690 outlet;
+#X obj 90 426 symbol;
+#X obj 90 401 t b;
+#X msg 287 598 0;
+#X obj 15 65 t b b b;
+#X msg 118 307 open panoramique.vert;
+#X msg 90 453 open panoramique.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 552 184 pd glsl;
+#X obj 567 247 loadbang;
+#X obj 552 290 pix_image;
+#X msg 566 379 rectangle 1;
+#X obj 566 360 loadbang;
+#X obj 552 319 pix_info 0 0 0;
+#X msg 614 148 sizeX \$1;
+#X msg 633 166 sizeY \$1;
+#X obj 160 427 translateXYZ -3 0 0;
+#X obj 352 426 translateXYZ -1 0 0;
+#X obj 551 427 translateXYZ 1 0 0;
+#X obj 747 408 pix_texture;
+#X obj 756 168 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 1338 29 792 790 glsl 0;
+#X obj 78 339 glsl_vertex;
+#X msg 32 338 print;
+#X obj 78 626 glsl_program;
+#X obj 163 555 pack 0 0;
+#X msg 30 476 print;
+#X obj 163 511 change;
+#X obj 150 358 change;
+#X msg 163 579 link \$1 \$2;
+#X msg 32 620 print;
+#X obj 77 490 glsl_fragment;
+#X floatatom 163 535 2 0 0 0 ID - -;
+#X floatatom 150 381 2 0 0 0 ID - -;
+#X obj 181 600 print linking;
+#X obj 15 21 inlet;
+#X obj 78 662 outlet;
+#X obj 577 95 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 647 change;
+#X obj 157 668 t b;
+#X obj 158 690 outlet;
+#X obj 90 426 symbol;
+#X obj 90 401 t b;
+#X msg 287 598 0;
+#X obj 15 65 t b b b;
+#X msg 118 307 open panoramique.vert;
+#X msg 90 452 open panoramique.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 747 185 pd glsl;
+#X obj 762 248 loadbang;
+#X obj 747 291 pix_image;
+#X msg 761 380 rectangle 1;
+#X obj 761 361 loadbang;
+#X obj 747 320 pix_info 0 0 0;
+#X msg 825 146 sizeX \$1;
+#X msg 840 172 sizeY \$1;
+#X obj 746 428 translateXYZ 3 0 0;
+#X floatatom 199 68 5 0 0 0 - - -;
+#X msg 199 87 dZ \$1;
+#X obj 17 430 s shaders;
+#X obj 206 205 s init_shader;
+#X obj 399 204 s init_shader;
+#X obj 600 204 s init_shader;
+#X obj 794 206 s init_shader;
+#X obj 399 124 r shaders;
+#X obj 598 126 r shaders;
+#X obj 793 127 r shaders;
+#X obj 160 506 rectangle 1 0.75;
+#X obj 352 507 rectangle 1 0.75;
+#X obj 551 508 rectangle 1 0.75;
+#X obj 746 509 rectangle 1 0.75;
+#X obj 160 463 translateXYZ 0 0 0;
+#X obj 201 446 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 0.12 256;
+#X obj 259 446 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 -0.06 256;
+#X obj 352 465 translateXYZ 0 0 0;
+#X obj 393 448 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X obj 451 448 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X obj 551 466 translateXYZ 0 0 0;
+#X obj 592 449 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 -0.11 256;
+#X obj 650 449 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 -0.03 256;
+#X obj 746 465 translateXYZ 0 0 0;
+#X obj 787 448 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 -0.18 256;
+#X obj 845 448 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 -0.05 256;
+#X obj 160 -30 gemhead 10;
+#X obj 353 -29 gemhead 20;
+#X obj 552 -28 gemhead 30;
+#X obj 747 -27 gemhead 40;
+#X obj 160 104 alpha;
+#X obj 353 103 alpha;
+#X obj 552 99 alpha;
+#X obj 747 102 alpha;
+#X msg 256 113 ShadeL \$1;
+#X obj 199 25 r init_shader;
+#X obj 256 92 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X msg 447 93 ShadeL \$1;
+#X obj 447 72 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 39 256;
+#X msg 634 95 ShadeL \$1;
+#X obj 634 74 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 35 256;
+#X msg 831 93 ShadeL \$1;
+#X obj 831 72 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 23 256;
+#X msg 212 486 -1;
+#X msg 269 485 -0.75;
+#X text 163 486 invert;
+#X msg 406 485 -1;
+#X msg 463 484 -0.75;
+#X text 357 485 invert;
+#X msg 605 488 -1;
+#X msg 662 487 -0.75;
+#X text 556 488 invert;
+#X msg 800 489 -1;
+#X msg 857 488 -0.75;
+#X text 751 489 invert;
+#X obj 17 218 gemwin;
+#X obj 37 168 loadbang;
+#X obj 160 -8 scaleXYZ 4 4 1;
+#X obj 353 -8 scaleXYZ 4 4 1;
+#X obj 552 -4 scaleXYZ 4 4 1;
+#X obj 747 -5 scaleXYZ 4 4 1;
+#X text 21 548 This patch allow multiples images to be assembled in
+order to dreate a panoramic image.;
+#X text 20 575 A shader distord the image to correct distance distortion
+\, and allow a fade between 2 images;
+#X text 17 602 "dz" depend on the angles between images.;
+#X text 462 579 copyright cyrille Henry and iem.;
+#X text 463 596 This developement was suported by the COMEDIA project
+;
+#X floatatom 18 354 5 0 0 0 - - -;
+#X msg 18 373 dZ \$1;
+#X obj 18 311 r init_shader;
+#X msg 18 333 1.62;
+#X msg 199 47 1.38;
+#X msg 37 192 dimen 1024 256;
+#X msg 177 264 thread 0 \, open cam1.jpg;
+#X msg 370 265 thread 0 \, open cam2.jpg;
+#X msg 569 266 thread 0 \, open cam3.jpg;
+#X msg 764 267 thread 0 \, open cam4.jpg;
+#X connect 0 0 101 0;
+#X connect 1 0 101 0;
+#X connect 2 0 32 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 4 1 49 0;
+#X connect 4 1 82 0;
+#X connect 5 0 118 0;
+#X connect 6 0 9 0;
+#X connect 7 0 2 0;
+#X connect 8 0 7 0;
+#X connect 9 0 2 0;
+#X connect 9 1 10 0;
+#X connect 9 2 11 0;
+#X connect 10 0 4 1;
+#X connect 11 0 4 1;
+#X connect 12 0 33 0;
+#X connect 13 0 14 0;
+#X connect 14 0 16 0;
+#X connect 14 1 50 0;
+#X connect 14 1 84 0;
+#X connect 15 0 119 0;
+#X connect 16 0 19 0;
+#X connect 17 0 12 0;
+#X connect 18 0 17 0;
+#X connect 19 0 12 0;
+#X connect 19 1 20 0;
+#X connect 19 2 21 0;
+#X connect 20 0 14 1;
+#X connect 21 0 14 1;
+#X connect 22 0 34 0;
+#X connect 23 0 24 0;
+#X connect 24 0 26 0;
+#X connect 24 1 51 0;
+#X connect 24 1 86 0;
+#X connect 25 0 120 0;
+#X connect 26 0 29 0;
+#X connect 27 0 22 0;
+#X connect 28 0 27 0;
+#X connect 29 0 22 0;
+#X connect 29 1 30 0;
+#X connect 29 2 31 0;
+#X connect 30 0 24 1;
+#X connect 31 0 24 1;
+#X connect 32 0 60 0;
+#X connect 33 0 63 0;
+#X connect 34 0 66 0;
+#X connect 35 0 45 0;
+#X connect 36 0 37 0;
+#X connect 37 0 39 0;
+#X connect 37 1 52 0;
+#X connect 37 1 88 0;
+#X connect 38 0 121 0;
+#X connect 39 0 42 0;
+#X connect 40 0 35 0;
+#X connect 41 0 40 0;
+#X connect 42 0 35 0;
+#X connect 42 1 43 0;
+#X connect 42 2 44 0;
+#X connect 43 0 37 1;
+#X connect 44 0 37 1;
+#X connect 45 0 69 0;
+#X connect 46 0 47 0;
+#X connect 47 0 4 1;
+#X connect 53 0 14 1;
+#X connect 54 0 24 1;
+#X connect 55 0 37 1;
+#X connect 60 0 56 0;
+#X connect 61 0 60 1;
+#X connect 62 0 60 2;
+#X connect 63 0 57 0;
+#X connect 64 0 63 1;
+#X connect 65 0 63 2;
+#X connect 66 0 58 0;
+#X connect 67 0 66 1;
+#X connect 68 0 66 2;
+#X connect 69 0 59 0;
+#X connect 70 0 69 1;
+#X connect 71 0 69 2;
+#X connect 72 0 103 0;
+#X connect 73 0 104 0;
+#X connect 74 0 105 0;
+#X connect 75 0 106 0;
+#X connect 76 0 4 0;
+#X connect 77 0 14 0;
+#X connect 78 0 24 0;
+#X connect 79 0 37 0;
+#X connect 80 0 4 1;
+#X connect 81 0 116 0;
+#X connect 82 0 80 0;
+#X connect 83 0 14 1;
+#X connect 84 0 83 0;
+#X connect 85 0 24 1;
+#X connect 86 0 85 0;
+#X connect 87 0 37 1;
+#X connect 88 0 87 0;
+#X connect 89 0 56 1;
+#X connect 90 0 56 2;
+#X connect 92 0 57 1;
+#X connect 93 0 57 2;
+#X connect 95 0 58 1;
+#X connect 96 0 58 2;
+#X connect 98 0 59 1;
+#X connect 99 0 59 2;
+#X connect 102 0 117 0;
+#X connect 103 0 76 0;
+#X connect 104 0 77 0;
+#X connect 105 0 78 0;
+#X connect 106 0 79 0;
+#X connect 112 0 113 0;
+#X connect 113 0 48 0;
+#X connect 114 0 115 0;
+#X connect 115 0 112 0;
+#X connect 116 0 46 0;
+#X connect 117 0 101 0;
+#X connect 118 0 6 0;
+#X connect 119 0 16 0;
+#X connect 120 0 26 0;
+#X connect 121 0 39 0;
diff --git a/Gem/examples/10.glsl/14.blur.pd b/Gem/examples/10.glsl/14.blur.pd
new file mode 100644
index 0000000..ed1c099
--- /dev/null
+++ b/Gem/examples/10.glsl/14.blur.pd
@@ -0,0 +1,177 @@
+#N canvas 481 142 778 497 10;
+#X obj 16 74 gemhead;
+#X obj 16 130 gemframebuffer;
+#X obj 129 13 loadbang;
+#X obj 16 185 translateXYZ 0 0 -4;
+#X obj 14 283 cnv 15 125 200 empty empty empty 20 12 0 14 -228856 -66577
+0;
+#X floatatom 82 334 5 0 0 0 - - -;
+#X obj 16 362 rotateXYZ 30 30 0;
+#X obj 16 385 colorRGB 1 0 1;
+#X obj 16 408 teapot 1.5;
+#N canvas 385 358 230 231 shunt 0;
+#X obj 171 17 inlet;
+#X obj 72 67 * -1;
+#X obj 72 91 + 1;
+#X obj 27 17 inlet;
+#X obj 27 200 outlet;
+#X obj 126 197 outlet;
+#X obj 27 117 spigot 1;
+#X obj 126 115 spigot 0;
+#X connect 0 0 1 0;
+#X connect 0 0 7 1;
+#X connect 1 0 2 0;
+#X connect 2 0 6 1;
+#X connect 3 0 6 0;
+#X connect 3 0 7 0;
+#X connect 6 0 4 0;
+#X connect 7 0 5 0;
+#X restore 16 223 pd shunt;
+#X obj 81 224 tgl 15 0 empty empty empty 17 7 0 10 -257985 -1 -1 0
+1;
+#X obj 162 283 cnv 15 125 200 empty empty empty 20 12 0 14 -228856
+-66577 0;
+#X obj 169 385 colorRGB 1 1 0;
+#X text 76 286 Scene A;
+#X text 223 287 Scene B;
+#X text 105 223 Scene A / Scene B;
+#X obj 169 360 rotateXYZ 0 0 45;
+#X obj 169 463 square 2.8;
+#X floatatom 197 409 5 0 0 0 - - -;
+#X obj 169 429 translateXYZ;
+#X obj 129 54 s to_fb;
+#X obj 30 103 r to_fb;
+#X msg 129 34 dimen 500 500 \, rectangle 0;
+#X obj 327 379 pix_texture;
+#X obj 327 399 square 4;
+#X msg 344 358 quality 1 \, rectangle 0;
+#X obj 344 337 loadbang;
+#X obj 327 309 gemhead 99;
+#N canvas 1070 136 503 739 14_pass_blur 0;
+#X obj 87 102 inlet;
+#X obj 87 527 outlet;
+#X obj 87 173 single_blur 76 0 64;
+#X obj 87 263 single_blur 80 0 16;
+#X obj 87 284 single_blur 81 16 0;
+#X obj 87 305 single_blur 82 0 8;
+#X obj 87 326 single_blur 83 8 0;
+#X obj 87 347 single_blur 84 0 4;
+#X obj 87 368 single_blur 85 4 0;
+#X obj 87 389 single_blur 86 0 2;
+#X obj 87 410 single_blur 87 2 0;
+#X obj 87 430 single_blur 88 0 1;
+#X obj 87 451 single_blur 89 1 0;
+#X obj 87 236 single_blur 79 32 0;
+#X obj 87 215 single_blur 78 0 32;
+#X obj 87 194 single_blur 77 64 0;
+#X connect 0 0 2 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
+#X connect 13 0 3 0;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X restore 114 149 pd 14_pass_blur;
+#X obj 557 245 pack f f;
+#X obj 557 264 s motion_blur;
+#X obj 575 205 cos;
+#X obj 557 151 / 500;
+#X obj 557 171 t f f;
+#X obj 610 226 *;
+#X obj 628 205 sin;
+#X floatatom 596 129 5 0 6.28 0 - - -;
+#X obj 596 150 t b f;
+#N canvas 0 22 454 304 gemwin 0;
+#X obj 132 136 gemwin;
+#X obj 67 89 outlet;
+#X obj 67 10 inlet;
+#X obj 67 41 route create;
+#X msg 67 70 set destroy;
+#X msg 182 68 set create;
+#X msg 132 112 create \, 1;
+#X msg 238 112 destroy;
+#N canvas 87 154 850 451 Gem.init 0;
+#X obj 59 46 loadbang;
+#X obj 119 130 outlet;
+#X msg 118 81 reset \, dimen 500 500 \, lighting 1 \, title blur \,
+frame 20 \,;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 289 80 pd Gem.init;
+#X obj 75 217 world_light;
+#X obj 75 194 gemhead 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 3 1 5 0;
+#X connect 3 1 7 0;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 10 0 9 0;
+#X restore 17 32 pd gemwin;
+#X msg 17 8 create;
+#X obj 383 89 cnv 15 150 25 empty empty empty 20 12 0 14 -257985 -66577
+0;
+#X obj 392 95 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 389 140 s blur;
+#X obj 389 115 / 500;
+#X text 389 69 blur;
+#X obj 551 91 cnv 15 150 25 empty empty empty 20 12 0 14 -257985 -66577
+0;
+#X obj 560 97 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X text 556 67 motion blur;
+#X obj 557 226 * 1;
+#X text 640 129 angle (radian);
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 1 1 28 0;
+#X connect 2 0 22 0;
+#X connect 3 0 9 0;
+#X connect 5 0 6 2;
+#X connect 5 0 6 1;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 9 0 6 0;
+#X connect 9 1 16 0;
+#X connect 10 0 9 1;
+#X connect 12 0 19 0;
+#X connect 16 0 12 0;
+#X connect 18 0 19 1;
+#X connect 19 0 17 0;
+#X connect 21 0 1 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 25 0 23 0;
+#X connect 26 0 25 0;
+#X connect 27 0 23 0;
+#X connect 28 0 23 1;
+#X connect 29 0 30 0;
+#X connect 31 0 48 1;
+#X connect 32 0 33 0;
+#X connect 33 0 48 0;
+#X connect 33 1 34 0;
+#X connect 34 0 29 1;
+#X connect 35 0 34 1;
+#X connect 36 0 37 0;
+#X connect 37 0 32 0;
+#X connect 37 1 35 0;
+#X connect 37 1 31 0;
+#X connect 38 0 39 0;
+#X connect 39 0 38 0;
+#X connect 41 0 43 0;
+#X connect 43 0 42 0;
+#X connect 46 0 32 0;
+#X connect 48 0 29 0;
diff --git a/Gem/examples/10.glsl/15.bicubic_image_interpolation.pd b/Gem/examples/10.glsl/15.bicubic_image_interpolation.pd
new file mode 100644
index 0000000..e1ae128
--- /dev/null
+++ b/Gem/examples/10.glsl/15.bicubic_image_interpolation.pd
@@ -0,0 +1,63 @@
+#N canvas 722 145 681 529 10;
+#X obj 232 189 gemhead;
+#X obj 232 356 pix_noise 5 5;
+#X obj 232 446 pix_texture;
+#X obj 232 465 square 4;
+#X msg 240 403 rectangle 1;
+#X obj 240 382 loadbang;
+#X obj 242 222 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X floatatom 250 272 5 0 0 0 - - -;
+#X obj 35 196 gemwin;
+#X msg 250 334 set \$1 \$2;
+#X obj 250 314 pack f f;
+#X obj 303 288 t b f;
+#X floatatom 303 271 5 0 0 0 - - -;
+#X msg 35 151 create \, 1;
+#X msg 42 173 0 \, destroy;
+#X obj 232 243 _glsl bicubic_interpolation;
+#X obj 436 191 gemhead;
+#X msg 358 408 quality \$1;
+#X obj 358 389 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 33 246 vradio 15 1 1 3 empty empty empty 0 -8 0 10 -262144 -1
+-1 0;
+#X text 53 246 bicubic interpolation;
+#X text 53 264 bilinear interpolation;
+#X text 55 276 no interpolation;
+#X obj 33 304 s sel_interpolation;
+#X obj 232 169 == 0;
+#X obj 232 149 r sel_interpolation;
+#X obj 436 152 r sel_interpolation;
+#X obj 436 172 != 0;
+#X obj 358 369 != 2;
+#X obj 358 349 r sel_interpolation;
+#X text 46 16 This example use shader in order to compute a bicubic
+image interpolation. Bicubic interpolation offer a smoother surface
+than obtain with bilinear interpolation. But since it need 16 sample
+to compute the interpolation \, it is quite slow.;
+#X connect 0 0 15 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
+#X connect 6 0 15 0;
+#X connect 7 0 10 0;
+#X connect 9 0 1 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 11 1 10 1;
+#X connect 12 0 11 0;
+#X connect 13 0 8 0;
+#X connect 14 0 8 0;
+#X connect 15 0 1 0;
+#X connect 16 0 1 0;
+#X connect 17 0 2 0;
+#X connect 18 0 17 0;
+#X connect 19 0 23 0;
+#X connect 24 0 0 0;
+#X connect 25 0 24 0;
+#X connect 26 0 27 0;
+#X connect 27 0 16 0;
+#X connect 28 0 18 0;
+#X connect 29 0 28 0;
diff --git a/Gem/examples/10.glsl/GLSL_mix.frag b/Gem/examples/10.glsl/GLSL_mix.frag
new file mode 100644
index 0000000..ce47bf8
--- /dev/null
+++ b/Gem/examples/10.glsl/GLSL_mix.frag
@@ -0,0 +1,35 @@
+//jack/RYBN 2010
+#extension GL_EXT_gpu_shader4 : enable
+#extension GL_ARB_texture_rectangle : enable
+uniform sampler2DRect Ttex1;
+uniform sampler2DRect Ttex2;
+uniform sampler2DRect tex0;
+uniform float style;
+uniform float mix_factor;
+varying vec2 texcoord0;
+ivec2 size1 = textureSize2DRect(Ttex1, 0);
+ivec2 size2 = textureSize2DRect(Ttex2, 0);
+ivec2 size0 = textureSize2DRect(tex0, 0);
+
+void main (void)
+{
+ float sizeF1X = float(size1.x)/float(size0.x);
+ float sizeF1Y = float(size1.y)/float(size0.y);
+ float sizeF2X = float(size2.x)/float(size0.x);
+ float sizeF2Y = float(size2.y)/float(size0.y);
+ vec4 color1 = texture2DRect(Ttex1, vec2(texcoord0.s*sizeF1X,texcoord0.t*sizeF1Y));
+ vec4 color2 = texture2DRect(Ttex2, vec2(texcoord0.s*sizeF2X,texcoord0.t*sizeF2Y));
+ if (style == 0.) {
+ gl_FragColor = (color1 + color2);
+ } else if (style == 1.) {
+ gl_FragColor = (color1 - color2);
+ } else if (style == 2.) {
+ gl_FragColor = abs(color1 - color2);
+ } else if (style == 3.) {
+ gl_FragColor = (color1 * color2);
+ } else if (style == 4.) {
+ gl_FragColor = mix(color1,color2,mix_factor);
+ }
+
+}
+
diff --git a/Gem/examples/10.glsl/GLSL_mix.vert b/Gem/examples/10.glsl/GLSL_mix.vert
new file mode 100644
index 0000000..a69a61f
--- /dev/null
+++ b/Gem/examples/10.glsl/GLSL_mix.vert
@@ -0,0 +1,9 @@
+//jack/RYBN 2010
+varying vec2 texcoord0;
+
+void main()
+{
+ texcoord0 = (gl_TextureMatrix[0]*gl_MultiTexCoord0).st;
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/P_distord.frag b/Gem/examples/10.glsl/P_distord.frag
new file mode 100644
index 0000000..5460d6c
--- /dev/null
+++ b/Gem/examples/10.glsl/P_distord.frag
@@ -0,0 +1,19 @@
+// Cyrille Henry 2007
+
+uniform sampler2D tex0;
+
+void main()
+{
+ vec2 C = (gl_TextureMatrix[0] * gl_TexCoord[0]).st;
+ gl_FragColor = texture2D(tex0, C ) ;
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/Gem/examples/10.glsl/P_distord.vert b/Gem/examples/10.glsl/P_distord.vert
new file mode 100644
index 0000000..f0db5f3
--- /dev/null
+++ b/Gem/examples/10.glsl/P_distord.vert
@@ -0,0 +1,21 @@
+// Cyrille Henry 2007
+
+uniform float K;
+uniform sampler2D tex0;
+
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+
+ float xs1 = sin((1.2 + gl_TexCoord[0].s)*(2.3+gl_TexCoord[0].t));
+ float xs2 = sin(xs1*533.);
+ float xs3 = K * sin(xs2*1013.);
+
+ float ys1 = sin((2.1 + gl_TexCoord[0].s)*(3.2+gl_TexCoord[0].t));
+ float ys2 = sin(ys1*5313.);
+ float ys3 = K * sin(ys2*10113.);
+
+ gl_Position = gl_ModelViewProjectionMatrix * (gl_Vertex + vec4(xs3,ys3,0.,0.));
+
+}
+
diff --git a/Gem/examples/10.glsl/T_distord.frag b/Gem/examples/10.glsl/T_distord.frag
new file mode 100644
index 0000000..385f427
--- /dev/null
+++ b/Gem/examples/10.glsl/T_distord.frag
@@ -0,0 +1,31 @@
+// Cyrille Henry 2007
+
+uniform float K1, seed;
+uniform sampler2D tex0;
+
+void main()
+{
+
+ vec2 C = (gl_TextureMatrix[0] * gl_TexCoord[0]).st;
+
+ float xs1 = sin(gl_TexCoord[0].s*gl_TexCoord[0].t/(abs(seed)+1.));
+ float xs2 = sin(xs1*533.);
+ float xs3 = sin(xs2*1013.);
+
+ float ys1 = sin(gl_TexCoord[0].s*gl_TexCoord[0].t/(abs(seed)+1.));
+ float ys2 = sin(ys1*5313.);
+ float ys3 = sin(ys2*10113.);
+
+ gl_FragColor = texture2D(tex0, C + K1 * 0.01 *vec2(xs3,ys3)) ;
+
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/Gem/examples/10.glsl/T_distord.vert b/Gem/examples/10.glsl/T_distord.vert
new file mode 100644
index 0000000..1143615
--- /dev/null
+++ b/Gem/examples/10.glsl/T_distord.vert
@@ -0,0 +1,9 @@
+// Cyrille Henry 2007
+
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = ftransform();
+
+}
+
diff --git a/Gem/examples/10.glsl/_glsl.pd b/Gem/examples/10.glsl/_glsl.pd
new file mode 100644
index 0000000..de6228c
--- /dev/null
+++ b/Gem/examples/10.glsl/_glsl.pd
@@ -0,0 +1,73 @@
+#N canvas 652 79 668 661 10;
+#X obj 78 339 glsl_vertex;
+#X msg 32 338 print;
+#X obj 78 626 glsl_program;
+#X obj 163 555 pack 0 0;
+#X msg 30 476 print;
+#X obj 163 511 change;
+#X obj 150 358 change;
+#X msg 163 579 link \$1 \$2;
+#X msg 32 620 print;
+#X obj 77 490 glsl_fragment;
+#X floatatom 163 535 2 0 0 0 ID - -;
+#X floatatom 150 381 2 0 0 0 ID - -;
+#X obj 181 600 print linking;
+#X obj 15 21 inlet;
+#X obj 78 662 outlet;
+#X msg 106 309 open \$1.vert;
+#X msg 90 453 open \$1.frag;
+#X obj 577 95 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 647 change;
+#X obj 157 668 t b;
+#X obj 158 690 outlet;
+#X obj 140 224 t a a;
+#X obj 90 426 symbol;
+#X obj 90 401 t b;
+#X msg 287 598 0;
+#X obj 15 65 t b b b;
+#X obj 140 199 symbol \$1;
+#X text 270 193 This abstraction can be usefull to load shader. Shader
+location is relative to this abstraction path.;
+#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 23 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 28 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 18 0;
+#X connect 15 0 0 0;
+#X connect 16 0 9 0;
+#X connect 17 0 2 0;
+#X connect 18 0 30 0;
+#X connect 18 1 0 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 31 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 26 0 15 0;
+#X connect 26 1 27 1;
+#X connect 27 0 16 0;
+#X connect 28 0 27 0;
+#X connect 29 0 23 0;
+#X connect 30 0 29 0;
+#X connect 30 1 10 0;
+#X connect 30 2 31 0;
+#X connect 31 0 26 0;
diff --git a/Gem/examples/10.glsl/bicubic_interpolation.frag b/Gem/examples/10.glsl/bicubic_interpolation.frag
new file mode 100644
index 0000000..9482bc6
--- /dev/null
+++ b/Gem/examples/10.glsl/bicubic_interpolation.frag
@@ -0,0 +1,90 @@
+// Cyrille Henry 2007
+
+#extension GL_ARB_texture_rectangle : enable
+uniform sampler2DRect texture;
+
+void main (void)
+{
+ vec2 coordinate = (gl_TextureMatrix[0] * gl_TexCoord[0]).st-vec2(0.5,0.5);
+
+ vec2 coord = floor(coordinate)+vec2(0.5,0.5);
+ vec2 interpol = fract(coordinate);
+ vec2 interpol2 = interpol * interpol;
+ vec2 interpol3 = interpol2 * interpol;
+
+ vec4 C00 = texture2DRect(texture, coord + vec2(-1,-1) );
+ vec4 C10 = texture2DRect(texture, coord + vec2( 0,-1) );
+ vec4 C20 = texture2DRect(texture, coord + vec2( 1,-1) );
+ vec4 C30 = texture2DRect(texture, coord + vec2( 2,-1) );
+ vec4 C01 = texture2DRect(texture, coord + vec2(-1, 0) );
+ vec4 C11 = texture2DRect(texture, coord );
+ vec4 C21 = texture2DRect(texture, coord + vec2( 1, 0) );
+ vec4 C31 = texture2DRect(texture, coord + vec2( 2, 0) );
+ vec4 C02 = texture2DRect(texture, coord + vec2(-1, 1) );
+ vec4 C12 = texture2DRect(texture, coord + vec2( 0, 1) );
+ vec4 C22 = texture2DRect(texture, coord + vec2( 1, 1) );
+ vec4 C32 = texture2DRect(texture, coord + vec2( 2, 1) );
+ vec4 C03 = texture2DRect(texture, coord + vec2(-1, 2) );
+ vec4 C13 = texture2DRect(texture, coord + vec2( 0, 2) );
+ vec4 C23 = texture2DRect(texture, coord + vec2( 1, 2) );
+ vec4 C33 = texture2DRect(texture, coord + vec2( 2, 2) );
+
+ vec4 w0 = C11;
+ vec4 w1 = C21;
+ vec4 w2 = C12;
+ vec4 w3 = C22;
+ // x derivative
+ vec4 x0 = (C21 - C01) / 2.;
+ vec4 x1 = (C31 - C11) / 2.;
+ vec4 x2 = (C22 - C02) / 2.;
+ vec4 x3 = (C32 - C12) / 2.;
+ // y derivative
+ vec4 y0 = (C12 - C10) / 2.;
+ vec4 y1 = (C22 - C20) / 2.;
+ vec4 y2 = (C13 - C11) / 2.;
+ vec4 y3 = (C23 - C21) / 2.;
+ // xy derivative
+ vec4 z0 = (C22 - C00) / 2.;
+ vec4 z1 = (C32 - C10) / 2.;
+ vec4 z2 = (C23 - C01) / 2.;
+ vec4 z3 = (C33 - C11) / 2.;
+
+
+
+ vec4 a00 = w0;
+ vec4 a01 = y0;
+ vec4 a02 = -3.*w0 + 3.*w2 -2.*y0 - y2;
+ vec4 a03 = 2.*w0 - 2.*w2 + y0 + y2;
+ vec4 a10 = x0;
+ vec4 a11 = z0;
+ vec4 a12 = -3.*x0 + 3.*x2 - 2.*z0 - z2;
+ vec4 a13 = 2.*x0 - 2.*x2 + z0 + z2;
+ vec4 a20 = -3.*w0 + 3.*w1 - 2.*x0 - x1;
+ vec4 a21 = -3.*y0 + 3.*y1 - 2.*z0 - z1;
+ vec4 a22 = 9.*w0 - 9.*w1 - 9.*w2 + 9.*w3 + 6.*x0 + 3.*x1 + -6.*x2 - 3.*x3 + 6.*y0 - 6.*y1 + 3.*y2 - 3.*y3 + 4.*z0 + 2.*z1 + 2.*z2 + z3;
+ vec4 a23 = -6.*w0 + 6.*w1 + 6.*w2 - 6.*w3 -4.*x0 - 2.*x1 + 4.*x2 + 2.*x3 -3.*y0 + 3.*y1 - 3.*y2 + 3.*y3 + -2.*z0 - z1 - 2.*z2 - z3;
+ vec4 a30 = 2.*w0 - 2.*w1 + x0 + x1;
+ vec4 a31 = 2.*y0 - 2.*y1 + z0 + z1;
+ vec4 a32 = -6.*w0 + 6.*w1 + 6.*w2 -6.*w3 -3.*x0 - 3.*x1 + 3.*x2 + 3.*x3 -4.*y0 + 4.*y1 - 2.*y2 + 2.*y3 + -2.*z0 - 2.*z1 - z2 - z3;
+ vec4 a33 = 4.*w0 - 4.*w1 - 4.*w2 + 4.*w3 + 2.*x0 + 2.*x1 + -2.*x2 - 2.*x3 + 2.*y0 - 2.*y1 + 2.*y2 - 2.*y3 + z0 + z1 + z2 + z3;
+
+
+ vec4 color = a00;
+ color += a01 * interpol.y;
+ color += a02 * interpol2.y;
+ color += a03 * interpol3.y;
+ color += a10 * interpol.x;
+ color += a11 * interpol.x * interpol.y;
+ color += a12 * interpol.x * interpol2.y;
+ color += a13 * interpol.x * interpol3.y;
+ color += a20 * interpol2.x;
+ color += a21 * interpol2.x * interpol.y;
+ color += a22 * interpol2.x * interpol2.y;
+ color += a23 * interpol2.x * interpol3.y;
+ color += a30 * interpol3.x;
+ color += a31 * interpol3.x * interpol.y;
+ color += a32 * interpol3.x * interpol2.y;
+ color += a33 * interpol3.x * interpol3.y;
+
+ gl_FragColor = color;
+}
diff --git a/Gem/examples/10.glsl/bicubic_interpolation.vert b/Gem/examples/10.glsl/bicubic_interpolation.vert
new file mode 100644
index 0000000..c890bd7
--- /dev/null
+++ b/Gem/examples/10.glsl/bicubic_interpolation.vert
@@ -0,0 +1,8 @@
+// Cyrille Henry 2007
+
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/blur.frag b/Gem/examples/10.glsl/blur.frag
new file mode 100644
index 0000000..f54e03a
--- /dev/null
+++ b/Gem/examples/10.glsl/blur.frag
@@ -0,0 +1,18 @@
+uniform sampler2D tex0;
+uniform vec2 distance;
+uniform vec2 TX;
+
+void main (void)
+{
+
+ vec2 texcoord = (gl_TextureMatrix[0] * gl_TexCoord[0]).st;
+ vec4 sample = 0.5 * texture2D(tex0, texcoord - distance);
+ sample += texture2D(tex0, texcoord);
+ sample += 0.5 * texture2D(tex0, texcoord + distance);
+
+ sample /= 2.;
+
+ gl_FragColor = sample;
+}
+
+
diff --git a/Gem/examples/10.glsl/blur.vert b/Gem/examples/10.glsl/blur.vert
new file mode 100644
index 0000000..0254682
--- /dev/null
+++ b/Gem/examples/10.glsl/blur.vert
@@ -0,0 +1,9 @@
+varying vec2 texcoord0;
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+
+ // perform standard transform on vertex
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/cam1.jpg b/Gem/examples/10.glsl/cam1.jpg
new file mode 100644
index 0000000..c5023ba
--- /dev/null
+++ b/Gem/examples/10.glsl/cam1.jpg
Binary files differ
diff --git a/Gem/examples/10.glsl/cam2.jpg b/Gem/examples/10.glsl/cam2.jpg
new file mode 100644
index 0000000..dd7ab0b
--- /dev/null
+++ b/Gem/examples/10.glsl/cam2.jpg
Binary files differ
diff --git a/Gem/examples/10.glsl/cam3.jpg b/Gem/examples/10.glsl/cam3.jpg
new file mode 100644
index 0000000..76b6898
--- /dev/null
+++ b/Gem/examples/10.glsl/cam3.jpg
Binary files differ
diff --git a/Gem/examples/10.glsl/cam4.jpg b/Gem/examples/10.glsl/cam4.jpg
new file mode 100644
index 0000000..8d2c096
--- /dev/null
+++ b/Gem/examples/10.glsl/cam4.jpg
Binary files differ
diff --git a/Gem/examples/10.glsl/fetching.frag b/Gem/examples/10.glsl/fetching.frag
new file mode 100644
index 0000000..3d1af1f
--- /dev/null
+++ b/Gem/examples/10.glsl/fetching.frag
@@ -0,0 +1,8 @@
+varying vec4 C;
+
+void main (void)
+{
+ gl_FragColor = C;
+}
+
+
diff --git a/Gem/examples/10.glsl/fetching.vert b/Gem/examples/10.glsl/fetching.vert
new file mode 100644
index 0000000..b41cc16
--- /dev/null
+++ b/Gem/examples/10.glsl/fetching.vert
@@ -0,0 +1,15 @@
+uniform sampler2D MyTex;
+varying vec4 C;
+void main()
+{
+ vec4 v = vec4(gl_Vertex);
+ vec4 color = texture2D(MyTex, (gl_TextureMatrix[0] * gl_MultiTexCoord0).st);
+ v.z = color.r;
+// v.x += (color.b-0.5)/2.;
+// v.y += (color.g-0.5)/2.;
+
+ C=color;
+ gl_Position = gl_ModelViewProjectionMatrix * v;
+
+}
+
diff --git a/Gem/examples/10.glsl/fetching2.frag b/Gem/examples/10.glsl/fetching2.frag
new file mode 100644
index 0000000..1b576a5
--- /dev/null
+++ b/Gem/examples/10.glsl/fetching2.frag
@@ -0,0 +1,56 @@
+// Cyrille Henry 2008
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect texture;
+uniform float K2, K;
+
+vec2 pos_(vec2 V, float x, float y)
+{
+ V += vec2(x,y);
+ return(max(min(V,vec2(91.,63.)),vec2(0.)));
+}
+
+
+void main (void)
+{
+ vec2 pos = gl_TexCoord[0].st * vec2(90.,62.)/256. ;
+
+ vec4 color1 = texture2DRect(texture,pos_(pos,-1./256.,-1./256.));
+ vec4 color2 = texture2DRect(texture,pos_(pos, 0./256.,-1./256.));
+ vec4 color3 = texture2DRect(texture,pos_(pos, 1./256.,-1./256.));
+ vec4 color4 = texture2DRect(texture,pos_(pos,-1./256., 0./256.));
+ vec4 color5 = texture2DRect(texture,pos_(pos, 0./256., 0./256.));
+ vec4 color6 = texture2DRect(texture,pos_(pos, 1./256., 0./256.));
+ vec4 color7 = texture2DRect(texture,pos_(pos,-1./256., 1./256.));
+ vec4 color8 = texture2DRect(texture,pos_(pos, 0./256., 1./256.));
+ vec4 color9 = texture2DRect(texture,pos_(pos, 1./256., 1./256.));
+
+ vec4 colorBG = color1 + color2 + color4 + color5;
+ vec4 colorBD = color3 + color2 + color6 + color5;
+ vec4 colorHG = color4 + color5 + color7 + color8;
+ vec4 colorHD = color5 + color6 + color8 + color9;
+
+ vec2 fract_pos = (fract(pos));
+
+ vec4 XB = mix(colorBG,colorBD,fract_pos.x);
+ vec4 XH = mix(colorHG,colorHD,fract_pos.x);
+ vec4 X = mix(XB,XH,fract_pos.y) / 4.;
+
+ X -= vec4(0.5);
+ X.xyz = normalize(X.xyz);
+
+ if(gl_FrontFacing)
+ {X *= -1.;}
+
+ float tmp = dot(X.xyz,normalize(vec3(0.,1.,1.)));
+ tmp = -tmp;
+ tmp = max(0.,tmp) + 0.3 * min(0.,tmp);
+
+ tmp = 0.1 + 0.9 * tmp;
+ vec4 color = tmp * vec4(1,0.95,0.9,1);
+ color.a = smoothstep(0.75,1.,pos.x);
+ gl_FragColor = color;
+
+}
+
+
diff --git a/Gem/examples/10.glsl/fetching2.vert b/Gem/examples/10.glsl/fetching2.vert
new file mode 100644
index 0000000..01fbf0a
--- /dev/null
+++ b/Gem/examples/10.glsl/fetching2.vert
@@ -0,0 +1,21 @@
+// Cyrille Henry 2008
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect MyTex;
+uniform float K;
+
+void main()
+{
+ vec4 v = vec4(gl_Vertex);
+ vec4 color = texture2DRect(MyTex, gl_MultiTexCoord0.st * vec2(91./128.,63./128.));
+
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+
+ v.x = color.r -0.5;
+ v.y = color.g -0.5;
+ v.z = color.b -0.5;
+
+ gl_Position = gl_ModelViewProjectionMatrix * v;
+
+}
+
diff --git a/Gem/examples/10.glsl/game.frag b/Gem/examples/10.glsl/game.frag
new file mode 100644
index 0000000..9b5800d
--- /dev/null
+++ b/Gem/examples/10.glsl/game.frag
@@ -0,0 +1,30 @@
+// Cyrille Henry 2007
+
+uniform sampler2D texture;
+
+const float dx = 1./500.; // change to gemwin dim
+
+void main (void)
+{
+ vec2 tmp = (gl_TextureMatrix[0] * gl_TexCoord[0]).st;
+
+ float x = tmp.s;
+ float y = tmp.t;
+
+ vec4 c;
+ c = texture2D(texture, vec2(x-dx, y-dx));
+ c += texture2D(texture, vec2(x, y-dx));
+ c += texture2D(texture, vec2(x+dx, y-dx));
+ c += texture2D(texture, vec2(x-dx, y));
+ c += texture2D(texture, vec2(x+dx, y));
+ c += texture2D(texture, vec2(x-dx, y+dx));
+ c += texture2D(texture, vec2(x, y+dx));
+ c += texture2D(texture, vec2(x+dx, y+dx));
+
+ vec4 c1 = texture2D(texture, vec2(x, y));
+
+ c.rgb = vec3(step(2.5-c1.r,c.r)*step(c.r,3.5));
+ c.a = 1.;
+
+ gl_FragColor = c;
+}
diff --git a/Gem/examples/10.glsl/game.vert b/Gem/examples/10.glsl/game.vert
new file mode 100644
index 0000000..64eb4f4
--- /dev/null
+++ b/Gem/examples/10.glsl/game.vert
@@ -0,0 +1,14 @@
+// Cyrille Henry 2007
+
+uniform float K1;
+uniform float K2;
+uniform float K3;
+
+uniform vec2 offset;
+
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = ftransform();
+}
+
diff --git a/Gem/examples/10.glsl/geo.frag b/Gem/examples/10.glsl/geo.frag
new file mode 100644
index 0000000..7ec0b43
--- /dev/null
+++ b/Gem/examples/10.glsl/geo.frag
@@ -0,0 +1,8 @@
+void main()
+{
+ vec4 tmp = gl_Color;
+ tmp.a /= 10.;
+ gl_FragColor = tmp;
+ // set color but alpha is 20 time less
+}
+
diff --git a/Gem/examples/10.glsl/geo.geom b/Gem/examples/10.glsl/geo.geom
new file mode 100644
index 0000000..3271c6f
--- /dev/null
+++ b/Gem/examples/10.glsl/geo.geom
@@ -0,0 +1,28 @@
+#version 120
+#extension GL_EXT_geometry_shader4: enable
+
+void main(void)
+{
+ //increment variable
+ int i,j;
+ float rnd1,rnd2;
+ rnd1 = 0.0216767863321334264; // seed
+ rnd2 = 0.0475785688678678345;
+ for(j=0; j< 40; j++)
+ {
+ rnd1 = fract(124.321345312123465*rnd1) -0.5; // easy way to generated pseudo random number
+ rnd2 = fract(5234.43532345435245*rnd2) -0.5;
+
+ //draw 40 time the same geometry, but with small shift in it's position
+ for(i=0; i< gl_VerticesIn; i++)
+ {
+ gl_FrontColor = gl_FrontColorIn[i];
+ gl_TexCoord[0] = gl_TexCoordIn[i][0];
+ gl_Position = gl_PositionIn[i]; // get position of the original point
+ gl_Position.xy += vec2(rnd1,rnd2)/3.; // add small random
+ // the geometry as already been transform in 2d, so we jut have to move it in X and Y
+ EmitVertex();
+ }
+ EndPrimitive();
+ }
+}
diff --git a/Gem/examples/10.glsl/geo.vert b/Gem/examples/10.glsl/geo.vert
new file mode 100644
index 0000000..4359aa3
--- /dev/null
+++ b/Gem/examples/10.glsl/geo.vert
@@ -0,0 +1,7 @@
+void main()
+{
+ gl_FrontColor = gl_Color;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = ftransform();
+ //simple passthrow
+}
diff --git a/Gem/examples/10.glsl/img1.jpg b/Gem/examples/10.glsl/img1.jpg
new file mode 100644
index 0000000..8e17c8b
--- /dev/null
+++ b/Gem/examples/10.glsl/img1.jpg
Binary files differ
diff --git a/Gem/examples/10.glsl/img2.jpg b/Gem/examples/10.glsl/img2.jpg
new file mode 100644
index 0000000..5934461
--- /dev/null
+++ b/Gem/examples/10.glsl/img2.jpg
Binary files differ
diff --git a/Gem/examples/10.glsl/img3.jpg b/Gem/examples/10.glsl/img3.jpg
new file mode 100644
index 0000000..edfaf1e
--- /dev/null
+++ b/Gem/examples/10.glsl/img3.jpg
Binary files differ
diff --git a/Gem/examples/10.glsl/interpol.frag b/Gem/examples/10.glsl/interpol.frag
new file mode 100644
index 0000000..a3c2c08
--- /dev/null
+++ b/Gem/examples/10.glsl/interpol.frag
@@ -0,0 +1,13 @@
+// Cyrille Henry 2008
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect texture_mass;
+uniform float init;
+
+void main (void)
+{
+ vec2 coord = gl_TexCoord[0].st/2.;
+ vec4 pos = texture2DRect(texture_mass, coord);
+
+ gl_FragColor = pos;
+}
diff --git a/Gem/examples/10.glsl/link.frag b/Gem/examples/10.glsl/link.frag
new file mode 100644
index 0000000..053cd5e
--- /dev/null
+++ b/Gem/examples/10.glsl/link.frag
@@ -0,0 +1,164 @@
+// Cyrille Henry 2008
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect texture_mass, texture_mass_old, texture_normal;
+uniform float init, gravite;
+uniform vec2 wind;
+uniform float D;
+uniform float K1; // rigiditée liaison
+uniform float W,f,N; // amplitude du Wind et frequence; Noise
+uniform float t; //temps
+
+varying vec2 coord;
+
+vec2 test1(vec2 V)
+{
+// return(max(min(V,vec2(64.)),vec2(0.)));
+ return(V);
+}
+
+void main (void)
+{
+ vec4 force = vec4(0,1.,0.,1.);
+
+ if ( (coord.x < 92.) && (coord.y < 64.) )
+ {
+ vec3 dist;
+ float taille;
+
+ vec4 pos = texture2DRect(texture_mass, coord );// -vec4(0.5);
+ vec4 pos_old = texture2DRect(texture_mass_old,coord );// -vec4(0.5);
+ vec4 posG = texture2DRect(texture_mass, (coord+vec2(-1., 0.)));// -vec4(0.5);
+ vec4 posD = texture2DRect(texture_mass, (coord+vec2( 1., 0.)));// -vec4(0.5);
+ vec4 posH = texture2DRect(texture_mass, (coord+vec2( 0., 1.)));// -vec4(0.5);
+ vec4 posB = texture2DRect(texture_mass, (coord+vec2( 0.,-1.)));// -vec4(0.5);
+ vec4 posHD = texture2DRect(texture_mass, (coord+vec2( 1.,-1.)));// -vec4(0.5);
+ vec4 posBG = texture2DRect(texture_mass, (coord+vec2(-1., 1.)));// -vec4(0.5);
+ vec4 posHG = texture2DRect(texture_mass, (coord+vec2( 1., 1.)));// -vec4(0.5);
+ vec4 posBD = texture2DRect(texture_mass, (coord+vec2(-1.,-1.)));// -vec4(0.5);
+ vec4 pos2G = texture2DRect(texture_mass, (coord+vec2(-2., 0.)));// -vec4(0.5);
+ vec4 pos2D = texture2DRect(texture_mass, (coord+vec2( 2., 0.)));// -vec4(0.5);
+ vec4 pos2H = texture2DRect(texture_mass, (coord+vec2( 0., 2.)));// -vec4(0.5);
+ vec4 pos2B = texture2DRect(texture_mass, (coord+vec2( 0.,-2.)));// -vec4(0.5);
+ // lecture des position des masses voisinnes
+
+ force = pos-pos_old;
+ // ajout de la force d'inertie (conservation de la vitesse)
+
+ force *= 1.-D;
+ // damping relatif a un point fix
+ // ATTENTION, c'est le seul damping du system!
+
+
+ // 4 liens direct (gauche / droite et haut / bas)
+ // on ajoute une force ssi la taille est > 0
+ // on limite aussi ds l'espace pour ne prendre en compte que le lien valide (effet de bord)
+
+ dist = pos.xyz - posG.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x > 1.) )
+ { force.xyz += -K1 * (taille - 1./1000.)* normalize(dist); }
+
+ dist = pos.xyz - posD.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x < 91.) )
+ { force.xyz += -K1 * (taille - 1./1000.)* normalize(dist); }
+
+ dist = pos.xyz - posH.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.y < 63.) )
+ { force.xyz += -K1 * (taille - 1./1000.)* normalize(dist); }
+
+ dist = pos.xyz - posB.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.y > 1.) )
+ { force.xyz += -K1 * (taille - 1./1000.)* normalize(dist); }
+
+ // 4 liens diagonaux (haut gauche, bas droite, etc)
+ dist = pos.xyz - posHD.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x < 91.) && (coord.y > 1.) )
+ { force.xyz += -K1 * (taille - 1.4142/1000.)* normalize(dist); }
+
+ dist = pos.xyz - posBG.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x > 1.) && (coord.y < 63.) )
+ { force.xyz += -K1 * (taille - 1.4142/1000.)* normalize(dist); }
+
+ dist = pos.xyz - posHG.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x < 91.) && (coord.y < 63.) )
+ { force.xyz += -K1 * (taille - 1.4142/1000.)* normalize(dist); }
+
+ dist = pos.xyz - posBD.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x > 1.) && (coord.y > 1.) )
+ { force.xyz += -K1 * (taille - 1.4142/1000.)* normalize(dist); }
+
+ // 4 liens double longeur (rigidité de flexion)
+ dist = pos.xyz - pos2G.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x > 2.) )
+ { force.xyz += -K1 * (taille - 2./1000.)* normalize(dist); }
+
+ dist = pos.xyz - pos2D.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.x < 90.) )
+ { force.xyz += -K1 * (taille - 2./1000.)* normalize(dist); }
+
+ dist = pos.xyz - pos2H.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.y < 62.) )
+ { force.xyz += -K1 * (taille - 2./1000.)* normalize(dist); }
+
+ dist = pos.xyz - pos2B.xyz ;
+ taille = length(dist) ;
+ if ( (taille > 0.) && (coord.y > 2.) )
+ { force.xyz += -K1 * (taille - 2./1000.)* normalize(dist); }
+
+ // autres forces
+ vec4 normal = texture2DRect(texture_normal, coord*64.) -vec4(0.5);
+ normal = normalize(normal);
+ // float force_wind = abs(dot(normalize(vec3(wind.xy,0.)),normal.xyz));
+
+ force.r += wind.x/100.;
+ force.g += gravite/100.;
+ force.b += wind.y/100.;
+
+ // ajout d'une force sinusoidal perpendiculaire a la direction du vent
+ float W_sin = cos(-t + f*0.01*gl_TexCoord[0].s);
+ W_sin *= 91.- gl_TexCoord[0].s;
+ W_sin /= 91.;
+ W_sin *= 91.- gl_TexCoord[0].s;
+ W_sin /= 91.;
+
+ W_sin *= gl_TexCoord[0].t + 50.;
+ W_sin /= 63.;
+ W_sin *= gl_TexCoord[0].t + 50.;
+ W_sin /= 63.;
+
+ force.x += W*(-wind.y*W_sin);
+ force.z += W*( wind.x*W_sin);
+
+ // ajout d'un pseuo buit
+ float W_noiseX = cos(t + 0.353 * coord.t + 0.0234434* coord.s + 345.2342);
+ W_noiseX = cos(123456.35345 * W_noiseX + 234.23);
+ float W_noiseY = cos(-2.2 * t + 6235.457456 * W_noiseX + 567.456);
+ float W_noiseZ = cos(5.*t + 8976457.457 * W_noiseX + 3464.54);
+ W_noiseX = cos(323344.64345 * W_noiseX + 567.45);
+
+ force.x += 0.00001 * N * W_noiseX;
+ force.y += 0.00001 * N * W_noiseY;
+ force.z += 0.00001 * N * W_noiseZ;
+
+
+ // preparation de la sortie
+ force = min(max(force,vec4(-0.5)),vec4(0.5));
+ // min et max pour virer les +inf
+ force += vec4(0.5,0.5,0.5,1.);
+ // ajout de l'ofset pour etre entre 0 et 1
+ force.a = 1.;
+ // on vire la 4eme composante au cas ou.
+ }
+ gl_FragColor = mix(force,vec4(0.5,0.5,0.5,1.),init);
+}
diff --git a/Gem/examples/10.glsl/link.vert b/Gem/examples/10.glsl/link.vert
new file mode 100644
index 0000000..fefc366
--- /dev/null
+++ b/Gem/examples/10.glsl/link.vert
@@ -0,0 +1,10 @@
+varying vec2 coord;
+
+
+void main()
+{
+
+ coord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).st;
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/mass.frag b/Gem/examples/10.glsl/mass.frag
new file mode 100644
index 0000000..29a2ef2
--- /dev/null
+++ b/Gem/examples/10.glsl/mass.frag
@@ -0,0 +1,34 @@
+// Cyrille Henry 2008
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect texture_mass_old,texture_link;
+varying vec2 coord;
+uniform float init;
+
+void main (void)
+{
+ vec4 color = vec4(0.,0.,1.,1.);
+ if ( (coord.x < 92.) && (coord.y < 64.) )
+ {
+ vec4 pos = texture2DRect(texture_mass_old, coord)-vec4(0.5);
+ vec4 force = texture2DRect(texture_link, coord)-vec4(0.5);
+
+ force = min(max(force,vec4(-0.5)),vec4(0.5));
+ // on vire les +inf et -inf qui peuvent poser pb en cas d'instabilités
+ pos += force;
+ //increment de la position
+
+ float reset = step(coord.x,1.);
+// reset *= step(mod(coord.y,10.),4.);
+ // les point en x<1 sont tjrs reseté : ils sont dc imobiles
+
+ color = mix(pos,vec4(coord.x/1000.,(coord.y-32.)/1000.,0.,0.),reset+(1.-reset)*init);
+ // couleur de sortie mixé avec couleur d'initialisation
+
+ color += vec4(0.5);
+ color.a = 1.;
+ // preparation de la sortie (ajout de l'offset + virer l'alpha)
+ }
+
+ gl_FragColor = color;
+}
diff --git a/Gem/examples/10.glsl/mass.vert b/Gem/examples/10.glsl/mass.vert
new file mode 100644
index 0000000..fefc366
--- /dev/null
+++ b/Gem/examples/10.glsl/mass.vert
@@ -0,0 +1,10 @@
+varying vec2 coord;
+
+
+void main()
+{
+
+ coord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).st;
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/multitexture.frag b/Gem/examples/10.glsl/multitexture.frag
new file mode 100644
index 0000000..9e8ed0c
--- /dev/null
+++ b/Gem/examples/10.glsl/multitexture.frag
@@ -0,0 +1,13 @@
+uniform sampler2D MyTex;
+uniform sampler2D MyTex1;
+
+varying vec2 texcoord1;
+varying vec2 texcoord2;
+
+void main (void)
+{
+ vec4 color = texture2D(MyTex, texcoord1);
+ vec4 color2 = texture2D(MyTex1, texcoord2);
+ gl_FragColor = (color + color2) / 2.;
+}
+
diff --git a/Gem/examples/10.glsl/multitexture.vert b/Gem/examples/10.glsl/multitexture.vert
new file mode 100644
index 0000000..2cade19
--- /dev/null
+++ b/Gem/examples/10.glsl/multitexture.vert
@@ -0,0 +1,11 @@
+varying vec2 texcoord1;
+varying vec2 texcoord2;
+
+void main()
+{
+
+ texcoord1 = (gl_TextureMatrix[0] * gl_MultiTexCoord0).st;
+ texcoord2 = (gl_TextureMatrix[1] * gl_MultiTexCoord1).st;
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/multitexture_rect.frag b/Gem/examples/10.glsl/multitexture_rect.frag
new file mode 100644
index 0000000..3eb9b2b
--- /dev/null
+++ b/Gem/examples/10.glsl/multitexture_rect.frag
@@ -0,0 +1,15 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect MyTex;
+uniform sampler2DRect MyTex1;
+
+varying vec2 texcoord1;
+varying vec2 texcoord2;
+
+void main (void)
+{
+ vec4 color = texture2DRect(MyTex, texcoord1);
+ vec4 color2 = texture2DRect(MyTex1, texcoord1); // texcoord2 does not work.
+ gl_FragColor = (color + color2) / 2.;
+}
+
diff --git a/Gem/examples/10.glsl/multitexture_rect.vert b/Gem/examples/10.glsl/multitexture_rect.vert
new file mode 100644
index 0000000..2cade19
--- /dev/null
+++ b/Gem/examples/10.glsl/multitexture_rect.vert
@@ -0,0 +1,11 @@
+varying vec2 texcoord1;
+varying vec2 texcoord2;
+
+void main()
+{
+
+ texcoord1 = (gl_TextureMatrix[0] * gl_MultiTexCoord0).st;
+ texcoord2 = (gl_TextureMatrix[1] * gl_MultiTexCoord1).st;
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/normal.frag b/Gem/examples/10.glsl/normal.frag
new file mode 100644
index 0000000..eef7f86
--- /dev/null
+++ b/Gem/examples/10.glsl/normal.frag
@@ -0,0 +1,37 @@
+// Cyrille Henry 2008
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect texture_mass;
+varying vec2 coord;
+
+vec2 test1(vec2 V)
+{
+ return(max(min(V,vec2(91.,63.)),vec2(0.)));
+}
+
+void main (void)
+{
+ vec4 color = vec4(1.,0.,0.,1.);
+
+ if ( (coord.x < 91.) && (coord.y < 63.) )
+ {
+ vec4 posG = texture2DRect(texture_mass, test1(coord+vec2(-1., 0.))) ;
+ vec4 posD = texture2DRect(texture_mass, test1(coord+vec2( 1., 0.))) ;
+ vec4 posH = texture2DRect(texture_mass, test1(coord+vec2( 0.,-1.))) ;
+ vec4 posB = texture2DRect(texture_mass, test1(coord+vec2( 0., 1.))) ;
+
+ vec3 normal = cross((posG.xyz-posD.xyz),(posH.xyz-posB.xyz));
+ color.xyz = normalize(normal);
+ color.xyz = normal;
+
+ vec3 DX = posG.xyz-posD.xyz;
+ vec3 DY = posH.xyz-posB.xyz;
+
+ color += vec4(1.);
+ color *= 0.5;
+
+ }
+ color.a = 1.;
+ gl_FragColor = color;
+
+}
diff --git a/Gem/examples/10.glsl/normal.vert b/Gem/examples/10.glsl/normal.vert
new file mode 100644
index 0000000..fefc366
--- /dev/null
+++ b/Gem/examples/10.glsl/normal.vert
@@ -0,0 +1,10 @@
+varying vec2 coord;
+
+
+void main()
+{
+
+ coord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).st;
+ gl_Position = ftransform();
+
+}
diff --git a/Gem/examples/10.glsl/panoramique.frag b/Gem/examples/10.glsl/panoramique.frag
new file mode 100644
index 0000000..d0378b6
--- /dev/null
+++ b/Gem/examples/10.glsl/panoramique.frag
@@ -0,0 +1,28 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect MyTex;
+uniform float dZ, ShadeL, ShadeR, sizeX, sizeY;
+
+void main (void)
+{
+
+ vec2 pos_out;
+ pos_out.x=-1.+(2.*gl_TexCoord[0].s)/sizeX;
+ pos_out.y=-1.+(2.*gl_TexCoord[0].t)/sizeY;
+ pos_out.y *= sqrt(pos_out.x*pos_out.x+dZ*dZ)/dZ;
+
+ pos_out.x = sizeX*(pos_out.x+1.)/2.;
+ pos_out.y = sizeY*(pos_out.y+1.)/2.;
+
+ vec4 color = texture2DRect(MyTex, pos_out);
+
+ color.a = 1.;
+ float tmp = mix(0.,1.,gl_TexCoord[0].s/ShadeL);
+ tmp = min(tmp,1.);
+ color.a *= tmp;
+ tmp = mix(0.,1.,(sizeX-gl_TexCoord[0].s)/ShadeR);
+ tmp = min(tmp,1.);
+ color.a *= tmp;
+
+ gl_FragColor = color;
+}
diff --git a/Gem/examples/10.glsl/panoramique.vert b/Gem/examples/10.glsl/panoramique.vert
new file mode 100644
index 0000000..5fcb9d8
--- /dev/null
+++ b/Gem/examples/10.glsl/panoramique.vert
@@ -0,0 +1,5 @@
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+}
diff --git a/Gem/examples/10.glsl/single_blur.pd b/Gem/examples/10.glsl/single_blur.pd
new file mode 100644
index 0000000..76088b7
--- /dev/null
+++ b/Gem/examples/10.glsl/single_blur.pd
@@ -0,0 +1,55 @@
+#N canvas 310 229 681 595 10;
+#X obj 99 59 inlet;
+#X obj 26 145 gemframebuffer;
+#X obj 26 215 translateXYZ 0 0 -4;
+#X obj 26 285 pix_texture;
+#X obj 26 305 square 4;
+#X msg 43 264 quality 1 \, rectangle 0;
+#X obj 43 243 loadbang;
+#X obj 128 431 outlet;
+#X obj 26 195 _glsl blur;
+#X obj 47 166 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 248 85 t f f;
+#X obj 248 17 r blur;
+#X obj 248 133 pack f f;
+#X obj 26 85 gemhead \$1;
+#X obj 248 112 * \$2;
+#X obj 301 111 * \$3;
+#X msg 248 153 distance \$1 \$2;
+#X obj 42 119 r to_fb;
+#X obj 248 39 route float;
+#X obj 322 61 unpack f f;
+#X obj 441 18 r motion_blur;
+#X obj 441 90 pack f f;
+#X obj 441 65 * \$2;
+#X obj 441 41 unpack f f;
+#X obj 508 65 * \$2;
+#X connect 0 0 3 1;
+#X connect 1 0 8 0;
+#X connect 1 1 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 8 0 2 0;
+#X connect 9 0 8 0;
+#X connect 10 0 14 0;
+#X connect 10 1 15 0;
+#X connect 11 0 18 0;
+#X connect 12 0 16 0;
+#X connect 13 0 1 0;
+#X connect 14 0 12 0;
+#X connect 15 0 12 1;
+#X connect 16 0 8 1;
+#X connect 17 0 1 0;
+#X connect 18 0 10 0;
+#X connect 18 1 19 0;
+#X connect 19 0 14 0;
+#X connect 19 1 15 0;
+#X connect 20 0 23 0;
+#X connect 21 0 16 0;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 23 1 24 0;
+#X connect 24 0 21 1;
diff --git a/Gem/examples/10.glsl/texture.frag b/Gem/examples/10.glsl/texture.frag
new file mode 100644
index 0000000..aaee824
--- /dev/null
+++ b/Gem/examples/10.glsl/texture.frag
@@ -0,0 +1,16 @@
+// Cyrille Henry 2007
+
+//#extension GL_ARB_texture_rectangle : enable
+//uniform sampler2DRect MyTex;
+uniform sampler2D MyTex;
+uniform float B,C;
+
+void main (void)
+{
+ vec4 color = texture2D(MyTex, (gl_TextureMatrix[0] * gl_TexCoord[0]).st);
+
+ color *= B+1.; // brightness
+ vec4 gray = vec4(dot(color.rgb,vec3(0.2125, 0.7154, 0.0721)));
+ color = mix(gray, color, C+1.); // contrast
+ gl_FragColor = color;
+}
diff --git a/Gem/examples/10.glsl/texture.vert b/Gem/examples/10.glsl/texture.vert
new file mode 100644
index 0000000..bda9f47
--- /dev/null
+++ b/Gem/examples/10.glsl/texture.vert
@@ -0,0 +1,8 @@
+// Cyrille Henry 2007
+
+void main()
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+
+}
diff --git a/Gem/examples/10.glsl/texture_rect.frag b/Gem/examples/10.glsl/texture_rect.frag
new file mode 100644
index 0000000..98adc1f
--- /dev/null
+++ b/Gem/examples/10.glsl/texture_rect.frag
@@ -0,0 +1,16 @@
+// Cyrille Henry 2007
+
+#extension GL_ARB_texture_rectangle : enable
+uniform sampler2DRect MyTex;
+//uniform sampler2D MyTex;
+uniform float B,C;
+
+void main (void)
+{
+ vec4 color = texture2DRect(MyTex, (gl_TextureMatrix[0] * gl_TexCoord[0]).st);
+
+ color *= B+1.; // brightness
+ vec4 gray = vec4(dot(color.rgb,vec3(0.2125, 0.7154, 0.0721)));
+ color = mix(gray, color, C+1.); // contrast
+ gl_FragColor = color;
+}
diff --git a/Gem/examples/10.glsl/tri2fan.frag b/Gem/examples/10.glsl/tri2fan.frag
new file mode 100644
index 0000000..391dc68
--- /dev/null
+++ b/Gem/examples/10.glsl/tri2fan.frag
@@ -0,0 +1,6 @@
+void main()
+{
+ gl_FragColor = vec4(1.0,1.0,1.0,0.1);
+ // set color
+}
+
diff --git a/Gem/examples/10.glsl/tri2fan.geom b/Gem/examples/10.glsl/tri2fan.geom
new file mode 100644
index 0000000..45961e2
--- /dev/null
+++ b/Gem/examples/10.glsl/tri2fan.geom
@@ -0,0 +1,51 @@
+// Cyrille Henry 2010
+
+#version 120
+#extension GL_EXT_geometry_shader4 : enable
+
+void main(void)
+{
+
+ int i; //increment variable
+ vec4 pos1,pos2, pos3, pos4, pos5; // tmp
+ vec3 high;
+
+ for(i=0; i< gl_VerticesIn; i += 3){ // for all triangles
+ pos1 = gl_PositionIn[i];
+ pos2 = gl_PositionIn[i+1];
+ pos3 = gl_PositionIn[i+2];
+ pos4 = (pos1 + pos2 + pos3) / 3.; // center of the triangle
+
+ high = 10.*cross(pos2.xyz-pos1.xyz,pos3.xyz-pos2.xyz);
+ // hight and orientation of the piramide
+
+ high = normalize(high);
+ high *= length(pos2-pos1);
+ pos5 = pos4 ;
+ pos5.xyz += high;
+
+ gl_Position = gl_ModelViewProjectionMatrix * pos1;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos4;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos5;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos2;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos4;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos5;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos3;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos4;
+ EmitVertex();
+ gl_Position = gl_ModelViewProjectionMatrix * pos5;
+ EmitVertex();
+
+ EndPrimitive();
+ // new primitive
+ }
+
+}
+
diff --git a/Gem/examples/10.glsl/tri2fan.vert b/Gem/examples/10.glsl/tri2fan.vert
new file mode 100644
index 0000000..2d22ff2
--- /dev/null
+++ b/Gem/examples/10.glsl/tri2fan.vert
@@ -0,0 +1,6 @@
+void main()
+{
+ gl_Position = gl_Vertex;
+}
+
+
diff --git a/Gem/examples/10.glsl/vague.frag b/Gem/examples/10.glsl/vague.frag
new file mode 100644
index 0000000..7b6a2f3
--- /dev/null
+++ b/Gem/examples/10.glsl/vague.frag
@@ -0,0 +1,23 @@
+// Cyrille Henry 2007
+
+#extension GL_ARB_texture_rectangle : enable
+
+uniform float K;
+uniform sampler2DRect texture, texture1, texture2;
+
+const float dx = 1.;
+const float dy = 1.;
+const float dp = 1.;
+
+void main (void)
+{
+ float light;
+ vec2 position = gl_TexCoord[0].st;
+ vec4 C, C1;
+ C = texture2DRect(texture2, position) ;
+
+ vec4 color2 = texture2DRect(texture1, (position+K*C.rg));
+
+ gl_FragColor = color2;
+
+}
diff --git a/Gem/examples/10.glsl/wave.frag b/Gem/examples/10.glsl/wave.frag
new file mode 100644
index 0000000..d455f88
--- /dev/null
+++ b/Gem/examples/10.glsl/wave.frag
@@ -0,0 +1,40 @@
+// Cyrille Henry 2007
+
+#extension GL_ARB_texture_rectangle : enable
+
+uniform float K1,K3,D1,K;
+uniform sampler2DRect text;
+
+const float dx = 1.;
+const float dy = 1.;
+
+void main (void)
+{
+ float x,y;
+ vec4 C;
+ vec2 texture1 = gl_TexCoord[0].st ;
+
+ x=texture1.x;
+ y=texture1.y;
+
+ C = texture2DRect(text, vec2(x, y));
+
+ vec4 color_cote = texture2DRect(text, vec2(x-dx, y-dy));
+ color_cote += texture2DRect(text, vec2(x+dx, y-dy));
+ color_cote += texture2DRect(text, vec2(x-dx, y+dy));
+ color_cote += texture2DRect(text, vec2(x+dx, y+dy));
+ color_cote += texture2DRect(text, vec2(x, y-dy));
+ color_cote += texture2DRect(text, vec2(x-dx, y));
+ color_cote += texture2DRect(text, vec2(x+dx, y));
+ color_cote += texture2DRect(text, vec2(x, y+dy));
+
+
+ float K = K1 * color_cote.r + K3 * 0.5 - (8. * K1 + K3) * C.r;
+ float D = D1 * (C.r - C.g);
+
+ C.b = C.g;
+ C.g = C.r;
+ C.r = (2.* C.g) - C.b + K - D ;
+
+ gl_FragColor = vec4(C.rgb,1.);
+}