#N canvas 504 148 683 643 10;
#X declare -lib Gem;
#X text 452 8 GEM object;
#X obj 8 337 cnv 15 430 220 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#X text 11 338 Inlets:;
#X text 10 504 Outlets:;
#X obj 8 302 cnv 15 430 30 empty empty empty 20 12 0 14 #bcbcbc #404040 0;
#X text 17 302 Arguments:;
#X obj 7 56 cnv 15 430 240 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#X obj 449 77 cnv 15 230 250 empty empty empty 20 12 0 14 #dce4fc #404040 0;
#X text 453 60 Example:;
#X obj 450 108 cnv 15 220 160 empty empty empty 20 12 0 14 #14e814 #404040 0;
#X text 63 313 <none>;
#X text 15 517 Outlet 1: gemlist, f 68;
#X text 21 352 Inlet 1: gemlist, f 67;
#X obj 11 576 cnv 15 420 50 empty empty empty 20 12 0 14 #d8fcfc #404040 0;
#X text 71 31 Class: shader object;
#X text 451 345 see also:;
#X obj 453 362 glsl_fragment;
#X obj 453 382 glsl_vertex;
#X text 13 56 Description: link GLSL-modules into a shader program, f 67;
#X text 15 580 IMPORTANT NOTE: your openGL-implementation (gfx-card driver \, ...) has to support the GLSL-standard (which is part of openGL-2.0) in order to make use of this object., f 68;
#X text 14 275 An ID of the generated program is sent to the 2nd outlet., f 69;
#X text 15 532 Outlet 2: <float>: ID of the linked glsl_program, f 68;
#X floatatom 628 248 5 0 0 0 ID - - 0;
#X obj 451 86 gemhead;
#X msg 460 120 print;
#X text 21 367 Inlet 1: "print": print info about the GLSL-support in your openGL implementation and about the linked program, f 67;
#X obj 453 402 glsl_geometry;
#N canvas 484 243 450 300 META 0;
#X obj 10 25 declare -lib Gem;
#X text 10 45 DESCRIPTION link GLSL-modules into a shader program, f 67;
#X text 10 65 KEYWORDS Gem openGL shader;
#X text 20 135 OUTLET_0 gemlist;
#X text 20 155 OUTLET_1 float;
#X text 10 175 AUTHOR IOhannes m zmölnig;
#X text 10 195 LICENSE GPL-2.0-or-later;
#X text 20 85 INLET_0 gemlist open symbol bang;
#X text 20 115 INLET_1 <uniformname>;
#X restore 518 8 pd META;
#X obj 515 273 _gemwin;
#X text 50 12 Synopsis: [glsl];
#X text 14 75 [glsl[ wraps the various GLSL compilers ([glsl_vertex] \, [glsl_fragment] \, [glsl_geometry]...) and the GLSL linker ([glsl_program]) into a single easy-to-use object., f 69;
#X text 14 118 It takes the basename of the shader file(s) \, and tries to guess some common extension for the various shader stages., f 69;
#X text 29 147 vertex shader: *.vert;
#X text 29 162 fragment shader: *.frag;
#X text 29 177 geometry shader: *.geom;
#X text 14 217 The files are searched for in the directory of the current patch (where [glsl] is invoked) \, and if they are not found there \, the Pd search path is used., f 69;
#X text 21 395 Inlet 1: "open <symbol>": basename of the shader files, f 67;
#X text 21 410 Inlet 1: "symbol<symbol>": alias for "open", f 67;
#X text 21 439 Inlet 2: "<uniformName> <uniformParm>...": set the uniform variable of name uniformName to the (list of) uniformParms. this is only valid after successfully linking a program. the inlet is actually forwarded to [glsl_program], f 67;
#X obj 453 432 glsl_program;
#X obj 470 141 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#X obj 470 164 openpanel;
#X obj 470 184 file splitext;
#X msg 470 204 open \$1;
#X obj 451 291 teapot;
#X msg 558 208 shininess \$1;
#X floatatom 575 181 5 0 0 0 - - - 0;
#X text 21 425 Inlet 1: "bang": reload, f 67;
#X msg 505 120 bang;
#X text 189 177 (compute shader: *.comp);
#X text 189 162 (tessellation evaluation shader: *.tese);
#X text 189 147 (tessellation control shader: *.tesc);
#X obj 451 228 glsl glsl_test \; shininess 50;
#X connect 23 0 52 0;
#X connect 24 0 52 0;
#X connect 40 0 41 0;
#X connect 41 0 42 0;
#X connect 42 0 43 0;
#X connect 43 0 52 0;
#X connect 45 0 52 1;
#X connect 46 0 45 0;
#X connect 48 0 52 0;
#X connect 52 0 44 0;
#X connect 52 1 22 0;
