aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/image_io/pdp_qt.c14
-rw-r--r--opengl/Makefile2
-rw-r--r--opengl/Makefile.config4
-rw-r--r--opengl/doc/objects/3dp_color-help.pd61
-rw-r--r--opengl/doc/objects/3dp_draw-help.pd91
-rw-r--r--opengl/doc/objects/3dp_light-help.pd157
-rw-r--r--opengl/doc/objects/3dp_mouserotate-help.pd40
-rw-r--r--opengl/doc/objects/3dp_push-help.pd60
-rw-r--r--opengl/doc/objects/3dp_snap-help.pd13
-rw-r--r--opengl/doc/objects/3dp_view-help.pd78
-rw-r--r--opengl/doc/objects/3dp_windowcontext-help.pd36
11 files changed, 553 insertions, 3 deletions
diff --git a/modules/image_io/pdp_qt.c b/modules/image_io/pdp_qt.c
index af149dc..fc81a4e 100644
--- a/modules/image_io/pdp_qt.c
+++ b/modules/image_io/pdp_qt.c
@@ -26,6 +26,7 @@
#include "pdp.h"
#include "pdp_llconv.h"
+#include "s_stuff.h" // need to get sys_libdir for libquicktime plugins
#define min(x,y) ((x<y)?(x):(y))
@@ -967,6 +968,19 @@ void pdp_qt_setup(void)
pdp_qt_setup_common(pdp_qt_tilde_class);
class_addmethod(pdp_qt_tilde_class, (t_method)pdp_qt_dsp, gensym("dsp"), 0);
+
+#ifdef __APPLE__
+ /* this is necessary for pdp_qt to find the embedded libquicktime plugins */
+ char buf[FILENAME_MAX];
+ char realpath_buf[FILENAME_MAX];
+ strncpy(buf, sys_libdir->s_name, FILENAME_MAX - 20);
+ strcat(buf, "/../lib/libquicktime");
+ if(realpath(buf, realpath_buf))
+ {
+ post("[pdp_qt]: setting LIBQUICKTIME_PLUGIN_DIR to:\n %s", realpath_buf);
+ setenv("LIBQUICKTIME_PLUGIN_DIR", realpath_buf, 0); // 0 means don't overwrite existing value
+ }
+#endif
}
#ifdef __cplusplus
diff --git a/opengl/Makefile b/opengl/Makefile
index 719fa59..ac10380 100644
--- a/opengl/Makefile
+++ b/opengl/Makefile
@@ -24,7 +24,7 @@ pdp_opengl.pd_linux: subdirs
pdp_opengl.pd_darwin: subdirs
rm -f pdp_opengl.pd_linux
- $(CC) -o pdp_opengl.pd_pd_darwin ../modules/*/*.o ../system/pdp.o ../system/*/*.o ../puredata/*.o modules/*.o system/*.o $(PDP_LIBS) -bundle -undefined dynamic_lookup -bundle_loader $(PD_EXECUTABLE)
+ $(CC) $(LDFLAGS) -o pdp_opengl.pd_darwin ../modules/*/*.o ../system/pdp.o ../system/*/*.o ../puredata/*.o modules/*.o system/*.o $(PDP_LIBS) -bundle -undefined dynamic_lookup -bundle_loader $(PD_EXECUTABLE)
# $(CC) -o pdp_opengl.pd_pd_darwin modules/*.o system/*.o $(LDFLAGS) -g -dynamic -bundle -flat_namespace -undefined suppress
diff --git a/opengl/Makefile.config b/opengl/Makefile.config
index 7fab2d9..b1d7b6f 100644
--- a/opengl/Makefile.config
+++ b/opengl/Makefile.config
@@ -7,7 +7,7 @@ PDP_OGL_DIR = ../include
CFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer -ffast-math \
- -Wall -W -Wstrict-prototypes -Werror \
+ -Wall -W -Wstrict-prototypes \
-Wno-unused -Wno-parentheses -Wno-switch -g -I../../../../pd/src
@@ -23,7 +23,7 @@ ifeq ($(UNAME),Darwin)
TARGET = darwin
CPPFLAGS += -I/sw/include
PD_EXECUTABLE=../../../pd/bin/pd
- LDFLAGS = -lGL -lGLU -lglut -lX11 -L/sw/lib -L/usr/X11R6/lib
+ LDFLAGS = -lgsl -lGL -lGLU -lglut -lX11 -L/sw/lib -L/usr/X11R6/lib
endif
diff --git a/opengl/doc/objects/3dp_color-help.pd b/opengl/doc/objects/3dp_color-help.pd
new file mode 100644
index 0000000..2b77f2b
--- /dev/null
+++ b/opengl/doc/objects/3dp_color-help.pd
@@ -0,0 +1,61 @@
+#N canvas 143 1 590 665 10;
+#X obj 18 111 3dp_windowcontext;
+#X obj 18 139 3dp_push;
+#X obj 18 169 3dp_mouserotate;
+#X obj 76 428 3dp_push;
+#X obj 18 226 3dp_blend;
+#X text 98 228 <-- click for more info;
+#X obj 42 379 3dp_color;
+#X floatatom 132 330 5 0 0 0 - - -;
+#X floatatom 178 330 5 0 0 0 - - -;
+#X floatatom 223 330 5 0 0 0 - - -;
+#X floatatom 267 330 5 0 0 0 - - -;
+#X obj 283 127 3dp_view transz 5;
+#X obj 283 151 3dp_light;
+#X obj 18 78 metro 40;
+#X obj 18 50 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 132 271 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 2600 1;
+#X obj 178 270 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 3300 1;
+#X obj 223 270 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 4300 1;
+#X obj 269 269 vsl 15 50 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 2300 1;
+#X obj 283 102 3dp_view roty 5;
+#X obj 126 475 3dp_draw dodeca 4;
+#X text 129 248 red;
+#X text 170 248 green;
+#X text 219 249 blue;
+#X text 268 246 gain;
+#X obj 17 199 3dp_view scale 1;
+#X text 42 523 3dp_color: changes the rgb and gain values;
+#X text 43 536 right outlet is new color \, left outlet is the previous
+color.;
+#X text 303 303 alpha is interpreted as a color gain;
+#X text 303 280 in this blending mode \,;
+#X text 45 49 <-- start here;
+#X text 45 634 bitch made doc for PDP 0.12.5 - http://delcorp.org/abbadingo
+;
+#X connect 0 0 1 0;
+#X connect 0 1 2 1;
+#X connect 1 0 2 0;
+#X connect 1 1 19 0;
+#X connect 2 0 25 0;
+#X connect 3 1 20 0;
+#X connect 4 0 6 0;
+#X connect 6 1 3 0;
+#X connect 7 0 6 1;
+#X connect 8 0 6 2;
+#X connect 9 0 6 3;
+#X connect 10 0 6 4;
+#X connect 11 0 12 0;
+#X connect 13 0 0 0;
+#X connect 14 0 13 0;
+#X connect 15 0 7 0;
+#X connect 16 0 8 0;
+#X connect 17 0 9 0;
+#X connect 18 0 10 0;
+#X connect 19 0 11 0;
+#X connect 25 0 4 0;
diff --git a/opengl/doc/objects/3dp_draw-help.pd b/opengl/doc/objects/3dp_draw-help.pd
new file mode 100644
index 0000000..6181664
--- /dev/null
+++ b/opengl/doc/objects/3dp_draw-help.pd
@@ -0,0 +1,91 @@
+#N canvas 107 0 656 544 10;
+#X obj 55 68 metro 40;
+#X obj 55 38 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 55 213 3dp_mouserotate;
+#X obj 55 179 3dp_push;
+#X obj 301 195 3dp_view transz 5;
+#X obj 55 110 3dp_windowcontext;
+#X obj 55 244 3dp_push;
+#X obj 55 344 3dp_push;
+#X obj 55 415 3dp_push;
+#X obj 198 273 3dp_draw dodeca 3;
+#X obj 55 143 3dp_blend;
+#X obj 123 453 3dp_color;
+#X floatatom 172 424 2 0 0 0 - - -;
+#X obj 172 387 vsl 15 29 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 2800 1;
+#X obj 127 272 3dp_color;
+#X floatatom 177 250 2 0 0 0 - - -;
+#X obj 177 209 vsl 15 29 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 1500 1;
+#X text 216 35 some simple objects can be drawn using the pdp_draw
+object. the first argument is the object: square \, cube \, sphere
+\, torus \, cone \, teapot \, dodeca \, icosa \, octa \, tetra. prepending
+the names with a w draws the wireframe version. (i.e. wcube is a wireframe
+cube). other inlets set some parameters like size \, nb of segments
+for sphere \, etc.. they can be specified by creation arguments too.
+;
+#X obj 181 491 3dp_draw wicosa 8;
+#X obj 301 225 3dp_light 0;
+#N canvas 0 0 450 300 texture 0;
+#X obj 99 200 pdp_convert texture/*/*;
+#X obj 85 91 pdp_plasma;
+#X obj 85 38 loadbang;
+#X obj 202 10 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 153 275 outlet;
+#X obj 203 37 metro 200;
+#X msg 86 63 dim 320 240 \, bang;
+#X floatatom 230 112 5 0 0 0 - - -;
+#X obj 128 140 pdp_gain 7;
+#X connect 2 0 6 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X restore 211 334 pd texture;
+#X obj 121 361 3dp_color;
+#X floatatom 172 342 2 0 0 0 - - -;
+#X obj 172 307 vsl 15 29 0 1 0 1 empty empty empty 0 -8 0 8 -262144
+-1 -1 2200 1;
+#X floatatom 291 338 5 0 0 0 - - -;
+#X obj 196 355 3dp_draw sphere 3;
+#X msg 291 318 111;
+#X text 203 378 the first inlet of the object is a texture inlet. not
+all objects support this \, but cube \, square and sphere do.;
+#X text 47 528 bitch made doc for PDP 0.12.4 - http://delcorp.org/abbadingo
+;
+#X text 87 38 <-- start here;
+#X text 307 492 <---- wireframe icosaedro;
+#X text 132 146 <------- to render all objects with transparency!!!
+;
+#X text 327 356 <-- sphere;
+#X obj 291 298 loadbang;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 6 0;
+#X connect 3 0 2 0;
+#X connect 3 1 4 0;
+#X connect 4 0 19 0;
+#X connect 5 0 10 0;
+#X connect 5 1 2 1;
+#X connect 6 0 7 0;
+#X connect 6 1 14 0;
+#X connect 7 0 8 0;
+#X connect 7 1 21 0;
+#X connect 8 1 11 0;
+#X connect 10 0 3 0;
+#X connect 11 1 18 0;
+#X connect 12 0 11 4;
+#X connect 12 0 11 1;
+#X connect 13 0 12 0;
+#X connect 14 1 9 0;
+#X connect 15 0 14 4;
+#X connect 15 0 14 3;
+#X connect 16 0 15 0;
+#X connect 20 0 25 1;
+#X connect 21 1 25 0;
+#X connect 22 0 21 4;
+#X connect 23 0 22 0;
+#X connect 24 0 25 3;
+#X connect 26 0 24 0;
+#X connect 33 0 26 0;
diff --git a/opengl/doc/objects/3dp_light-help.pd b/opengl/doc/objects/3dp_light-help.pd
new file mode 100644
index 0000000..1d85bf6
--- /dev/null
+++ b/opengl/doc/objects/3dp_light-help.pd
@@ -0,0 +1,157 @@
+#N canvas 150 78 695 334 10;
+#X obj 18 23 metro 40;
+#X obj 18 -1 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X floatatom 74 228 5 0 0 0 - - -;
+#X obj 17 249 3dp_draw sphere 5;
+#X obj 261 156 loadbang;
+#X obj 18 48 3dp_windowcontext;
+#X obj 17 191 3dp_view roty;
+#X floatatom 103 168 5 0 0 0 - - -;
+#X obj 14 278 3dp_draw cube 2;
+#N canvas 193 86 450 300 counter 0;
+#X obj 175 172 spigot;
+#X obj 157 142 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 213 143 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 119 171 spigot;
+#X obj 160 115 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 63 62 loadbang;
+#X floatatom 147 219 0 0 0 0 - - -;
+#X obj 270 201 float;
+#X obj 119 194 + 1;
+#X obj 176 195 - 1;
+#X obj 219 84 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 219 117 1;
+#X msg 250 116 0;
+#X obj 163 279 outlet;
+#X obj 92 26 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 161 251 / 10;
+#X obj 69 5 inlet;
+#X obj 131 21 metro 50;
+#X connect 0 0 9 0;
+#X connect 1 0 3 1;
+#X connect 2 0 0 1;
+#X connect 3 0 8 0;
+#X connect 4 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 1 0;
+#X connect 6 0 15 0;
+#X connect 7 0 0 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 1;
+#X connect 8 0 6 0;
+#X connect 9 0 7 1;
+#X connect 9 0 6 0;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 10 0 7 0;
+#X connect 11 0 1 0;
+#X connect 12 0 2 0;
+#X connect 14 0 17 0;
+#X connect 15 0 13 0;
+#X connect 16 0 14 0;
+#X connect 17 0 10 0;
+#X restore 103 147 pd counter;
+#X obj 103 128 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 18 85 3dp_push;
+#X obj 405 133 3dp_view transz 5;
+#X obj 405 157 3dp_light;
+#X floatatom 549 101 5 0 0 0 - - -;
+#X floatatom 505 77 5 0 0 0 - - -;
+#X obj 405 108 3dp_view roty 5;
+#X obj 226 234 pdp_convert texture/*/*;
+#X obj 226 209 pdp_plasma;
+#X obj 228 126 bng 30 250 50 0 empty empty try_this 0 -6 1 8 -250685
+-1 -62784;
+#X obj 226 260 pdp_del 3;
+#X text 299 262 <- textures can be stored in a delay line;
+#X text 41 0 <-- start here;
+#X msg 261 177 dim 320 240;
+#X obj 483 26 loadbang;
+#X text 486 159 <-light source;
+#N canvas 193 86 450 300 counter 0;
+#X obj 175 172 spigot;
+#X obj 157 142 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 213 143 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 119 171 spigot;
+#X obj 160 115 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 63 62 loadbang;
+#X floatatom 147 219 0 0 0 0 - - -;
+#X obj 270 201 float;
+#X obj 119 194 + 1;
+#X obj 176 195 - 1;
+#X obj 219 84 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 219 117 1;
+#X msg 250 116 0;
+#X obj 163 279 outlet;
+#X obj 92 26 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 69 5 inlet;
+#X obj 131 21 metro 100;
+#X obj 162 252 / 3;
+#X connect 0 0 9 0;
+#X connect 1 0 3 1;
+#X connect 2 0 0 1;
+#X connect 3 0 8 0;
+#X connect 4 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 1 0;
+#X connect 6 0 17 0;
+#X connect 7 0 0 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 1;
+#X connect 8 0 6 0;
+#X connect 9 0 7 1;
+#X connect 9 0 6 0;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 10 0 7 0;
+#X connect 11 0 1 0;
+#X connect 12 0 2 0;
+#X connect 14 0 16 0;
+#X connect 15 0 14 0;
+#X connect 16 0 10 0;
+#X connect 17 0 13 0;
+#X restore 495 51 pd counter;
+#X obj 663 27 vsl 35 128 -70 70 0 0 empty empty try_this 0 -8 1 8 -260818
+-1 -24198 6600 1;
+#X obj 615 24 vsl 35 128 -70 70 0 0 empty empty try_this 0 -8 1 8 -260818
+-1 -24198 4800 1;
+#X text 313 303 bitch made doc for PDP 0.12.4 - http://delcorp.org/abbadingo
+;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 2;
+#X connect 3 0 8 0;
+#X connect 4 0 23 0;
+#X connect 5 0 11 0;
+#X connect 6 0 3 0;
+#X connect 7 0 6 1;
+#X connect 9 0 7 0;
+#X connect 10 0 9 0;
+#X connect 11 0 6 0;
+#X connect 11 1 16 0;
+#X connect 12 0 13 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 12 0;
+#X connect 17 0 20 0;
+#X connect 17 0 3 1;
+#X connect 18 0 17 0;
+#X connect 19 0 18 0;
+#X connect 20 0 8 1;
+#X connect 23 0 18 0;
+#X connect 24 0 26 0;
+#X connect 26 0 15 0;
+#X connect 27 0 14 0;
+#X connect 28 0 15 0;
diff --git a/opengl/doc/objects/3dp_mouserotate-help.pd b/opengl/doc/objects/3dp_mouserotate-help.pd
new file mode 100644
index 0000000..7619375
--- /dev/null
+++ b/opengl/doc/objects/3dp_mouserotate-help.pd
@@ -0,0 +1,40 @@
+#N canvas 534 483 533 399 10;
+#X obj 18 15 inlet;
+#X obj 18 359 outlet;
+#X obj 61 148 - 0.5;
+#X obj 126 147 - 0.5;
+#X obj 73 210 *;
+#X obj 126 208 *;
+#X obj 126 182 t f f;
+#X obj 73 180 t f f;
+#X obj 73 239 +;
+#X obj 104 267 sqrt;
+#X obj 83 15 inlet;
+#X obj 104 294 * 360;
+#X obj 18 325 3dp_view rota;
+#X text 172 81 convert mouse coordinates to axis and angle;
+#X obj 61 114 unpack 0 0;
+#X obj 83 45 route drag1 press1;
+#X obj 198 126 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X connect 0 0 12 0;
+#X connect 2 0 7 0;
+#X connect 2 0 12 2;
+#X connect 3 0 6 0;
+#X connect 3 0 12 1;
+#X connect 4 0 8 0;
+#X connect 5 0 8 1;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 4 0;
+#X connect 7 1 4 1;
+#X connect 8 0 9 0;
+#X connect 9 0 11 0;
+#X connect 10 0 15 0;
+#X connect 11 0 12 4;
+#X connect 12 0 1 0;
+#X connect 14 0 2 0;
+#X connect 14 0 16 0;
+#X connect 14 1 3 0;
+#X connect 15 0 14 0;
+#X connect 15 1 14 0;
diff --git a/opengl/doc/objects/3dp_push-help.pd b/opengl/doc/objects/3dp_push-help.pd
new file mode 100644
index 0000000..2f0de29
--- /dev/null
+++ b/opengl/doc/objects/3dp_push-help.pd
@@ -0,0 +1,60 @@
+#N canvas 221 0 695 553 10;
+#X obj 22 40 3dp_windowcontext;
+#X obj 22 15 metro 40;
+#X obj 22 -5 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 22 67 3dp_push;
+#X obj 180 126 3dp_light;
+#X floatatom 301 85 5 0 0 0 - - -;
+#X obj 22 97 3dp_mouserotate;
+#X obj 180 104 3dp_view transz 10;
+#X obj 23 207 3dp_draw sphere 1;
+#X obj 317 128 3dp_for 3;
+#X obj 317 151 3dp_push;
+#X obj 368 215 3dp_draw cube 0.5;
+#X obj 23 177 3dp_push;
+#X obj 368 189 3dp_view transy;
+#X obj 468 158 * 1;
+#X floatatom 484 134 5 0 0 0 - - -;
+#X obj 180 84 3dp_view roty;
+#X floatatom 266 66 5 0 0 0 - - -;
+#X floatatom 391 102 5 0 0 0 - - -;
+#X obj 63 413 3dp_mode texture;
+#X text 28 244 saving a (matrix) state can be accomplished by the 3dp_push
+object. the default matrix is the modelview matrix. it works as follows:
+both the right and the left outlet propagate the same matrix state
+as the input. so in short you can use 3dp_push to split your rendering
+tree into parallel branches. the matrix types that can be pushed are:
+modelview \, texture \, color \, projection. setting a current matrix
+can be done using the 3dp_mode object. i.e. will map all geometric
+transforms to the texture matrix \, for texture coordinate animation.
+the left outlet restores the current matrix back to the modelview matrix.
+;
+#X text 27 418 i.e;
+#X text 185 418 will map all geometric transforms;
+#X text 27 431 to the texture matrix \, for texture coordinate animation.
+the left outlet restores the current matrix back to the modelview matrix.
+;
+#X text 46 -6 <-- start here;
+#X text 34 501 bitch made doc for PDP 0.12.4 - http://delcorp.org/abbadingo
+;
+#X connect 0 0 3 0;
+#X connect 0 1 6 1;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 6 0;
+#X connect 3 1 16 0;
+#X connect 5 0 7 1;
+#X connect 6 0 12 0;
+#X connect 7 0 4 0;
+#X connect 9 0 10 0;
+#X connect 9 1 14 0;
+#X connect 10 1 13 0;
+#X connect 12 0 8 0;
+#X connect 12 1 9 0;
+#X connect 13 0 11 0;
+#X connect 14 0 13 1;
+#X connect 15 0 14 1;
+#X connect 16 0 7 0;
+#X connect 17 0 16 1;
+#X connect 18 0 9 1;
diff --git a/opengl/doc/objects/3dp_snap-help.pd b/opengl/doc/objects/3dp_snap-help.pd
new file mode 100644
index 0000000..261ac4f
--- /dev/null
+++ b/opengl/doc/objects/3dp_snap-help.pd
@@ -0,0 +1,13 @@
+#N canvas 23 127 436 363 10;
+#X text 38 16 couping 3dp and pdp can be done using 3dp_snap and pdp_convert.
+the correct way to do it is to put 3dp_snap in a rendering chain and
+give it arguments like this: [3dp_snap image/*/* 320 240] if you specify
+the subtype to be image/multi/* \, the packet will not be colour space
+converted: it will stay rgb. if you want to make a snapshot to store
+as a high quality png image \, snap to bitmap/rgb/* and store it in
+pdp_reg to save. to convert an image back to a texture \, use [pdp_convert
+texture/*/*] if you snap to a texture (which is the default) the dimensions
+don't need to be specified. a texture will be allocated that can contain
+the entire screen. this is because texture coordinates are relative
+and data is always interpolated. snapping only works correctly when
+the window is not covered by other windows.;
diff --git a/opengl/doc/objects/3dp_view-help.pd b/opengl/doc/objects/3dp_view-help.pd
new file mode 100644
index 0000000..edffb65
--- /dev/null
+++ b/opengl/doc/objects/3dp_view-help.pd
@@ -0,0 +1,78 @@
+#N canvas 18 74 650 512 10;
+#X obj 37 35 3dp_windowcontext;
+#X obj 37 63 3dp_push;
+#X obj 411 55 3dp_view transz 5;
+#X obj 411 75 3dp_light;
+#X obj 37 2 metro 40;
+#X obj 37 -28 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X floatatom 525 33 5 0 0 0 - - -;
+#X floatatom 511 14 5 0 0 0 - - -;
+#X floatatom 162 158 5 0 0 0 - - -;
+#X obj 36 428 3dp_draw tetra 4;
+#X obj 411 35 3dp_view roty 5;
+#X msg 511 -11 75;
+#X obj 36 306 3dp_view rotx;
+#X floatatom 160 307 5 0 0 0 - - -;
+#X obj 37 175 3dp_view scale 2;
+#X floatatom 170 356 5 0 0 0 - - -;
+#X obj 316 221 3dp_view rota 1 1 1 90;
+#X text 219 96 geometric transformations can be done using the 3dp_view
+object. the first argument is the kind of transformation: scale \,
+scalex \, scaley \, scalez \, rotx \, roty \, rotz \, rota \, transx
+\, transy \, transz \, transxyz. repectively this scales the object
+\, the x \, y \, z axis \, rotates around the x \, y \, z axis \, rotates
+around an arbitrary axis \, translates in the x \, y \, z directions
+and translates along a vector. the initial parameters can be specified
+as creation arguments \, i.e.: rotates by 90 degrees around axis (1
+\, 1 \, 1).;
+#X text 58 -27 <-- start here;
+#X text 225 434 bitch made doc for PDP 0.12.4 - http://delcorp.org/abbadingo
+;
+#X obj 514 -33 loadbang;
+#X msg 570 17 5;
+#X floatatom 160 408 5 0 0 0 - - -;
+#X obj 36 393 3dp_blend;
+#X floatatom 175 257 5 0 0 0 - - -;
+#X obj 36 356 3dp_view transxyz;
+#X obj 36 259 3dp_view transxyz;
+#X text 228 256 <-- translation before rotation: the object rotates
+around itself;
+#X text 228 356 <-- translation after rotation: the object makes an
+orbit;
+#N canvas 0 22 450 300 all 0;
+#X obj 33 19 3dp_view scale;
+#X obj 33 40 3dp_view scalex;
+#X obj 33 61 3dp_view scaley;
+#X obj 33 83 3dp_view scalez;
+#X obj 173 19 3dp_view rota;
+#X obj 173 40 3dp_view rotx;
+#X obj 173 61 3dp_view roty;
+#X obj 173 83 3dp_view rotz;
+#X obj 313 19 3dp_view transxyz;
+#X obj 313 40 3dp_view transx;
+#X obj 313 61 3dp_view transy;
+#X obj 313 83 3dp_view transz;
+#X restore 464 405 pd all possibilities;
+#X connect 0 0 1 0;
+#X connect 1 0 14 0;
+#X connect 1 1 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 0 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 1;
+#X connect 7 0 10 1;
+#X connect 8 0 14 1;
+#X connect 10 0 2 0;
+#X connect 11 0 7 0;
+#X connect 12 0 25 0;
+#X connect 13 0 12 1;
+#X connect 14 0 26 0;
+#X connect 15 0 25 2;
+#X connect 20 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 9 1;
+#X connect 23 0 9 0;
+#X connect 24 0 26 2;
+#X connect 25 0 23 0;
+#X connect 26 0 12 0;
diff --git a/opengl/doc/objects/3dp_windowcontext-help.pd b/opengl/doc/objects/3dp_windowcontext-help.pd
new file mode 100644
index 0000000..6c243e1
--- /dev/null
+++ b/opengl/doc/objects/3dp_windowcontext-help.pd
@@ -0,0 +1,36 @@
+#N canvas 118 0 641 389 10;
+#X obj 55 68 metro 40;
+#X obj 55 38 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 55 166 3dp_mouserotate;
+#X obj 357 149 3dp_light 0;
+#X obj 55 140 3dp_push;
+#X obj 357 121 3dp_view transz 5;
+#X obj 55 110 3dp_windowcontext;
+#X obj 55 192 3dp_draw cube 7;
+#X msg 222 71 dim 1023 768;
+#X floatatom 485 87 5 0 0 0 - - -;
+#X msg 222 47 dim 320 240;
+#X text 203 185 the 3dp_windowcontext creates a window to draw in.
+the window packet will be the output to the left outlet when a bang
+is received. control flow for context is right to left \, this means
+if a 3dp object has 2 context outlets \, the rightmost will be propagated
+before the leftmost. there is no fanout. all operations are accumulative
+\, including the geometric transformations. if you need to branch use
+a 3dp_push object.;
+#X text 88 37 <-- start here;
+#X text 78 348 bitch made doc for PDP 0.12.4 - http://delcorp.org/abbadingo
+;
+#X text 440 151 <-- light source;
+#X text 335 54 <-- changes the window size;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 7 0;
+#X connect 4 0 2 0;
+#X connect 4 1 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 6 1 2 1;
+#X connect 8 0 6 0;
+#X connect 9 0 5 1;
+#X connect 10 0 6 0;