aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gem2pdp-help.pd88
-rw-r--r--gem2pdp.cpp66
-rw-r--r--gem2pdp.h4
3 files changed, 110 insertions, 48 deletions
diff --git a/gem2pdp-help.pd b/gem2pdp-help.pd
index 15e624d..0b17a59 100644
--- a/gem2pdp-help.pd
+++ b/gem2pdp-help.pd
@@ -1,4 +1,4 @@
-#N canvas 193 58 909 767 12;
+#N canvas 469 25 909 767 12;
#X obj 38 229 gemwin;
#X msg 70 12 create;
#X obj 526 46 gemhead;
@@ -22,51 +22,65 @@
#X connect 3 0 4 0;
#X restore 92 156 pd init;
#X msg 628 16 1 1 0;
-#X text 217 440 gem2pdp : bridge between gem and PDP;
-#X text 218 458 written by Yves Degoyon ( ydegoyon@free.fr );
-#X text 70 259 ==========================================================
+#X text 214 583 gem2pdp : bridge between gem and PDP;
+#X text 215 601 written by Yves Degoyon ( ydegoyon@free.fr );
+#X text 70 247 ==========================================================
;
-#X text 70 313 ==========================================================
+#X text 67 456 ==========================================================
;
#X text 292 19 Gem field;
-#X text 79 393 PDP field;
-#X obj 278 281 gem2pdp;
-#X msg 151 280 stop;
-#X obj 127 282 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X text 76 536 PDP field;
+#X obj 275 424 gem2pdp;
+#X msg 148 423 stop;
+#X obj 124 425 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
-#X obj 198 280 metro 70;
-#X obj 239 336 pdp_spigot;
-#X obj 355 327 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 195 423 metro 70;
+#X obj 236 479 pdp_spigot;
+#X obj 352 470 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
-#X msg 126 360 dim 320 240;
-#X obj 43 359 loadbang;
+#X msg 123 503 dim 320 240;
+#X obj 40 502 loadbang;
#X obj 674 157 metro 10;
#X obj 713 185 + 1;
#X obj 673 184 f;
#X msg 686 119 bang;
#X obj 686 90 loadbang;
-#X obj 239 362 pdp_transform;
-#X obj 377 365 hdl 15 1 0 6 empty empty empty 0 -6 0 8 -262144 -1 -1
+#X obj 236 505 pdp_transform;
+#X obj 374 508 hdl 15 1 0 6 empty empty empty 0 -6 0 8 -262144 -1 -1
0;
-#X text 352 281 Convert to PDP frames;
+#X text 121 389 Convert to PDP frames;
#X msg 84 99 dimen 320 240;
#X obj 84 73 loadbang;
-#X obj 543 362 pdp_rec~;
-#X msg 587 318 open /tmp/output.mov;
-#X msg 643 356 start;
-#X msg 655 386 stop;
-#X floatatom 543 395 5 0 0 0 - - -;
-#X msg 562 287 compressor divx;
+#X obj 625 501 pdp_rec~;
+#X msg 669 457 open /tmp/output.mov;
+#X msg 725 495 start;
+#X msg 737 525 stop;
+#X floatatom 624 540 5 0 0 0 - - -;
+#X msg 644 426 compressor divx;
#X msg 100 185 buffer 1;
#X msg 102 217 buffer 2;
-#X msg 406 230 bang;
-#X msg 527 12 bang;
-#X obj 526 231 pix_write;
-#X obj 239 390 pdp_xv;
+#X obj 236 533 pdp_xv;
#X obj 526 194 cube;
#X obj 292 111 world_light;
#X obj 292 82 gemhead;
-#X msg 378 192 file /tmp/gem gif;
+#X msg 303 386 buffer \$1;
+#X obj 429 263 vradio 15 1 0 13 empty empty empty 0 -8 0 10 -262144
+-1 -1 4;
+#X text 270 262 set buffer to capture;
+#X text 464 259 GL_FRONT_LEFT;
+#X text 464 276 GL_FRONT_RIGTH;
+#X text 465 291 GL_BACK_LEFT;
+#X text 464 306 GL_BACK_RIGHT;
+#X text 464 323 GL_FRONT;
+#X text 465 339 GL_BACK;
+#X text 466 353 GL_LEFT;
+#X text 466 368 GL_RIGHT;
+#X text 466 381 GL_FRONT_AND_BACK;
+#X text 466 395 GL_AUX0;
+#X text 465 412 GL_AUX1;
+#X text 464 427 GL_AUX2;
+#X text 464 441 GL_AUX3;
+#X text 561 258 ( default );
#X connect 1 0 0 0;
#X connect 2 0 7 0;
#X connect 3 0 0 0;
@@ -74,10 +88,9 @@
#X connect 5 0 0 0;
#X connect 6 0 9 1;
#X connect 6 0 9 2;
-#X connect 6 0 45 0;
#X connect 7 0 9 0;
#X connect 8 0 7 1;
-#X connect 9 0 48 0;
+#X connect 9 0 45 0;
#X connect 10 0 0 0;
#X connect 11 0 7 1;
#X connect 18 1 22 0;
@@ -85,10 +98,10 @@
#X connect 19 0 21 0;
#X connect 20 0 21 0;
#X connect 21 0 18 0;
-#X connect 22 0 47 0;
+#X connect 22 0 44 0;
#X connect 22 1 31 0;
#X connect 23 0 22 1;
-#X connect 24 0 47 0;
+#X connect 24 0 44 0;
#X connect 25 0 24 0;
#X connect 26 0 28 0;
#X connect 27 0 28 1;
@@ -96,7 +109,7 @@
#X connect 28 0 6 0;
#X connect 29 0 26 0;
#X connect 30 0 29 0;
-#X connect 31 0 47 0;
+#X connect 31 0 44 0;
#X connect 32 0 31 1;
#X connect 34 0 0 0;
#X connect 35 0 34 0;
@@ -107,9 +120,6 @@
#X connect 41 0 36 0;
#X connect 42 0 0 0;
#X connect 43 0 0 0;
-#X connect 44 0 46 0;
-#X connect 45 0 2 0;
-#X connect 45 0 50 0;
-#X connect 48 0 46 0;
-#X connect 50 0 49 0;
-#X connect 51 0 46 0;
+#X connect 47 0 46 0;
+#X connect 48 0 18 0;
+#X connect 49 0 48 0;
diff --git a/gem2pdp.cpp b/gem2pdp.cpp
index 01a17a8..753d9e5 100644
--- a/gem2pdp.cpp
+++ b/gem2pdp.cpp
@@ -35,6 +35,7 @@ gem2pdp :: gem2pdp(void)
GemMan::getDimen(&m_width, &m_height);
#endif
m_image = NULL;
+ m_buffer = GL_FRONT_LEFT;
m_pdpoutlet = outlet_new(this->x_obj, &s_anything);
}
@@ -43,6 +44,52 @@ gem2pdp :: ~gem2pdp()
if (m_image) cleanImage();
}
+void gem2pdp :: bufferMess(int buffer)
+{
+ switch(buffer)
+ {
+ case 0:
+ m_buffer = GL_FRONT_LEFT;
+ break;
+ case 1:
+ m_buffer = GL_FRONT_RIGHT;
+ break;
+ case 2:
+ m_buffer = GL_BACK_LEFT;
+ break;
+ case 3:
+ m_buffer = GL_BACK_RIGHT;
+ break;
+ case 4:
+ m_buffer = GL_FRONT;
+ break;
+ case 5:
+ m_buffer = GL_BACK;
+ break;
+ case 6:
+ m_buffer = GL_LEFT;
+ break;
+ case 7:
+ m_buffer = GL_RIGHT;
+ break;
+ case 8:
+ m_buffer = GL_FRONT_AND_BACK;
+ break;
+ case 9:
+ m_buffer = GL_AUX0;
+ break;
+ case 10:
+ m_buffer = GL_AUX1;
+ break;
+ case 11:
+ m_buffer = GL_AUX2;
+ break;
+ case 12:
+ m_buffer = GL_AUX3;
+ break;
+ }
+}
+
void gem2pdp :: bangMess()
{
t_int needNew=0, pbuffers;
@@ -50,7 +97,6 @@ void gem2pdp :: bangMess()
short int *pY, *pU, *pV;
unsigned char r,g,b,a;
t_int cpt;
- void *idontknowwhatitis=NULL;
if ( !GemMan::windowExists() )
{
@@ -68,9 +114,6 @@ void gem2pdp :: bangMess()
GemMan::getOffset(&m_x, &m_y);
GemMan::getDimen(&m_width, &m_height);
#endif
- pbuffers = GemMan::m_buffer;
- // GemMan::m_buffer = 1;
- // GemMan::render(idontknowwhatitis);
// post("gem2pdp : got dimensions : x=%d y=%d w=%d h=%d", m_x, m_y, m_width, m_height);
if (m_width <= 0 || m_height <= 0)
@@ -105,6 +148,7 @@ void gem2pdp :: bangMess()
post( "gem2pdp : allocated image : w=%d h=%d", m_image->xsize, m_image->ysize );
}
+ glReadBuffer(m_buffer);
glReadPixels(m_x, m_y, m_image->xsize, m_image->ysize,
m_image->format, m_image->type, m_image->data);
@@ -141,10 +185,6 @@ void gem2pdp :: bangMess()
pdp_packet_pass_if_valid(m_pdpoutlet, &m_packet0);
- // restore buffer state
- // GemMan::m_buffer = pbuffers;
- // GemMan::render(idontknowwhatitis);
-
// post("gem2pdp : read image");
}
@@ -159,6 +199,8 @@ void gem2pdp :: obj_setupCallback(t_class *classPtr)
::post( "gem2pdp : a bridge between GEM and PDP/PiDiP v"GEM2PDP_VERSION" (ydegoyon@free.fr)" );
class_addmethod(classPtr, (t_method)&gem2pdp::bangMessCallback,
gensym("bang"), A_NULL);
+ class_addmethod(classPtr, (t_method)&gem2pdp::bufferMessCallback,
+ gensym("buffer"), A_FLOAT, A_NULL);
class_sethelpsymbol( classPtr, gensym("gem2pdp.pd") );
}
@@ -167,8 +209,14 @@ void gem2pdp :: bangMessCallback(void *data)
GetMyClass(data)->bangMess();
}
+void gem2pdp :: bufferMessCallback(void *data, t_floatarg buffer)
+{
+ GetMyClass(data)->bufferMess((int)buffer);
+}
+
void gem2pdp :: render(GemState *state)
{
- GemMan::render(state);
+ m_gemstate=state;
+ // GemMan::render(state);
return;
}
diff --git a/gem2pdp.h b/gem2pdp.h
index 72ad257..d9a6eb6 100644
--- a/gem2pdp.h
+++ b/gem2pdp.h
@@ -30,14 +30,18 @@ class GEM_EXTERN gem2pdp : public GemBase
t_outlet *m_pdpoutlet;
virtual ~gem2pdp(void);
virtual void bangMess(void);
+ virtual void bufferMess(int);
virtual void render(GemState *state);
void cleanImage();
int m_packet0;
t_pdp *m_header;
short int *m_data;
+ void *m_gemstate;
+ GLenum m_buffer;
private:
static void bangMessCallback(void *data);
+ static void bufferMessCallback(void *data, t_floatarg buffer);
};
#endif