#N canvas 6 61 880 555 10;
#X declare -lib Gem;
#X text 692 8 GEM object;
#X text 71 31 Class: manipulation object;
#X text 50 12 Synopsis: [separator];
#X obj 8 337 cnv 15 430 60 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#X text 39 339 Inlets:;
#X text 63 352 Inlet 1: gemlist;
#X text 39 368 Outlets:;
#X text 57 381 Outlet 1: gemlist;
#X obj 8 204 cnv 15 430 120 empty empty empty 20 12 0 14 #bcbcbc #404040 0;
#X text 17 206 Arguments:;
#X obj 8 76 cnv 15 430 120 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#X text 29 77 Description: separate render chains;
#X text 72 236 "modelview" = "model" = "m";
#X text 72 249 "color" = "c";
#X text 72 262 "texture" = "t";
#X text 72 276 "projection" = "p";
#X text 63 217 list of matrices to work on;
#X text 63 298 default: "m c t p" (all matrices);
#X text 42 135 for the openGL-savvy: [separator] pushes (saves) the modelview \, color \, texture and projection matrices to the stack (unless the stack is full). Once rendering below [separator] is done \, the matrices are popped \, thus restoring the state before [separator] was called.;
#X text 42 95 [separator] isolates parallel render-chains with regard to transformation effects (translation \, rotation \, ...) \, so you don't get side-effects;
#X obj 8 411 cnv 15 430 130 empty empty empty 20 12 0 14 #bcbcbc #404040 0;
#X obj 162 448 pix_separator;
#X text 53 420 NOTE: [separator] has no effect on pixel-operations. to isolate [pix_*]-chains from each other \, use:;
#X text 55 476 NOTE: the color will not be affected by [separator]. if you change the [color] in the subchain rendered first \, the same color will automatically be applied to subchains rendered later. the only way to work around this \, is to reset the color in the other subchains.;
#X obj 602 440 cnv 15 100 60 empty empty empty 20 12 0 14 #bcbcbc #404040 0;
#X obj 439 229 cnv 15 210 40 empty empty empty 20 12 0 14 #14e814 #404040 0;
#X obj 658 229 cnv 15 210 40 empty empty empty 20 12 0 14 #14e814 #404040 0;
#X obj 446 241 separator;
#X obj 446 188 translateXYZ 2 0 0;
#X obj 520 242 separator;
#X obj 446 148 gemhead;
#X obj 446 168 color 1 0 0;
#X obj 446 119 tgl 15 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000 0 1;
#X obj 661 122 tgl 15 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000 0 1;
#X obj 446 55 tgl 15 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000 0 1;
#X obj 446 73 t f f;
#X obj 661 96 == 0;
#X floatatom 581 197 5 0 0 0 - - - 0;
#X obj 446 33 loadbang;
#X text 472 56 toggle between separated/unseparated rendering;
#X text 694 117 blue;
#X text 482 119 red;
#X obj 661 188 translateXYZ 2 0 0;
#X obj 661 148 gemhead;
#X obj 661 168 color 0 0 1;
#X obj 446 208 t a a;
#X obj 661 208 t a a;
#X text 465 326 If you did not use a [separator] in the example \, then one of the chains would have an extra rotation (depending on which subchain is rendered first).;
#X obj 747 273 rotateXYZ 0 45 0;
#X obj 747 293 square;
#X obj 520 273 rotateXYZ 0 45 0;
#X obj 661 293 cube 0.5;
#X obj 661 273 color 1 1 0;
#X obj 446 271 color 0 1 1;
#X obj 520 293 circle;
#X obj 446 293 cone;
#X text 464 364 With the [separator] \, both objects will by translated \, but the rotation in one branch will not effect the other branch.;
#N canvas 484 243 450 300 META 0;
#X obj 10 25 declare -lib Gem;
#X text 10 45 DESCRIPTION separate render chains;
#X text 10 65 KEYWORDS Gem openGL transformation;
#X text 20 85 INLET_0 gemlist;
#X text 20 105 OUTLET_0 gemlist;
#X text 10 125 AUTHOR IOhannes m zmölnig;
#X text 10 145 LICENSE GPL-2.0-or-later;
#X restore 768 8 pd META;
#X obj 608 450 _gemwin;
#X connect 27 0 53 0;
#X connect 28 0 45 0;
#X connect 29 0 50 0;
#X connect 30 0 31 0;
#X connect 31 0 28 0;
#X connect 32 0 30 0;
#X connect 33 0 43 0;
#X connect 34 0 35 0;
#X connect 35 0 32 0;
#X connect 35 1 36 0;
#X connect 36 0 33 0;
#X connect 37 0 48 1;
#X connect 37 0 50 1;
#X connect 38 0 34 0;
#X connect 42 0 46 0;
#X connect 43 0 44 0;
#X connect 44 0 42 0;
#X connect 45 0 27 0;
#X connect 45 1 29 0;
#X connect 46 0 52 0;
#X connect 46 1 48 0;
#X connect 48 0 49 0;
#X connect 50 0 54 0;
#X connect 52 0 51 0;
#X connect 53 0 55 0;
