From 08cf6cd49c5f61e9e94b592c4c33a6b7bf7d46ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?llu=C3=ADs=20g=C3=B3mez=20i=20bigord=C3=A0?= Date: Mon, 18 Jul 2011 13:44:09 +0000 Subject: fixed capture buffer svn path=/trunk/externals/gem2pdp/; revision=15161 --- gem2pdp-help.pd | 88 ++++++++++++++++++++++++++++++++------------------------- gem2pdp.cpp | 66 +++++++++++++++++++++++++++++++++++++------ gem2pdp.h | 4 +++ 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 -- cgit v1.2.1